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

Reply via email to