~vauxoo/addons-vauxoo/7.0-purchase_requisition_contract_analyst-dev-1482-kty

« back to all changes in this revision

Viewing changes to commission_payment_V2/commission.py

  • Committer: Jose Morales
  • Date: 2013-05-16 15:44:16 UTC
  • mfrom: (544.1.9 addons-vauxoo)
  • Revision ID: jose@vauxoo.com-20130516154416-eago8zbxslb2scq8
 
[MERGE] Added new features in the user_story module to make easy the user story management, these improvements are:
         [IMP] Added a priority field in the user story to define the priority level for each user story for ease of handling and delivery
         [IMP] Added filter to show user story for priority level
         [IMP] Added automatically project in the task when you create a new task from user story view, this project is the seted in the user story
         [IMP] Added filter to show user story for state, to ease the user story management
         [IMP] Added sum in the planned hours field to control, the hours used for each user story, for we can see the progress in any project easily
         [IMP] Added translations in the user_story module
         [IMP] Added branch to clone field in the project task module
         
       [MERGE] Merge from trunk to apply pep8 and V7 migrate in all modules
       

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: utf-8 -*-
2
 
##############################################################################
3
 
#
4
 
#    OpenERP, Open Source Management Solution
5
 
#    Copyright (C) 2011 Vauxoo (<http://www.vauxoo.com>). All Rights Reserved
6
 
#    hbto@vauxoo.com / humbertoarocha@gmail.com
7
 
#
8
 
#    This program is free software: you can redistribute it and/or modify
9
 
#    it under the terms of the GNU General Public License as published by
10
 
#    the Free Software Foundation, either version 3 of the License, or
11
 
#    (at your option) any later version.
12
 
#
13
 
#    This program is distributed in the hope that it will be useful,
14
 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 
#    GNU General Public License for more details.
17
 
#
18
 
#    You should have received a copy of the GNU General Public License
19
 
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
 
#
21
 
##############################################################################
22
 
 
23
 
from openerp.osv import osv, fields
24
 
import pooler
25
 
import time
26
 
import math
27
 
import mx.DateTime
28
 
 
29
 
from tools import config
30
 
from openerp.tools.translate import _
31
 
 
32
 
import decimal_precision as dp
33
 
 
34
 
 
35
 
class commission_payment(osv.Model):
36
 
    """
37
 
    OpenERP Model : commission_payment
38
 
    """
39
 
 
40
 
    _name = 'commission.payment'
41
 
    _description = __doc__
42
 
 
43
 
    _columns = {
44
 
        'name': fields.char('Concepto de Comisiones', size=256, required=True, readonly=True, states={'draft': [('readonly', False)]}),
45
 
        'bar_id': fields.many2one('baremo.book', 'Baremo', required=True, readonly=True, states={'draft': [('readonly', False)]}),
46
 
        'date_start': fields.date('Desde', required=True, readonly=True, states={'draft': [('readonly', False)]}),
47
 
        'date_stop': fields.date('Hasta', required=True, readonly=True, states={'draft': [('readonly', False)]}),
48
 
        'total_comm': fields.float('Total a Pagar', digits_compute=dp.get_precision('Commission'), readonly=True, states={'write': [('readonly', False)]}),
49
 
        'ret_notes': fields.text('Notas para las Retenciones', readonly=True, states={'draft': [('readonly', False)], 'open': [('readonly', False)]}),
50
 
        'uninvoiced_ids': fields.one2many('commission.uninvoiced', 'commission_id', 'Transacciones sin Facturas', readonly=True, states={'write': [('readonly', False)]}),
51
 
        'sale_noids': fields.one2many('commission.sale.noid', 'commission_id', 'Articulos sin asociacion', readonly=True, states={'write': [('readonly', False)]}),
52
 
        'noprice_ids': fields.one2many('commission.noprice', 'commission_id', 'Productos sin precio de lista historico', readonly=True, states={'write': [('readonly', False)]}),
53
 
        'comm_line_ids': fields.one2many('commission.lines', 'commission_id', 'Comision por productos', readonly=True, states={'write': [('readonly', False)]}),
54
 
        'saleman_ids': fields.one2many('commission.saleman', 'commission_id', 'Total de Comisiones por Vendedor', readonly=True, states={'write': [('readonly', False)]}),
55
 
        'user_ids': fields.many2many('res.users', 'commission_users', 'commission_id', 'user_id', 'Vendedores', required=True, readonly=True, states={'draft': [('readonly', False)]}),
56
 
        'voucher_ids': fields.many2many('account.voucher', 'commission_account_voucher', 'commission_id', 'voucher_id', 'Vouchers', readonly=True, states={'draft': [('readonly', False)], 'open': [('readonly', False)], }),
57
 
        'comm_voucher_ids': fields.one2many('commission.voucher', 'commission_id', 'Vouchers afectados en esta comision', readonly=True, states={'write': [('readonly', False)]}),
58
 
        'comm_invoice_ids': fields.one2many('commission.invoice', 'commission_id', 'Facturas afectadas en esta comision', readonly=True, states={'write': [('readonly', False)]}),
59
 
        'comm_retention_ids': fields.one2many('commission.retention', 'commission_id', 'Facturas con Problemas de Retencion', readonly=True, states={'write': [('readonly', False)]}),
60
 
        'state': fields.selection([
61
 
            ('draft', 'Inicial'),
62
 
            ('open', 'En Proceso'),
63
 
            ('decide', 'Decidir'),
64
 
            ('write', 'Escribiendo'),
65
 
            ('done', 'Listo'),
66
 
            ('cancel', 'Cancelado')
67
 
        ], 'Estado', readonly=True),
68
 
    }
69
 
    _defaults = {
70
 
        'name': lambda *a: None,
71
 
        'total_comm': lambda *a: 0.00,
72
 
        'state': lambda *a: 'draft',
73
 
        'ret_notes': lambda *a: 'Las Facturas que se mencionan ya tienen un pago registrado, pero presentan problemas con una o mas de las retenciones que se indican en el cuadro, se ha tratado bajo los medios existentes de identificar cuales son los porcentajes de retenciones pero no ha sido posible, para generar la comision sobre el pago de las mismas, es necesario el conocimiento de estos valores, por lo que le increpamos a que contacte a sus asociados para obtener esta informacion, su falta no afectara el calculo de la comision pero retardara su ejecucion. Si considera que ha habido un error por favor hable sobre el tema con el personal Administrativo y de Sistemas para determinar las causas del mismo y encontrar una solucion. De otra forma haga caso omiso de este mensaje y su contenido',
74
 
    }
75
 
 
76
 
    def prepare(self, cr, uid, ids, context=None):
77
 
        """
78
 
        Este metodo recorre los elementos de account_voucher y verifica al menos
79
 
        tres (3) caracteristicas primordiales para continuar con los vouchers:
80
 
        estas caracteristicas son:
81
 
        - bank_rec_voucher: quiere decir que el voucher es de un deposito bancario
82
 
        (aqui aun no se ha considerado el trato que se le da a los cheques devueltos).
83
 
        - posted: quiere decir que el voucher ya se ha contabilizado,
84
 
        condicion necesaria pero no suficiente.
85
 
        - move_ids: si la longitud de estos es distinto de cero es porque este voucher es
86
 
        por completo valido, es decir, realmente tiene asientos contables registrados.
87
 
 
88
 
        Si estas tres (3) condiciones se cumplen entonces se puede proceder a realizar la revision
89
 
        de las lineas de pago.
90
 
 
91
 
 
92
 
        @param cr: cursor to database
93
 
        @param uid: id of current user
94
 
        @param ids: list of record ids to be process
95
 
        @param context: context arguments, like lang, time zone
96
 
 
97
 
        @return: return a result
98
 
        """
99
 
 
100
 
        self.write(cr, uid, ids, {
101
 
            'state': 'open',
102
 
        })
103
 
 
104
 
        #~ Consultas
105
 
        accounts = self.pool.get('account.account')
106
 
        vouchers = self.pool.get('account.voucher')
107
 
        payments = self.pool.get('account.voucher.line')
108
 
        invoices = self.pool.get('account.invoice')
109
 
        invoice_lines = self.pool.get('account.invoice.line')
110
 
        prod_prices = self.pool.get('product.historic.price')
111
 
        partner_ids = self.pool.get('res.partner')
112
 
 
113
 
        #~ Elementos Internos
114
 
        uninvoiced_pays = self.pool.get('commission.uninvoiced')
115
 
        sale_noids = self.pool.get('commission.sale.noid')
116
 
        noprice_ids = self.pool.get('commission.noprice')
117
 
        comm_line_ids = self.pool.get('commission.lines')
118
 
        saleman_ids = self.pool.get('commission.saleman')
119
 
        #~ users_ids = self.pool.get ('commission.users')
120
 
        comm_voucher_ids = self.pool.get('commission.voucher')
121
 
        comm_invoice_ids = self.pool.get('commission.invoice')
122
 
        comm_retention_ids = self.pool.get('commission.retention')
123
 
 
124
 
        list_price = 0.0
125
 
 
126
 
        ## Retenciones
127
 
        # de IVA
128
 
        ret_iva_lines = self.pool.get('account.wh.iva.line')
129
 
        # de ISLR
130
 
        ret_islr_lines = self.pool.get('islr.wh.doc.line')
131
 
        # de IM
132
 
        ret_im_lines = self.pool.get('account.wh.munici.line')
133
 
 
134
 
        # commissions = self.pool.get('commission.payment')
135
 
        commissions = self.browse(cr, uid, ids, context=None)
136
 
 
137
 
        for commission in commissions:
138
 
            # Desvincular lineas existentes, si las hubiere
139
 
            self._unlink(cr, uid, ids, context=None)
140
 
 
141
 
            date_start = commission.date_start
142
 
            date_stop = commission.date_stop
143
 
 
144
 
            #~ Obtener la lista de asesores/vendedores a los cuales se les hara el calculo de comisiones
145
 
            user_ids = []
146
 
            user_ids = [line.id for line in commission.user_ids]
147
 
 
148
 
            #~ Obtener la lista de vouchers que se seleccionaron manualmente en el widget many2many
149
 
            voucher_ids = []
150
 
            voucher_ids = [line.id for line in commission.voucher_ids]
151
 
 
152
 
            #~ Aqui verificamos que si no hay ningun voucher nosotros nos encargaremos de hacer la lista
153
 
            if not voucher_ids:
154
 
                # En esta busqueda restringimos que el voucher se haya contabilizado y que
155
 
                # sea un cobro bancario y este dentro de la fecha estipulada
156
 
                voucher_ids = vouchers.search(cr, uid, [('state', '=', 'posted'), (
157
 
                    'type', '=', 'receipt'), ('date', '>=', date_start), ('date', '<=', date_stop)])
158
 
 
159
 
                commission.write({
160
 
                    'voucher_ids': [(6, commission.id, voucher_ids)],
161
 
                }, context=None)
162
 
 
163
 
            for vid in voucher_ids:
164
 
                pay = vouchers.read(cr, uid, vid, [
165
 
                                    'name', 'date', 'amount', 'line_cr_ids', 'move_ids'], context=None)
166
 
                print 'pay: ', pay
167
 
                if pay['move_ids'] and pay['line_cr_ids']:
168
 
                    # Con la negacion de esta condicion se termina de realizar la revision de las lineas de pago que cumplen con las tres
169
 
                    # condiciones estipuladas inicialmente, ahora se debe
170
 
                    # proseguir con la revision de las lineas de pago
171
 
 
172
 
                    for pid in pay['line_cr_ids']:
173
 
                        payment_brw = payments.browse(
174
 
                            cr, uid, pid, context=None)
175
 
                        print 'payment_brw', payment_brw.id
176
 
                        pay_line_vendor = payment_brw.partner_id.user_id and payment_brw.partner_id.user_id.id or False
177
 
 
178
 
                        if pay_line_vendor in user_ids:
179
 
                            # Leer cada una de las lineas de los vouchers
180
 
                            pay_line = payments.read(cr, uid, pid, [
181
 
                                                     'name', 'invoice_id', 'amount', 'account_id', 'paid_comm'], context=None)
182
 
                            print 'pay_line ', pay_line
183
 
 
184
 
                            # Verificar si esta linea tiene factura y la
185
 
                            # comision del pago no se ha pagado
186
 
                            if pay_line['invoice_id'] and not pay_line['paid_comm']:
187
 
                                print 'ENTRO EN DOS (2)'
188
 
                                # Si esta aqui dentro es porque esta linea
189
 
                                # tiene una id valida de una factura.
