Commit ccf98ce1 authored by Jérome Perrin's avatar Jérome Perrin

base: do not acquire stop date on currency exchange line

This allows defining an exchange rate without end date
parent 93b91fef
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
currency = currency_exchange_line.getParentValue()\n currency = currency_exchange_line.getParentValue()\n
\n \n
return context.asContext(_range_criterion=dict(start_date=(currency_exchange_line.getStartDate(),\n return context.asContext(_range_criterion=dict(start_date=(currency_exchange_line.getStartDate(),\n
currency_exchange_line.getStopDate())),\n currency_exchange_line.hasStopDate() and currency_exchange_line.getStopDate() or None)),\n
membership_criterion_base_category=[\'price_currency\', \'resource\', \'currency_exchange_type\'],\n membership_criterion_base_category=[\'price_currency\', \'resource\', \'currency_exchange_type\'],\n
membership_criterion_category=[\'resource/%s\' % currency.getRelativeUrl(),\n membership_criterion_category=[\'resource/%s\' % currency.getRelativeUrl(),\n
currency_exchange_line.getPriceCurrency(base=True),\n currency_exchange_line.getPriceCurrency(base=True),\n
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>start_date = context.getStartDate()\n <value> <string>start_date = context.getStartDate()\n
stop_date = context.getStopDate()\n stop_date = context.hasStopDate() and context.getStopDate() or None\n
identity_criterion = {\'start_date\':(start_date,stop_date)}\n identity_criterion = {\'start_date\':(start_date,stop_date)}\n
return context.asContext(_range_criterion=identity_criterion,\n return context.asContext(_range_criterion=identity_criterion,\n
membership_criterion_base_category=[\'price_currency\',\'resource\'],\n membership_criterion_base_category=[\'price_currency\',\'resource\'],\n
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
<item> <item>
<key> <string>delegated_list</string> </key> <key> <string>delegated_list</string> </key>
<value> <value>
<list/> <list>
<string>default</string>
</list>
</value> </value>
</item> </item>
<item> <item>
...@@ -50,6 +52,12 @@ ...@@ -50,6 +52,12 @@
<key> <string>tales</string> </key> <key> <string>tales</string> </key>
<value> <value>
<dictionary> <dictionary>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -70,8 +78,10 @@ ...@@ -70,8 +78,10 @@
<value> <value>
<dictionary> <dictionary>
<item> <item>
<key> <string>description</string> </key> <key> <string>default</string> </key>
<value> <string>The end date for validity of the currency exchange rate.</string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
...@@ -85,14 +95,23 @@ ...@@ -85,14 +95,23 @@
<key> <string>target</string> </key> <key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value> <value> <string>Click to edit the target</string> </value>
</item> </item>
<item>
<key> <string>title</string> </key>
<value> <string>Validity End Date</string> </value>
</item>
</dictionary> </dictionary>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: context.hasStopDate() and context.getStopDate() or None</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
<item> <item>
<key> <string>delegated_list</string> </key> <key> <string>delegated_list</string> </key>
<value> <value>
<list/> <list>
<string>default</string>
</list>
</value> </value>
</item> </item>
<item> <item>
...@@ -50,6 +52,12 @@ ...@@ -50,6 +52,12 @@
<key> <string>tales</string> </key> <key> <string>tales</string> </key>
<value> <value>
<dictionary> <dictionary>
<item>
<key> <string>default</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string></string> </value> <value> <string></string> </value>
...@@ -69,6 +77,12 @@ ...@@ -69,6 +77,12 @@
<key> <string>values</string> </key> <key> <string>values</string> </key>
<value> <value>
<dictionary> <dictionary>
<item>
<key> <string>default</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>field_id</string> </key> <key> <string>field_id</string> </key>
<value> <string>my_stop_date</string> </value> <value> <string>my_stop_date</string> </value>
...@@ -87,4 +101,17 @@ ...@@ -87,4 +101,17 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="TALESMethod" module="Products.Formulator.TALESField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_text</string> </key>
<value> <string>python: cell.hasStopDate() and cell.getStopDate() or None</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData> </ZopeData>
...@@ -79,6 +79,12 @@ class CurrencyExchangeTestCase(AccountingTestCase): ...@@ -79,6 +79,12 @@ class CurrencyExchangeTestCase(AccountingTestCase):
'erp5_simulation_test' 'erp5_simulation_test'
) )
def _getPriceContext(self, **kw):
"""Returns a temp movement that we can use for getPrice(context=
"""
from Products.ERP5Type.Document import newTempMovement
return newTempMovement(self.portal, 'tmp', **kw)
class TestCurrencyExchangeLine(CurrencyExchangeTestCase): class TestCurrencyExchangeLine(CurrencyExchangeTestCase):
""" """
...@@ -495,6 +501,51 @@ class TestCurrencyExchangeLine(CurrencyExchangeTestCase): ...@@ -495,6 +501,51 @@ class TestCurrencyExchangeLine(CurrencyExchangeTestCase):
else: else:
self.fail('line not found') self.fail('line not found')
def test_date_on_currency_exchange_line(self):
euro = self.portal.currency_module.euro
usd = self.portal.currency_module.usd
euro_to_usd_before_2016 = euro.newContent(
portal_type='Currency Exchange Line',
stop_date=DateTime(2015, 12, 31, 23, 59),
base_price=0.5,
price_currency_value=usd)
euro_to_usd_before_2016.validate()
euro_to_usd_2016 = euro.newContent(
portal_type='Currency Exchange Line',
start_date=DateTime(2016, 1, 1),
stop_date=DateTime(2016, 12, 31, 23, 59),
base_price=0.6,
price_currency_value=usd)
euro_to_usd_2016.validate()
euro_to_usd_after_2016 = euro.newContent(
portal_type='Currency Exchange Line',
start_date=DateTime(2017, 1, 1),
base_price=0.7,
price_currency_value=usd)
euro_to_usd_after_2016.validate()
self.tic()
context_2015 = self._getPriceContext(
start_date=DateTime(2015, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd'])
self.assertEqual(0.5, euro.getPrice(context=context_2015))
context_2016 = self._getPriceContext(
start_date=DateTime(2016, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd'])
self.assertEqual(0.6, euro.getPrice(context=context_2016))
context_2017 = self._getPriceContext(
start_date=DateTime(2017, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd'])
self.assertEqual(0.7, euro.getPrice(context=context_2017))
class TestCurrencyExchangeCell(CurrencyExchangeTestCase): class TestCurrencyExchangeCell(CurrencyExchangeTestCase):
def afterSetUp(self): def afterSetUp(self):
currency_exchange_type = \ currency_exchange_type = \
...@@ -591,6 +642,74 @@ class TestCurrencyExchangeCell(CurrencyExchangeTestCase): ...@@ -591,6 +642,74 @@ class TestCurrencyExchangeCell(CurrencyExchangeTestCase):
self.assertEqual(0.98, exchange_ratio) self.assertEqual(0.98, exchange_ratio)
def test_date_on_currency_exchange_cell(self):
euro = self.portal.currency_module.euro
usd = self.portal.currency_module.usd
euro_to_usd_before_2016 = euro.newContent(
portal_type='Currency Exchange Line',
stop_date=DateTime(2015, 12, 31, 23, 59),
price_currency_value=usd)
type_a_cell = euro_to_usd_before_2016.getCell(
'currency_exchange_type/type_a',
'resource/%s' % euro.getRelativeUrl(),
'price_currency/%s' % usd.getRelativeUrl(),
base_id='path')
type_a_cell.setBasePrice(0.5)
euro_to_usd_before_2016.validate()
euro_to_usd_2016 = euro.newContent(
portal_type='Currency Exchange Line',
start_date=DateTime(2016, 1, 1),
stop_date=DateTime(2016, 12, 31, 23, 59),
price_currency_value=usd)
type_a_cell = euro_to_usd_2016.getCell(
'currency_exchange_type/type_a',
'resource/%s' % euro.getRelativeUrl(),
'price_currency/%s' % usd.getRelativeUrl(),
base_id='path')
type_a_cell.setBasePrice(0.6)
euro_to_usd_2016.validate()
euro_to_usd_after_2016 = euro.newContent(
portal_type='Currency Exchange Line',
start_date=DateTime(2017, 1, 1),
price_currency_value=usd)
type_a_cell = euro_to_usd_after_2016.getCell(
'currency_exchange_type/type_a',
'resource/%s' % euro.getRelativeUrl(),
'price_currency/%s' % usd.getRelativeUrl(),
base_id='path')
type_a_cell.setBasePrice(0.7)
euro_to_usd_after_2016.validate()
self.tic()
context_2015 = self._getPriceContext(
start_date=DateTime(2015, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd',
'currency_exchange_type/type_a'])
self.assertEqual(0.5,
euro.getPrice(context=context_2015, portal_type='Currency Exchange Cell'))
context_2016 = self._getPriceContext(
start_date=DateTime(2016, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd',
'currency_exchange_type/type_a'])
self.assertEqual(0.6,
euro.getPrice(context=context_2016, portal_type='Currency Exchange Cell'))
context_2017 = self._getPriceContext(
start_date=DateTime(2017, 1, 1),
categories=[
'resource/currency_module/euro',
'price_currency/currency_module/usd',
'currency_exchange_type/type_a'])
self.assertEqual(0.7,
euro.getPrice(context=context_2017, portal_type='Currency Exchange Cell'))
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestCurrencyExchangeLine)) suite.addTest(unittest.makeSuite(TestCurrencyExchangeLine))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment