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