190
 
                                inv_id = pay_line['invoice_id'][0]
191
 
                                inv = invoices.read(cr, uid, inv_id, [
192
 
                                                    'number', 'amount_untaxed', 'amount_total', 'invoice_line', 'date_invoice', 'partner_id'], context=None)
193
 
 
194
 
                                # Obtener % IVA
195
 
                                perc_IVA = round(((inv['amount_total'] / inv[
196
 
                                                 'amount_untaxed'])-1)*100, 0)
197
 
                                print 'perc_IVA: ', perc_IVA, '\n'
198
 
 
199
 
                                # Obtener el Valor de Porcentaje Retencion de
200
 
                                # esta factura
201
 
 
202
 
                                # Las maneras faciles son las dos primeras que el cliente no retenga y la factura sea solo de productos
203
 
                                # por lo que las retenciones de islr y im no aplican
204
 
                                # o que el cliente retenga el 100% (algo poco
205
 
                                # visto) y sea una factura de productos
206
 
                                no_ret_iva = True
207
 
                                no_ret_islr = True
208
 
                                no_ret_im = True
209
 
 
210
 
                                if abs(inv['amount_total'] - pay_line['amount']) <= 1.0:
211
 
                                    perc_Ret_IVA = 0.0
212
 
                                    perc_Ret_ISLR = 0.0
213
 
                                    perc_Ret_IM = 0.0
214
 
                                    no_ret_iva = False
215
 
                                    no_ret_islr = False
216
 
                                    no_ret_im = False
217
 
                                elif abs((inv['amount_untaxed']*(1+(perc_IVA/100)*(1-75.0/100))) - pay_line['amount']) <= 1.0:
218
 
                                    perc_Ret_IVA = 75.0
219
 
                                    perc_Ret_ISLR = 0.0
220
 
                                    perc_Ret_IM = 0.0
221
 
                                    no_ret_iva = False
222
 
                                    no_ret_islr = False
223
 
                                    no_ret_im = False
224
 
                                elif ret_iva_lines.search(cr, uid, [('invoice_id', '=', inv_id)]):
225
 
                                    lines_ret_iva = ret_iva_lines.search(
226
 
                                        cr, uid, [('invoice_id', '=', inv_id)])
227
 
                                    for line in lines_ret_iva:
228
 
                                        perc_Ret_IVA = ret_iva_lines.browse(
229
 
                                            cr, uid, line, context=None).wh_iva_rate
230
 
                                    no_ret_iva = False
231
 
 
232
 
                                if no_ret_islr == True and ret_islr_lines.search(cr, uid, [('invoice_id', '=', inv_id)]):
233
 
                                    lines_ret_islr = ret_islr_lines.search(
234
 
                                        cr, uid, [('invoice_id', '=', inv_id)])
235
 
                                    perc_Ret_ISLR = 0
236
 
                                    for line in lines_ret_islr:
237
 
                                        perc_Ret_ISLR += ret_islr_lines.browse(
238
 
                                            cr, uid, line, context=None).retencion_islr
239
 
                                    no_ret_islr = False
240
 
 
241
 
                                if no_ret_im == True and ret_im_lines.search(cr, uid, [('invoice_id', '=', inv_id)]):
242
 
                                    lines_ret_im = ret_im_lines.search(
243
 
                                        cr, uid, [('invoice_id', '=', inv_id)])
244
 
                                    perc_Ret_IM = 0
245
 
                                    for line in lines_ret_im:
246
 
                                        perc_Ret_IM += ret_im_lines.browse(
247
 
                                            cr, uid, line, context=None).wh_loc_rate
248
 
                                    no_ret_im = False
249
 
 
250
 
                                # Tratando de obtener la perc_Ret_IVA cuando se tiene el valor de impuesto municipal
251
 
                                # y considerando que el islr es cero, como en
252
 
                                # el caso de las empresas que solo cargan un
253
 
                                # impuesto social
254
 
 
255
 
                                if no_ret_im == False and no_ret_iva == True:
256
 
                                    for valor in [0, 75.0, 100.0]:
257
 
                                        if abs((inv['amount_untaxed']*(1+(perc_IVA/100)*(1-valor/100.0)-(perc_Ret_IM/100.0))) - pay_line['amount']) <= 1.0:
258
 
                                            perc_Ret_IVA = valor
259
 
                                            no_ret_iva = False
260
 
 
261
 
                                # Tratando de obtener la perc_Ret_IVA cuando se tiene el valor de impuesto slr
262
 
                                # y considerando que el im es cero, como en el
263
 
                                # caso de las empresas que solo cargan el islr
264
 
                                # y no el im
265
 
 
266
 
                                if no_ret_islr == False and no_ret_iva == True:
267
 
                                    for valor in [0, 75.0, 100.0]:
268
 
                                        if abs((inv['amount_untaxed']*(1+(perc_IVA/100)*(1-valor/100.0)-(perc_Ret_ISLR/100.0))) - pay_line['amount']) <= 1.0:
269
 
                                            perc_Ret_IVA = valor
270
 
                                            no_ret_iva = False
271
 
 
272
 
                                # Tratando de obtener la perc_Ret_IVA cuando se
273
 
                                # tienen tanto el islr como el im
274
 
 
275
 
                                if no_ret_islr == False and no_ret_im == False and no_ret_iva == True:
276
 
                                    for valor in [0, 75.0, 100.0]:
277
 
                                        if abs((inv['amount_untaxed']*(1+(perc_IVA/100)*(1-valor/100.0)-(perc_Ret_IM/100.0)-(perc_Ret_ISLR/100.0))) - pay_line['amount']) <= 1.0:
278
 
                                            perc_Ret_IVA = valor
279
 
                                            no_ret_iva = False
280
 
 
281
 
                                # Tratando de obtener el islr cuando se tienen
282
 
                                # tanto el perc_Ret_IVA como el im
283
 
                                if no_ret_islr == True and no_ret_im == False and no_ret_iva == False:
284
 
                                    for valor in [0, 2.0, 3.0, 5.0]:
285
 
                                        if abs((inv['amount_untaxed']*(1+(perc_IVA/100)*(1-perc_Ret_IVA/100.0)-(perc_Ret_IM/100.0)-(valor/100.0))) - pay_line['amount']) <= 1.0:
286
 
                                            perc_Ret_ISLR = valor
287
 
                                            no_ret_islr = False
288
 
 
289
 
                                # Obtener el vendedor del partner
