170
172
if context.get('invoice_cancel',False):
171
product_obj.write(cr,uid,[product_brw.id],{'cost_ult':cost,'date_cost_ult':date ,'qty_ult':aux.get(i) and aux.get(i)[1] ,'ult_om':aux.get(i)[-1] or [] ,'date_ult_om': date },context=context)
173
product_obj.write(cr, uid, [product_brw.id],
175
'date_cost_ult':date ,
176
'qty_ult':aux.get(i) \
178
'ult_om':aux.get(i)[-1] or [] ,
179
'date_ult_om': date },
173
182
if product_brw.property_cost_structure and product_brw.cost_ult > 0:
174
product_obj.write(cr,uid,[product_brw.id],{'cost_ult':cost,'date_cost_ult':date ,'qty_ult':aux.get(i) and aux.get(i)[1] , 'cost_ant':product_brw.cost_ult ,'qty_ant':product_brw.qty_ult ,'date_cost_ant':product_brw.date_cost_ult ,'ult_om':aux.get(i)[-1] or [] ,'date_ult_om': date , 'ant_om':product_brw.ult_om and product_brw.ult_om.id or [],'date_ant_om':product_brw.date_ult_om },context=context)
183
product_obj.write(cr, uid, [product_brw.id],
185
'date_cost_ult':date ,
186
'qty_ult':aux.get(i) \
188
'cost_ant':product_brw.cost_ult,
189
'qty_ant':product_brw.qty_ult ,
190
'date_cost_ant':product_brw.date_cost_ult ,
191
'ult_om':aux.get(i)[-1] or [] ,
192
'date_ult_om': date ,
193
'ant_om':product_brw.ult_om \
194
and product_brw.ult_om.id \
196
'date_ant_om':product_brw.date_ult_om },
176
product_obj.write(cr,uid,[product_brw.id],{'cost_ult':cost,'date_cost_ult':date,'qty_ult':aux.get(i) and aux.get(i)[1] ,'ult_om':aux.get(i)[-1] or [] ,'date_ult_om': date },context=context)
199
product_obj.write(cr, uid, [product_brw.id],
201
'date_cost_ult':date,
202
'qty_ult':aux.get(i) \
204
'ult_om':aux.get(i)[-1] or [] ,
205
'date_ult_om': date },context=context)
179
208
def update_dictionary(self,cr,uid,ids,dict,inv_ids,purchase,context=None):
283
329
invoice_obj = self.pool.get('account.invoice')
284
330
invoice_line_obj = self.pool.get('account.invoice.line')
285
331
invo_brw = invoice_obj.browse(cr,uid,d[0],context={})
286
if invo_brw.type == 'out_refund' and invo_brw.parent_id and invo_brw.parent_id.id in invo_cost:
287
lista.append((d[3], d[3] * invo_cost.get(invo_brw.parent_id.id), invo_cost.get(invo_brw.parent_id.id) or 0, d[4],d[0],d[5] ))
288
invoice_line_obj.write(cr,uid,d[6],{'aux_financial':invo_cost.get(invo_brw.parent_id.id)},context=context)
332
if invo_brw.type == 'out_refund' and \
333
invo_brw.parent_id and invo_brw.parent_id.id in invo_cost:
334
lista.append((d[3], d[3] * invo_cost.get(invo_brw.parent_id.id),
335
invo_cost.get(invo_brw.parent_id.id) or 0, d[4],d[0],d[5] ))
336
invoice_line_obj.write(cr, uid, d[6],
337
{'aux_financial':invo_cost.get(invo_brw.parent_id.id)},
291
if invo_brw.type == 'out_refund' and invo_brw.parent_id and invo_brw.parent_id.id not in invo_cost:
341
if invo_brw.type == 'out_refund' \
342
and invo_brw.parent_id and invo_brw.parent_id.id \
292
344
inv_ids = invoice_obj.search(cr,uid,[('invoice_line.product_id','=', product_id),
293
345
('type','=','in_invoice'),
294
346
('company_id','=',company_id),
295
347
('date_invoice','<',invo_brw.parent_id.date_invoice)],
296
348
order='date_invoice')
298
inv_ids and [lista.append((d[3],(d[3] * (line.aux_financial/line.aux_qty) ) , (line.aux_financial/line.aux_qty), d[4] ,d[0],d[5])) \
299
for invo in invoice_obj.browse(cr,uid,[inv_ids[-1]],context=context) for line in invo.invoice_line if line and \
300
line.product_id and \
301
line.product_id.id == product_id ]
350
inv_ids and [lista.append((d[3],
351
line.aux_qty and (d[3] * (line.aux_financial/line.aux_qty) ) ,
352
line.aux_qty and (line.aux_financial/line.aux_qty),
354
for invo in invoice_obj.browse(cr, uid, [inv_ids[-1]],
356
for line in invo.invoice_line if line and \
357
line.product_id and \
358
line.product_id.id == product_id ]
302
359
#~ lista and invoice_line_obj.write(cr,uid,d[6],{'aux_financial':lista and lista[2]},context=context)
362
419
aux_cancel = False
363
[(dic_comp.update({i.id:[]}),dic_vent.update({i.id:[]}) , dic_nc_com.update({i.id:[]}) ,aux_dic_vent.update({i.id:[]}) ,aux_dic_nc_vent.update({i.id:[]}) , dic_nc_vent.update({i.id:[]})) for i in products]
420
[(dic_comp.update({i.id:[]}), dic_vent.update({i.id:[]}),
421
dic_nc_com.update({i.id:[]}), aux_dic_vent.update({i.id:[]}),
422
aux_dic_nc_vent.update({i.id:[]}), dic_nc_vent.update({i.id:[]})) for i in products]
364
424
product_brw = product_obj.browse(cr,uid,dic_comp.keys(),context=context)
365
425
date_aux = [i.date_cost_ult for i in product_brw if i.cost_ult > 0]
366
426
date_aux.sort(reverse=True)
367
products_date = date_aux and date and DateTime(date) < DateTime(date_aux[-1]) and [date] or date_aux and DateTime(date_aux[-1]) < DateTime(date) and [date_aux[-1]] or [date]
427
products_date = date_aux and date \
428
and DateTime(date) < DateTime(date_aux[-1]) \
429
and [date] or date_aux \
430
and DateTime(date_aux[-1]) < DateTime(date) \
431
and [date_aux[-1]] or [date]
368
432
products_date.sort(reverse=True)
369
433
#~ Select quantity and cost of product from supplier invoice
370
434
if not context.get('invoice_cancel'):
371
[dic_comp[i.id].append((False,i.cost_ult,(i.cost_ult * i.qty_ult ), i.qty_ult, i.ult_om and i.ult_om.id,i.date_cost_ult,False,0,0 )) \
372
for i in product_brw if i.cost_ult > 0 and DateTime(products_date[-1]) >= DateTime(i.date_cost_ult) ]
435
[dic_comp[i.id].append((False, i.cost_ult,
436
(i.cost_ult * i.qty_ult ),
437
i.qty_ult, i.ult_om and \
438
i.ult_om.id,i.date_cost_ult,False,0,0 )) \
439
for i in product_brw if i.cost_ult > 0 \
440
and DateTime(products_date[-1]) >= DateTime(i.date_cost_ult) ]
375
443
#~ -------------------------- Search invoices with products selected --------------------------------
376
invo_com_ids = self.search_invoice(cr,uid,ids,dic_comp,'in_invoice',period_id,company_id,products_date and products_date[0] or False,context=context)
379
invo_ven_ids = self.search_invoice(cr,uid,ids,dic_vent,'out_invoice',period_id,company_id,products_date and products_date[0] or False,context=context)
382
invo_nc_com_ids = self.search_invoice(cr,uid,ids,dic_nc_com,'in_refund',period_id,company_id,products_date and products_date[0] or False,context=context)
385
invo_nc_ven_ids = self.search_invoice(cr,uid,ids,dic_nc_vent,'out_refund',period_id,company_id,products_date and products_date[0] or False,context=context)
444
invo_com_ids = self.search_invoice(cr, uid, ids, dic_comp,
445
'in_invoice', period_id,
446
company_id, products_date \
447
and products_date[0] \
448
or False,context=context)
451
invo_ven_ids = self.search_invoice(cr, uid, ids, dic_vent,
452
'out_invoice', period_id,
453
company_id, products_date \
454
and products_date[0] \
455
or False,context=context)
458
invo_nc_com_ids = self.search_invoice(cr, uid, ids, dic_nc_com,
459
'in_refund', period_id,
460
company_id, products_date \
461
and products_date[0] \
462
or False,context=context)
465
invo_nc_ven_ids = self.search_invoice(cr, uid, ids, dic_nc_vent,
466
'out_refund', period_id,
467
company_id, products_date \
468
and products_date[0] \
469
or False,context=context)
387
471
#~ ------------- Generate a dict with line values of invoices by product -------------------------
389
dic_comp = invo_com_ids and self.update_dictionary(cr,uid,ids,dic_comp,invo_com_ids,True,context=context) or dic_comp
391
dic_vent = invo_ven_ids and self.update_dictionary(cr,uid,ids,dic_vent,invo_ven_ids,False,context=context) or dic_vent
392
aux_dic_vent = invo_ven_ids and self.update_dictionary(cr,uid,ids,aux_dic_vent,invo_ven_ids,False,context=context) or aux_dic_vent
395
dic_nc_com = invo_nc_com_ids and self.update_dictionary(cr,uid,ids,dic_nc_com,invo_nc_com_ids,False,context=context) or dic_nc_com
473
dic_comp = invo_com_ids and \
474
self.update_dictionary(cr, uid, ids, dic_comp,
476
context=context) or dic_comp
478
dic_vent = invo_ven_ids and \
479
self.update_dictionary(cr, uid, ids, dic_vent,
480
invo_ven_ids,False,context=context) or dic_vent
482
aux_dic_vent = invo_ven_ids and \
483
self.update_dictionary(cr, uid, ids, aux_dic_vent,
484
invo_ven_ids,False,context=context) or aux_dic_vent
486
dic_nc_com = invo_nc_com_ids and \
487
self.update_dictionary(cr, uid, ids, dic_nc_com,
488
invo_nc_com_ids,False,context=context) or dic_nc_com
398
dic_nc_vent = invo_nc_ven_ids and self.update_dictionary(cr,uid,ids,dic_nc_vent,invo_nc_ven_ids,True,context=context) or dic_nc_vent
399
aux_dic_nc_vent = invo_nc_ven_ids and self.update_dictionary(cr,uid,ids,aux_dic_nc_vent,invo_nc_ven_ids,True,context=context) or aux_dic_nc_vent
491
dic_nc_vent = invo_nc_ven_ids and \
492
self.update_dictionary(cr, uid, ids, dic_nc_vent,
493
invo_nc_ven_ids,True,context=context) or dic_nc_vent
495
aux_dic_nc_vent = invo_nc_ven_ids and \
496
self.update_dictionary(cr, uid, ids,
497
aux_dic_nc_vent,invo_nc_ven_ids,
498
True,context=context) or aux_dic_nc_vent
402
if dic_comp.get(i,False) and len(dic_comp[i]) > 0:
500
for i in dic_comp:#Ciclo por cada uno de los productos
501
if dic_comp.get(i,False): #Validar valores en la compras
404
503
if context.get('invoice_cancel'):
405
dic_comp[i] and dic_comp[i][0] and (dic_comp[i][0][7] - dic_comp[i][0][2]) >= 0 and dic_comp[i].insert(0,(False,
406
( (dic_comp[i][0][7] - dic_comp[i][0][2] )/ ( (dic_comp[i][0][8] - dic_comp[i][0][3]) > 0 and (dic_comp[i][0][8] - dic_comp[i][0][3]) or 1) ) ,
407
(dic_comp[i][0][7] - dic_comp[i][0][2]),
408
(dic_comp[i][0][8] - dic_comp[i][0][3]) ,
409
dic_comp[i][0][4] , dic_comp[i][0][5],False, 0, 0 ))
411
len(dic_comp[i]) > 1 and invo_line_obj.write(cr,uid,[dic_comp[i][1][6]],{'aux_financial':(dic_comp[i][1][7] - dic_comp[i][1][2]),'aux_qty':(dic_comp[i][1][8] - dic_comp[i][1][3])},context=context)
412
invo_obj.write(cr,uid,[dic_comp[i][1][0]],{'cancel_check':True},context=context)
413
dic_comp[i] and dic_comp[i][0] and dic_comp[i].pop(1)
504
dic_comp[i] and dic_comp[i][0] \
505
and (dic_comp[i][0][7] - dic_comp[i][0][2]) >= 0 and \
506
dic_comp[i].insert(0,(False,
507
( (dic_comp[i][0][7] - dic_comp[i][0][2] ) / \
508
( (dic_comp[i][0][8] - dic_comp[i][0][3]) > 0 \
509
and (dic_comp[i][0][8] - dic_comp[i][0][3]) or 1) ) ,
510
(dic_comp[i][0][7] - dic_comp[i][0][2]),
511
(dic_comp[i][0][8] - dic_comp[i][0][3]) ,
512
dic_comp[i][0][4] , dic_comp[i][0][5],False, 0, 0 ))
514
len(dic_comp[i]) > 1 and \
515
invo_line_obj.write(cr, uid, [dic_comp[i][1][6]],
516
{'aux_financial':(dic_comp[i][1][7] - dic_comp[i][1][2]),
517
'aux_qty':(dic_comp[i][1][8] - dic_comp[i][1][3])},
520
print "dic_comp[i]",dic_comp[i]
521
len(dic_comp[i]) > 1 and invo_obj.write(cr, uid, [dic_comp[i][1][0]],
522
{'cancel_check':True},context=context) or invo_obj.write(cr, uid, [dic_comp[i][0][0]],
523
{'cancel_check':True},context=context)
524
len(dic_comp[i]) > 1 and dic_comp[i].pop(1) # Grabo en la factura que ya fue cancelada
417
528
dic_comp[i][0][0] is not False and dic_comp[i][0][9] and dic_comp[i][0][7] > 0 and \
418
529
dic_comp[i].insert(0,(False,(dic_comp[i][0][7]/dic_comp[i][0][8]),dic_comp[i][0][7],dic_comp[i][0][8],dic_comp[i][0][4],
419
dic_comp[i][0][5],0.0,0.0 ))
530
dic_comp[i][0][5],0.0,0.0 )) #Inserto en la lista de la compra el calculo del costo anterior porque la factura fue cancelada
421
532
if dic_comp[i][0][0] is not False and not dic_comp[i][0][9] and dic_comp[i][0][7] <= 0:
422
533
inv_ids = invo_obj.search(cr,uid,[('invoice_line.product_id','=', i),