Commit 609e55ad authored by Vincent Pelletier's avatar Vincent Pelletier

Cleanup.

Reduce differences between similar tests.
Remove bit-rot comments.
Simplify code (avoid redundant lookups, ...).
Also, make easier to subclass and use for a different category tree.
parent 2ba67a83
......@@ -25,441 +25,326 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
# import requested python module
import os
from Products.ERP5Type.tests.Sequence import SequenceList
from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin
# Needed in order to have a log file inside the current folder
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Define the level of log we want, here is all
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
os.environ['EVENT_LOG_SEVERITY'] = '-300'
class TestERP5BankingCashToCurrencyPurchase(TestERP5BankingMixin):
"""
Unit test for the cash exchange module
Source = destination
Initial cash detail :
5 banknotes of 10000
12 coin of 200
24 banknotes of 5000
0 coin of 100
Ordered by Assignor
Confirmed by Assignee
Delivered by DestinationAssignee
Final cash detail :
0 banknotes of 10000
0 coin of 200
34 banknotes of 5000
24 coin of 100
"""
RUN_ALL_TEST = 1
QUIET = 0
# Relative to "site" category
COUNTER_RELATIVE_URL = 'testsite/paris/surface/banque_interne/guichet_1'
# Relative to counter
INCOMING_COUNTER_RELATIVE_URL = 'encaisse_des_devises/usd/sortante'
OUTGOING_COUNTER_RELATIVE_URL = 'encaisse_des_billets_et_monnaies/sortante'
# pseudo constants
RUN_ALL_TEST = 1 # we want to run all test
QUIET = 0 # we don't want the test to be quiet
outgoing_quantity_5000 = {'variation/1992':4, 'variation/2003':6}
outgoing_quantity_100 = {'variation/1992':120, 'variation/2003':0}
outgoing_quantity_5000 = {'variation/1992': 4, 'variation/2003': 6}
outgoing_quantity_100 = {'variation/1992': 120, 'variation/2003': 0}
def getTitle(self):
"""
Return the title of the test
"""
return "ERP5BankingCashToCurrencyPurchase"
def afterSetUp(self):
"""
Method called before the launch of the test to initialize some data
"""
self.initDefaultVariable()
# Set some variables :
self.cash_to_currency_purchase_module = self.getCashToCurrencyPurchaseModule()
# Create a user and login as manager to populate the erp5 portal with objects for tests.
self.createManagerAndLogin()
self.createFunctionGroupSiteCategory()
"""
Windows to create the BANKNOTES of 10 000 and 5000, coins 200.
It s same to click to the fast input button.
"""
inventory_dict_line_1 = {'id' : 'inventory_line_1',
'resource': self.billet_5000,
'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_value': ('emission_letter/p', 'cash_status/valid') + self.variation_list,
'quantity': self.outgoing_quantity_5000}
inventory_dict_line_2 = {'id' : 'inventory_line_2',
'resource': self.piece_100,
'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_value': ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
'quantity': self.outgoing_quantity_100 }
line_list_sortante = [inventory_dict_line_1, inventory_dict_line_2]
self.guichet_entrante = self.paris.surface.banque_interne.guichet_1.encaisse_des_devises.usd.sortante
self.guichet_sortante = self.paris.surface.banque_interne.guichet_1.encaisse_des_billets_et_monnaies.sortante
self.guichet = self.paris.surface.banque_interne.guichet_1
self.createCashInventory(source=None, destination=self.guichet_sortante, currency=self.currency_1,
line_list=line_list_sortante)
# now we need to create a user as Manager to do the test
# in order to have an assigment defined which is used to do transition
# Create an Organisation that will be used for users assignment
self.guichet = counter = self.getPortalObject().portal_categories.site.\
unrestrictedTraverse(self.COUNTER_RELATIVE_URL)
self.guichet_entrante = counter.unrestrictedTraverse(
self.INCOMING_COUNTER_RELATIVE_URL)
self.guichet_sortante = outgoing_counter = counter.unrestrictedTraverse(
self.OUTGOING_COUNTER_RELATIVE_URL)
self.createCashInventory(
source=None,
destination=outgoing_counter,
currency=self.currency_1,
line_list=[
{
'id': 'inventory_line_1',
'resource': self.billet_5000,
'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_value': ('emission_letter/p', 'cash_status/valid') + self.variation_list,
'quantity': self.outgoing_quantity_5000,
}, {
'id': 'inventory_line_2',
'resource': self.piece_100,
'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_value': ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
'quantity': self.outgoing_quantity_100,
},
],
)
self.checkUserFolderType()
self.organisation = self.organisation_module.newContent(id='paris', portal_type='Organisation',
function='banking', group='baobab', site='testsite/paris')
# define the user
user_dict = {
'super_user' : [['Manager'], self.organisation, 'banking/comptable', 'baobab', 'testsite/paris/surface/banque_interne/guichet_1']
}
# call method to create this user
self.createERP5Users(user_dict)
self.createERP5Users({
'super_user' : [
['Manager'],
self.organisation_module['site_P10'],
'banking/comptable',
'baobab',
counter.getCategoryRelativeUrl(),
],
})
self.logout()
self.login('super_user')
# open counter date and counter
self.openCounterDate(site=self.paris.surface.banque_interne.guichet_1.encaisse_des_billets_et_monnaies.sortante)
self.openCounter(site=self.paris.surface.banque_interne.guichet_1)
self.openCounterDate(site=outgoing_counter)
self.openCounter(site=counter)
def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd):
"""
Check that all the objects we created in afterSetUp or
that were added by the business template and that we rely
on are really here.
"""
self.checkResourceCreated()
# check that CashToCurrencyPurchase Module was created
self.assertEqual(self.cash_to_currency_purchase_module.getPortalType(), 'Cash To Currency Purchase Module')
# check cash sorting module is empty
self.assertEqual(len(self.cash_to_currency_purchase_module.objectValues()), 0)
def stepCheckInitialInventoryGuichet_Entrante(self, sequence=None, sequence_list=None, **kwd):
"""
Check the initial inventory before any operations
"""
self.simulation_tool = self.getSimulationTool()
# check we have 0 banknotes of 10000 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 0.0)
module = self.cash_to_currency_purchase_module
self.assertEqual(module.getPortalType(), 'Cash To Currency Purchase Module')
self.assertEqual(len(module), 0)
def stepCheckInitialInventoryGuichet_Entrante(self, sequence=None, sequence_list=None,
**kwd):
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
node = node=self.guichet_entrante.getRelativeUrl()
resource = self.usd_billet_20.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=resource), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=resource), 0.0)
def stepCheckInitialInventoryGuichet_Sortante(self, sequence=None, sequence_list=None, **kwd):
"""
Check the initial inventory before any operations
"""
self.simulation_tool = self.getSimulationTool()
# check we have 0 banknotes of 10000 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_10000.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_10000.getRelativeUrl()), 0.0)
# check we have 0 coin of 200 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_200.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_200.getRelativeUrl()), 0.0)
# check we have 10 banknotes of 5000 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 10.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 10.0)
# check we have 24 coin of 100 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 120.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 120.0)
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
node = node=self.guichet_sortante.getRelativeUrl()
banknote_10k = self.billet_10000.getRelativeUrl()
banknote_5k = self.billet_5000.getRelativeUrl()
coin_200 = self.piece_200.getRelativeUrl()
coin_100 = self.piece_100.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=banknote_10k), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=banknote_10k), 0.0)
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=coin_200), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=coin_200), 0.0)
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=banknote_5k), 10.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=banknote_5k), 10.0)
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=coin_100), 120.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=coin_100), 120.0)
def stepCreateCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd):
"""
Create a cash sorting document and check it
"""
# Cash sorting has encaisse_paris for source, guichet_1 for destination, and a price cooreponding to the sum of banknote of 10000 and banknotes of 200 ( (2+3) * 10000 + (2+3) * 200 )
self.cash_to_currency_purchase = self.cash_to_currency_purchase_module.newContent(
id='cash_to_currency_purchase_1',
portal_type='Cash To Currency Purchase',
source_value=self.guichet,
destination_value=None,
description='test',
resource_value = self.currency_2,
source_total_asset_price=100.0)
# execute tic
portal = self.getPortalObject()
module = self.cash_to_currency_purchase_module
self.cash_to_currency_purchase = document = module.newContent(
id='cash_to_currency_purchase_1',
portal_type='Cash To Currency Purchase',
source_value=self.guichet,
destination_value=None,
description='test',
resource_value=self.currency_2,
source_total_asset_price=100.0,
)
self.tic()
# check we have only one cash sorting
self.assertEqual(len(self.cash_to_currency_purchase_module.objectValues()), 1)
# get the cash sorting document
self.cash_to_currency_purchase = getattr(self.cash_to_currency_purchase_module, 'cash_to_currency_purchase_1')
# check its portal type
self.assertEqual(self.cash_to_currency_purchase.getPortalType(), 'Cash To Currency Purchase')
# check that its source is encaisse_paris
self.assertEqual(self.cash_to_currency_purchase.getSource(), 'site/testsite/paris/surface/banque_interne/guichet_1')
# check that its destination is guichet_1
self.assertEqual(self.cash_to_currency_purchase.getDestination(), None)
self.setDocumentSourceReference(self.cash_to_currency_purchase)
# check default exchange rate
rate = self.cash_to_currency_purchase.CurrencyExchange_getExchangeRateList(from_currency=self.cash_to_currency_purchase.getResource(),
to_currency='currency_module/%s' % (self.cash_to_currency_purchase.Baobab_getPortalReferenceCurrencyID()),
currency_exchange_type='purchase',
start_date=self.cash_to_currency_purchase.getStartDate())[0]
self.assertEqual(len(module), 1)
self.assertEqual(document.getSource(), self.guichet.getRelativeUrl())
self.assertEqual(document.getDestination(), None)
self.setDocumentSourceReference(document)
self.tic()
rate = document.CurrencyExchange_getExchangeRateList(
from_currency=document.getResource(),
to_currency='currency_module/%s' % (
portal.Baobab_getPortalReferenceCurrencyID(), ),
currency_exchange_type='purchase',
start_date=document.getStartDate(),
)[0]
self.assertEqual(rate, 650.0)
# Check carrefully the script CurrencyPurchase_getQuantity
script = self.cash_to_currency_purchase.CurrencyPurchase_getQuantity
script = document.CurrencyPurchase_getQuantity
self.assertEqual(script(), 65000)
self.cash_to_currency_purchase.setDiscountRatio(0.01)
document.setDiscountRatio(0.01)
self.assertEqual(script(), 64350)
self.cash_to_currency_purchase.setDiscountRatio(None)
self.cash_to_currency_purchase.setDiscount(3000)
document.setDiscountRatio(None)
document.setDiscount(3000)
self.assertEqual(script(), 62000)
# Check that we can define a specific rate
self.cash_to_currency_purchase.setCurrencyExchangeRate(660)
document.setCurrencyExchangeRate(660)
self.assertEqual(script(), 63000)
self.cash_to_currency_purchase.setCurrencyExchangeRate(None)
document.setCurrencyExchangeRate(None)
self.assertEqual(script(), 62000)
#def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None, **kwd):
def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None, **kwd):
"""
Create the cash exchange incoming line with banknotes of 10000 and check it has been well created
"""
# create the cash exchange line
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_incoming_line_1', 'Incoming Cash To Currency Purchase Line', self.usd_billet_20,
('emission_letter', 'cash_status', 'variation'), ('emission_letter/not_defined', 'cash_status/not_defined') + self.usd_variation_list,
self.quantity_usd_20,
variation_list = self.usd_variation_list)
# execute tic
def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None,
**kwd):
document = self.cash_to_currency_purchase
line_1_id = 'valid_incoming_line_1'
self.addCashLineToDelivery(
document,
line_1_id,
'Incoming Cash To Currency Purchase Line',
self.usd_billet_20,
('emission_letter', 'cash_status', 'variation'),
('emission_letter/not_defined', 'cash_status/not_defined') + \
self.usd_variation_list,
self.quantity_usd_20,
variation_list=self.usd_variation_list,
)
self.tic()
# check there is only one line created
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 1)
# get the cash exchange line
self.valid_incoming_line = getattr(self.cash_to_currency_purchase, 'valid_incoming_line_1')
# check its portal type
self.assertEqual(self.valid_incoming_line.getPortalType(), 'Incoming Cash To Currency Purchase Line')
# check the resource is banknotes of 20
self.assertEqual(self.valid_incoming_line.getResourceValue(), self.usd_billet_20)
# chek the value of the banknote
self.assertEqual(self.valid_incoming_line.getPrice(), 20.0)
# check the unit of banknote
self.assertEqual(self.valid_incoming_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_incoming_line.objectValues()), 1)
# now check for each variation (years 1992 and 2003)
self.assertEqual(len(document), 1)
line = getattr(document, line_1_id)
self.assertEqual(line.getResourceValue(), self.usd_billet_20)
self.assertEqual(line.getPrice(), 20.0)
self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(len(line), 1)
for variation in self.usd_variation_list:
# get the delivery cell
cell = self.valid_incoming_line.getCell('emission_letter/not_defined', variation, 'cash_status/not_defined')
# chek portal types
cell = line.getCell('emission_letter/not_defined', variation,
'cash_status/not_defined')
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the banknote of the cell is banknote of 10000
self.assertEqual(cell.getResourceValue(), self.usd_billet_20)
# check the source vault is encaisse_paris
self.assertEqual(cell.getBaobabSource(), None)
# check the destination vault is guichet_1
self.assertEqual(cell.getBaobabDestination(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_devises/usd/sortante')
if cell.getId() == 'movement_0_0_0':
# check the quantity of banknote 20
self.assertEqual(cell.getBaobabDestination(),
self.guichet_entrante.getRelativeUrl())
cell_id = cell.getId()
if cell_id == 'movement_0_0_0':
self.assertEqual(cell.getQuantity(), 5.0)
else:
self.fail('Wrong cell created : %s' % cell.getId())
self.fail('Unexpected cell id: %s' % (cell_id, ))
def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd):
"""
Check the amount after the creation of cash exchange line 1
"""
# Check number of lines
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 1)
# Check quantity of banknotes (2 for 1992 and 3 for 2003)
self.assertEqual(self.cash_to_currency_purchase.getTotalQuantity(fast=0, portal_type="Incoming Cash To Currency Purchase Line"), 5.0)
# Check the total price
self.assertEqual(self.cash_to_currency_purchase.getTotalPrice(fast=0, portal_type="Incoming Cash To Currency Purchase Line"), 20 * 5.0)
document = self.cash_to_currency_purchase
assertEqual = self.assertEqual
assertEqual(len(document), 1)
assertEqual(document.getTotalQuantity(fast=0,
portal_type="Incoming Cash To Currency Purchase Line"), 5.0)
assertEqual(document.getTotalPrice(fast=0,
portal_type="Incoming Cash To Currency Purchase Line"), 20 * 5.0)
def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None, **kwd):
"""
Create the cash sorting outgoing line wiht banknotes of 200 and check it has been well created
"""
# create the line
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_outgoing_line_1', 'Outgoing Cash To Currency Purchase Line', self.billet_5000,
('emission_letter', 'cash_status', 'variation'), ('emission_letter/p', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_5000)
# execute tic
document = self.cash_to_currency_purchase
assertEqual = self.assertEqual
source = self.guichet_sortante.getRelativeUrl()
line_2_id = 'valid_outgoing_line_1'
self.addCashLineToDelivery(
document,
line_2_id,
'Outgoing Cash To Currency Purchase Line',
self.billet_5000,
('emission_letter', 'cash_status', 'variation'),
('emission_letter/p', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_5000,
)
self.tic()
# check the number of lines (line1 + line2)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 2)
# get the second cash exchange line
self.valid_outgoing_line = getattr(self.cash_to_currency_purchase, 'valid_outgoing_line_1')
# check portal types
self.assertEqual(self.valid_outgoing_line.getPortalType(), 'Outgoing Cash To Currency Purchase Line')
# check the resource is coin of 200
self.assertEqual(self.valid_outgoing_line.getResourceValue(), self.billet_5000)
# check the value of coin
self.assertEqual(self.valid_outgoing_line.getPrice(), 5000.0)
# check the unit of coin
self.assertEqual(self.valid_outgoing_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_outgoing_line.objectValues()), 2)
assertEqual(len(document), 2)
line = getattr(document, line_2_id)
assertEqual(line.getPortalType(),
'Outgoing Cash To Currency Purchase Line')
assertEqual(line.getResourceValue(), self.billet_5000)
assertEqual(line.getPrice(), 5000.0)
assertEqual(line.getQuantityUnit(), 'unit')
assertEqual(len(line), 2)
for variation in self.variation_list:
# get the delivery cell
cell = self.valid_outgoing_line.getCell('emission_letter/p', variation, 'cash_status/valid')
# check the portal type
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the source vault is encaisse_paris
self.assertEqual(cell.getBaobabSource(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_billets_et_monnaies/sortante')
# check the destination vault is guichet_1
self.assertEqual(cell.getBaobabDestination(), None)
if cell.getId() == 'movement_0_0_0':
# check the quantity for coin for year 1992 is 5
self.assertEqual(cell.getQuantity(), 4.0)
elif cell.getId() == 'movement_0_1_0':
# check the quantity for coin for year 2003 is 7
self.assertEqual(cell.getQuantity(), 6.0)
cell = line.getCell('emission_letter/p', variation, 'cash_status/valid')
assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
assertEqual(cell.getBaobabSource(), source)
assertEqual(cell.getBaobabDestination(), None)
cell_id = cell.getId()
if cell_id == 'movement_0_0_0':
assertEqual(cell.getQuantity(), 4.0)
elif cell_id == 'movement_0_1_0':
assertEqual(cell.getQuantity(), 6.0)
else:
self.fail('Wrong cell created : %s' % cell.getId())
# create the line for coins
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_outgoing_line_2', 'Outgoing Cash To Currency Purchase Line', self.piece_100,
('emission_letter', 'cash_status', 'variation'), ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_100)
# execute tic
self.fail('Unexpected cell id: %s' % (cell_id, ))
self.addCashLineToDelivery(
document,
'valid_outgoing_line_2',
'Outgoing Cash To Currency Purchase Line',
self.piece_100,
('emission_letter', 'cash_status', 'variation'),
('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_100,
)
self.tic()
# check the number of lines (line1 + line2)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 3)
# get the second cash exchange line
self.valid_outgoing_line = getattr(self.cash_to_currency_purchase, 'valid_outgoing_line_2')
# check portal types
self.assertEqual(self.valid_outgoing_line.getPortalType(), 'Outgoing Cash To Currency Purchase Line')
# check the resource is coin of 200
self.assertEqual(self.valid_outgoing_line.getResourceValue(), self.piece_100)
# check the value of coin
self.assertEqual(self.valid_outgoing_line.getPrice(), 100.0)
# check the unit of coin
self.assertEqual(self.valid_outgoing_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_outgoing_line.objectValues()), 2)
assertEqual(len(document), 3)
line = document.valid_outgoing_line_2
assertEqual(line.getPortalType(), 'Outgoing Cash To Currency Purchase Line')
assertEqual(line.getResourceValue(), self.piece_100)
assertEqual(line.getPrice(), 100.0)
assertEqual(line.getQuantityUnit(), 'unit')
assertEqual(len(line), 2)
for variation in self.variation_list:
# get the delivery cell
cell = self.valid_outgoing_line.getCell('emission_letter/not_defined', variation, 'cash_status/valid')
# check the portal type
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the source vault is encaisse_paris
self.assertEqual(cell.getBaobabSource(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_billets_et_monnaies/sortante')
# check the destination vault is guichet_1
self.assertEqual(cell.getBaobabDestination(), None)
if cell.getId() == 'movement_0_0_0':
# check the quantity for coin for year 1992 is 5
self.assertEqual(cell.getQuantity(), 120.0)
elif cell.getId() == 'movement_0_1_0':
# check the quantity for coin for year 2003 is 7
self.assertEqual(cell.getQuantity(), 0.0)
cell = line.getCell('emission_letter/not_defined', variation, 'cash_status/valid')
assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
assertEqual(cell.getBaobabSource(), source)
assertEqual(cell.getBaobabDestination(), None)
cell_id = cell.getId()
if cell_id == 'movement_0_0_0':
assertEqual(cell.getQuantity(), 120.0)
elif cell_id == 'movement_0_1_0':
assertEqual(cell.getQuantity(), 0.0)
else:
self.fail('Wrong cell created : %s' % cell.getId())
self.fail('Unexpected cell id: %s' % (cell_id, ))
self.tic()
def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd):
"""
Check the total after the creation of the two cash exchange lines
"""
# Check number of lines (line1 + line2)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 3)
# Check quantity, banknotes : 2 for 1992 and 3 for 2003, coin : 5 for 1992 and 7 for 2003
self.assertEqual(self.cash_to_currency_purchase.getTotalQuantity(fast=0, portal_type="Outgoing Cash To Currency Purchase Line"), 130.0)
# check the total price
self.assertEqual(self.cash_to_currency_purchase.getTotalPrice(fast=0, portal_type="Outgoing Cash To Currency Purchase Line"), 5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 120.0)
def stepDeliverCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd):
"""
Deliver the cash sorting with a good user
and check that the deliver of a cash tranfer have achieved
"""
self.workflow_tool.doActionFor(self.cash_to_currency_purchase, 'deliver_action', wf_id='cash_to_currency_purchase_workflow')
# execute tic
document = self.cash_to_currency_purchase
assertEqual = self.assertEqual
assertEqual(len(document.objectValues()), 3)
assertEqual(document.getTotalQuantity(fast=0,
portal_type="Outgoing Cash To Currency Purchase Line"), 130.0)
assertEqual(document.getTotalPrice(fast=0,
portal_type="Outgoing Cash To Currency Purchase Line"),
5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 120.0)
def stepDeliverCashToCurrencyPurchase(self, sequence=None, sequence_list=None,
**kwd):
document = self.cash_to_currency_purchase
self.workflow_tool.doActionFor(document, 'deliver_action',
wf_id='cash_to_currency_purchase_workflow')
self.tic()
# get state of cash sorting
state = self.cash_to_currency_purchase.getSimulationState()
# check that state is delivered
self.assertEqual(state, 'delivered')
# get workflow history
workflow_history = self.workflow_tool.getInfoFor(ob=self.cash_to_currency_purchase, name='history', wf_id='cash_to_currency_purchase_workflow')
# check len of len workflow history is 6
self.assertEqual(document.getSimulationState(), 'delivered')
workflow_history = self.workflow_tool.getInfoFor(ob=document,
name='history', wf_id='cash_to_currency_purchase_workflow')
self.assertEqual(len(workflow_history), 3)
def stepCheckFinalInventoryGuichet_Entrante(self, sequence=None, sequence_list=None, **kwd):
"""
Check the initial inventory before any operations
"""
self.simulation_tool = self.getSimulationTool()
# check we have 0 banknotes of 10000 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 5.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 5.0)
def stepCheckFinalInventoryGuichet_Sortante(self, sequence=None, sequence_list=None, **kwd):
"""
Check inventory at source (vault encaisse_paris) after deliver of the cash sorting
"""
# check we have 14 coin of 5000
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 0.0)
# check we have 12 coins of 100
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 0.0)
def stepDelCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd):
"""
Delete the invalid vault_transfer line previously create
"""
self.cash_to_currency_purchase_module.deleteContent('cash_to_currency_purchase_1')
##################################
## Tests
##################################
def test_01_ERP5BankingCashToCurrencyPurchase(self, quiet=QUIET, run=RUN_ALL_TEST):
"""
Define the sequence of step that will be play
"""
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
node = self.guichet_entrante.getRelativeUrl()
resource = resource=self.usd_billet_20.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node,
resource=resource), 5.0)
assertEqual(simulation_tool.getFutureInventory(node=node,
resource=resource), 5.0)
def stepCheckFinalInventoryGuichet_Sortante(self, sequence=None,
sequence_list=None, **kwd):
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
node = node=self.guichet_sortante.getRelativeUrl()
banknote_5k = self.billet_5000.getRelativeUrl()
coin_100 = self.piece_100.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node,
resource=banknote_5k), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node,
resource=banknote_5k), 0.0)
assertEqual(simulation_tool.getCurrentInventory(node=node,
resource=coin_100), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node,
resource=coin_100), 0.0)
def test_01_ERP5BankingCashToCurrencyPurchase(self, quiet=QUIET,
run=RUN_ALL_TEST):
if not run:
return
sequence_list = SequenceList()
# define the sequence
sequence_string = 'Tic CheckObjects Tic CheckInitialInventoryGuichet_Entrante ' \
+ 'CheckInitialInventoryGuichet_Sortante ' \
+ 'CreateCashToCurrencyPurchase ' \
+ 'CreateValidIncomingLine CheckSubTotal ' \
+ 'CreateValidOutgoingLine ' \
+ 'Tic CheckTotal ' \
+ 'DeliverCashToCurrencyPurchase Tic ' \
+ 'CheckFinalInventoryGuichet_Entrante ' \
+ 'CheckFinalInventoryGuichet_Sortante'
sequence_list.addSequenceString(sequence_string)
# play the sequence
sequence_list.addSequenceString("""
stepTic
stepCheckObjects
stepTic
stepCheckInitialInventoryGuichet_Entrante
stepCheckInitialInventoryGuichet_Sortante
stepCreateCashToCurrencyPurchase
stepCreateValidIncomingLine
stepCheckSubTotal
stepCreateValidOutgoingLine
stepTic
stepCheckTotal
stepDeliverCashToCurrencyPurchase
stepTic
stepCheckFinalInventoryGuichet_Entrante
stepCheckFinalInventoryGuichet_Sortante
""")
sequence_list.play(self)
......@@ -28,43 +28,35 @@
import os
from Products.ERP5Type.tests.Sequence import SequenceList
from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin
# Needed in order to have a log file inside the current folder
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Define the level of log we want, here is all
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
os.environ['EVENT_LOG_SEVERITY'] = '-300'
class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
# pseudo constants
RUN_ALL_TEST = 1 # we want to run all test
QUIET = 0 # we don't want the test to be quiet
RUN_ALL_TEST = 1
QUIET = 0
# Relative to "site" category
COUNTER_RELATIVE_URL = 'testsite/paris/surface/banque_interne/guichet_1'
# Relative to counter
INCOMING_COUNTER_RELATIVE_URL = 'encaisse_des_billets_et_monnaies/entrante'
OUTGOING_COUNTER_RELATIVE_URL = 'encaisse_des_devises/usd/sortante'
outgoing_quantity_5000 = {'variation/1992': 4, 'variation/2003': 6}
outgoing_quantity_100 = {'variation/1992': 163, 'variation/2003': 0}
def getTitle(self):
"""
Return the title of the test
"""
return "ERP5BankingCashToCurrencySale"
def afterSetUp(self):
"""
Method called before the launch of the test to initialize some data
"""
self.initDefaultVariable()
# Set some variables :
self.cash_to_currency_sale_module = \
self.getPortal().cash_to_currency_sale_module
# Create a user and login as manager to populate the erp5 portal with
# objects for tests.
self.cash_to_currency_sale_module = self.getPortal().cash_to_currency_sale_module
self.createManagerAndLogin()
self.createFunctionGroupSiteCategory()
"""
Windows to create the BANKNOTES of 10 000 and 5000, coins 200.
It s same to click to the fast input button.
"""
self.guichet = counter = self.getPortalObject().portal_categories.site.\
unrestrictedTraverse(self.COUNTER_RELATIVE_URL)
self.guichet_entrante = counter.unrestrictedTraverse(
self.INCOMING_COUNTER_RELATIVE_URL)
self.guichet_sortante = outgoing_counter = counter.unrestrictedTraverse(
self.OUTGOING_COUNTER_RELATIVE_URL)
self.line_list = line_list_sortante = [{
'id': 'inventory_line_1',
'resource': self.usd_billet_20,
......@@ -74,49 +66,36 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
'variation_list': self.usd_variation_list,
'quantity': self.quantity_usd_20,
}, ]
self.guichet = counter = self.paris.surface.banque_interne.guichet_1
self.guichet_entrante = counter.encaisse_des_billets_et_monnaies.entrante
self.guichet_sortante = counter.encaisse_des_devises.usd.sortante
self.createCashInventory(source=None, destination=self.guichet_sortante,
currency=self.currency_2, line_list=line_list_sortante)
# now we need to create a user as Manager to do the test
# in order to have an assigment defined which is used to do transition
# Create an Organisation that will be used for users assignment
self.createCashInventory(
source=None,
destination=outgoing_counter,
currency=self.currency_2,
line_list=line_list_sortante,
)
self.checkUserFolderType()
self.organisation = self.organisation_module.newContent(id='paris',
portal_type='Organisation', function='banking', group='baobab',
site=self.paris.getRelativeUrl())
# define the user
self.createERP5Users({
'super_user' : [['Manager'], self.organisation, 'banking/comptable',
'baobab', counter.getRelativeUrl()],
}, )
'super_user' : [
['Manager'],
self.organisation_module['site_P10'],
'banking/comptable',
'baobab',
counter.getCategoryRelativeUrl(),
],
})
self.logout()
self.login('super_user')
# open counter date and counter
self.openCounterDate(site=counter)
self.openCounter(site=counter)
def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd):
"""
Check that all the objects we created in afterSetUp or
that were added by the business template and that we rely
on are really here.
"""
self.checkResourceCreated()
# check that CashToCurrencySale Module was created
self.assertEqual(self.cash_to_currency_sale_module.getPortalType(),
'Cash To Currency Sale Module')
# check cash sorting module is empty
self.assertEqual(len(self.cash_to_currency_sale_module.objectValues()), 0)
module = self.cash_to_currency_sale_module
self.assertEqual(module.getPortalType(), 'Cash To Currency Sale Module')
self.assertEqual(len(module), 0)
def stepCheckInitialInventoryGuichet(self, sequence=None, sequence_list=None,
**kwd):
"""
Check the initial inventory before any operations
"""
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
getCurrentInventory = simulation_tool.getCurrentInventory
getFutureInventory = simulation_tool.getFutureInventory
......@@ -141,40 +120,39 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
resource=banknote_usd_20), 5.0)
def stepCreateCashToCurrencySale(self, sequence=None, sequence_list=None, **kwd):
"""
Create a cash sorting document and check it
"""
portal = self.getPortalObject()
module = self.cash_to_currency_sale_module
self.cash_to_currency_sale = cash_to_currency_sale = module.newContent(
id='cash_to_currency_sale_1',
portal_type='Cash To Currency Sale',
source_value=self.guichet,
destination_value=None,
self.cash_to_currency_sale = document = module.newContent(
id='cash_to_currency_sale_1',
portal_type='Cash To Currency Sale',
source_value=self.guichet,
destination_value=None,
description='test',
resource_value=self.currency_2,
source_total_asset_price=100.0,
resource_value=self.currency_2,
source_total_asset_price=100.0,
discount_ratio=0.02, # 1300
)
self.tic()
self.assertEqual(len(module), 1)
self.assertEqual(cash_to_currency_sale.getSource(),
'site/testsite/paris/surface/banque_interne/guichet_1')
self.assertEqual(cash_to_currency_sale.getDestination(), None)
self.setDocumentSourceReference(cash_to_currency_sale)
self.assertEqual(document.getSource(), self.guichet.getRelativeUrl())
self.assertEqual(document.getDestination(), None)
self.setDocumentSourceReference(document)
self.tic()
# Check the default exchange rate
rate = cash_to_currency_sale.CurrencyExchange_getExchangeRateList(from_currency=cash_to_currency_sale.getResource(),
to_currency='currency_module/%s' % (cash_to_currency_sale.Baobab_getPortalReferenceCurrencyID()),
currency_exchange_type='sale',
start_date=cash_to_currency_sale.getStartDate())[0]
rate = document.CurrencyExchange_getExchangeRateList(
from_currency=document.getResource(),
to_currency='currency_module/%s' % (
portal.Baobab_getPortalReferenceCurrencyID(), ),
currency_exchange_type='sale',
start_date=document.getStartDate(),
)[0]
self.assertEqual(rate, 650.0)
def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None,
**kwd):
container = self.cash_to_currency_sale
document = self.cash_to_currency_sale
line_1_id = 'valid_incoming_line_1'
self.addCashLineToDelivery(
container,
document,
line_1_id,
'Incoming Cash To Currency Sale Line',
self.billet_5000,
......@@ -183,14 +161,15 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.variation_list,
self.outgoing_quantity_5000,
)
self.assertEqual(len(container), 1)
line_1 = getattr(container, line_1_id)
self.assertEqual(line_1.getResourceValue(), self.billet_5000)
self.assertEqual(line_1.getPrice(), 5000.0)
self.assertEqual(line_1.getQuantityUnit(), 'unit')
self.assertEqual(len(line_1), 2)
self.tic()
self.assertEqual(len(document), 1)
line = getattr(document, line_1_id)
self.assertEqual(line.getResourceValue(), self.billet_5000)
self.assertEqual(line.getPrice(), 5000.0)
self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(len(line), 2)
for variation in self.variation_list:
cell = line_1.getCell('emission_letter/not_defined', variation,
cell = line.getCell('emission_letter/not_defined', variation,
'cash_status/valid')
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
self.assertEqual(cell.getResourceValue(), self.billet_5000)
......@@ -207,7 +186,7 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
line_2_id = 'valid_incoming_line_2'
self.addCashLineToDelivery(
container,
document,
line_2_id,
'Incoming Cash To Currency Sale Line',
self.piece_100,
......@@ -216,8 +195,9 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.variation_list,
self.outgoing_quantity_100,
)
self.assertEqual(len(container), 2)
line_2 = getattr(self.cash_to_currency_sale, line_2_id)
self.tic()
self.assertEqual(len(document), 2)
line_2 = getattr(document, line_2_id)
self.assertEqual(line_2.getPortalType(),
'Incoming Cash To Currency Sale Line')
self.assertEqual(line_2.getResourceValue(), self.piece_100)
......@@ -239,26 +219,24 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.assertEqual(cell.getQuantity(), 0.0)
else:
self.fail('Unexpected cell id: %s' % (cell_id, ))
# execute tic
self.tic()
def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd):
document = self.cash_to_currency_sale
# Check number of lines
self.assertEqual(len(document), 2)
self.assertEqual(document.getTotalQuantity(fast=0,
portal_type="Incoming Cash To Currency Sale Line"), 173)
# Check the total price
self.assertEqual(document.getTotalPrice(fast=0,
portal_type="Incoming Cash To Currency Sale Line"),
5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 163.0)
def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None,
**kwd):
container = self.cash_to_currency_sale
assertEqual = self.assertEqual
document = self.cash_to_currency_sale
line_id = 'valid_outgoing_line_1'
self.addCashLineToDelivery(
container,
document,
line_id,
'Outgoing Cash To Currency Sale Line',
self.usd_billet_20,
......@@ -268,57 +246,51 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.quantity_usd_20,
variation_list=self.usd_variation_list,
)
self.assertEqual(len(container), 3)
# get the cash exchange line
line = getattr(container, line_id)
# check its portal type
self.assertEqual(line.getPortalType(),
self.tic()
assertEqual(len(document), 3)
line = getattr(document, line_id)
assertEqual(line.getPortalType(),
'Outgoing Cash To Currency Sale Line')
# check the resource is banknotes of 20
self.assertEqual(line.getResourceValue(), self.usd_billet_20)
# chek the value of the banknote
self.assertEqual(line.getPrice(), 20.0)
self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(len(line), 1)
assertEqual(line.getResourceValue(), self.usd_billet_20)
assertEqual(line.getPrice(), 20.0)
assertEqual(line.getQuantityUnit(), 'unit')
assertEqual(len(line), 1)
for variation in self.usd_variation_list:
cell = line.getCell('emission_letter/not_defined', variation,
'cash_status/not_defined')
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
self.assertEqual(cell.getResourceValue(), self.usd_billet_20)
self.assertEqual(cell.getBaobabSource(),
assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
assertEqual(cell.getResourceValue(), self.usd_billet_20)
assertEqual(cell.getBaobabSource(),
self.guichet_sortante.getRelativeUrl())
self.assertEqual(cell.getBaobabDestination(), None)
assertEqual(cell.getBaobabDestination(), None)
cell_id = cell.getId()
if cell_id == 'movement_0_0_0':
self.assertEqual(cell.getQuantity(), 5.0)
assertEqual(cell.getQuantity(), 5.0)
else:
self.fail('Wrong cell created : %s' % (cell_id, ))
self.fail('Unexpected cell id: %s' % (cell_id, ))
self.tic()
def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd):
document = self.cash_to_currency_sale
self.assertEqual(len(document), 3)
self.assertEqual(document.getTotalQuantity(fast=0,
assertEqual = self.assertEqual
assertEqual(len(document), 3)
assertEqual(document.getTotalQuantity(fast=0,
portal_type="Outgoing Cash To Currency Sale Line"), 5.0)
self.assertEqual(document.getTotalPrice(fast=0,
assertEqual(document.getTotalPrice(fast=0,
portal_type="Outgoing Cash To Currency Sale Line"), 20 * 5.0)
def stepDeliverCashToCurrencySale(self, sequence=None, sequence_list=None,
**kwd):
#self.cash_to_currency_sale.setSourceTotalAssetPrice('52400.0')
# self.security_manager = AccessControl.getSecurityManager()
# self.user = self.security_manager.getUser()
# do the workflow transition "deliver_action"
document = self.cash_to_currency_sale
self.workflow_tool.doActionFor(document, 'deliver_action',
wf_id='cash_to_currency_sale_workflow')
# check that state is delivered
self.tic()
self.assertEqual(document.getSimulationState(), 'delivered')
# execute tic
self.tic()
def stepCheckFinalInventoryGuichet(self, sequence=None,
sequence_list=None, **kwd):
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool()
getCurrentInventory = simulation_tool.getCurrentInventory
getFutureInventory = simulation_tool.getFutureInventory
......@@ -328,18 +300,18 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
coin_100 = self.piece_100.getRelativeUrl()
banknote_usd_20 = self.usd_billet_20.getRelativeUrl()
self.assertEqual(getCurrentInventory(node=incoming_counter,
assertEqual(getCurrentInventory(node=incoming_counter,
resource=banknote_5000), 10.0)
self.assertEqual(getFutureInventory(node=incoming_counter,
assertEqual(getFutureInventory(node=incoming_counter,
resource=banknote_5000), 10.0)
self.assertEqual(getCurrentInventory(node=incoming_counter,
assertEqual(getCurrentInventory(node=incoming_counter,
resource=coin_100), 163.0)
self.assertEqual(getFutureInventory(node=incoming_counter,
assertEqual(getFutureInventory(node=incoming_counter,
resource=coin_100), 163.0)
self.assertEqual(getCurrentInventory(node=outgoing_counter,
assertEqual(getCurrentInventory(node=outgoing_counter,
resource=banknote_usd_20), 0.0)
self.assertEqual(getFutureInventory(node=outgoing_counter,
assertEqual(getFutureInventory(node=outgoing_counter,
resource=banknote_usd_20), 0.0)
def stepDelCashToCurrencySale(self, sequence=None, sequence_list=None,
......@@ -377,24 +349,29 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
def test_01_ERP5BankingCashToCurrencySale(self, quiet=QUIET,
run=RUN_ALL_TEST):
"""
Define the sequence of step that will be play
"""
if not run:
return
sequence_list = SequenceList()
sequence_list.addSequenceString('stepTic stepCheckObjects stepTic '
'stepCheckInitialInventoryGuichet '
'stepCreateCashToCurrencySale '
'stepCreateValidIncomingLine stepCheckSubTotal '
'stepCreateValidOutgoingLine '
'stepTic stepCheckTotal '
'stepResetSourceInventory stepTic '
'stepDeliverCashToCurrencySaleFails stepTic '
'stepDeleteResetInventory stepTic '
'stepDeliverCashToCurrencySale stepTic '
'stepCheckFinalInventoryGuichet_Entrante '
'stepCheckFinalInventoryGuichet_Sortante'
)
sequence_list.addSequenceString("""
stepTic
stepCheckObjects
stepTic
stepCheckInitialInventoryGuichet
stepCreateCashToCurrencySale
stepCreateValidIncomingLine stepCheckSubTotal
stepCreateValidOutgoingLine
stepTic
stepCheckTotal
stepResetSourceInventory
stepTic
stepDeliverCashToCurrencySaleFails
stepTic
stepDeleteResetInventory
stepTic
stepDeliverCashToCurrencySale
stepTic
stepCheckFinalInventoryGuichet_Entrante
stepCheckFinalInventoryGuichet_Sortante
""")
sequence_list.play(self)
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