290
 
                                saleman = partner_ids.read(cr, uid, inv['partner_id'][
291
 
                                                           0], ['user_id'], context=None)['user_id']
292
 
                                print 'SALEMAN (4) ', saleman
293
 
                                # si ha sido posible calcular u obtener todas las retenciones por los medios convencionales
294
 
                                # entonces se puede proceder con el calculo de retencion de las lineas, de lo contrario se
295
 
                                # genera una bitacora para que se obtengan las retenciones faltantes para proceder nuevament
296
 
                                # con la preparacion de las comisiones.
297
 
                                #~ if saleman:
298
 
                                if no_ret_islr == False and no_ret_im == False and no_ret_iva == False:
299
 
                                    print 'DENTRO DEL CALCULO PARA LAS RETENCIONES'
300
 
                                    # Revision de cada linea de factura
301
 
                                    # (productos)
302
 
                                    for l_id in inv['invoice_line']:
303
 
 
304
 
                                        # Obtener valores de las lineas
305
 
                                        inv_lin = invoice_lines.read(cr, uid, l_id, [
306
 
                                                                     'name', 'price_unit', 'price_subtotal', 'quantity', 'product_id'], context=None)
307
 
 
308
 
                                        #~ print 'Producto: ', inv_lin['name'], '\n'
309
 
 
310
 
                                        # Verificar si tiene producto asociado
311
 
                                        if inv_lin['product_id']:
312
 
                                            # Si esta aqui es porque hay un
313
 
                                            # producto asociado
314
 
                                            prod_id = inv_lin['product_id'][0]
315
 
 
316
 
                                            # se obtienen las listas de precio, vienen ordenadas por defecto, de acuerdo al objeto
317
 
                                            # product.historic de mayor a menor
318
 
                                            # fecha
319
 
                                            price_ids = prod_prices.search(
320
 
                                                cr, uid, [('product_id', '=', prod_id)])
321
 
 
322
 
                                            # Buscar Precio Historico de Venta de este
323
 
                                            # producto @ la fecha de
324
 
                                            # facturacion
325
 
                                            no_price = True
326
 
                                            for price_id in price_ids:
327
 
                                                if inv['date_invoice'] >= prod_prices.browse(cr, uid, price_id, context=None).name:
328
 
                                                    list_price = prod_prices.browse(
329
 
                                                        cr, uid, price_id, context=None).price
330
 
                                                    list_date = prod_prices.browse(
331
 
                                                        cr, uid, price_id, context=None).name
332
 
                                                    no_price = False
333
 
                                                    #~ print '[date_invoice : list_price : list_date]: [', inv['date_invoice'],' : ', list_price,' : ', list_date,'] \n'
334
 
                                                    break
335
 
                                            if no_price:
336
 
                                                # Determinar cuanto fue el descuento en este producto en aquel momento de la venta
337
 
                                                #~ if (inv_lin['price_subtotal']/inv_lin['quantity'])< inv_lin['price_unit']:
338
 
                                                if abs((inv_lin['price_subtotal']/inv_lin['quantity']) - inv_lin['price_unit']) > 0.05:
339
 
                                                    #~ # con esto se asegura que no se esta pasando por alto el descuento en linea
340
 
                                                    price_unit = round((inv_lin[
341
 
                                                                       'price_subtotal']/inv_lin['quantity']), 2)
342
 
                                                else:
343
 
                                                    price_unit = inv_lin[
344
 
                                                        'price_unit']
345
 
                                                if list_price:
346
 
                                                    dcto = round((
347
 
                                                        list_price - price_unit)*100/list_price, 1)
348
 
                                                rate_item = 10.0/100
349
 
 
350
 
                                                # Determinar dias entre la
351
 
                                                # emision de la factura del
352
 
                                                # producto y el pago del mismo
353
 
                                                pay_date = mx.DateTime.strptime(
354
 
                                                    pay['date'], '%Y-%m-%d')
355
 
                                                inv_date = mx.DateTime.strptime(
356
 
                                                    inv['date_invoice'], '%Y-%m-%d')
357
 
                                                emission_days = (
358
 
                                                    pay_date - inv_date).day
359
 
 
360
 
                                                # Teniendose dias y descuento por producto se procede a buscar en el baremo
361
 
                                                # el correspondiente valor de comision para el producto en cuestion.
362
 
                                                # se entra con el numero de
363
 
                                                # dias
364
 
 
365
 
                                                # Esta busqueda devuelve los dias ordenadados de menor a mayor dia, de acuerdo
366
 
                                                # con lo estipulado que se
367
 
                                                # ordenaria en el modulo baremo
368
 
                                                bid = 1
369
 
                                                print 'bid', bid
370
 
                                                comm_res = self.pool.get('baremo.book')._calc_comm(
371
 
                                                    cr, uid, bid, rate_item, emission_days)
372
 
 
373
 
                                                #############################################
374
 
                                                # CALCULO DE COMISION POR LINEA DE PRODUCTO #
375
 
                                                ###############################
376
 
 
377
 
                                                ## TODO: ESTE VALOR DEBE DESAPARECER DE AQUI
378
 
                                                #  este valor se debe sustituir por un valor que viene de la factura
379
 
                                                #  son solo demostrativos y no deberian quedar aqui luego de enviar
380
 
                                                #  este modulo a produccion.
381
 
                                                #
382
 
                                                ##
383
 
 
384
 
                                                PenBxLinea = pay_line['amount']*(inv_lin[
385
 
                                                                                 'price_subtotal']/inv['amount_untaxed'])
386
 
                                                #~ Fact_Sup = 1 - perc_Ret_ISLR/100 - perc_Ret_IM/100
387
 
                                                #~ Fact_Inf = 1 + (perc_IVA/100) * (1 - perc_Ret_IVA/100) - perc_Ret_ISLR/100 - perc_Ret_IM/100
388
 
 
389
 
                                                #~ comm_line =  PenBxLinea * Fact_Sup * (bar_dcto_comm / 100) / Fact_Inf
390
 
                                                comm_line = PenBxLinea * (
391
 
                                                    comm_res['rate_comm'] / 100)
392
 
                                                #~ comm_line =  PenBxLinea * (bar_dcto_comm / 100)
393
 
                                                # Generar las lineas de
394
 
                                                # comision por cada producto
