Advertisement
Guest User

Shaumux

a guest
Sep 25th, 2013
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.73 KB | None | 0 0
  1. class purchase_order(osv.Model):
  2.     _inherit = 'purchase.order'
  3.  
  4.  
  5.     def action_invoice_create(self, cr, uid, ids, context=None):
  6.         """Generates invoice for given ids of purchase orders and links that invoice ID to purchase order.
  7.        :param ids: list of ids of purchase orders.
  8.        :return: ID of created invoice.
  9.        :rtype: int
  10.        """
  11.         res = {}
  12.         res = super(purchase_order, self).action_invoice_create(cr, uid, ids, context=context)
  13.         for order in self.browse(cr, uid, ids, context=context):
  14.             import pdb;pdb.set_trace()
  15.             self.pool.get('account.invoice').write(cr, uid, res,
  16.                                                    {'insurance_type':order.insurance_type,
  17.                                                     'insurance':order.insurance,
  18.                                                     'freight_type':order.freight_type,
  19.                                                     'freight':order.freight,
  20.                                                     'other_discount':order.other_discount,
  21.                                                     'discount_percentage':order.discount_percentage,
  22.                                                     'commission':order.commission, 'packing_type':order.packing_type,
  23.                                                     'package_and_forwording':order.package_and_forwording,
  24.                                                     'taxes_ids':[(6, 0, [excies_id.id for excies_id in order.excies_ids] \
  25.                                                                  + [vat_id.id for vat_id in order.vat_ids])],
  26.                                                     })
  27.         return res
  28.  
  29.  
  30.  
  31. class account_invoice_tax(osv.osv):
  32.     _inherit = 'account.invoice.tax'
  33.    
  34.     def compute(self, cr, uid, invoice_id, context=None):
  35.         res = super(account_invoice_tax, self).compute(cr, uid, invoice_id, context=None)
  36.         account_tax_obj = self.pool.get('account.tax')
  37.         cur_obj = self.pool.get('res.currency')
  38.         inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context)
  39.         cur = inv.currency_id
  40.         tax_grouped = {}
  41.         company_currency = self.pool['res.company'].browse(cr, uid, inv.company_id.id).currency_id.id
  42.         for tax in account_tax_obj.compute_all(cr, uid, inv.taxes_ids, inv.other_charges, 1, None, inv.partner_id)['taxes']:
  43.             val = {}
  44.             val['invoice_id'] = inv.id
  45.             val['name'] = tax['name']
  46.             val['amount'] = tax['amount']
  47.             val['manual'] = False
  48.             val['sequence'] = tax['sequence']
  49.             val['base'] = cur_obj.round(cr, uid, cur, tax['price_unit'])
  50. #                 import pdb;pdb.set_trace()
  51.  
  52.             if inv.type in ('out_invoice', 'in_invoice'):
  53.                 val['base_code_id'] = tax['base_code_id']
  54.                 val['tax_code_id'] = tax['tax_code_id']
  55.                 val['base_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['base'] * tax['base_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
  56.                 val['tax_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['amount'] * tax['tax_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
  57.                 val['account_id'] = tax['account_collected_id']
  58.                 val['account_analytic_id'] = tax['account_analytic_collected_id']
  59.             else:
  60.                 val['base_code_id'] = tax['ref_base_code_id']
  61.                 val['tax_code_id'] = tax['ref_tax_code_id']
  62.                 val['base_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['base'] * tax['ref_base_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
  63.                 val['tax_amount'] = cur_obj.compute(cr, uid, inv.currency_id.id, company_currency, val['amount'] * tax['ref_tax_sign'], context={'date': inv.date_invoice or time.strftime('%Y-%m-%d')}, round=False)
  64.                 val['account_id'] = tax['account_paid_id']
  65.                 val['account_analytic_id'] = tax['account_analytic_paid_id']
  66.  
  67.             key = (val['tax_code_id'], val['base_code_id'], val['account_id'], val['account_analytic_id'])
  68.             import pdb;pdb.set_trace()
  69.             if not key in tax_grouped:
  70.                 tax_grouped[key] = val
  71.             else:
  72.                 tax_grouped[key]['amount'] += val['amount']
  73.                 tax_grouped[key]['base'] += val['base']
  74.                 tax_grouped[key]['base_amount'] += val['base_amount']
  75.                 tax_grouped[key]['tax_amount'] += val['tax_amount']
  76.         for t in tax_grouped.values():
  77.             t['base'] = cur_obj.round(cr, uid, cur, t['base'])
  78.             t['amount'] = cur_obj.round(cr, uid, cur, t['amount'])
  79.             t['base_amount'] = cur_obj.round(cr, uid, cur, t['base_amount'])
  80.             t['tax_amount'] = cur_obj.round(cr, uid, cur, t['tax_amount'])
  81. #         import pdb;pdb.set_trace()    
  82.         for key in res:
  83.             tax_code_id = key[0]
  84.             base_code_id = key[1]
  85.             import pdb;pdb.set_trace()
  86.             tax_id = account_tax_obj.search(cr, uid, [('tax_code_id', '=', tax_code_id), ('base_code_id', '=', base_code_id)], context=context)
  87.             res[key]['amount'] += tax_grouped[key]['amount']
  88.             res[key]['base'] += tax_grouped[key]['base']
  89.             res[key]['base_amount'] += tax_grouped[key]['base_amount']
  90.             res[key]['tax_amount'] += tax_grouped[key]['tax_amount']
  91.             for ids in tax_id:
  92.                 tax_categ = account_tax_obj.browse(cr, uid, ids, context=context).tax_categ
  93.                 res[key]['tax_categ'] = tax_categ
  94.         return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement