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

fix some problems when having lines from the same resource

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@7713 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 972c4495
......@@ -70,10 +70,23 @@
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
""" Calculates the VAT for this invoice. \n
FIXME: it should support :\n
o multiple VAT lines (with differents ratio)\n
o other taxes that VAT\n
"""Calculates the VAT for this invoice, returning a dict with keys:\n
\n
* total: The amount of VAT\n
* ratio: The ratio of the VAT\n
* title: The title of this VAT, actually this is the title of the\n
account used in the invoice transaction rule.\n
\n
This scripts first look in the accounting lines related to this invoice, and\n
uses the sum of all accounts of type collected_vat. If nothing is found, it\n
will look in the simulation tree to find all movements which uses a\n
collected_vat account as source.\n
\n
TODO: It\'s now clear that this script now needs a complete rewrite, because it\n
doesn\'t support different VAT rates for different lines and retrieving the VAT\n
rate associated with an invoice line.\n
\n
This API will probably change.\n
"""\n
\n
vat_infos = {\n
......@@ -82,27 +95,26 @@ vat_infos = {\n
\n
invoice = context\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
portal_type=portal.getPortalAccountingMovementTypeList())\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 len(accounting_movement_list):\n
for movement in accounting_movement_list:\n
account = movement.getSourceValue(portal_type=\'Account\')\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
vat_infos.update({\'total\': vat_infos[\'total\'] + movement.getQuantity()})\n
vat_infos[\'ratio\'] = vat_infos[\'total\'] /\\\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
portal_type=portal.getPortalInvoiceMovementTypeList(),\n
fast=0)) or 1)\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(portal_type=portal.getPortalInvoiceMovementTypeList() ) :\n
for invoice_movement in invoice.getMovementList(\n
portal_type=portal.getPortalInvoiceMovementTypeList() ) :\n
aggregated_simulation_movements = {}\n
for simulation_movement in ( invoice_movement.getDeliveryRelatedValueList(\n
portal_type = \'Simulation Movement\') +\n
......@@ -116,15 +128,18 @@ if not vat_infos.has_key(\'title\') :\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
account = movement.getSourceValue(portal_type=\'Account\')\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.update( { \'total\':\n
vat_infos[\'total\'] + movement.getQuantity() } )\n
\n
vat_infos[\'ratio\'] = vat_infos[\'total\'] /\\\n
(float(invoice.getTotalPrice(\n
portal_type=portal.getPortalInvoiceMovementTypeList(),\n
fast=0)) or 1)\n
\n
vat_infos.setdefault(\'title\', "")\n
vat_infos.setdefault(\'ratio\', 0)\n
return vat_infos\n
......@@ -175,20 +190,18 @@ return vat_infos\n
<string>invoice</string>
<string>_getattr_</string>
<string>portal</string>
<string>accounting_movement_type_list</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>float</string>
<string>_write_</string>
<string>invoice_movement</string>
<string>aggregated_simulation_movements</string>
<string>simulation_movement</string>
<string>_write_</string>
<string>applied_rule</string>
</tuple>
</value>
......
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