diff --git a/hotel/__manifest__.py b/hotel/__manifest__.py index 161a55904..7f03c5386 100644 --- a/hotel/__manifest__.py +++ b/hotel/__manifest__.py @@ -13,6 +13,7 @@ 'category': 'Generic Modules/Hotel Management', 'website': 'https://github.com/hootel/hootel', 'depends': [ + 'base', 'sale_stock', 'account_payment_return', 'partner_firstname', diff --git a/hotel/models/inherited_account_invoice.py b/hotel/models/inherited_account_invoice.py index b13e6a533..97c3da25c 100644 --- a/hotel/models/inherited_account_invoice.py +++ b/hotel/models/inherited_account_invoice.py @@ -2,6 +2,8 @@ # Copyright 2017 Dario Lodeiros # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) from odoo import models, fields, api, _ +import json +from odoo.tools import float_is_zero, float_compare, pycompat from odoo.exceptions import ValidationError @@ -36,6 +38,8 @@ class AccountInvoice(models.Model): from_folio = fields.Boolean(compute='_computed_folio_origin') folio_ids = fields.Many2many( comodel_name='hotel.folio', compute='_computed_folio_origin') + outstanding_folios_debits_widget = fields.Text(compute='_get_outstanding_folios_JSON') + has_folios_outstanding = fields.Boolean(compute='_get_outstanding_folios_JSON') @api.multi def action_invoice_open(self): @@ -55,3 +59,51 @@ class AccountInvoice(models.Model): if folios: inv.from_folio = True inv.folio_ids = [(6, 0, folios.ids)] + + @api.one + def _get_outstanding_folios_JSON(self): + self.outstanding_folios_debits_widget = json.dumps(False) + if self.from_folio: + payment_ids = self.folio_ids.mapped('payment_ids.id') + if self.state == 'open': + domain = [('account_id', '=', self.account_id.id), + ('partner_id', '!=', self.env['res.partner']._find_accounting_partner(self.partner_id).id), + ('reconciled', '=', False), + ('payment_id', 'in', payment_ids), + '|', + '&', ('amount_residual_currency', '!=', 0.0), ('currency_id','!=', None), + '&', ('amount_residual_currency', '=', 0.0), '&', ('currency_id','=', None), ('amount_residual', '!=', 0.0)] + if self.type in ('out_invoice', 'in_refund'): + domain.extend([('credit', '>', 0), ('debit', '=', 0)]) + type_payment = _('Outstanding credits in Folio') + else: + domain.extend([('credit', '=', 0), ('debit', '>', 0)]) + type_payment = _('Outstanding debits') + info = {'title': '', 'outstanding': True, 'content': [], 'invoice_id': self.id} + lines = self.env['account.move.line'].search(domain) + currency_id = self.currency_id + if len(lines) != 0: + for line in lines: + # get the outstanding residual value in invoice currency + if line.currency_id and line.currency_id == self.currency_id: + amount_to_show = abs(line.amount_residual_currency) + else: + amount_to_show = line.company_id.currency_id.with_context(date=line.date).compute(abs(line.amount_residual), self.currency_id) + if float_is_zero(amount_to_show, precision_rounding=self.currency_id.rounding): + continue + if line.ref : + title = '%s : %s' % (line.move_id.name, line.ref) + else: + title = line.move_id.name + info['content'].append({ + 'journal_name': line.ref or line.move_id.name, + 'title': title, + 'amount': amount_to_show, + 'currency': currency_id.symbol, + 'id': line.id, + 'position': currency_id.position, + 'digits': [69, self.currency_id.decimal_places], + }) + info['title'] = type_payment + self.outstanding_folios_debits_widget = json.dumps(info) + self.has_folio_outstanding = True diff --git a/hotel/models/inherited_res_partner.py b/hotel/models/inherited_res_partner.py index 10e54e527..0979bcfb8 100644 --- a/hotel/models/inherited_res_partner.py +++ b/hotel/models/inherited_res_partner.py @@ -28,7 +28,7 @@ class ResPartner(models.Model): compute='_compute_reservations_count') folios_count = fields.Integer('Folios', compute='_compute_folios_count') unconfirmed = fields.Boolean('Unconfirmed', default=True) - main_partner_id = fields.Many2one('res.partner') + main_partner_id = fields.Many2one('res.partner', string='Destination Partner fusion') @api.model def name_search(self, name, args=None, operator='ilike', limit=100): diff --git a/hotel/views/inherited_account_invoice_views.xml b/hotel/views/inherited_account_invoice_views.xml index 02f80b616..90e1174eb 100644 --- a/hotel/views/inherited_account_invoice_views.xml +++ b/hotel/views/inherited_account_invoice_views.xml @@ -12,6 +12,9 @@ {'invisible': ['|',('from_folio','=',True)]} + + +