orden_cobro.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # -*- encoding: utf-8 -*-
  2. ##############################################################################
  3. #
  4. # OpenERP, Open Source Management Solution
  5. # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU Affero General Public License as
  9. # published by the Free Software Foundation, either version 3 of the
  10. # License, or (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU Affero General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU Affero General Public License
  18. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. ##############################################################################
  21. from openerp import models, fields, api
  22. from openerp.exceptions import ValidationError
  23. class OrdenCobro(models.Model):
  24. _name = 'orden.cobro'
  25. _description = 'Orden de cobro'
  26. def _get_user(self):
  27. return self.env.uid
  28. def _get_number(self):
  29. return self.env['ir.sequence'].next_by_code('orden.cobro') or '*'
  30. name = fields.Char(string=u'Referencia', readonly=True, default=_get_number)
  31. partner_id = fields.Many2one('res.partner', string='Cliente', required=True)
  32. date = fields.Date(string='Fecha elab.', default=fields.Date.context_today)
  33. user_id = fields.Many2one('res.users', string='Preparado por:', default=_get_user)
  34. company_id = fields.Many2one('res.company', string='Compañía', required=True, default=lambda self: self.env.user.company_id)
  35. # account_invoice_id = fields.Many2one('account.invoice', string='Factura')
  36. # invoice_line_ids = fields.One2many('orden.cobro.line', 'orden_cobro_id', string='Facturas')
  37. invoice_line_ids = fields.One2many(
  38. comodel_name='orden.cobro.line',
  39. inverse_name='orden_cobro_id',
  40. string='Facturas'
  41. )
  42. responsable = fields.Char(string='Aprobado Gerencia General:')
  43. celular_partner = fields.Char(related='partner_id.mobile', string='Móvil', store=True)
  44. telefono_partner = fields.Char(related='partner_id.phone', string='Teléfono', store=True)
  45. ruc_partner = fields.Char(related='partner_id.ruc', string='RUC:', readonly=True)
  46. forma_cobro = fields.Char(string='Forma de Cobro')
  47. presupuesto_nro = fields.Char(string='Presupuesto N°')
  48. cheque_nro = fields.Char(string='Cheque N°')
  49. transf_nro = fields.Char(string='Transferencia N°')
  50. cheque_banco = fields.Char(string='Banco Cheque')
  51. transf_banco = fields.Char(string='Cuenta Bancaria')
  52. concepto = fields.Char(string='Concepto')
  53. currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string='Moneda', store=True, readonly=True)
  54. is_efec = fields.Boolean(string="Efectivo", default=False)
  55. is_cheq = fields.Boolean(string="Cheque", default=False)
  56. is_transf = fields.Boolean(string="Transferencia", default=False)
  57. comprobante_monto = fields.Float(string='Importe Comprobante')
  58. obra = fields.Char(string='Obra')
  59. solicitado_por = fields.Char(string='Recibido por')
  60. obs = fields.Char(string='Obs.')
  61. total = fields.Float(string='Total', compute='_compute_total', store=True)
  62. @api.depends('invoice_line_ids.monto_cobrado')
  63. def _compute_total(self):
  64. for rec in self:
  65. rec.total = sum(line.monto_cobrado for line in rec.invoice_line_ids if line.invoice_id)
  66. # @api.constrains('invoice_line_ids')
  67. # def _check_invoice_lines(self):
  68. # for rec in self:
  69. # for line in rec.invoice_line_ids:
  70. # if not line.invoice_id:
  71. # raise ValidationError("Todas las líneas deben tener una factura seleccionada.")
  72. @api.multi
  73. def action_buscar_facturas(self):
  74. self.ensure_one()
  75. return {
  76. 'type': 'ir.actions.act_window',
  77. 'res_model': 'wizard.select.invoice',
  78. 'view_type': 'form',
  79. 'view_mode': 'form',
  80. 'target': 'new',
  81. 'context': {
  82. 'default_orden_cobro_id': self.id,
  83. }
  84. }
  85. class OrdenCobroLine(models.Model):
  86. _name = 'orden.cobro.line'
  87. _description = 'Detalle de Facturas en Orden de Cobro'
  88. orden_cobro_id = fields.Many2one(comodel_name='orden.cobro', string='Orden de cobro')
  89. invoice_id = fields.Many2one('account.invoice', string='Factura',
  90. domain="[('partner_id', '=', parent.partner_id), ('state', '=', 'open'), ('type', '=', 'out_invoice')]")
  91. invoice_number = fields.Char(related='invoice_id.number', string='Nro Factura', readonly=True)
  92. invoice_total = fields.Float(related='invoice_id.amount_total', string='Total Factura', readonly=True)
  93. monto_cobrado = fields.Float(string='Monto a cobrar', required=True)
  94. class AccountInvoice(models.Model):
  95. _inherit = 'account.invoice'
  96. ordencobro_id = fields.One2many('orden.cobro.line', 'invoice_id', string='Órdenes de cobro relacionadas')
  97. # ordencobro_id = fields.Many2one(comodel_name='orden.cobro.line', 'invoice_id', string='Órdenes de cobro relacionadas')