diff --git a/modules/purchase_trade/__init__.py b/modules/purchase_trade/__init__.py
index 0a4126c..c22cc52 100755
--- a/modules/purchase_trade/__init__.py
+++ b/modules/purchase_trade/__init__.py
@@ -3,9 +3,10 @@
from trytond.pool import Pool
-from . import (
- account,
- purchase,
+from . import (
+ account,
+ configuration,
+ purchase,
sale,
global_reporting,
stock,
@@ -54,9 +55,10 @@ def register():
incoming.ImportSwift,
lc.LCMT700,
lc.LCMessage,
- lc.CreateLCStart,
- global_reporting.GRConfiguration,
- module='purchase_trade', type_='model')
+ lc.CreateLCStart,
+ global_reporting.GRConfiguration,
+ configuration.Configuration,
+ module='purchase_trade', type_='model')
Pool.register(
incoming.ImportSwift,
incoming.PrepareDocuments,
diff --git a/modules/purchase_trade/configuration.py b/modules/purchase_trade/configuration.py
new file mode 100644
index 0000000..2eda67c
--- /dev/null
+++ b/modules/purchase_trade/configuration.py
@@ -0,0 +1,8 @@
+from trytond.model import ModelSingleton, ModelSQL, ModelView, fields
+
+
+class Configuration(ModelSingleton, ModelSQL, ModelView):
+ "Purchase Trade Configuration"
+ __name__ = 'purchase_trade.configuration'
+
+ pricing_rule = fields.Text("Pricing Rule")
diff --git a/modules/purchase_trade/configuration.xml b/modules/purchase_trade/configuration.xml
new file mode 100644
index 0000000..82bf9d7
--- /dev/null
+++ b/modules/purchase_trade/configuration.xml
@@ -0,0 +1,27 @@
+
+
+
+ purchase_trade.configuration
+ form
+ configuration_form
+
+
+
+ Pricing Configuration
+ purchase_trade.configuration
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/purchase_trade/purchase.py b/modules/purchase_trade/purchase.py
index 9b123ca..b9433e2 100755
--- a/modules/purchase_trade/purchase.py
+++ b/modules/purchase_trade/purchase.py
@@ -1026,10 +1026,18 @@ class QualityAnalysis(ModelSQL,ModelView):
))
return " | ".join(filter(None, values))
-class Line(metaclass=PoolMeta):
- __name__ = 'purchase.line'
-
- quantity_theorical = fields.Numeric("Contractual Qt", digits='unit', readonly=False)
+class Line(metaclass=PoolMeta):
+ __name__ = 'purchase.line'
+
+ @classmethod
+ def default_pricing_rule(cls):
+ Configuration = Pool().get('purchase_trade.configuration')
+ configurations = Configuration.search([], limit=1)
+ if configurations:
+ return configurations[0].pricing_rule or ''
+ return ''
+
+ quantity_theorical = fields.Numeric("Contractual Qt", digits='unit', readonly=False)
price_type = fields.Selection([
('cash', 'Cash Price'),
('priced', 'Priced'),
@@ -1099,7 +1107,8 @@ class Line(metaclass=PoolMeta):
'required': Eval('enable_linked_currency'),
}, depends=['enable_linked_currency'])
premium = fields.Numeric("Premium/Discount",digits='unit')
- fee_ = fields.Many2One('fee.fee',"Fee")
+ fee_ = fields.Many2One('fee.fee',"Fee")
+ pricing_rule = fields.Text("Pricing description")
attributes = fields.Dict(
'product.attribute', 'Attributes',
@@ -1137,9 +1146,16 @@ class Line(metaclass=PoolMeta):
('umpire', 'Umpire'),
], "Type")
- @classmethod
- def default_finished(cls):
- return False
+ @classmethod
+ def default_finished(cls):
+ return False
+
+ @property
+ def report_fixing_rule(self):
+ pricing_rule = ''
+ if self.pricing_rule:
+ pricing_rule = self.pricing_rule
+ return pricing_rule
@fields.depends('product')
diff --git a/modules/purchase_trade/sale.py b/modules/purchase_trade/sale.py
index 0b18cae..3de8ca9 100755
--- a/modules/purchase_trade/sale.py
+++ b/modules/purchase_trade/sale.py
@@ -746,10 +746,18 @@ class PriceComposition(metaclass=PoolMeta):
sale_line = fields.Many2One('sale.line',"Sale line")
-class SaleLine(metaclass=PoolMeta):
- __name__ = 'sale.line'
-
- del_period = fields.Many2One('product.month',"Delivery Period")
+class SaleLine(metaclass=PoolMeta):
+ __name__ = 'sale.line'
+
+ @classmethod
+ def default_pricing_rule(cls):
+ Configuration = Pool().get('purchase_trade.configuration')
+ configurations = Configuration.search([], limit=1)
+ if configurations:
+ return configurations[0].pricing_rule or ''
+ return ''
+
+ del_period = fields.Many2One('product.month',"Delivery Period")
lots = fields.One2Many('lot.lot','sale_line',"Lots",readonly=True)
fees = fields.One2Many('fee.fee', 'sale_line', 'Fees')
quantity_theorical = fields.Numeric("Th. quantity", digits='unit', readonly=True)
diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py
index 34ce163..699249c 100644
--- a/modules/purchase_trade/tests/test_module.py
+++ b/modules/purchase_trade/tests/test_module.py
@@ -156,6 +156,34 @@ class PurchaseTradeTestCase(ModuleTestCase):
sale.crop.name = 'Main Crop'
self.assertEqual(sale.report_crop_name, 'Main Crop')
+ def test_sale_line_default_pricing_rule_comes_from_configuration(self):
+ 'sale line pricing_rule defaults to the purchase_trade singleton value'
+ SaleLine = Pool().get('sale.line')
+ config = Mock(pricing_rule='Default pricing rule')
+ configuration_model = Mock()
+ configuration_model.search.return_value = [config]
+
+ with patch(
+ 'trytond.modules.purchase_trade.sale.Pool'
+ ) as PoolMock:
+ PoolMock.return_value.get.return_value = configuration_model
+ self.assertEqual(
+ SaleLine.default_pricing_rule(), 'Default pricing rule')
+
+ def test_purchase_line_default_pricing_rule_comes_from_configuration(self):
+ 'purchase line pricing_rule defaults to the purchase_trade singleton value'
+ PurchaseLine = Pool().get('purchase.line')
+ config = Mock(pricing_rule='Default pricing rule')
+ configuration_model = Mock()
+ configuration_model.search.return_value = [config]
+
+ with patch(
+ 'trytond.modules.purchase_trade.purchase.Pool'
+ ) as PoolMock:
+ PoolMock.return_value.get.return_value = configuration_model
+ self.assertEqual(
+ PurchaseLine.default_pricing_rule(), 'Default pricing rule')
+
def test_sale_report_multi_line_helpers_aggregate_all_lines(self):
'sale report helpers aggregate quantity, price lines and shipment periods'
Sale = Pool().get('sale.sale')
diff --git a/modules/purchase_trade/tryton.cfg b/modules/purchase_trade/tryton.cfg
index 8f43cba..29a59c3 100755
--- a/modules/purchase_trade/tryton.cfg
+++ b/modules/purchase_trade/tryton.cfg
@@ -10,12 +10,13 @@ depends:
lot
document_incoming
incoterm
-xml:
- purchase.xml
- sale.xml
- lot.xml
- pricing.xml
- stock.xml
+xml:
+ purchase.xml
+ sale.xml
+ lot.xml
+ pricing.xml
+ configuration.xml
+ stock.xml
workflow.xml
lc.xml
optional.xml
diff --git a/modules/purchase_trade/view/configuration_form.xml b/modules/purchase_trade/view/configuration_form.xml
new file mode 100644
index 0000000..af617d4
--- /dev/null
+++ b/modules/purchase_trade/view/configuration_form.xml
@@ -0,0 +1,5 @@
+
+
diff --git a/modules/purchase_trade/view/purchase_line_form.xml b/modules/purchase_trade/view/purchase_line_form.xml
index 2291036..1793c93 100755
--- a/modules/purchase_trade/view/purchase_line_form.xml
+++ b/modules/purchase_trade/view/purchase_line_form.xml
@@ -93,11 +93,15 @@ this repository contains the full copyright notices and license terms. -->
-
-
-
-
-
+
+
+
+
+
+
+
+
+