import_cost_calculation.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # -*- encoding: utf-8 -*-
  2. from openerp import models, fields, api, _
  3. from openerp.exceptions import Warning
  4. from pytz import timezone
  5. from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
  6. from datetime import datetime,timedelta
  7. from openerp import http
  8. DATE_FORMAT = '%Y-%m-%d'
  9. class import_purchase_line(models.Model):
  10. _name = 'import.purchase.line'
  11. import_id = fields.Many2one('import.cost', 'Gastos de importación',ondelete='cascade')
  12. purchase_id = fields.Many2one('account.invoice', 'Gastos de importación',required=True)
  13. purchase_subtotal = fields.Float("Subtotal", related='purchase_id.amount_untaxed', store=True, readonly=True)
  14. purchase_taxes = fields.Float("Impuestos", related='purchase_id.amount_tax', store=True, readonly=True)
  15. purchase_total = fields.Float("Total", related='purchase_id.amount_total', store=True, readonly=True)
  16. class import_expense_line(models.Model):
  17. _name = 'import.expense.line'
  18. import_id = fields.Many2one('import.cost', 'Gastos de importación',ondelete='cascade')
  19. expense_id = fields.Many2one('account.invoice', 'Gastos de importación', required=True)
  20. expense_subtotal = fields.Float("Subtotal", related='expense_id.amount_untaxed', store=True, readonly=True)
  21. expense_taxes = fields.Float("Impuestos", related='expense_id.amount_tax', store=True, readonly=True)
  22. expense_total = fields.Float("Total", related='expense_id.amount_total', store=True, readonly=True)
  23. class import_cost(models.Model):
  24. _name = 'import.cost'
  25. name = fields.Char(string='Nombre', readonly=True)
  26. date = fields.Datetime('Fecha', default=datetime.now(), required=True)
  27. purchases = fields.One2many('import.purchase.line','import_id','Facturas de compra')
  28. expenses = fields.One2many('import.expense.line','import_id','Facturas de gasto')
  29. factor = fields.Float(string="Factor", readonly=True)
  30. state = fields.Selection([
  31. ('draft', 'Borrador'),
  32. ('approved', 'Aprobado'),
  33. ], 'Estado', readonly=True, select=True, default="draft")
  34. created_by = fields.Many2one('res.users', 'Creado por', default=lambda self: self.env.user.id, readonly=True)
  35. approved_by = fields.Many2one('res.users', 'Aprobado por')
  36. @api.one
  37. def _get_amount(self):
  38. suma_purchase_subtotal = 0
  39. suma_purchase_taxes = 0
  40. suma_purchase_total = 0
  41. suma_expense_subtotal = 0
  42. suma_expense_taxes = 0
  43. suma_expense_total = 0
  44. invoice1 = self.env['import.purchase.line'].search([('import_id','=',self.id)])
  45. for each in invoice1:
  46. suma_purchase_subtotal = suma_purchase_subtotal + each.purchase_subtotal
  47. suma_purchase_taxes = suma_purchase_taxes + each.purchase_taxes
  48. suma_purchase_total = suma_purchase_total + each.purchase_total
  49. invoice2 = self.env['import.expense.line'].search([('import_id','=',self.id)])
  50. for item in invoice2:
  51. suma_expense_subtotal = suma_expense_subtotal + item.expense_subtotal
  52. suma_expense_taxes = suma_expense_taxes + item.expense_taxes
  53. suma_expense_total = suma_expense_total + item.expense_total
  54. self.purchases_subtotal = suma_purchase_subtotal
  55. self.purchases_taxes = suma_purchase_taxes
  56. self.purchases_total = suma_purchase_total
  57. self.expenses_subtotal = suma_expense_subtotal
  58. self.expenses_taxes = suma_expense_taxes
  59. self.expenses_total = suma_expense_total
  60. purchases_subtotal = fields.Float(string="Subtotal", compute="_get_amount")
  61. purchases_taxes = fields.Float(string="Impuestos", compute="_get_amount")
  62. purchases_total = fields.Float(string="Total", compute="_get_amount")
  63. expenses_subtotal = fields.Float(string="Subtotal", compute="_get_amount")
  64. expenses_taxes = fields.Float(string="Impuestos", compute="_get_amount")
  65. expenses_total = fields.Float(string="Total", compute="_get_amount")
  66. @api.model
  67. def approve_import_cost(self, value):
  68. approved_by = self.env.user.id
  69. import_cost = self.env['import.cost'].search([('id','=',value['import_id'])])
  70. import_cost.write({'state': 'approved','factor':value['factor'],'approved_by':approved_by})
  71. for item in value['purchases']:
  72. product = self.env['product.product'].search([('id','=',item['product_id'][0])])
  73. template = self.env['product.template'].search([('id','=',product.product_tmpl_id.id)])
  74. if(template.price_change == 'import'):
  75. template.write({'standard_price': item['import_cost']})
  76. return True
  77. @api.model
  78. def create(self,vals):
  79. ctx = dict(self._context or {})
  80. vals['name'] = self.env['ir.sequence'].get('import.cost') or '/'
  81. return super(import_cost, self.with_context(ctx)).create(vals)