395
 
                                                comm_line_ids.create(cr, uid, {
396
 
                                                    'commission_id': commission.id,
397
 
                                                    'voucher_id': vid,
398
 
                                                    'name':  pay['name'] and pay['name'] or '/',
399
 
                                                    'pay_date': pay['date'],
400
 
                                                    'pay_off': pay['amount'],
401
 
                                                    'concept': pid,
402
 
                                                    'invoice_id': pay_line['invoice_id'][0],
403
 
                                                    'invoice_num':  inv['number'],
404
 
                                                    'partner_id': inv['partner_id'][0],
405
 
                                                    'saleman_name': saleman[1],
406
 
                                                    'saleman_id': saleman[0],
407
 
                                                    'pay_inv': pay_line['amount'],
408
 
                                                    'inv_date': inv['date_invoice'],
409
 
                                                    'days': emission_days and emission_days or 0.0,
410
 
                                                    'inv_subtotal': inv['amount_untaxed'],
411
 
                                                    'item': inv_lin['name'],
412
 
                                                    #~ 'price_unit':  price_unit,
413
 
                                                    'price_subtotal':  inv_lin['price_subtotal'],
414
 
                                                    #~ 'price_list':  list_price,
415
 
                                                    #~ 'price_date': list_date ,
416
 
                                                    #~ 'perc_Ret_ISLR' : perc_Ret_ISLR,
417
 
                                                    #~ 'perc_Ret_IM' : perc_Ret_IM,
418
 
                                                    #~ 'perc_Ret_IVA' : perc_Ret_IVA,
419
 
                                                    #~ 'perc_IVA' : perc_IVA,
420
 
                                                    'rate_item': rate_item and rate_item or 0.0,
421
 
                                                    'rate_number': comm_res['rate_number'] and comm_res['rate_number'] or 0.0,
422
 
                                                    'timespan': comm_res['timespan'] and comm_res['timespan'] or 0.0,
423
 
                                                    'baremo_comm': comm_res['rate_comm'] and comm_res['rate_comm'] or 0.0,
424
 
                                                    'commission': comm_line and comm_line or 0.0,
425
 
                                                }, context=None)
426
 
                                                print 'CREANDO LINEAS DE COMISIONES (5)'
427
 
                                            else:
428
 
                                                # Se genera un lista de tuplas con las lineas, productos y sus correspondientes fechas
429
 
                                                # en las cuales no aparece precio de lista, luego al final se escriben los
430
 
                                                # valores en la correspondiente bitacora para su inspeccion.
431
 
                                                #~ print 'No hubo precio de lista para la fecha estipulada, hay que generar el precio en este producto \n'
432
 
                                                noprice_ids.create(cr, uid, {
433
 
                                                    'commission_id': commission.id,
434
 
                                                    'product_id': prod_id,
435
 
                                                    'date': inv['date_invoice'],
436
 
                                                    'invoice_num': inv['number'],
437
 
                                                }, context=None)
438
 
                                        else:
439
 
                                            # cuando una linea no tiene product_id asociado se escribe en una tabla para alertar al operador
440
 
                                            # sobre esta parte no llego a un acuerdo de si se podria permitir al operador cambiar las lineas
441
 
                                            # de la factura puesto que es un
442
 
                                            # asunto muy delicado.
443
 
                                            pass
444
 
                                            sale_noids.create(cr, uid, {
445
 
                                                'commission_id':   commission.id,
446
 
                                                'inv_line_id':   l_id,
447
 
                                            }, context=None)
448
 
                                else:
449
 
                                    print 'ENTRO EN EL CREATE (3)'
450
 
                                    # generar campo y vista donde se han de cargar las facturas que tienen problemas
451
 
                                    # se debe grabar los tres campos de las retenciones y el numero de la factura para
452
 
                                    # tener detalles concisos y porcion de
453
 
                                    # voucher de pago de la factura en cuestion
454
 
                                    comm_retention_ids.create(cr, uid, {
455
 
                                        'commission_id':   commission.id,
456
 
                                        'invoice_id': pay_line['invoice_id'][0],
457
 
                                        'voucher_id': vid,
458
 
                                        'date': pay['date'],
459
 
                                        'ret_iva': no_ret_iva,
460
 
                                        'ret_islr':  no_ret_islr,
461
 
                                        'ret_im': no_ret_im,
462
 
                                    }, context=None)
463
 
                            elif (pay_line['invoice_id'] == False and pay_line['paid_comm'] == False):
464
 
                                # Si esta aqui dentro es porque esta linea (transaccion) no tiene factura valida, se escribe
465
 
                                # entonces una linea en una vista donde se muestran las transacciones que no tienen factura
466
 
                                # asociada para su correccion si aplica. tampoco se ha pagado la comision del mismo
467
 
                                # solo se incluiran pagos que sean de cuentas cobrables, puesto que las de otra naturaleza,
468
 
                                # no tienen sentido mostrarlas aqui.
469
 
                                if accounts.read(cr, uid, pay_line['account_id'][0], ['type'], context=None)['type'] == 'receivable':
470
 
                                    uninvoiced_pays.create(cr, uid, {
471
 
                                        'commission_id':   commission.id,
472
 
                                        'payment_id':   pid,
473
 
                                    }, context=None)
474
 
                        else:
475
 
                            #~ No se hace nada por que el vendedor del pago que se esta consultando no se incorporo
476
 
                            #~ a la lista de asesores a los que se debe calcular la comision
477
 
                            pass
478
 
        # habiendo recorrido todos los vouchers, mostrado todos los elementos que necesitan correccion
479
 
        # se procede a agrupar las comisiones por vendedor para mayor facilidad
480
 
        # de uso
481
 
 
482
 
        # comm_line_ids.unlink(cr, uid, [line_ids.id for line_ids in
483
 
        # commission.comm_line_ids])
484
 
 
485
 
        # recargando las lineas que se han creado
486
 
        commissions = self.browse(cr, uid, ids, context=None)
487
 
        saleman_ids = self.pool.get('commission.saleman')
488
 
        comm_voucher_ids = self.pool.get('commission.voucher')
489
 
        comm_retention_ids = self.pool.get('commission.retention')
490
 
        #~ print 'antes de calcular totales\n'
491
 
 
492
 
        for commission in commissions:
493
 
            #~ # recoge todos los vendedores y suma el total de sus comisiones
494
 
            sale_comm = {}
495
 
            #~ # ordena en un arbol todas las lineas de comisiones de producto
496
 
            criba = {}
497
 
            for comm_line in commission.comm_line_ids:
498
 
#~
499
 
                vendor_id = comm_line.saleman_id.id
500
 
                voucher_id = comm_line.voucher_id.id
501
 
                invoice_id = comm_line.invoice_id.id
502
 
                comm_line_id = comm_line.id
503
 
                #~
504
 
                if not vendor_id in sale_comm.keys():
505
 
                    sale_comm[vendor_id] = [comm_line.saleman_name, 0.0]
506
 
                sale_comm[vendor_id][1] += comm_line.commission
507
 
                #~
508
 
                if not vendor_id in criba.keys():
509
 
                    criba[vendor_id] = {}
510
 
                    #~
511
 
                #~ if not voucher_id in criba[vendor_id].keys():
512
 
                    #~ criba[vendor_id][voucher_id] = [comm_line.pay_date,{}]
513
 
                    #~
514
 
                #~ if not invoice_id in criba[vendor_id][voucher_id][1].keys():
515
 
                    #~ criba[vendor_id][voucher_id][1][invoice_id] = {}
516
 
                    #~
517
 
                #~ if len(criba[vendor_id][voucher_id][1][invoice_id])==0:
518
 
                    #~ criba[vendor_id][voucher_id][1][invoice_id]=[[], comm_line.pay_inv, comm_line.perc_Ret_IVA, comm_line.perc_Ret_ISLR, comm_line.perc_Ret_IM]
519
 
                #~
520
 
                #~ criba[vendor_id][voucher_id][1][invoice_id][0].append(comm_line_id)
521
 
#~
522
 
            #~ ## escribir el total para cada vendedor encontrado
523
 
            total_comm = 0
524
 
            for vendor_key in criba.keys():
525
 
                vendor_id = saleman_ids.create(cr, uid, {
526
 
                    'commission_id': commission.id,
527
 
                    'saleman_id': vendor_key,
528
 
                    'saleman_name':  sale_comm[vendor_key][0],
529
 
                    'comm_total': sale_comm[vendor_key][1],
530
 
                }, context=None)
531
 
#~
532
 
                total_comm += sale_comm[vendor_key][1]
533
 
#~
534
 
                for voucher_key in criba[vendor_key].keys():
535
 
                    voucher_id = comm_voucher_ids.create(cr, uid, {
536
 
                        'commission_id': commission.id,
537
 
                        'comm_sale_id': vendor_id,
538
 
                        'voucher_id':  voucher_key,
539
 
                        'date':  criba[vendor_key][voucher_key][0],
540
 
                    }, context=None)
541
 
 
542
 
                    for inv_key in criba[vendor_key][voucher_key][1].keys():
543
 
                        invoice_id = comm_invoice_ids.create(cr, uid, {
544
 
                            'commission_id': commission.id,
545
 
                            'comm_voucher_id': voucher_id,
546
 
                            'invoice_id':  inv_key,
547
 
                            'pay_inv':  criba[vendor_key][voucher_key][1][inv_key][1],
548
 
                            'ret_iva':  criba[vendor_key][voucher_key][1][inv_key][2],
549
 
                            'ret_islr':  criba[vendor_key][voucher_key][1][inv_key][3],
550
 
                            'ret_im':  criba[vendor_key][voucher_key][1][inv_key][4],
551
 
                        }, context=None)
552
 
 
553
 
                        for id in criba[vendor_key][voucher_key][1][inv_key][0]:
554
 
                            comm_line_ids.write(cr, uid, id, {
555
 
                                'comm_invoice_id': invoice_id,
556
 
                            }, context=None)
557
 
            #~
558
 
            self.write(cr, uid, ids, {
559
 
                'total_comm': total_comm,
560
 
            })
561
 
        #~
562
 
        result = True
563
 
        return result
564
 
 
565
 
    def pre_process(self, cr, uid, ids, context={}):
566
 
        commissions = self.browse(cr, uid, ids, context=None)
567
 
        for commission in commissions:
568
 
            self.prepare(cr, uid, ids, context=None)
569
 
 
570
 
            if commission.comm_line_ids:
571
 
                self.write(cr, uid, ids, {
572
 
                    'state': 'decide',
573
 
                })
574
 
            else:
575
 
                raise osv.except_osv(_('Atencion !'), _(
576
 
                    'No Existen Lineas de Comision x Producto que procesar !!!'))
577
 
 
578
 
            #~ if not commission.noprice_ids:
579
 
                #~ self.write(cr, uid, ids, {
580
 
                        #~ 'state': 'decide',
581
 
                    #~ })
582
 
            #~ else:
583
 
                #~ raise osv.except_osv(_('Atencion !'), _('Debe primero solucionar el asunto de los Productos sin Listas de Precio \npara las fechas especificadas antes de continuar'))
584
 
            #~
585
 
 
586
 
    def delete(self, cr, uid, ids, context={}):
587
 
        commissions = self.browse(cr, uid, ids, context=None)
588
 
 
589
 
        for commission in commissions:
590
 
            self._unlink(cr, uid, ids, context=None)
591
 
            self.write(cr, uid, ids, {
592
 
                'state': 'draft',
593
 
                'total_comm': None,
594
 
            })
595
 
        return True
596
 
 
597
 
    def _unlink(self, cr, uid, ids, context={}):
598
 
 
599
 
        uninvoiced_pays = self.pool.get('commission.uninvoiced')
600
 
        sale_noids = self.pool.get('commission.sale.noid')
601
 
        noprice_ids = self.pool.get('commission.noprice')
602
 
        comm_line_ids = self.pool.get('commission.lines')
603
 
        saleman_ids = self.pool.get('commission.saleman')
604
 
        #~ users_ids = self.pool.get ('commission.users')
605
 
        comm_voucher_ids = self.pool.get('commission.voucher')
606
 
        comm_invoice_ids = self.pool.get('commission.invoice')
607
 
        comm_retention_ids = self.pool.get('commission.retention')
608
 
 
609
 
        commissions = self.browse(cr, uid, ids, context=None)
610
 
 
611
 
        for commission in commissions:
612
 
            ###
613
 
            # Desvincular todos los elementos que esten conectados a este calculo de comisiones
614
 
            # * Desvinculando los pagos sin facturas
615
 
            #~ uninvoiced_pays.unlink(cr, uid, [line.id for line in commission.uninvoiced_ids])
