~akretion-team/openerp-connector-ecommerce/openerp-connector-ecommerce-add-fiscal-position-support

« back to all changes in this revision

Viewing changes to connector_ecommerce/unit/sale_order_onchange.py

  • Committer: Sebastien Beau
  • Date: 2014-06-13 07:30:03 UTC
  • Revision ID: sebastien.beau@akretion.com-20140613073003-tgg5yze0rpcyolsv
[IMP] start to add support of fiscal position rule

Show diffs side-by-side

added added

removed removed

Lines of Context:
70
70
        kwargs = {'context': self.session.context}
71
71
        return args, kwargs
72
72
 
 
73
    def _get_partner_address_id_onchange_param(self, order):
 
74
        args = [
 
75
            None,
 
76
            order['partner_invoice_id'],
 
77
            order['partner_shipping_id'],
 
78
            order['partner_id'],
 
79
            order['shop_id'],
 
80
            ]
 
81
        kwargs = {'context': self.session.context}
 
82
        return args, kwargs
 
83
 
 
84
    def _get_fiscal_position_id_onchange_param(self, order):
 
85
        args = [
 
86
            None,
 
87
            order['fiscal_position'],
 
88
            order['tax_inc'],
 
89
            [],
 
90
            ]
 
91
        kwargs = {'context': self.session.context}
 
92
        return args, kwargs
 
93
 
73
94
    def _play_order_onchange(self, order):
74
95
        """ Play the onchange of the sale order
75
96
 
80
101
        :rtype: dict
81
102
        """
82
103
        sale_model = self.session.pool.get('sale.order')
83
 
 
 
104
    
84
105
        #Play partner_id onchange
85
106
        args, kwargs = self._get_shop_id_onchange_param(order)
86
107
        res = sale_model.onchange_shop_id(self.session.cr,
95
116
                                             *args,
96
117
                                             **kwargs)
97
118
        self.merge_values(order, res)
98
 
 
 
119
        
99
120
        if order.get('payment_method_id'):
100
121
            # apply payment method
101
122
            args, kwargs = self._get_payment_method_id_onchange_param(order)
103
124
                                                        self.session.uid,
104
125
                                                        *args,
105
126
                                                        **kwargs)
 
127
        #If the onchange return an False fiscal position
 
128
        #We do not merge it, because the onchange on the address
 
129
        #will not set correctly the fiscal position as the field
 
130
        #already exist in the order dict
 
131
        if res.get('value') and 'fiscal_position' in res['value']:
 
132
            if not res['fiscal_position']:
 
133
                res.pop('fiscal_position')
 
134
 
106
135
        self.merge_values(order, res)
107
136
 
108
137
        if order.get('workflow_process_id'):
113
142
                                                        *args,
114
143
                                                        **kwargs)
115
144
        self.merge_values(order, res)
 
145
        
 
146
        #Play onchange on address
 
147
        args, kwargs = self._get_partner_address_id_onchange_param(order)
 
148
        res = sale_model.onchange_address_id(self.session.cr,
 
149
                                             self.session.uid,
 
150
                                             *args,
 
151
                                             **kwargs)
 
152
        if res.get('value') and 'fiscal_position' in res['value']:
 
153
            order['fiscal_position'] = res['value']['fiscal_position']
 
154
        self.merge_values(order, res)
 
155
 
 
156
        if res.get('value') and 'tax_inc' in res['value']:
 
157
            order['tax_inc'] = res['value']['tax_inc']
 
158
        #Play onchange on fiscal position
 
159
        args, kwargs = self._get_fiscal_position_id_onchange_param(order)
 
160
        res = sale_model.fiscal_position_id_change(self.session.cr,
 
161
                                             self.session.uid,
 
162
                                             *args,
 
163
                                             **kwargs)
 
164
        self.merge_values(order, res)
116
165
        return order
117
166
 
118
167
    def _get_product_id_onchange_param(self, line, previous_lines, order):
139
188
        if not uos_qty:
140
189
            uos_qty = float(line.get('product_uom_qty', 0))
141
190
 
 
191
        context = self.session.context.copy()
 
192
 
 
193
        #This is need for the compatibility on the onchange
 
194
        #with the module sale_tax_inc_exc
 
195
        context['tax_inc'] = order.get('tax_inc')
 
196
 
142
197
        kwargs ={
143
198
            'qty': float(line.get('product_uom_qty', 0)),
144
199
            'uom': line.get('product_uom'),
152
207
            'packaging': line.get('product_packaging'),
153
208
            'fiscal_position': order.get('fiscal_position'),
154
209
            'flag': False,
155
 
            'context': self.session.context,
 
210
            'context': context,
156
211
            }
157
212
        return args, kwargs
158
213