diff --git a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/SaleInvoiceTransaction_getVAT.xml b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/SaleInvoiceTransaction_getVAT.xml index f567168cab3958f30f05b821cf2a81da0b6390a8..3f82eb0bdda5a3a3a7143288f9e6363be87da1ff 100644 --- a/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/SaleInvoiceTransaction_getVAT.xml +++ b/bt5/erp5_accounting/SkinTemplateItem/portal_skins/erp5_accounting/SaleInvoiceTransaction_getVAT.xml @@ -79,46 +79,49 @@ vat_infos = {\n }\n \n invoice = context\n -accounting_movement_type_list = invoice.getPortalAccountingMovementTypeList()\n -accounting_movement_list = [x.getObject() for x in invoice.searchFolder(portal_type = accounting_movement_type_list)]\n +portal = context.getPortalObject()\n +accounting_movement_type_list =\\\n + portal.getPortalAccountingMovementTypeList()\n +accounting_movement_list = invoice.getMovementList(\n + portal_type=accounting_movement_type_list)\n \n # 1) the invoice contains accounting lines.\n if len(accounting_movement_list) :\n for movement in accounting_movement_list :\n account = movement.getSourceValue()\n if account is None : continue\n - if account.getAccountTypeId() == \'collected_vat\' : \n - #if vat_infos[\'title\'] is not None :\n - # assert account.getTitle() == vat_infos[\'title\'] # TODO\n - #if vat_infos[\'ratio\'] != 0 :\n - # assert 1 # TODO\n + if account.getAccountTypeId() == \'collected_vat\' :\n vat_infos.setdefault(\'title\', account.getTitle())\n - vat_infos.setdefault(\'ratio\', movement.getQuantity() / (float(invoice.getTotalPrice(portal_type = [\'Invoice Line\', \'Sale Invoice Line\'])) or 1)) # XXX this calls catalog => bad & this does not suport multiple VAT lines either\n + vat_infos.setdefault(\'ratio\', round(movement.getQuantity() /\n + (float(invoice.getTotalPrice(\n + portal_type=portal.getPortalInvoiceMovementTypeList())) or 1),\n + 2)) # XXX this calls catalog => bad & this does not suport multiple VAT lines either\n vat_infos.update( { \'total\': vat_infos[\'total\'] + movement.getQuantity() } )\n \n # 2) no accounting lines => we must look in the simulation\n if not vat_infos.has_key(\'title\') :\n - for invoice_movement in invoice.getMovementList() :\n + for invoice_movement in invoice.getMovementList(portal_type=portal.getPortalInvoiceMovementTypeList() ) :\n aggregated_simulation_movements = {}\n - for simulation_movement in ( invoice_movement.getDeliveryRelatedValueList(portal_type = \'Simulation Movement\') +\n - invoice_movement.getOrderRelatedValueList(portal_type = \'Simulation Movement\') ):\n - if aggregated_simulation_movements.has_key(simulation_movement.getPath()) : \n - continue \n + for simulation_movement in ( invoice_movement.getDeliveryRelatedValueList(\n + portal_type = \'Simulation Movement\') +\n + invoice_movement.getOrderRelatedValueList(\n + portal_type = \'Simulation Movement\') ):\n + if aggregated_simulation_movements.has_key(\n + simulation_movement.getPath()):\n + continue\n aggregated_simulation_movements[simulation_movement.getPath()] = 1\n \n - applied_rule_list = simulation_movement.objectValues()\n - if len (applied_rule_list) == 0 : continue\n - applied_rule = applied_rule_list[0]\n -\n - # inside we got accounting movements\n - for movement in applied_rule.objectValues() :\n - account = movement.getSourceValue()\n - if account is None : continue\n - if account.getAccountTypeId() == \'collected_vat\' : \n - context.log(\'added simulation movement from\', movement.getPath())\n - vat_infos.setdefault(\'title\', account.getTitle())\n - vat_infos.setdefault(\'ratio\', movement.getQuantity() / (float(invoice_movement.getTotalPrice()) or 1)) # XXX this does not suport multiple VAT lines \n - vat_infos.update( { \'total\': vat_infos[\'total\'] + movement.getQuantity() } )\n + for applied_rule in simulation_movement.objectValues():\n + # inside we got accounting movements\n + for movement in applied_rule.objectValues() :\n + account = movement.getSourceValue()\n + if account is None : continue\n + if account.getAccountTypeId() == \'collected_vat\':\n + vat_infos.setdefault(\'title\', account.getTitle())\n + vat_infos.setdefault(\'ratio\', round(movement.getQuantity() / \n + (float(invoice_movement.getTotalPrice()) or 1),\n + 2)) # XXX this does not suport multiple VAT lines\n + vat_infos.update( { \'total\': vat_infos[\'total\'] + movement.getQuantity() } )\n \n vat_infos.setdefault(\'title\', "")\n vat_infos.setdefault(\'ratio\', 0)\n @@ -169,23 +172,21 @@ return vat_infos\n <string>context</string> <string>invoice</string> <string>_getattr_</string> + <string>portal</string> <string>accounting_movement_type_list</string> - <string>append</string> - <string>$append0</string> - <string>_getiter_</string> - <string>x</string> <string>accounting_movement_list</string> <string>len</string> + <string>_getiter_</string> <string>movement</string> <string>account</string> <string>None</string> + <string>round</string> <string>float</string> <string>_getitem_</string> <string>invoice_movement</string> <string>aggregated_simulation_movements</string> <string>simulation_movement</string> <string>_write_</string> - <string>applied_rule_list</string> <string>applied_rule</string> </tuple> </value>