616
 
            # * Desvinculando los articulos sin id
617
 
            #~ sale_noids.unlink(cr, uid, [line.id for line in commission.sale_noids])
618
 
            # * Desvinculando los productos sin fecha
619
 
            #~ noprice_ids.unlink(cr, uid, [line.id for line in commission.noprice_ids])
620
 
            # * Desvinculando las lineas de comisiones
621
 
            comm_line_ids.unlink(cr, uid, [
622
 
                                 line.id for line in commission.comm_line_ids])
623
 
            # * Desvinculando los totales por vendedor
624
 
            saleman_ids.unlink(cr, uid, [
625
 
                               line.id for line in commission.saleman_ids])
626
 
            # * Desvinculando los vendedores
627
 
            #~ users_ids.unlink(cr, uid, [line.id for line in commission.users_ids])
628
 
            # * Desvinculando los vouchers afectados
629
 
            #~ comm_voucher_ids.unlink(cr, uid, [line.id for line in commission.comm_voucher_ids])
630
 
            # * Desvinculando los vouchers afectados
631
 
            #~ comm_invoice_ids.unlink(cr, uid, [line.id for line in commission.comm_invoice_ids])
632
 
            # * Desvinculando las facturas con problemas de retenciones
633
 
            #~ comm_retention_ids.unlink(cr, uid, [line.id for line in commission.comm_retention_ids])
634
 
            ###
635
 
 
636
 
    def decide(self, cr, uid, ids, context={}):
637
 
        commissions = self.browse(cr, uid, ids, context=None)
638
 
        avl = self.pool.get('account.voucher.line')
639
 
        # escribir en el avl el estado buleano de paid_comm a True para indicar
640
 
        # que ya esta comision se esta pagando
641
 
        for commission in commissions:
642
 
            avl.write(cr, uid, [line.concept.id for line in commission.comm_line_ids], {
643
 
                'paid_comm': True,
644
 
            })
645
 
 
646
 
        self.write(cr, uid, ids, {
647
 
            'state': 'done',
648
 
        })
649
 
 
650
 
    def going_back(self, cr, uid, ids, context={}):
651
 
        self.write(cr, uid, ids, {
652
 
            'state': 'open',
653
 
        })
654
 
 
655
 
 
656
 
 
657
 
class commission_uninvoiced(osv.Model):
658
 
    """
659
 
    Commission Payment Uninvoiced : commission_uninvoiced
660
 
    """
661
 
 
662
 
    _name = 'commission.uninvoiced'
663
 
 
664
 
    _columns = {
665
 
        'name': fields.char('Comentario', size=256),
666
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
667
 
        'payment_id': fields.many2one('account.voucher.line', 'Descripcion de Transaccion'),
668
 
    }
669
 
    _defaults = {
670
 
        'name': lambda *a: None,
671
 
    }
672
 
 
673
 
 
674
 
class commission_sale_noid(osv.Model):
675
 
    """
676
 
    Commission Payment : commission_sale_noid
677
 
    """
678
 
 
679
 
    _name = 'commission.sale.noid'
680
 
 
681
 
    _columns = {
682
 
        'name': fields.char('Comentario', size=256),
683
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
684
 
        'inv_line_id': fields.many2one('account.invoice.line', 'Descripcion de Articulo'),
685
 
    }
686
 
    _defaults = {
687
 
        'name': lambda *a: None,
688
 
    }
689
 
 
690
 
 
691
 
class commission_noprice(osv.Model):
692
 
    """
693
 
    Commission Payment : commission_sale_noid
694
 
    """
695
 
 
696
 
    _name = 'commission.noprice'
697
 
    _order = 'product_id'
698
 
 
699
 
    _columns = {
700
 
        'name': fields.char('Comentario', size=256),
701
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
702
 
        'product_id': fields.many2one('product.product', 'Producto'),
703
 
        'date': fields.date('Fecha'),
704
 
        'invoice_num': fields.integer('Numero de Factura'),
705
 
 
706
 
    }
707
 
    _defaults = {
708
 
        'name': lambda *a: None,
709
 
    }
710
 
 
711
 
 
712
 
class commission_lines(osv.Model):
713
 
    """
714
 
    Commission Payment : commission_lines
715
 
    """
716
 
 
717
 
    _name = 'commission.lines'
718
 
    _order = 'saleman_id'
719
 
 
720
 
    _columns = {
721
 
        'commission_id': fields.many2one('commission.payment', 'Comision', required=True),
722
 
        'name': fields.char('Transaccion', size=256, required=True),
723
 
        'pay_date': fields.date('Fecha', required=True),
724
 
        'pay_off': fields.float('Pago', digits_compute=dp.get_precision('Commission')),
725
 
 
726
 
        'voucher_id': fields.many2one('account.voucher', 'Voucher'),
727
 
 
728
 
        'concept': fields.many2one('account.voucher.line', 'Concepto'),
729
 
        'invoice_id': fields.many2one('account.invoice', 'Doc.'),
730
 
        'invoice_num': fields.char('Doc.', size=256),
731
 
        'partner_id': fields.many2one('res.partner', 'Empresa'),
732
 
        'saleman_name': fields.char('Vendedor', size=256, required=True),
733
 
        'saleman_id': fields.many2one('res.users', 'Vendedor', required=True),
734
 
        'pay_inv': fields.float('Abono Fact.', digits_compute=dp.get_precision('Commission')),
735
 
 
736
 
        'inv_date': fields.date('Fecha Doc.'),
737
 
        'days': fields.float('Dias', digits_compute=dp.get_precision('Commission')),
738
 
 
739
 
        'inv_subtotal': fields.float('SubTot. Doc.', digits_compute=dp.get_precision('Commission')),
740
 
 
741
 
        'item': fields.char('Item', size=256, required=True),
742
 
        'price_unit': fields.float('Prec. Unit.', digits_compute=dp.get_precision('Commission')),
743
 
        'price_subtotal': fields.float('SubTot. Item', digits_compute=dp.get_precision('Commission')),
744
 
 
745
 
        'price_list': fields.float('Precio Lista', digits_compute=dp.get_precision('Commission')),
746
 
        'price_date': fields.date('Fecha Lista'),
747
 
 
748
 
 
749
 
        #~ 'perc_Ret_ISLR': fields.float('Ret ISLR (%)', digits_compute=dp.get_precision('Commission')),
750
 
        #~ 'perc_Ret_IM': fields.float('Ret IM (%)', digits_compute=dp.get_precision('Commission')),
751
 
        #~ 'perc_Ret_IVA': fields.float('Ret IVA (%)', digits_compute=dp.get_precision('Commission')),
752
 
        #~ 'perc_IVA': fields.float('IVA (%)', digits_compute=dp.get_precision('Commission')),
753
 
 
754
 
        'rate_item': fields.float('Dcto. (%)', digits_compute=dp.get_precision('Commission')),
755
 
 
756
 
        'rate_number': fields.float('Bar. Rate (%)', digits_compute=dp.get_precision('Commission')),
757
 
        'timespan': fields.float('Bar. Dias', digits_compute=dp.get_precision('Commission')),
758
 
        'baremo_comm': fields.float('Baremo %Comm.', digits_compute=dp.get_precision('Commission')),
759
 
        'commission': fields.float('Comm. / Item', digits_compute=dp.get_precision('Commission')),
760
 
    }
