Reviewers: ,
Please review this at http://codereview.tryton.org/587003/
Affected files:
M trytond/modules/account/tax.py
M trytond/modules/account/tax.xml
M trytond/modules/account_be/tax_be.xml
M trytond/modules/account_fr/tax_fr.xml
M trytond/modules/account_invoice/invoice.py
M trytond/modules/account_product/product.py
M trytond/modules/purchase/purchase.py
M trytond/modules/sale/sale.py
Index: trytond/modules/account/tax.py
===================================================================
--- a/trytond/modules/account/tax.py
+++ b/trytond/modules/account/tax.py
@@ -23,6 +23,11 @@
__name__ = 'account.tax.group'
name = fields.Char('Name', size=None, required=True, translate=True)
code = fields.Char('Code', size=None, required=True)
+ kind = fields.Selection([
+ ('sale', 'Sale'),
+ ('purchase', 'Purchase'),
+ ('both', 'Both'),
+ ], 'Kind', required=True)
@classmethod
def __register__(cls, module_name):
@@ -33,6 +38,10 @@
# Migration from 1.4 drop code_uniq constraint
table.drop_constraint('code_uniq')
+ @staticmethod
+ def default_kind():
+ return 'both'
+
class TaxCodeTemplate(ModelSQL, ModelView):
'Tax Code Template'
Index: trytond/modules/account/tax.xml
===================================================================
--- a/trytond/modules/account/tax.xml
+++ b/trytond/modules/account/tax.xml
@@ -16,6 +16,8 @@
<field name="name"/>
<label name="code"/>
<field name="code"/>
+ <label name="kind"/>
+ <field name="kind"/>
</form>
]]>
</field>
@@ -28,6 +30,7 @@
<tree string="Tax Groups">
<field name="name"/>
<field name="code"/>
+ <field name="kind"/>
</tree>
]]>
</field>
Index: trytond/modules/account_be/tax_be.xml
===================================================================
--- a/trytond/modules/account_be/tax_be.xml
+++ b/trytond/modules/account_be/tax_be.xml
@@ -318,18 +318,21 @@
id="group_tva_vente_biens">
<field name="name">T.V.A. Vente de biens</field>
<field name="code">T.V.A. Vente de biens</field>
+ <field name="kind">sale</field>
</record>
<record model="account.tax.group"
id="group_tva_vente_services">
<field name="name">T.V.A. Vente de services</field>
<field name="code">T.V.A. Vente de services</field>
+ <field name="kind">sale</field>
</record>
<record model="account.tax.group"
id="group_tva_achat">
<field name="name">T.V.A. Achat</field>
<field name="code">T.V.A. Achat</field>
+ <field name="kind">purchase</field>
</record>
<record model="account.tax.template"
Index: trytond/modules/account_fr/tax_fr.xml
===================================================================
--- a/trytond/modules/account_fr/tax_fr.xml
+++ b/trytond/modules/account_fr/tax_fr.xml
@@ -551,11 +551,13 @@
<record model="account.tax.group" id="group_tva_vente">
<field name="name">T.V.A. Vente</field>
<field name="code">T.V.A. Vente</field>
+ <field name="kind">sale</field>
</record>
<record model="account.tax.group" id="group_tva_achat">
<field name="name">T.V.A. Achat</field>
<field name="code">T.V.A. Achat</field>
+ <field name="kind">purchase</field>
</record>
<record model="account.tax.template" id="tva_vente_19_6">
Index: trytond/modules/account_invoice/invoice.py
===================================================================
--- a/trytond/modules/account_invoice/invoice.py
+++ b/trytond/modules/account_invoice/invoice.py
@@ -1362,7 +1362,21 @@
description = fields.Text('Description', size=None, required=True)
note = fields.Text('Note')
taxes = fields.Many2Many('account.invoice.line-account.tax',
- 'line', 'tax', 'Taxes', domain=[('parent', '=', None)],
+ 'line', 'tax', 'Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in',
+ If(Bool(Eval('_parent_invoice')),
+ If(Eval('_parent_invoice', {}).get('type').in_(
+ ['out_invoice', 'out_credit_note']),
+ ['sale', 'both'],
+ ['purchase', 'both']),
+ If(Eval('invoice_type').in_(
+ ['out_invoice', 'out_credit_note']),
+ ['sale', 'both'],
+ ['purchase', 'both']))
+ )],
+ ],
states={
'invisible': Eval('type') != 'line',
},
Index: trytond/modules/account_product/product.py
===================================================================
--- a/trytond/modules/account_product/product.py
+++ b/trytond/modules/account_product/product.py
@@ -42,14 +42,22 @@
taxes_parent = fields.Boolean('Use the Parent\'s Taxes',
help='Use the taxes defined on the parent category')
customer_taxes =
fields.Many2Many('product.category-customer-account.tax',
- 'category', 'tax', 'Customer Taxes', domain=[('parent', '=',
None)],
+ 'category', 'tax', 'Customer Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['sale', 'both'])],
+ ],
states={
'invisible': (~Eval('context', {}).get('company')
| Eval('taxes_parent')),
},
depends=['taxes_parent'])
supplier_taxes =
fields.Many2Many('product.category-supplier-account.tax',
- 'category', 'tax', 'Supplier Taxes', domain=[('parent', '=',
None)],
+ 'category', 'tax', 'Supplier Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['purchase', 'both'])],
+ ],
states={
'invisible': (~Eval('context', {}).get('company')
| Eval('taxes_parent')),
@@ -180,13 +188,21 @@
taxes_category = fields.Boolean('Use Category\'s Taxes',
help='Use the taxes defined on the category')
customer_taxes =
fields.Many2Many('product.template-customer-account.tax',
- 'product', 'tax', 'Customer Taxes', domain=[('parent', '=', None)],
+ 'product', 'tax', 'Customer Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['sale', 'both'])],
+ ],
states={
'invisible': (~Eval('context', {}).get('company')
| Eval('taxes_category')),
}, depends=['taxes_category'])
supplier_taxes =
fields.Many2Many('product.template-supplier-account.tax',
- 'product', 'tax', 'Supplier Taxes', domain=[('parent', '=', None)],
+ 'product', 'tax', 'Supplier Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['purchase', 'both'])],
+ ],
states={
'invisible': (~Eval('context', {}).get('company')
| Eval('taxes_category')),
Index: trytond/modules/purchase/purchase.py
===================================================================
--- a/trytond/modules/purchase/purchase.py
+++ b/trytond/modules/purchase/purchase.py
@@ -872,7 +872,11 @@
description = fields.Text('Description', size=None, required=True)
note = fields.Text('Note')
taxes = fields.Many2Many('purchase.line-account.tax',
- 'line', 'tax', 'Taxes', domain=[('parent', '=', None)],
+ 'line', 'tax', 'Taxes',
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['purchase', 'both'])],
+ ],
states={
'invisible': Eval('type') != 'line',
}, depends=['type'])
Index: trytond/modules/sale/sale.py
===================================================================
--- a/trytond/modules/sale/sale.py
+++ b/trytond/modules/sale/sale.py
@@ -960,7 +960,11 @@
description = fields.Text('Description', size=None, required=True)
note = fields.Text('Note')
taxes =
fields.Many2Many('sale.line-account.tax', 'line', 'tax', 'Taxes',
- domain=[('parent', '=', None)], states={
+ domain=[('parent', '=', None), ['OR',
+ ('group', '=', None),
+ ('group.kind', 'in', ['sale', 'both'])],
+ ],
+ states={
'invisible': Eval('type') != 'line',
}, depends=['type'])
invoice_lines = fields.Many2Many('sale.line-account.invoice.line',
--
[email protected] mailing list