~vauxoo/addons-vauxoo/7.0-acc_invo_vat_required_dev_luis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# -*- encoding: utf-8 -*-
from openerp.osv import fields, osv
from openerp.tools.translate import _

import decimal_precision as dp


class invoice_commission(osv.Model):

    def _get_commission(self, cr, uid, ids, name, args, context=None):
        res = {}
        for ai_brw in self.browse(cr, uid, ids):
            res[ai_brw.id] = 0.0
            if ai_brw.type in ['out_invoice', 'out_refound']:
                for iol_brw in ai_brw.invoice_line:
                    res[ai_brw.id] += iol_brw.commission
        return res

    def _get_invoice_line(self, cr, uid, ids, context=None):
        res = {}
        for line in self.pool.get('account.invoice.line').browse(cr, uid, ids,
                                                            context=context):
            res[line.invoice_id.id] = True
        return res.keys()

    _inherit = 'account.invoice'
    _columns = {
        'commission': fields.function(_get_commission, method=True,
              type='float', string='Commission',
              digits_compute=dp.get_precision(
                  'Commission'),
              store={
              'account.invoice': (lambda self, cr, uid, ids, c={}: ids,
                                  ['invoice_line', 'state'], 25),
              'account.invoice.line': (_get_invoice_line,
                                       ['gain', 'commission'], 15), })
    }


class invoice_commission_line(osv.Model):

    def get_abs_commission(self, cr, uid, ids, name, args, context=None):
        bar_obj = self.pool.get('baremo.book')
        res = {}
        for ail_brw in self.browse(cr, uid, ids):
            bar_id = ail_brw.company_id.bar_id and\
                ail_brw.company_id.bar_id.id or False
            print '******* bar_id ******', bar_id
            if not bar_id:
                # TODO: raise exception, levantar excepcion.
                # de momento esta asi como se muestra, enviando
                # un calculo igual a cero para cuando no haya
                # establecido en la company un tipo de baremo
                print 'NO HAY BAREMO EN LA COMPANY'
                res[ail_brw.id] = 0.0
                continue
            rate = ail_brw.gain
            rate_comm = bar_obj._calc_comm(
                cr, uid, ids, bar_id, rate, 0.0, context=None)['rate_comm']
            res[ail_brw.id] = ail_brw.price_subtotal * rate_comm / 100
            print 'res[%s] = subtotal(%s) * tasa(%s) => %s' % (ail_brw.id, ail_brw.price_subtotal, rate_comm, res[ail_brw.id])
        return res

    def get_gain(self, cr, uid, ids, name, args, context=None):
        res = {}
        product_price = 0
        product_pu = 0
        gain = 0
        for ail_brw in self.browse(cr, uid, ids):
            if ail_brw.product_id:
                product_cost = ail_brw.product_id.standard_price
                if product_cost != 0.0:
                    product_pu = ail_brw.price_unit
                    res[ail_brw.id] = ((
                        product_pu-product_cost)/product_cost)*100
                else:
                    raise osv.except_osv(_("User Error"), _(
                        "The product standard price can't be 0.0!"))
            else:
                res[ail_brw.id] = 0.0
        print 'get_gain'
        return res

    _inherit = 'account.invoice.line'
    _columns = {
        'gain': fields.function(get_gain, method=True, type='float',
            string='Gain', digits_compute=dp.get_precision('Commission'),
            store={
                'account.invoice.line': (lambda self, cr, uid, ids, c={}: ids,
                ['price_unit', 'price_subtotal', 'product_uom_qty'], 15),
            }),
        'commission': fields.function(get_abs_commission, method=True,
            type='float', string='Commission',
            digits_compute=dp.get_precision(
                'Commission'),
            store={
                'account.invoice.line': (lambda self, cr, uid, ids,
                                       c={}: ids, None, 25),
              }),
    }