761
 
    _defaults = {
762
 
        'name': lambda *a: None,
763
 
    }
764
 
 
765
 
 
766
 
class commission_saleman(osv.Model):
767
 
    """
768
 
    Commission Payment : commission_saleman
769
 
    """
770
 
 
771
 
    _name = 'commission.saleman'
772
 
    _order = 'saleman_name'
773
 
 
774
 
    _columns = {
775
 
        'name': fields.char('Comentario', size=256),
776
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
777
 
        'saleman_name': fields.char('Vendedor', size=256, required=True),
778
 
        'saleman_id': fields.many2one('res.users', 'Vendedor', required=True),
779
 
        'comm_total': fields.float('Comision a pagar', digits_compute=dp.get_precision('Commission')),
780
 
        'comm_voucher_ids': fields.one2many('commission.voucher', 'comm_sale_id', 'Vouchers afectados en esta comision', required=False),
781
 
    }
782
 
    _defaults = {
783
 
        'name': lambda *a: None,
784
 
    }
785
 
 
786
 
 
787
 
class commission_voucher(osv.Model):
788
 
    """
789
 
    Commission Payment : commission_voucher
790
 
    """
791
 
 
792
 
    _name = 'commission.voucher'
793
 
    _order = 'date'
794
 
 
795
 
    _columns = {
796
 
        'name': fields.char('Comentario', size=256),
797
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
798
 
        'comm_sale_id': fields.many2one('commission.saleman', 'Vendedor'),
799
 
        'voucher_id': fields.many2one('account.voucher', 'Voucher'),
800
 
        'comm_invoice_ids': fields.one2many('commission.invoice', 'comm_voucher_id', 'Facturas afectadas en esta comision', required=False),
801
 
        'date': fields.date('Fecha'),
802
 
    }
803
 
    _defaults = {
804
 
        'name': lambda *a: None,
805
 
    }
806
 
 
807
 
 
808
 
class commission_invoice(osv.Model):
809
 
    """
810
 
    Commission Payment : commission_invoice
811
 
    """
812
 
 
813
 
    _name = 'commission.invoice'
814
 
    _order = 'invoice_id'
815
 
 
816
 
    _columns = {
817
 
        'name': fields.char('Comentario', size=256),
818
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
819
 
        'comm_voucher_id': fields.many2one('commission.voucher', 'Voucher'),
820
 
        'invoice_id': fields.many2one('account.invoice', 'Factura'),
821
 
        'comm_line_ids': fields.one2many('commission.lines', 'comm_invoice_id', 'Comision por productos', required=False),
822
 
        'pay_inv': fields.float('Abono Fact.', digits_compute=dp.get_precision('Commission')),
823
 
        'ret_iva': fields.float('% Ret. IVA', digits_compute=dp.get_precision('Commission')),
824
 
        'ret_islr': fields.float('% Ret. ISLR', digits_compute=dp.get_precision('Commission')),
825
 
        'ret_im': fields.float('% Ret. IM', digits_compute=dp.get_precision('Commission')),
826
 
    }
827
 
    _defaults = {
828
 
        'name': lambda *a: None,
829
 
    }
830
 
 
831
 
 
832
 
class commission_lines_2(osv.Model):
833
 
    """
834
 
    Commission Payment : commission_lines_2
835
 
    """
836
 
 
837
 
    _inherit = 'commission.lines'
838
 
 
839
 
    _columns = {
840
 
        'comm_invoice_id': fields.many2one('commission.invoice', 'Factura Relacional Interna'),
841
 
    }
842
 
 
843
 
 
844
 
class commission_retention(osv.Model):
845
 
    """
846
 
    Commission Payment : commission_retention
847
 
    """
848
 
 
849
 
    _name = 'commission.retention'
850
 
    _order = 'invoice_id'
851
 
 
852
 
    _columns = {
853
 
        'name': fields.char('Comentario', size=256),
854
 
        'commission_id': fields.many2one('commission.payment', 'Comision'),
855
 
        'invoice_id': fields.many2one('account.invoice', 'Factura'),
856
 
        'voucher_id': fields.many2one('account.voucher', 'Pagado con...'),
857
 
        'date': fields.date('Fecha'),
858
 
        'ret_iva': fields.boolean('Ret. IVA'),
859
 
        'ret_islr': fields.boolean('Ret. ISLR'),
860
 
        'ret_im': fields.boolean('Ret. IM'),
861
 
    }
862
 
    _defaults = {
863
 
        'name': lambda *a: None,
864
 
    }
865
 
 
866
 
 
867
 
class VoucherLines(osv.Model):
868
 
    _inherit = 'account.voucher.line'
869
 
 
870
 
    _columns = {
871
 
        'paid_comm': fields.boolean('Comision Pagada?'),
872
 
        'partner_id': fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner', store=True),
873
 
    }
874
 
    _defaults = {
875
 
        'paid_comm': lambda *a: False,
876
 
    }
877
 
 
878
 
 
879
 
#~ class commission_users(osv.Model):
880
 
    #~ _name='commission.users'
881
 
    #~ _columns={
882
 
        #~ 'name':fields.char('Nombre', size=8),
883
 
        #~ 'commission_id':fields.many2one('commission.payment', 'Comision'),
884
 
        #~ 'user_id': fields.many2one('res.users', 'Vendedor', required=True),
885
 
    #~ }
886
 
#~ commission_users()