From 5b68c1623c6a51716f315c42e202c54a24a8c4c2 Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Mon, 26 Feb 2018 14:58:54 -0300 Subject: [PATCH 1/7] [ADD] Add loaned calc --- models/res_bank.py | 66 +++++++++++++++++++++++++++++++++++++--- views/bank_loan_view.xml | 2 -- views/res_bank_view.xml | 5 ++- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/models/res_bank.py b/models/res_bank.py index ece6d20..35eda3b 100644 --- a/models/res_bank.py +++ b/models/res_bank.py @@ -19,7 +19,7 @@ # ############################################################################## -from openerp import api, fields, models +from openerp import _, api, exceptions, fields, models from openerp.addons import decimal_precision as dp @@ -37,17 +37,75 @@ class ResBankLoanLine(models.Model): def _get_default_currency(self): return self.env.ref("base.USD") + def _get_default_start_date(self): + today = fields.Date.from_string(fields.Date.context_today(self)) + return "%s-01-01" % today.year + + @api.constrains("start_date", "stop_date") + def check_dates(self): + for line in self: + if not (line.start_date and line.stop_date): + continue + + start_date = fields.Date.from_string(line.start_date) + stop_date = fields.Date.from_string(line.stop_date) + if stop_date <= start_date: + raise exceptions.ValidationError(_("Start Date must be > Stop Date!")) + + @api.onchange("start_date") + def onchange_start_date(self): + if not self.start_date: + return + + start_date = fields.Date.from_string(self.start_date) + self.stop_date = "%s-12-31" % start_date.year + bank_id = fields.Many2one('res.bank', string='Bank', required=True) currency_id = fields.Many2one('res.currency', string='Currency', required=True, default=_get_default_currency) + concept_id = fields.Many2one('bank.loan.concept', string='Concept', required=True) amount_to_loan = fields.Float(string='Amount to Loan', digits=dp.get_precision('Account')) amount_loaned = fields.Float(string='Amount Loaned', digits=dp.get_precision('Account'), compute="_calc_loaned_remaining") amount_remaining = fields.Float(string='Amount Remaining', digits=dp.get_precision('Account'), compute="_calc_loaned_remaining") + start_date = fields.Date(string='Start Date', required=True, default=_get_default_start_date) + stop_date = fields.Date(string='Stop Date', required=True) - @api.depends("amount_to_loan") + @api.depends("amount_to_loan", "concept_id", "currency_id", "start_date", "stop_date") def _calc_loaned_remaining(self): + query = """ + SELECT COALESCE(SUM(line.amount), 0) + FROM bank_loan_line AS line + JOIN bank_loan AS loan + ON loan.id = line.loan_id + WHERE line.maturity_date <= current_date + AND loan.state IN ('open', 'posted') + AND loan.bank_id = %s + AND line.maturity_date BETWEEN %s AND %s + AND loan.concept_id = %s + AND loan.currency_id = %s + """ for line in self: - line.amount_loaned = 0 - line.amount_remaining = 0 + print line.bank_id.id, line.concept_id.id, line.currency_id.id + if not (line.amount_to_loan and line.currency_id and line.concept_id and + line.start_date and line.stop_date) or isinstance(line.bank_id.id, + models.NewId): + continue + + print self.env.cr.mogrify(query, (line.bank_id.id, line.start_date, line.stop_date, + line.concept_id.id, line.currency_id.id)) + self.env.cr.execute(query, (line.bank_id.id, line.start_date, line.stop_date, + line.concept_id.id, line.currency_id.id)) + amount_loaned = self.env.cr.fetchone()[0] + + line.amount_loaned = amount_loaned + line.amount_remaining = line.amount_to_loan - amount_loaned + + _sql_constraints = [ + ( + "uniq_dates_bank_concept_curr", + "UNIQUE(start_date, stop_date, currency_id, bank_id, concept_id)", + _("Loan duplicated!") + ) + ] diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index 797fbd1..67290b8 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -109,8 +109,6 @@ <field name="help" type="html"> <p class="oe_view_nocontent_create"> Click to create a new Bank Loan - </p><p> - Bank Loan </p> </field> </record> diff --git a/views/res_bank_view.xml b/views/res_bank_view.xml index 793b5b7..5f55ddd 100644 --- a/views/res_bank_view.xml +++ b/views/res_bank_view.xml @@ -8,15 +8,18 @@ <field name="inherit_id" ref="base.view_res_bank_form"/> <field name="priority" eval="8"/> <field name="arch" type="xml"> - <xpath expr="/form/sheet/group" position="after"> + <xpath expr="/form/sheet/group[last()]" position="after"> <notebook colspan="4"> <page string="Loan Lines"> <field name="loan_line_ids"> <tree editable="bottom"> <field name="currency_id"/> + <field name="concept_id"/> <field name="amount_to_loan"/> <field name="amount_loaned"/> <field name="amount_remaining"/> + <field name="start_date"/> + <field name="stop_date"/> </tree> </field> </page> -- GitLab From 2f06225724046dc3ad010e279cf20699703dcd54 Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Mon, 26 Feb 2018 18:29:27 -0300 Subject: [PATCH 2/7] [MOD] Change 'Due' labels to 'Maturity' --- models/bank_loan.py | 14 ++++++++------ models/res_bank.py | 5 +---- views/bank_loan_view.xml | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/models/bank_loan.py b/models/bank_loan.py index c548314..3a29160 100644 --- a/models/bank_loan.py +++ b/models/bank_loan.py @@ -111,7 +111,8 @@ class BankLoan(models.Model): rate_type_date = fields.Date.from_string(loan.rate_type_date) maturity_date = fields.Date.from_string(loan.maturity_date) if maturity_date < rate_type_date: - raise exceptions.ValidationError(_("Due Date must be >= Rate Type Close Date!")) + err = _("Maturity Date must be >= Rate Type Close Date!") + raise exceptions.ValidationError(err) bank_id = fields.Many2one('res.bank', string='Bank', required=True) concept_id = fields.Many2one('bank.loan.concept', string='Concept', required=True) @@ -127,9 +128,10 @@ class BankLoan(models.Model): nar = fields.Float(string='NAR', digits=dp.get_precision('Account')) capital = fields.Float(string='Capital', digits=dp.get_precision('Account')) interest = fields.Float(string='Interest', digits=dp.get_precision('Account')) - maturity_date = fields.Date(string='Due Date', required=True) + maturity_date = fields.Date(string='Maturity Date', required=True) term_days = fields.Integer(string='Term', compute="_calc_term_days") - next_maturity_date = fields.Date(string='Next Due Date', compute="_calc_next_maturity_date") + next_maturity_date = fields.Date(string='Next Maturity Date', + compute="_calc_next_maturity_date") close_date = fields.Date(string='Close Date') line_ids = fields.One2many('bank.loan.line', 'loan_id', string='Lines') state = fields.Selection( @@ -212,13 +214,13 @@ class BankLoanLine(models.Model): maturity_date = fields.Date.from_string(line.maturity_date) loan_maturity_date = fields.Date.from_string(line.loan_id.maturity_date) if maturity_date and loan_maturity_date and maturity_date > loan_maturity_date: - err = _("Due Date must be >= to the Loan Due Date (%s)!") + err = _("Maturity Date must be >= to the Loan Maturity Date (%s)!") raise exceptions.ValidationError(err % line.loan_id.maturity_date) loan_id = fields.Many2one('bank.loan', string='Loan', required=True, ondelete='cascade') amount = fields.Float(string='Amount', digits=dp.get_precision('Account')) - maturity_date = fields.Date(string='Due Date', required=True) + maturity_date = fields.Date(string='Maturity Date', required=True) _sql_constraints = [ - ("uniq_date", "UNIQUE(loan_id, maturity_date)", _("The Due Date is duplicated!")) + ("uniq_date", "UNIQUE(loan_id, maturity_date)", _("The Maturity is duplicated!")) ] diff --git a/models/res_bank.py b/models/res_bank.py index 35eda3b..cd3f123 100644 --- a/models/res_bank.py +++ b/models/res_bank.py @@ -50,7 +50,7 @@ class ResBankLoanLine(models.Model): start_date = fields.Date.from_string(line.start_date) stop_date = fields.Date.from_string(line.stop_date) if stop_date <= start_date: - raise exceptions.ValidationError(_("Start Date must be > Stop Date!")) + raise exceptions.ValidationError(_("Start Date must be < Stop Date!")) @api.onchange("start_date") def onchange_start_date(self): @@ -87,14 +87,11 @@ class ResBankLoanLine(models.Model): AND loan.currency_id = %s """ for line in self: - print line.bank_id.id, line.concept_id.id, line.currency_id.id if not (line.amount_to_loan and line.currency_id and line.concept_id and line.start_date and line.stop_date) or isinstance(line.bank_id.id, models.NewId): continue - print self.env.cr.mogrify(query, (line.bank_id.id, line.start_date, line.stop_date, - line.concept_id.id, line.currency_id.id)) self.env.cr.execute(query, (line.bank_id.id, line.start_date, line.stop_date, line.concept_id.id, line.currency_id.id)) amount_loaned = self.env.cr.fetchone()[0] diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index 67290b8..3058ff7 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -35,7 +35,7 @@ <field name="arch" type="xml"> <form string="Bank Loan"> <header> - <button string="Open" states="draft" type="object" name="button_open" class="oe_highlight"/> + <button string="Set to Open" states="draft" type="object" name="button_open" class="oe_highlight"/> <button string="Set to Draft" states="open" type="object" name="button_draft"/> <button string="Post" states="open" type="object" name="button_post" class="oe_highlight"/> <button string="Close" states="posted" type="object" name="button_close"/> -- GitLab From d776cb7802cbf9df8a803711d0edd3efe0454789 Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Mon, 26 Feb 2018 18:29:35 -0300 Subject: [PATCH 3/7] [I18N] Add i18n --- i18n/es_AR.po | 354 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 354 insertions(+) create mode 100644 i18n/es_AR.po diff --git a/i18n/es_AR.po b/i18n/es_AR.po new file mode 100644 index 0000000..c056639 --- /dev/null +++ b/i18n/es_AR.po @@ -0,0 +1,354 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * bank_loan +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-26 21:05+0000\n" +"PO-Revision-Date: 2018-02-26 18:25-0300\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: es_AR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.7.1\n" + +#. module: bank_loan +#: model:ir.actions.act_window,help:bank_loan.act_open_bank_loan_view +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new Bank Loan\n" +" </p>\n" +" " +msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click para crear un nuevo Préstamo Bancario\n" +"</p>\n" +" " + +#. module: bank_loan +#: field:bank.loan,total_amount:0 field:bank.loan.line,amount:0 +msgid "Amount" +msgstr "Importe" + +#. module: bank_loan +#: field:res.bank.loan.line,amount_loaned:0 +msgid "Amount Loaned" +msgstr "Importe Prestado" + +#. module: bank_loan +#: field:res.bank.loan.line,amount_remaining:0 +msgid "Amount Remaining" +msgstr "Restante" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:69 +#: code:addons/bank_loan/models/bank_loan.py:207 +#, python-format +msgid "Amount must be >= 0!" +msgstr "¡El Importe debe ser mayor o igual a 0!" + +#. module: bank_loan +#: field:res.bank.loan.line,amount_to_loan:0 +msgid "Amount to Loan" +msgstr "Total a prestar" + +#. module: bank_loan +#: field:bank.loan,bank_id:0 model:ir.model,name:bank_loan.model_res_bank +#: field:res.bank.loan.line,bank_id:0 +msgid "Bank" +msgstr "Banco" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +#: view:bank.loan:bank_loan.view_bank_loan_search +#: view:bank.loan:bank_loan.view_bank_loan_tree +#: model:ir.actions.act_window,name:bank_loan.act_open_bank_loan_view +#: model:ir.model,name:bank_loan.model_bank_loan +#: model:ir.ui.menu,name:bank_loan.menu_bank_loan_act +msgid "Bank Loan" +msgstr "Préstamo Bancario" + +#. module: bank_loan +#: model:ir.model,name:bank_loan.model_bank_loan_concept +msgid "Bank Loan Concept" +msgstr "Concepto del Préstamo Bancario" + +#. module: bank_loan +#: field:bank.loan,capital:0 +msgid "Capital" +msgstr "Capital" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:87 +#, python-format +msgid "Capital must be >= 0!" +msgstr "¡El Capital debe ser mayor o igual a 0!" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Close" +msgstr "Cerrar" + +#. module: bank_loan +#: field:bank.loan,close_date:0 +msgid "Close Date" +msgstr "Fecha de Cierre" + +#. module: bank_loan +#: selection:bank.loan,state:0 +msgid "Closed" +msgstr "Cerrado" + +#. module: bank_loan +#: field:bank.loan,concept_id:0 field:res.bank.loan.line,concept_id:0 +msgid "Concept" +msgstr "Concepto" + +#. module: bank_loan +#: field:bank.loan,create_uid:0 field:bank.loan.concept,create_uid:0 +#: field:bank.loan.line,create_uid:0 field:res.bank.loan.line,create_uid:0 +msgid "Created by" +msgstr "Creado por" + +#. module: bank_loan +#: field:bank.loan,create_date:0 field:bank.loan.concept,create_date:0 +#: field:bank.loan.line,create_date:0 field:res.bank.loan.line,create_date:0 +msgid "Created on" +msgstr "Creado el" + +#. module: bank_loan +#: field:bank.loan,currency_id:0 field:res.bank.loan.line,currency_id:0 +msgid "Currency" +msgstr "Moneda" + +#. module: bank_loan +#: field:bank.loan,display_name:0 field:bank.loan.concept,display_name:0 +#: field:bank.loan.line,display_name:0 field:res.bank.loan.line,display_name:0 +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: bank_loan +#: selection:bank.loan,state:0 +msgid "Draft" +msgstr "Borrador" + +#. module: bank_loan +#: field:bank.loan,maturity_date:0 field:bank.loan.line,maturity_date:0 +msgid "Maturity Date" +msgstr "Fecha de Vencimiento" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:114 +#, python-format +msgid "Maturity Date must be >= Rate Type Close Date!" +msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Cierre del TC!" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:215 +#, python-format +msgid "Maturity Date must be >= to the Loan Maturity Date (%s)!" +msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Vencimiento del Préstamo (%s)!" + +#. module: bank_loan +#: field:bank.loan,id:0 field:bank.loan.concept,id:0 field:bank.loan.line,id:0 +#: field:res.bank.loan.line,id:0 +msgid "ID" +msgstr "ID" + +#. module: bank_loan +#: field:bank.loan,interest:0 +msgid "Interest" +msgstr "Interés" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:93 +#, python-format +msgid "Interest must be >= 0!" +msgstr "¡El Interés debe ser mayor o igual a 0!" + +#. module: bank_loan +#: field:bank.loan,__last_update:0 field:bank.loan.concept,__last_update:0 +#: field:bank.loan.line,__last_update:0 +#: field:res.bank.loan.line,__last_update:0 +msgid "Last Modified on" +msgstr "Última actualización el" + +#. module: bank_loan +#: field:bank.loan,write_uid:0 field:bank.loan.concept,write_uid:0 +#: field:bank.loan.line,write_uid:0 field:res.bank.loan.line,write_uid:0 +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: bank_loan +#: field:bank.loan,write_date:0 field:bank.loan.concept,write_date:0 +#: field:bank.loan.line,write_date:0 field:res.bank.loan.line,write_date:0 +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: bank_loan +#: model:ir.model,name:bank_loan.model_bank_loan_line +msgid "Line of a Bank Loan" +msgstr "LÃnea de Préstamo Bancario" + +#. module: bank_loan +#: field:bank.loan,line_ids:0 +msgid "Lines" +msgstr "LÃneas" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:105 +#, python-format +msgid "Lines amount is misconfigured, it can't be more than %s!" +msgstr "" +"¡El/Los importe(s) en la(s) lÃnea(s) es incorrecto o está mal configurado!\n" +"No debe superar: %s" + +#. module: bank_loan +#: model:ir.model,name:bank_loan.model_res_bank_loan_line +msgid "Lines describing the loans for an specific Bank" +msgstr "LÃneas que resumen los préstamos para un Banco especÃfico" + +#. module: bank_loan +#: field:bank.loan.line,loan_id:0 +msgid "Loan" +msgstr "Préstamo" + +#. module: bank_loan +#: view:res.bank:bank_loan.view_res_bank_form_inherit_add_loan_line_ids +#: field:res.bank,loan_line_ids:0 +msgid "Loan Lines" +msgstr "Préstamos" + +#. module: bank_loan +#: code:addons/bank_loan/models/res_bank.py:109 +#: sql_constraint:res.bank.loan.line:0 +#, python-format +msgid "Loan duplicated!" +msgstr "¡Préstamo duplicado!" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Maturities" +msgstr "Vencimientos" + +#. module: bank_loan +#: field:bank.loan,nar:0 +msgid "NAR" +msgstr "TNA" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:99 +#, python-format +msgid "NAR must be >= 0!" +msgstr "¡TNA debe ser mayor o igual a 0!" + +#. module: bank_loan +#: field:bank.loan.concept,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: bank_loan +#: field:bank.loan,next_maturity_date:0 +msgid "Next Maturity Date" +msgstr "Siguiente Fecha de Vencimiento" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form selection:bank.loan,state:0 +msgid "Open" +msgstr "Abierto" + +#. module: bank_loan +#: field:bank.loan,operation_nbr:0 +msgid "Operation N°" +msgstr "N° de operación" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Post" +msgstr "Contabilizar" + +#. module: bank_loan +#: selection:bank.loan,state:0 +msgid "Posted" +msgstr "Contabilizado" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Rate Type" +msgstr "Tipo de Cambio" + +#. module: bank_loan +#: field:bank.loan,refund_rate_type:0 +msgid "Rate Type (Refund)" +msgstr "Tipo de Cambio (Devolución)" + +#. module: bank_loan +#: field:bank.loan,request_rate_type:0 +msgid "Rate Type (Request)" +msgstr "Tipo de Cambio (Pedido)" + +#. module: bank_loan +#: field:bank.loan,rate_type_date:0 +msgid "Rate Type Close Date" +msgstr "Fecha de cierre del TC" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:75 +#: code:addons/bank_loan/models/bank_loan.py:81 +#, python-format +msgid "Rate Type must be >= 0!" +msgstr "¡El Tipo de Cambio debe ser mayor o igual a 0!" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Set to Draft" +msgstr "Volver a Borrador" + +#. module: bank_loan +#: view:bank.loan:bank_loan.view_bank_loan_form +msgid "Set to Open" +msgstr "Abrir Préstamo" + +#. module: bank_loan +#: field:res.bank.loan.line,start_date:0 +msgid "Start Date" +msgstr "Fecha de Inicio" + +#. module: bank_loan +#: code:addons/bank_loan/models/res_bank.py:53 +#, python-format +msgid "Start Date must be < Stop Date!" +msgstr "¡Fecha de Inicio debe ser menor a Fecha de Fin!" + +#. module: bank_loan +#: field:bank.loan,state:0 +msgid "State" +msgstr "Estado" + +#. module: bank_loan +#: field:res.bank.loan.line,stop_date:0 +msgid "Stop Date" +msgstr "Fecha de Fin" + +#. module: bank_loan +#: field:bank.loan,term_days:0 +msgid "Term" +msgstr "Plazo" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:223 +#: sql_constraint:bank.loan.line:0 +#, python-format +msgid "The Maturity is duplicated!" +msgstr "¡El Vencimiento está duplicado!" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:41 +#, python-format +msgid "This concept already exists!" +msgstr "¡Este Concepto ya existe!" -- GitLab From 5266b5b6815c940b61c6539bf73537a97fd0b01d Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Mon, 26 Feb 2018 18:51:29 -0300 Subject: [PATCH 4/7] [MOD] Make fields readonly when not in draft --- views/bank_loan_view.xml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index 3058ff7..9c68d6d 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -44,34 +44,35 @@ <sheet> <h1> <label for="bank_id" class="oe_inline oe_edit_only"/> - <field name="bank_id" class="oe_inline"/> + <field name="bank_id" class="oe_inline" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> </h1> <h2> <label for="concept_id" class="oe_inline"/> - <field name="concept_id" class="oe_inline"/> + <field name="concept_id" class="oe_inline" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> <label for="total_amount" class="oe_inline"/> - <field name="total_amount" class="oe_inline"/> + <field name="total_amount" class="oe_inline" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> </h2> <group col="4" colspan="2" string="Rate Type"> - <field name="currency_id"/> - <field name="rate_type_date"/> - <field name="request_rate_type"/> - <field name="nar"/> - <field name="capital"/> - <field name="interest"/> - <field name="refund_rate_type"/> - <field name="term_days"/> + <field name="currency_id" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="rate_type_date" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="request_rate_type" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="nar" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="capital" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="interest" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="refund_rate_type" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="term_days" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> </group> <group col="4" colspan="2"> - <field name="operation_nbr"/> - <field name="maturity_date"/> - <field name="next_maturity_date"/> + <field name="operation_nbr" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="maturity_date" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="next_maturity_date" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> <field name="close_date" readonly="1"/> </group> <notebook colspan="4"> <page string="Maturities"> <group> - <field name="line_ids" nolabel="1"> + <field name="line_ids" nolabel="1" + attrs="{'readonly': [('state', 'not in', ('draft',))]}"> <tree editable="bottom"> <field name="amount" required="1"/> <field name="maturity_date"/> -- GitLab From 905cc990df05a58a710d4c8794c74ca70ac65d65 Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Tue, 27 Feb 2018 11:42:24 -0300 Subject: [PATCH 5/7] [MOD] Move currency_id fields to the Concept and make them related --- i18n/es_AR.po | 73 ++++++++++++++++++++++------------------ models/bank_loan.py | 33 +++++++++++++----- models/res_bank.py | 3 +- views/bank_loan_view.xml | 37 +++++++++++++++++++- views/res_bank_view.xml | 2 +- 5 files changed, 103 insertions(+), 45 deletions(-) diff --git a/i18n/es_AR.po b/i18n/es_AR.po index c056639..039a588 100644 --- a/i18n/es_AR.po +++ b/i18n/es_AR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-26 21:05+0000\n" -"PO-Revision-Date: 2018-02-26 18:25-0300\n" +"POT-Creation-Date: 2018-02-27 14:40+0000\n" +"PO-Revision-Date: 2018-02-27 11:41-0300\n" "Last-Translator: <>\n" "Language-Team: \n" "Language: es_AR\n" @@ -46,8 +46,8 @@ msgid "Amount Remaining" msgstr "Restante" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:69 -#: code:addons/bank_loan/models/bank_loan.py:207 +#: code:addons/bank_loan/models/bank_loan.py:85 +#: code:addons/bank_loan/models/bank_loan.py:224 #, python-format msgid "Amount must be >= 0!" msgstr "¡El Importe debe ser mayor o igual a 0!" @@ -74,17 +74,24 @@ msgid "Bank Loan" msgstr "Préstamo Bancario" #. module: bank_loan +#: view:bank.loan.concept:bank_loan.view_bank_loan_concept_form +#: view:bank.loan.concept:bank_loan.view_bank_loan_concept_tree #: model:ir.model,name:bank_loan.model_bank_loan_concept msgid "Bank Loan Concept" msgstr "Concepto del Préstamo Bancario" +#. module: bank_loan +#: view:bank.loan.concept:bank_loan.view_bank_loan_concept_form +msgid "Bank Loan Concept Name" +msgstr "Nombre del Concepto..." + #. module: bank_loan #: field:bank.loan,capital:0 msgid "Capital" msgstr "Capital" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:87 +#: code:addons/bank_loan/models/bank_loan.py:103 #, python-format msgid "Capital must be >= 0!" msgstr "¡El Capital debe ser mayor o igual a 0!" @@ -122,7 +129,8 @@ msgid "Created on" msgstr "Creado el" #. module: bank_loan -#: field:bank.loan,currency_id:0 field:res.bank.loan.line,currency_id:0 +#: field:bank.loan,currency_id:0 field:bank.loan.concept,currency_id:0 +#: field:res.bank.loan.line,currency_id:0 msgid "Currency" msgstr "Moneda" @@ -137,23 +145,6 @@ msgstr "Nombre a mostrar" msgid "Draft" msgstr "Borrador" -#. module: bank_loan -#: field:bank.loan,maturity_date:0 field:bank.loan.line,maturity_date:0 -msgid "Maturity Date" -msgstr "Fecha de Vencimiento" - -#. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:114 -#, python-format -msgid "Maturity Date must be >= Rate Type Close Date!" -msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Cierre del TC!" - -#. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:215 -#, python-format -msgid "Maturity Date must be >= to the Loan Maturity Date (%s)!" -msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Vencimiento del Préstamo (%s)!" - #. module: bank_loan #: field:bank.loan,id:0 field:bank.loan.concept,id:0 field:bank.loan.line,id:0 #: field:res.bank.loan.line,id:0 @@ -166,7 +157,7 @@ msgid "Interest" msgstr "Interés" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:93 +#: code:addons/bank_loan/models/bank_loan.py:109 #, python-format msgid "Interest must be >= 0!" msgstr "¡El Interés debe ser mayor o igual a 0!" @@ -201,7 +192,7 @@ msgid "Lines" msgstr "LÃneas" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:105 +#: code:addons/bank_loan/models/bank_loan.py:121 #, python-format msgid "Lines amount is misconfigured, it can't be more than %s!" msgstr "" @@ -225,7 +216,7 @@ msgid "Loan Lines" msgstr "Préstamos" #. module: bank_loan -#: code:addons/bank_loan/models/res_bank.py:109 +#: code:addons/bank_loan/models/res_bank.py:105 #: sql_constraint:res.bank.loan.line:0 #, python-format msgid "Loan duplicated!" @@ -236,18 +227,36 @@ msgstr "¡Préstamo duplicado!" msgid "Maturities" msgstr "Vencimientos" +#. module: bank_loan +#: field:bank.loan,maturity_date:0 field:bank.loan.line,maturity_date:0 +msgid "Maturity Date" +msgstr "Fecha de Vencimiento" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:130 +#, python-format +msgid "Maturity Date must be >= Rate Type Close Date!" +msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Cierre del TC!" + +#. module: bank_loan +#: code:addons/bank_loan/models/bank_loan.py:232 +#, python-format +msgid "Maturity Date must be >= to the Loan Maturity Date (%s)!" +msgstr "¡La Fecha de Vencimiento debe ser mayor o igual a la Fecha de Vencimiento del Préstamo (%s)!" + #. module: bank_loan #: field:bank.loan,nar:0 msgid "NAR" msgstr "TNA" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:99 +#: code:addons/bank_loan/models/bank_loan.py:115 #, python-format msgid "NAR must be >= 0!" msgstr "¡TNA debe ser mayor o igual a 0!" #. module: bank_loan +#: view:bank.loan.concept:bank_loan.view_bank_loan_concept_form #: field:bank.loan.concept,name:0 msgid "Name" msgstr "Nombre" @@ -258,7 +267,7 @@ msgid "Next Maturity Date" msgstr "Siguiente Fecha de Vencimiento" #. module: bank_loan -#: view:bank.loan:bank_loan.view_bank_loan_form selection:bank.loan,state:0 +#: selection:bank.loan,state:0 msgid "Open" msgstr "Abierto" @@ -298,8 +307,8 @@ msgid "Rate Type Close Date" msgstr "Fecha de cierre del TC" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:75 -#: code:addons/bank_loan/models/bank_loan.py:81 +#: code:addons/bank_loan/models/bank_loan.py:91 +#: code:addons/bank_loan/models/bank_loan.py:97 #, python-format msgid "Rate Type must be >= 0!" msgstr "¡El Tipo de Cambio debe ser mayor o igual a 0!" @@ -341,14 +350,14 @@ msgid "Term" msgstr "Plazo" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:223 +#: code:addons/bank_loan/models/bank_loan.py:240 #: sql_constraint:bank.loan.line:0 #, python-format msgid "The Maturity is duplicated!" msgstr "¡El Vencimiento está duplicado!" #. module: bank_loan -#: code:addons/bank_loan/models/bank_loan.py:41 +#: code:addons/bank_loan/models/bank_loan.py:59 #, python-format msgid "This concept already exists!" msgstr "¡Este Concepto ya existe!" diff --git a/models/bank_loan.py b/models/bank_loan.py index 3a29160..86b0b83 100644 --- a/models/bank_loan.py +++ b/models/bank_loan.py @@ -32,15 +32,35 @@ class BankLoanConcept(models.Model): _name = 'bank.loan.concept' _description = 'Bank Loan Concept' - @api.constrains("name") + @api.multi + def name_get(self): + ret = [] + for concept in self: + name = "%s (%s)" % (concept.name, concept.currency_id.name) + ret.append((concept.id, name)) + + return ret + + @api.returns("res.currency") + def _get_default_currency(self): + return self.env.ref("base.USD") + + @api.constrains("name", "currency_id") def check_name_uniq(self): for concept in self: - count = self.env["bank.loan.concept"].search_count([("name", "ilike", concept.name), - ("id", "!=", concept.id)]) + count = self.env["bank.loan.concept"].search_count( + [ + ("name", "ilike", concept.name), + ("currency_id", "=", concept.currency_id.id), + ("id", "!=", concept.id), + ] + ) if count > 0: raise exceptions.ValidationError(_("This concept already exists!")) name = fields.Char(string='Name', size=256, required=True) + currency_id = fields.Many2one('res.currency', string='Currency', required=True, + default=_get_default_currency) class BankLoan(models.Model): @@ -48,10 +68,6 @@ class BankLoan(models.Model): _description = 'Bank Loan' _rec_name = "bank_id" - @api.returns("res.currency") - def _get_default_currency(self): - return self.env.ref("base.USD") - @api.multi def name_get(self): ret = [] @@ -116,8 +132,7 @@ class BankLoan(models.Model): bank_id = fields.Many2one('res.bank', string='Bank', required=True) concept_id = fields.Many2one('bank.loan.concept', string='Concept', required=True) - currency_id = fields.Many2one('res.currency', string='Currency', required=True, - default=_get_default_currency) + currency_id = fields.Many2one(related="concept_id.currency_id", store=True) operation_nbr = fields.Char(string='Operation N°', size=128) total_amount = fields.Float(string='Amount', digits=dp.get_precision('Account')) request_rate_type = fields.Float(string='Rate Type (Request)', diff --git a/models/res_bank.py b/models/res_bank.py index cd3f123..c9977c0 100644 --- a/models/res_bank.py +++ b/models/res_bank.py @@ -61,8 +61,7 @@ class ResBankLoanLine(models.Model): self.stop_date = "%s-12-31" % start_date.year bank_id = fields.Many2one('res.bank', string='Bank', required=True) - currency_id = fields.Many2one('res.currency', string='Currency', required=True, - default=_get_default_currency) + currency_id = fields.Many2one(related="concept_id.currency_id", store=True) concept_id = fields.Many2one('bank.loan.concept', string='Concept', required=True) amount_to_loan = fields.Float(string='Amount to Loan', digits=dp.get_precision('Account')) amount_loaned = fields.Float(string='Amount Loaned', digits=dp.get_precision('Account'), diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index 9c68d6d..b5cc1b6 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -53,7 +53,7 @@ <field name="total_amount" class="oe_inline" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> </h2> <group col="4" colspan="2" string="Rate Type"> - <field name="currency_id" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> + <field name="currency_id" readonly="1"/> <field name="rate_type_date" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> <field name="request_rate_type" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> <field name="nar" attrs="{'readonly': [('state', 'not in', ('draft',))]}"/> @@ -128,5 +128,40 @@ <field name="view_id" ref="view_bank_loan_tree"/> </record> + <!-- Concept --> + + <record id="view_bank_loan_concept_tree" model="ir.ui.view"> + <field name="name">bank.loan.concept.tree</field> + <field name="model">bank.loan.concept</field> + <field name="type">tree</field> + <field name="priority" eval="8"/> + <field name="arch" type="xml"> + <tree string="Bank Loan Concept"> + <field name="name"/> + <field name="currency_id"/> + </tree> + </field> + </record> + + <record id="view_bank_loan_concept_form" model="ir.ui.view"> + <field name="name">bank.loan.concept.form</field> + <field name="model">bank.loan.concept</field> + <field name="type">form</field> + <field name="priority" eval="8"/> + <field name="arch" type="xml"> + <form string="Bank Loan Concept"> + <sheet> + <h1> + <label for="name" string="Name" class="oe_inline"/> + <field name="name" placeholder="Bank Loan Concept Name" class="oe_inline"/> + </h1> + <group col="4" colspan="2"> + <field name="currency_id"/> + </group> + </sheet> + </form> + </field> + </record> + </data> </openerp> diff --git a/views/res_bank_view.xml b/views/res_bank_view.xml index 5f55ddd..9b05b80 100644 --- a/views/res_bank_view.xml +++ b/views/res_bank_view.xml @@ -13,7 +13,7 @@ <page string="Loan Lines"> <field name="loan_line_ids"> <tree editable="bottom"> - <field name="currency_id"/> + <field name="currency_id" readonly="1"/> <field name="concept_id"/> <field name="amount_to_loan"/> <field name="amount_loaned"/> -- GitLab From ab235ee84fb8bbf7df7cf344f1779f7a0ba34cbc Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Tue, 27 Feb 2018 11:47:12 -0300 Subject: [PATCH 6/7] [I18N] Update i18n --- i18n/es_AR.po | 6 +++++- views/bank_loan_view.xml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/i18n/es_AR.po b/i18n/es_AR.po index 039a588..40e5092 100644 --- a/i18n/es_AR.po +++ b/i18n/es_AR.po @@ -67,12 +67,16 @@ msgstr "Banco" #: view:bank.loan:bank_loan.view_bank_loan_form #: view:bank.loan:bank_loan.view_bank_loan_search #: view:bank.loan:bank_loan.view_bank_loan_tree -#: model:ir.actions.act_window,name:bank_loan.act_open_bank_loan_view #: model:ir.model,name:bank_loan.model_bank_loan #: model:ir.ui.menu,name:bank_loan.menu_bank_loan_act msgid "Bank Loan" msgstr "Préstamo Bancario" +#. module: bank_loan +#: model:ir.actions.act_window,name:bank_loan.act_open_bank_loan_view +msgid "Bank Loans" +msgstr "Préstamos Bancarios" + #. module: bank_loan #: view:bank.loan.concept:bank_loan.view_bank_loan_concept_form #: view:bank.loan.concept:bank_loan.view_bank_loan_concept_tree diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index b5cc1b6..a30b194 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -99,7 +99,7 @@ </record> <record model="ir.actions.act_window" id="act_open_bank_loan_view"> - <field name="name">Bank Loan</field> + <field name="name">Bank Loans</field> <field name="type">ir.actions.act_window</field> <field name="res_model">bank.loan</field> <field name="view_type">form</field> -- GitLab From 0375609e65fd41f6e6d80e15fa3929b86e2a94fb Mon Sep 17 00:00:00 2001 From: Gabriel Davini <gabrielfranciscodavini@gmail.com> Date: Fri, 23 Mar 2018 04:38:26 -0300 Subject: [PATCH 7/7] [MOD] Better bank loan view --- TODO | 3 +++ views/bank_loan_view.xml | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 8b13789..627d2f5 100644 --- a/TODO +++ b/TODO @@ -1 +1,4 @@ +Bank Loan +--------- +* Cambiar 'Préstamos' de la pestaña de Bancos a 'LÃnea Crediticia' o 'Calificación Crediticia'. diff --git a/views/bank_loan_view.xml b/views/bank_loan_view.xml index a30b194..4b35bce 100644 --- a/views/bank_loan_view.xml +++ b/views/bank_loan_view.xml @@ -74,7 +74,7 @@ <field name="line_ids" nolabel="1" attrs="{'readonly': [('state', 'not in', ('draft',))]}"> <tree editable="bottom"> - <field name="amount" required="1"/> + <field name="amount" required="1" sum="Total Amount"/> <field name="maturity_date"/> </tree> </field> @@ -94,6 +94,26 @@ <field name="arch" type="xml"> <search string="Bank Loan"> <field name="bank_id" select="True"/> + <field name="concept_id"/> + <field name="operation_nbr"/> + <field name="total_amount"/> + <field name="maturity_date"/> + <!--<field name="next_maturity_date"/>--> + <field name="close_date"/> + <field name="rate_type_date"/> + <field name="term_days"/> + <filter string="Draft" domain="[('state', '=', 'draft')]" name="filter_by_draft"/> + <filter string="Open" domain="[('state', '=', 'open')]" name="filter_by_open"/> + <filter string="Posted" domain="[('state', '=', 'posted')]" name="filter_by_posted"/> + <filter string="Closed" domain="[('state', '=', 'closed')]" name="filter_by_closed"/> + <group expand="0" string="Group By..."> + <filter string="Concept" context="{'group_by': 'concept_id'}" name="group_by_concept_id"/> + <filter string="Bank" context="{'group_by': 'bank_id'}" name="group_by_bank_id"/> + <filter string="Maturity Date" context="{'group_by': 'maturity_date'}" name="group_by_maturity_date"/> + <filter string="Close Date" context="{'group_by': 'close_date'}" name="group_by_close_date"/> + <filter string="Rate Type Close Date" context="{'group_by': 'rate_type_date'}" + name="group_by_rate_type_date"/> + </group> </search> </field> </record> @@ -106,7 +126,7 @@ <field name="view_mode">tree,form</field> <field name="search_view_id" ref="view_bank_loan_search"/> <field name="domain">[]</field> - <field name="context">{}</field> + <field name="context">{'search_default_group_by_concept_id': 1}</field> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Click to create a new Bank Loan -- GitLab