From 10e8e5be9bc9c4a8d3e5b85ac87a38713a5fb938 Mon Sep 17 00:00:00 2001 From: "AzureAD\\SylvainDUVERNAY" Date: Tue, 31 Mar 2026 12:14:51 +0200 Subject: [PATCH] Trade Finance - Initial Commit --- .claude/settings.local.json | 17 + modules/trade_finance/__init__.py | 41 + modules/trade_finance/counterparty.py | 39 + modules/trade_finance/document.py | 21 + modules/trade_finance/financing.py | 47 + modules/trade_finance/fx.py | 37 + modules/trade_finance/market.py | 65 ++ modules/trade_finance/operational.py | 35 + modules/trade_finance/reference.xml | 947 ++++++++++++++++++ modules/trade_finance/template_execution.py | 62 ++ modules/trade_finance/tryton.cfg | 9 + modules/trade_finance/valuation.py | 50 + .../view/blocking_reason_form.xml | 8 + .../view/blocking_reason_tree.xml | 5 + .../trade_finance/view/charge_type_form.xml | 10 + .../trade_finance/view/charge_type_tree.xml | 5 + .../view/collateral_type_form.xml | 8 + .../view/collateral_type_tree.xml | 5 + .../trade_finance/view/evidence_type_form.xml | 10 + .../trade_finance/view/evidence_type_tree.xml | 5 + .../view/execution_template_form.xml | 12 + .../view/execution_template_line_tree.xml | 5 + .../view/execution_template_tree.xml | 5 + .../view/financing_type_form.xml | 10 + .../view/financing_type_tree.xml | 6 + modules/trade_finance/view/fx_feeder_form.xml | 10 + modules/trade_finance/view/fx_feeder_tree.xml | 5 + .../view/haircut_formula_form.xml | 10 + .../view/haircut_formula_tree.xml | 5 + .../trade_finance/view/index_term_form.xml | 10 + .../trade_finance/view/index_term_tree.xml | 6 + .../view/interest_formula_form.xml | 8 + .../view/interest_formula_tree.xml | 5 + .../trade_finance/view/market_index_form.xml | 10 + .../view/market_index_rate_form.xml | 8 + .../view/market_index_rate_tree.xml | 5 + .../trade_finance/view/market_index_tree.xml | 5 + .../view/operational_status_form.xml | 12 + .../view/operational_status_tree.xml | 7 + .../view/payment_condition_type_form.xml | 10 + .../view/payment_condition_type_tree.xml | 6 + .../view/receivable_category_form.xml | 10 + .../view/receivable_category_tree.xml | 5 + .../view/template_segment_form.xml | 14 + .../view/template_segment_tree.xml | 8 + .../view/valuation_method_form.xml | 10 + .../view/valuation_method_tree.xml | 5 + 47 files changed, 1638 insertions(+) create mode 100644 .claude/settings.local.json create mode 100644 modules/trade_finance/__init__.py create mode 100644 modules/trade_finance/counterparty.py create mode 100644 modules/trade_finance/document.py create mode 100644 modules/trade_finance/financing.py create mode 100644 modules/trade_finance/fx.py create mode 100644 modules/trade_finance/market.py create mode 100644 modules/trade_finance/operational.py create mode 100644 modules/trade_finance/reference.xml create mode 100644 modules/trade_finance/template_execution.py create mode 100644 modules/trade_finance/tryton.cfg create mode 100644 modules/trade_finance/valuation.py create mode 100644 modules/trade_finance/view/blocking_reason_form.xml create mode 100644 modules/trade_finance/view/blocking_reason_tree.xml create mode 100644 modules/trade_finance/view/charge_type_form.xml create mode 100644 modules/trade_finance/view/charge_type_tree.xml create mode 100644 modules/trade_finance/view/collateral_type_form.xml create mode 100644 modules/trade_finance/view/collateral_type_tree.xml create mode 100644 modules/trade_finance/view/evidence_type_form.xml create mode 100644 modules/trade_finance/view/evidence_type_tree.xml create mode 100644 modules/trade_finance/view/execution_template_form.xml create mode 100644 modules/trade_finance/view/execution_template_line_tree.xml create mode 100644 modules/trade_finance/view/execution_template_tree.xml create mode 100644 modules/trade_finance/view/financing_type_form.xml create mode 100644 modules/trade_finance/view/financing_type_tree.xml create mode 100644 modules/trade_finance/view/fx_feeder_form.xml create mode 100644 modules/trade_finance/view/fx_feeder_tree.xml create mode 100644 modules/trade_finance/view/haircut_formula_form.xml create mode 100644 modules/trade_finance/view/haircut_formula_tree.xml create mode 100644 modules/trade_finance/view/index_term_form.xml create mode 100644 modules/trade_finance/view/index_term_tree.xml create mode 100644 modules/trade_finance/view/interest_formula_form.xml create mode 100644 modules/trade_finance/view/interest_formula_tree.xml create mode 100644 modules/trade_finance/view/market_index_form.xml create mode 100644 modules/trade_finance/view/market_index_rate_form.xml create mode 100644 modules/trade_finance/view/market_index_rate_tree.xml create mode 100644 modules/trade_finance/view/market_index_tree.xml create mode 100644 modules/trade_finance/view/operational_status_form.xml create mode 100644 modules/trade_finance/view/operational_status_tree.xml create mode 100644 modules/trade_finance/view/payment_condition_type_form.xml create mode 100644 modules/trade_finance/view/payment_condition_type_tree.xml create mode 100644 modules/trade_finance/view/receivable_category_form.xml create mode 100644 modules/trade_finance/view/receivable_category_tree.xml create mode 100644 modules/trade_finance/view/template_segment_form.xml create mode 100644 modules/trade_finance/view/template_segment_tree.xml create mode 100644 modules/trade_finance/view/valuation_method_form.xml create mode 100644 modules/trade_finance/view/valuation_method_tree.xml diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..045de21 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,17 @@ +{ + "permissions": { + "allow": [ + "Bash(cd /c/Users/SylvainDUVERNAY/Documents/Visual Studio Code/Tradon DEV/tradon/modules)", + "Bash(ls -d */)", + "Bash(cd /c/Users/SylvainDUVERNAY/Documents/Visual Studio Code/Tradon DEV/tradon/modules/purchase_trade)", + "Bash(ls -1d */)", + "Bash(for f:*)", + "Bash(do echo:*)", + "Read(//c/Users/SylvainDUVERNAY/Documents/Visual Studio Code/Tradon DEV/tradon/**)", + "Bash(done)", + "Bash(cd /c/Users/SylvainDUVERNAY/Documents/Visual Studio Code/Tradon DEV/tradon/modules/purchase_trade/view)", + "Bash(ls -1 *.xml)", + "Bash(py --version)" + ] + } +} diff --git a/modules/trade_finance/__init__.py b/modules/trade_finance/__init__.py new file mode 100644 index 0000000..8dae6b1 --- /dev/null +++ b/modules/trade_finance/__init__.py @@ -0,0 +1,41 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.pool import Pool + +from . import ( + financing, + market, + valuation, + document, + template_execution, + counterparty, + fx, + operational, +) + + +def register(): + Pool.register( + financing.FinancingType, + financing.OperationalStatus, + market.MarketIndex, + market.MarketIndexRate, + market.IndexTerm, + market.InterestFormula, + valuation.ValuationMethod, + valuation.HaircutFormula, + valuation.CollateralType, + document.EvidenceType, + template_execution.TemplateSegment, + template_execution.ExecutionTemplate, + template_execution.ExecutionTemplateLine, + counterparty.ReceivableCategory, + counterparty.PaymentConditionType, + fx.FxFeeder, + operational.BlockingReason, + operational.ChargeType, + module='trade_finance', type_='model') + Pool.register( + fx.PriceCalendar, + module='price', type_='model') diff --git a/modules/trade_finance/counterparty.py b/modules/trade_finance/counterparty.py new file mode 100644 index 0000000..4bc9cf4 --- /dev/null +++ b/modules/trade_finance/counterparty.py @@ -0,0 +1,39 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['ReceivableCategory', 'PaymentConditionType'] + + +class ReceivableCategory(ModelSQL, ModelView): + 'Receivable Category' + __name__ = 'trade_finance.receivable_category' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class PaymentConditionType(ModelSQL, ModelView): + 'Payment Condition Type' + __name__ = 'trade_finance.payment_condition_type' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + remaining_risk_pct = fields.Numeric( + 'Remaining Risk (%)', digits=(16, 2), + help='Percentage of residual credit risk retained by the company ' + 'under this payment condition') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True diff --git a/modules/trade_finance/document.py b/modules/trade_finance/document.py new file mode 100644 index 0000000..c692234 --- /dev/null +++ b/modules/trade_finance/document.py @@ -0,0 +1,21 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['EvidenceType'] + + +class EvidenceType(ModelSQL, ModelView): + 'Evidence Type' + __name__ = 'trade_finance.evidence_type' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True diff --git a/modules/trade_finance/financing.py b/modules/trade_finance/financing.py new file mode 100644 index 0000000..6e3a72b --- /dev/null +++ b/modules/trade_finance/financing.py @@ -0,0 +1,47 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['FinancingType', 'OperationalStatus'] + + +class FinancingType(ModelSQL, ModelView): + 'Financing Type' + __name__ = 'trade_finance.financing_type' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + sequence = fields.Integer('Sequence') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + @staticmethod + def default_sequence(): + return 10 + + +class OperationalStatus(ModelSQL, ModelView): + 'Operational Status' + __name__ = 'trade_finance.operational_status' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + financing_type = fields.Many2One( + 'trade_finance.financing_type', 'Default Financing Type', + ondelete='RESTRICT') + sequence = fields.Integer('Sequence') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + @staticmethod + def default_sequence(): + return 10 diff --git a/modules/trade_finance/fx.py b/modules/trade_finance/fx.py new file mode 100644 index 0000000..4c24574 --- /dev/null +++ b/modules/trade_finance/fx.py @@ -0,0 +1,37 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields +from trytond.pool import PoolMeta + +__all__ = ['FxFeeder', 'PriceCalendar'] + + +class FxFeeder(ModelSQL, ModelView): + 'FX Rate Feeder' + __name__ = 'trade_finance.fx_feeder' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + source_description = fields.Text( + 'Source Description', + help='Description of the FX rate source / provider') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class PriceCalendar(metaclass=PoolMeta): + __name__ = 'price.calendar' + + purpose = fields.Selection([ + (None, ''), + ('banking', 'Banking'), + ('market', 'Market'), + ('factoring', 'Factoring'), + ], 'Purpose', + help='Use of this calendar: Banking days, Market trading days, ' + 'or Factoring program calendar') diff --git a/modules/trade_finance/market.py b/modules/trade_finance/market.py new file mode 100644 index 0000000..578a3d2 --- /dev/null +++ b/modules/trade_finance/market.py @@ -0,0 +1,65 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['MarketIndex', 'MarketIndexRate', 'IndexTerm', 'InterestFormula'] + + +class MarketIndex(ModelSQL, ModelView): + 'Market Index' + __name__ = 'trade_finance.market_index' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + rates = fields.One2Many( + 'trade_finance.market_index_rate', 'index', 'Rates') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class MarketIndexRate(ModelSQL, ModelView): + 'Market Index Rate' + __name__ = 'trade_finance.market_index_rate' + _rec_name = 'rate_date' + + index = fields.Many2One( + 'trade_finance.market_index', 'Index', + required=True, ondelete='CASCADE') + rate_date = fields.Date('Date', required=True) + rate = fields.Numeric('Rate (%)', digits=(16, 6), required=True) + + +class IndexTerm(ModelSQL, ModelView): + 'Index Term' + __name__ = 'trade_finance.index_term' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + days = fields.Integer('Days', required=True, + help='Approximate number of days for this term (O/N=1, 1W=7, 1M=30, ' + '3M=90, 6M=180, 1Y=365)') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class InterestFormula(ModelSQL, ModelView): + 'Interest Calculation Formula' + __name__ = 'trade_finance.interest_formula' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True diff --git a/modules/trade_finance/operational.py b/modules/trade_finance/operational.py new file mode 100644 index 0000000..478bdbb --- /dev/null +++ b/modules/trade_finance/operational.py @@ -0,0 +1,35 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['BlockingReason', 'ChargeType'] + + +class BlockingReason(ModelSQL, ModelView): + 'Blocking Reason' + __name__ = 'trade_finance.blocking_reason' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class ChargeType(ModelSQL, ModelView): + 'Charge Type' + __name__ = 'trade_finance.charge_type' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True diff --git a/modules/trade_finance/reference.xml b/modules/trade_finance/reference.xml new file mode 100644 index 0000000..70fe0bc --- /dev/null +++ b/modules/trade_finance/reference.xml @@ -0,0 +1,947 @@ + + + + + + + + + + Trade Finance Administration + + + + + + + + + + + + + + + + + + + + + + trade_finance.financing_type + tree + + financing_type_tree + + + trade_finance.financing_type + form + financing_type_form + + + Financing Types + trade_finance.financing_type + + + + + + + + + + + + + + + trade_finance.financing_type + + + + + + + trade_finance.financing_type + + + + + + + + + + + + + trade_finance.operational_status + tree + + operational_status_tree + + + trade_finance.operational_status + form + operational_status_form + + + Operational Statuses + trade_finance.operational_status + + + + + + + + + + + + + + + trade_finance.operational_status + + + + + + + trade_finance.operational_status + + + + + + + + + + + + + trade_finance.market_index + tree + + market_index_tree + + + trade_finance.market_index + form + market_index_form + + + Market Indexes + trade_finance.market_index + + + + + + + + + + + + + + + trade_finance.market_index + + + + + + + trade_finance.market_index + + + + + + + + + + + + + trade_finance.market_index_rate + tree + + market_index_rate_tree + + + trade_finance.market_index_rate + form + market_index_rate_form + + + Market Index Rates + trade_finance.market_index_rate + + + + + + + + + + + + + + + trade_finance.market_index_rate + + + + + + + trade_finance.market_index_rate + + + + + + + + + + + + + trade_finance.index_term + tree + + index_term_tree + + + trade_finance.index_term + form + index_term_form + + + Index Terms + trade_finance.index_term + + + + + + + + + + + + + + + trade_finance.index_term + + + + + + + trade_finance.index_term + + + + + + + + + + + + + trade_finance.interest_formula + tree + + interest_formula_tree + + + trade_finance.interest_formula + form + interest_formula_form + + + Interest Formulas + trade_finance.interest_formula + + + + + + + + + + + + + + + trade_finance.interest_formula + + + + + + + trade_finance.interest_formula + + + + + + + + + + + + + trade_finance.haircut_formula + tree + + haircut_formula_tree + + + trade_finance.haircut_formula + form + haircut_formula_form + + + Haircut Formulas + trade_finance.haircut_formula + + + + + + + + + + + + + + + trade_finance.haircut_formula + + + + + + + trade_finance.haircut_formula + + + + + + + + + + + + + trade_finance.valuation_method + tree + + valuation_method_tree + + + trade_finance.valuation_method + form + valuation_method_form + + + Valuation Methods + trade_finance.valuation_method + + + + + + + + + + + + + + + trade_finance.valuation_method + + + + + + + trade_finance.valuation_method + + + + + + + + + + + + + trade_finance.collateral_type + tree + + collateral_type_tree + + + trade_finance.collateral_type + form + collateral_type_form + + + Collateral Types + trade_finance.collateral_type + + + + + + + + + + + + + + + trade_finance.collateral_type + + + + + + + trade_finance.collateral_type + + + + + + + + + + + + + trade_finance.evidence_type + tree + + evidence_type_tree + + + trade_finance.evidence_type + form + evidence_type_form + + + Evidence Types + trade_finance.evidence_type + + + + + + + + + + + + + + + trade_finance.evidence_type + + + + + + + trade_finance.evidence_type + + + + + + + + + + + + + trade_finance.template_segment + tree + + template_segment_tree + + + trade_finance.template_segment + form + template_segment_form + + + Template Segments + trade_finance.template_segment + + + + + + + + + + + + + + + trade_finance.template_segment + + + + + + + trade_finance.template_segment + + + + + + + + + + + + + trade_finance.execution_template + tree + + execution_template_tree + + + trade_finance.execution_template + form + execution_template_form + + + Execution Templates + trade_finance.execution_template + + + + + + + + + + + + + + + trade_finance.execution_template + + + + + + + trade_finance.execution_template + + + + + + + + + + trade_finance.execution_template_line + tree + + execution_template_line_tree + + + trade_finance.execution_template_line + + + + + + + trade_finance.execution_template_line + + + + + + + + + + + + + trade_finance.receivable_category + tree + + receivable_category_tree + + + trade_finance.receivable_category + form + receivable_category_form + + + Receivable Categories + trade_finance.receivable_category + + + + + + + + + + + + + + + trade_finance.receivable_category + + + + + + + trade_finance.receivable_category + + + + + + + + + + + + + trade_finance.payment_condition_type + tree + + payment_condition_type_tree + + + trade_finance.payment_condition_type + form + payment_condition_type_form + + + Payment Condition Types + trade_finance.payment_condition_type + + + + + + + + + + + + + + + trade_finance.payment_condition_type + + + + + + + trade_finance.payment_condition_type + + + + + + + + + + + + + trade_finance.fx_feeder + tree + + fx_feeder_tree + + + trade_finance.fx_feeder + form + fx_feeder_form + + + FX Rate Feeders + trade_finance.fx_feeder + + + + + + + + + + + + + + + trade_finance.fx_feeder + + + + + + + trade_finance.fx_feeder + + + + + + + + + + + + + trade_finance.blocking_reason + tree + + blocking_reason_tree + + + trade_finance.blocking_reason + form + blocking_reason_form + + + Blocking Reasons + trade_finance.blocking_reason + + + + + + + + + + + + + + + trade_finance.blocking_reason + + + + + + + trade_finance.blocking_reason + + + + + + + + + + + + + trade_finance.charge_type + tree + + charge_type_tree + + + trade_finance.charge_type + form + charge_type_form + + + Charge Types + trade_finance.charge_type + + + + + + + + + + + + + + + trade_finance.charge_type + + + + + + + trade_finance.charge_type + + + + + + + + + diff --git a/modules/trade_finance/template_execution.py b/modules/trade_finance/template_execution.py new file mode 100644 index 0000000..e706ccd --- /dev/null +++ b/modules/trade_finance/template_execution.py @@ -0,0 +1,62 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields, sequence_ordered + +__all__ = ['TemplateSegment', 'ExecutionTemplate', 'ExecutionTemplateLine'] + + +class TemplateSegment(ModelSQL, ModelView): + 'Template Segment' + __name__ = 'trade_finance.template_segment' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + from_place = fields.Many2One( + 'stock.location', 'From Place', + help='Origin location / port of loading') + to_place = fields.Many2One( + 'stock.location', 'To Place', + help='Destination location / port of discharge') + default_duration_days = fields.Integer( + 'Default Duration (days)', + help='Default number of days for this segment') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class ExecutionTemplate(ModelSQL, ModelView): + 'Execution Template' + __name__ = 'trade_finance.execution_template' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + lines = fields.One2Many( + 'trade_finance.execution_template_line', 'template', 'Segments') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class ExecutionTemplateLine(sequence_ordered(), ModelSQL, ModelView): + 'Execution Template Line' + __name__ = 'trade_finance.execution_template_line' + _rec_name = 'segment' + + template = fields.Many2One( + 'trade_finance.execution_template', 'Template', + required=True, ondelete='CASCADE') + segment = fields.Many2One( + 'trade_finance.template_segment', 'Segment', + required=True, ondelete='RESTRICT') + duration_days = fields.Integer( + 'Duration (days)', + help='Overrides the segment default duration for this template') diff --git a/modules/trade_finance/tryton.cfg b/modules/trade_finance/tryton.cfg new file mode 100644 index 0000000..2183e93 --- /dev/null +++ b/modules/trade_finance/tryton.cfg @@ -0,0 +1,9 @@ +[tryton] +version=7.2.7 +depends: + ir + res + stock + price +xml: + reference.xml diff --git a/modules/trade_finance/valuation.py b/modules/trade_finance/valuation.py new file mode 100644 index 0000000..7137672 --- /dev/null +++ b/modules/trade_finance/valuation.py @@ -0,0 +1,50 @@ +# This file is part of Tradon. The COPYRIGHT file at the top level of +# this repository contains the full copyright notices and license terms. + +from trytond.model import ModelSQL, ModelView, fields + +__all__ = ['ValuationMethod', 'HaircutFormula', 'CollateralType'] + + +class ValuationMethod(ModelSQL, ModelView): + 'Valuation Method' + __name__ = 'trade_finance.valuation_method' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class HaircutFormula(ModelSQL, ModelView): + 'Haircut Formula' + __name__ = 'trade_finance.haircut_formula' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + description = fields.Text('Description') + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True + + +class CollateralType(ModelSQL, ModelView): + 'Collateral Type' + __name__ = 'trade_finance.collateral_type' + _rec_name = 'name' + + code = fields.Char('Code', required=True) + name = fields.Char('Name', required=True) + active = fields.Boolean('Active') + + @staticmethod + def default_active(): + return True diff --git a/modules/trade_finance/view/blocking_reason_form.xml b/modules/trade_finance/view/blocking_reason_form.xml new file mode 100644 index 0000000..a8df246 --- /dev/null +++ b/modules/trade_finance/view/blocking_reason_form.xml @@ -0,0 +1,8 @@ +
+