# -*- encoding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2010 Tiny SPRL (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## from openerp import models, fields, api from openerp.exceptions import ValidationError class OrdenCobro(models.Model): _name = 'orden.cobro' _description = 'Orden de cobro' def _get_user(self): return self.env.uid def _get_number(self): return self.env['ir.sequence'].next_by_code('orden.cobro') or '*' name = fields.Char(string=u'Referencia', readonly=True, default=_get_number) partner_id = fields.Many2one('res.partner', string='Cliente', required=True) date = fields.Date(string='Fecha elab.', default=fields.Date.context_today) user_id = fields.Many2one('res.users', string='Preparado por:', default=_get_user) company_id = fields.Many2one('res.company', string='Compañía', required=True, default=lambda self: self.env.user.company_id) # account_invoice_id = fields.Many2one('account.invoice', string='Factura') # invoice_line_ids = fields.One2many('orden.cobro.line', 'orden_cobro_id', string='Facturas') invoice_line_ids = fields.One2many( comodel_name='orden.cobro.line', inverse_name='orden_cobro_id', string='Facturas' ) responsable = fields.Char(string='Aprobado Gerencia General:') celular_partner = fields.Char(related='partner_id.mobile', string='Móvil', store=True) telefono_partner = fields.Char(related='partner_id.phone', string='Teléfono', store=True) ruc_partner = fields.Char(related='partner_id.ruc', string='RUC:', readonly=True) forma_cobro = fields.Char(string='Forma de Cobro') presupuesto_nro = fields.Char(string='Presupuesto N°') cheque_nro = fields.Char(string='Cheque N°') transf_nro = fields.Char(string='Transferencia N°') cheque_banco = fields.Char(string='Banco Cheque') transf_banco = fields.Char(string='Cuenta Bancaria') concepto = fields.Char(string='Concepto') currency_id = fields.Many2one('res.currency', related='company_id.currency_id', string='Moneda', store=True, readonly=True) is_efec = fields.Boolean(string="Efectivo", default=False) is_cheq = fields.Boolean(string="Cheque", default=False) is_transf = fields.Boolean(string="Transferencia", default=False) comprobante_monto = fields.Float(string='Importe Comprobante') obra = fields.Char(string='Obra') solicitado_por = fields.Char(string='Recibido por') obs = fields.Char(string='Obs.') total = fields.Float(string='Total', compute='_compute_total', store=True) @api.depends('invoice_line_ids.monto_cobrado') def _compute_total(self): for rec in self: rec.total = sum(line.monto_cobrado for line in rec.invoice_line_ids if line.invoice_id) # @api.constrains('invoice_line_ids') # def _check_invoice_lines(self): # for rec in self: # for line in rec.invoice_line_ids: # if not line.invoice_id: # raise ValidationError("Todas las líneas deben tener una factura seleccionada.") @api.multi def action_buscar_facturas(self): self.ensure_one() return { 'type': 'ir.actions.act_window', 'res_model': 'wizard.select.invoice', 'view_type': 'form', 'view_mode': 'form', 'target': 'new', 'context': { 'default_orden_cobro_id': self.id, } } class OrdenCobroLine(models.Model): _name = 'orden.cobro.line' _description = 'Detalle de Facturas en Orden de Cobro' orden_cobro_id = fields.Many2one(comodel_name='orden.cobro', string='Orden de cobro') invoice_id = fields.Many2one('account.invoice', string='Factura', domain="[('partner_id', '=', parent.partner_id), ('state', '=', 'open'), ('type', '=', 'out_invoice')]") invoice_number = fields.Char(related='invoice_id.number', string='Nro Factura', readonly=True) invoice_date = fields.Date(related='invoice_id.date_invoice', string='Fecha', readonly=True) invoice_total = fields.Float(related='invoice_id.amount_total', string='Total Factura', readonly=True) monto_cobrado = fields.Float(string='Monto a cobrar', required=True) invoice_state = fields.Selection(related='invoice_id.state', string='Estado',readonly=True) class AccountInvoice(models.Model): _inherit = 'account.invoice' ordencobro_id = fields.One2many('orden.cobro.line', 'invoice_id', string='Órdenes de cobro relacionadas') # ordencobro_id = fields.Many2one(comodel_name='orden.cobro.line', 'invoice_id', string='Órdenes de cobro relacionadas')