123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- # -*- encoding: utf-8 -*-
- ##############################################################################
- #
- # OpenERP, Open Source Management Solution
- # Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
- #
- # 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 <http://www.gnu.org/licenses/>.
- #
- ##############################################################################
- 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='Banco Pagador')
- comp_nro = fields.Char(string='Comprobante N°')
- cta_nro = fields.Char(string='Recibido en cuenta N°')
- 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')
|