From 4f979236f72b82dc861dd07dbd5b98c7c991bf7f Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Mon, 21 Sep 2020 09:40:56 +0200 Subject: [PATCH 01/21] [ADD] account_payment_promissory_note: Module that adds a due date on payments --- account_payment_promissory_note/README.rst | 86 ++++ account_payment_promissory_note/__init__.py | 2 + .../__manifest__.py | 18 + .../i18n/account_payment_promissory_note.pot | 45 ++ account_payment_promissory_note/i18n/es.po | 48 ++ .../models/__init__.py | 2 + .../models/account_abstract_payment.py | 21 + .../models/account_payment.py | 35 ++ .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 5 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 435 ++++++++++++++++++ .../tests/__init__.py | 2 + .../test_account_payment_promissory_note.py | 78 ++++ .../views/account_payment_invoice_view.xml | 13 + .../views/account_payment_view.xml | 36 ++ .../wizard/__init__.py | 1 + .../wizard/account_register_payments.py | 43 ++ 19 files changed, 876 insertions(+) create mode 100644 account_payment_promissory_note/README.rst create mode 100644 account_payment_promissory_note/__init__.py create mode 100644 account_payment_promissory_note/__manifest__.py create mode 100644 account_payment_promissory_note/i18n/account_payment_promissory_note.pot create mode 100644 account_payment_promissory_note/i18n/es.po create mode 100644 account_payment_promissory_note/models/__init__.py create mode 100644 account_payment_promissory_note/models/account_abstract_payment.py create mode 100644 account_payment_promissory_note/models/account_payment.py create mode 100644 account_payment_promissory_note/readme/CONTRIBUTORS.rst create mode 100644 account_payment_promissory_note/readme/DESCRIPTION.rst create mode 100644 account_payment_promissory_note/readme/USAGE.rst create mode 100644 account_payment_promissory_note/static/description/icon.png create mode 100644 account_payment_promissory_note/static/description/index.html create mode 100644 account_payment_promissory_note/tests/__init__.py create mode 100644 account_payment_promissory_note/tests/test_account_payment_promissory_note.py create mode 100644 account_payment_promissory_note/views/account_payment_invoice_view.xml create mode 100644 account_payment_promissory_note/views/account_payment_view.xml create mode 100644 account_payment_promissory_note/wizard/__init__.py create mode 100644 account_payment_promissory_note/wizard/account_register_payments.py diff --git a/account_payment_promissory_note/README.rst b/account_payment_promissory_note/README.rst new file mode 100644 index 00000000000..4499d7be187 --- /dev/null +++ b/account_payment_promissory_note/README.rst @@ -0,0 +1,86 @@ +=============================== +Account Payment Promissory Note +=============================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--payment-lightgray.png?logo=github + :target: https://github.com/OCA/account-payment/tree/12.0/account_payment_promissory_note + :alt: OCA/account-payment +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-payment-12-0/account-payment-12-0-account_payment_promissory_note + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/96/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to set a date due in a payment, as promissory notes require. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +#. Go to Invoicing > Customers / Vendors > Payments. +#. Create a new one and select the 'Promissory Note' option. +#. Now you can select a date for the due of the promissory note + (Automatically will be selected the lastest due date of the invoices + if any selected). + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Sergio Teruel + * Alexandre Díaz + * Carlos Roca + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/account-payment `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_payment_promissory_note/__init__.py b/account_payment_promissory_note/__init__.py new file mode 100644 index 00000000000..9b4296142f4 --- /dev/null +++ b/account_payment_promissory_note/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py new file mode 100644 index 00000000000..90c94f71ddc --- /dev/null +++ b/account_payment_promissory_note/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2018 Tecnativa - Carlos Dauden +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'Account Payment Promissory Note', + 'version': '12.0.1.0.0', + 'license': 'AGPL-3', + 'author': "Tecnativa," + "Odoo Community Association (OCA)", + 'category': 'Invoicing Management', + 'website': "https://github.com/OCA/account-payment", + 'depends': ['account'], + 'data': [ + 'views/account_payment_view.xml', + 'views/account_payment_invoice_view.xml' + ], + 'installable': True, +} diff --git a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot new file mode 100644 index 00000000000..6469b81bd1b --- /dev/null +++ b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_promissory_note +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_abstract_payment +msgid "Contains the logic shared between models which allows to register payments" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__date_due +msgid "Due Date" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment +msgid "Payments" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search +msgid "Promissory Note" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_register_payments +msgid "Register Payments" +msgstr "" + diff --git a/account_payment_promissory_note/i18n/es.po b/account_payment_promissory_note/i18n/es.po new file mode 100644 index 00000000000..6931a103c59 --- /dev/null +++ b/account_payment_promissory_note/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_payment_promissory_note +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-14 08:53+0000\n" +"PO-Revision-Date: 2020-10-14 10:55+0200\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: Carlos \n" +"Language: es\n" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_abstract_payment +msgid "Contains the logic shared between models which allows to register payments" +msgstr "Contiene la lógica compartida entre los modelos que permiten el registro de pagos" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search +msgid "Promissory Note" +msgstr "Pagaré" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__date_due +msgid "Due Date" +msgstr "Fecha de Vencimiento" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment +msgid "Payments" +msgstr "Pagos" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_register_payments +msgid "Register Payments" +msgstr "Registrar pagos" diff --git a/account_payment_promissory_note/models/__init__.py b/account_payment_promissory_note/models/__init__.py new file mode 100644 index 00000000000..469bb6de4c9 --- /dev/null +++ b/account_payment_promissory_note/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_abstract_payment +from . import account_payment diff --git a/account_payment_promissory_note/models/account_abstract_payment.py b/account_payment_promissory_note/models/account_abstract_payment.py new file mode 100644 index 00000000000..f94da120234 --- /dev/null +++ b/account_payment_promissory_note/models/account_abstract_payment.py @@ -0,0 +1,21 @@ +# Copyright 2018 Sergio Teruel +# Copyright 2018 Carlos Dauden +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AccountAbstractPayment(models.AbstractModel): + _inherit = 'account.abstract.payment' + + promissory_note = fields.Boolean( + string='Promissory Note', + ) + date_due = fields.Date( + string='Due Date', + ) + + @api.onchange('promissory_note') + def _onchange_promissory_note(self): + if not self.promissory_note: + self.date_due = False diff --git a/account_payment_promissory_note/models/account_payment.py b/account_payment_promissory_note/models/account_payment.py new file mode 100644 index 00000000000..367e18ff180 --- /dev/null +++ b/account_payment_promissory_note/models/account_payment.py @@ -0,0 +1,35 @@ +# Copyright 2018 Sergio Teruel +# Copyright 2018 Carlos Dauden +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AccountPayment(models.Model): + _name = 'account.payment' + _inherit = ['account.payment', 'account.abstract.payment'] + + promissory_note = fields.Boolean( + readonly=True, + states={'draft': [('readonly', False)]}, + ) + date_due = fields.Date( + readonly=True, + states={'draft': [('readonly', False)]}, + ) + + def _get_liquidity_move_line_vals(self, amount): + res = super()._get_liquidity_move_line_vals(amount) + if self.promissory_note: + res['date_maturity'] = self.date_due + return res + + @api.onchange('promissory_note') + def _onchange_promissory_note(self): + super()._onchange_promissory_note() + if not self.date_due and self.promissory_note: + invoices = False + if self._name == 'account.payment': + invoices = self.invoice_ids + if invoices: + self.date_due = max(invoices.mapped('date_due')) diff --git a/account_payment_promissory_note/readme/CONTRIBUTORS.rst b/account_payment_promissory_note/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..36e69ea6e22 --- /dev/null +++ b/account_payment_promissory_note/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Tecnativa `_: + + * Sergio Teruel + * Alexandre Díaz + * Carlos Roca diff --git a/account_payment_promissory_note/readme/DESCRIPTION.rst b/account_payment_promissory_note/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..fe6c6f500c6 --- /dev/null +++ b/account_payment_promissory_note/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows you to set a date due in a payment, as promissory notes require. diff --git a/account_payment_promissory_note/readme/USAGE.rst b/account_payment_promissory_note/readme/USAGE.rst new file mode 100644 index 00000000000..757cdbfde7b --- /dev/null +++ b/account_payment_promissory_note/readme/USAGE.rst @@ -0,0 +1,5 @@ +#. Go to Invoicing > Customers / Vendors > Payments. +#. Create a new one and select the 'Promissory Note' option. +#. Now you can select a date for the due of the promissory note + (Automatically will be selected the lastest due date of the invoices + if any selected). diff --git a/account_payment_promissory_note/static/description/icon.png b/account_payment_promissory_note/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_payment_promissory_note/static/description/index.html b/account_payment_promissory_note/static/description/index.html new file mode 100644 index 00000000000..88196172e73 --- /dev/null +++ b/account_payment_promissory_note/static/description/index.html @@ -0,0 +1,435 @@ + + + + + + +Account Payment Promissory Note + + + +
+

Account Payment Promissory Note

+ + +

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runbot

+

This module allows you to set a date due in a payment, as promissory notes require.

+

Table of contents

+ +
+

Usage

+
    +
  1. Go to Invoicing > Customers / Vendors > Payments.
  2. +
  3. Create a new one and select the ‘Promissory Note’ option.
  4. +
  5. Now you can select a date for the due of the promissory note +(Automatically will be selected the lastest due date of the invoices +if any selected).
  6. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Sergio Teruel
    • +
    • Alexandre Díaz
    • +
    • Carlos Roca
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/account-payment project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_payment_promissory_note/tests/__init__.py b/account_payment_promissory_note/tests/__init__.py new file mode 100644 index 00000000000..0bdf6c91e44 --- /dev/null +++ b/account_payment_promissory_note/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_account_payment_promissory_note + diff --git a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py new file mode 100644 index 00000000000..3378fedf03b --- /dev/null +++ b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py @@ -0,0 +1,78 @@ +# Copyright 2020 Tecnativa - Carlos Roca. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from odoo.tests.common import TransactionCase +import datetime + + +class TestAccountPaymentPromissoryNote(TransactionCase): + + def setUp(self): + super(TestAccountPaymentPromissoryNote, self).setUp() + payment_method = self.env['account.payment.method'].create({ + 'name': 'Test_MTH', + 'code': 'TST', + 'payment_type': 'inbound', + }) + self.payment_1 = self.env['account.payment'].create({ + 'payment_type': 'inbound', + 'payment_method_id': payment_method.id, + 'amount': 50.00, + 'journal_id': self.env['account.journal'].search( + [('type', '=', 'sale')], limit=1).id, + }) + self.company = self.env.ref('base.main_company') + partner = self.env.ref('base.partner_demo') + self.payment_2 = self.env['account.payment'].create({ + 'invoice_ids': [ + ( + 0, + 0, + { + 'company_id': self.company.id, + 'partner_id': partner.id, + 'date_invoice': '2020-09-14', + 'date_due': '2020-09-23', + 'type': 'out_invoice', + } + ), + ( + 0, + 0, + { + 'company_id': self.company.id, + 'partner_id': partner.id, + 'date_invoice': '2020-09-14', + 'date_due': '2020-09-22', + 'type': 'out_invoice', + } + ), + ], + 'payment_type': 'inbound', + 'payment_method_id': payment_method.id, + 'amount': 50.00, + 'journal_id': self.env['account.journal'].search( + [('type', '=', 'sale')], limit=1).id, + }) + + def test_1_onchange_promissory_note_without_invoices(self): + self.payment_1.date_due = '2020-09-21' + self.payment_1._onchange_promissory_note() + self.assertFalse(self.payment_1.date_due) + self.payment_1.promissory_note = True + self.payment_1.date_due = '2020-09-21' + self.payment_1._onchange_promissory_note() + self.assertEqual( + self.payment_1.date_due, + datetime.datetime.strptime('2020-09-21', '%Y-%m-%d').date() + ) + + def test_2_onchange_promissory_note_with_invoices(self): + self.payment_2.date_due = '2020-09-21' + self.payment_2._onchange_promissory_note() + self.assertFalse(self.payment_2.date_due) + self.payment_2.promissory_note = True + self.payment_2._onchange_promissory_note() + self.assertEqual( + self.payment_2.date_due, + datetime.datetime.strptime('2020-09-23', '%Y-%m-%d').date() + ) diff --git a/account_payment_promissory_note/views/account_payment_invoice_view.xml b/account_payment_promissory_note/views/account_payment_invoice_view.xml new file mode 100644 index 00000000000..972a75d7f98 --- /dev/null +++ b/account_payment_promissory_note/views/account_payment_invoice_view.xml @@ -0,0 +1,13 @@ + + + + account.register.payments + + + + + + + + + diff --git a/account_payment_promissory_note/views/account_payment_view.xml b/account_payment_promissory_note/views/account_payment_view.xml new file mode 100644 index 00000000000..ba0769895b7 --- /dev/null +++ b/account_payment_promissory_note/views/account_payment_view.xml @@ -0,0 +1,36 @@ + + + + + account.payment + + + + + + + + + + + account.payment + + + + + + + + + + + account.payment + + + + + + + + + diff --git a/account_payment_promissory_note/wizard/__init__.py b/account_payment_promissory_note/wizard/__init__.py new file mode 100644 index 00000000000..76cc7bd6abc --- /dev/null +++ b/account_payment_promissory_note/wizard/__init__.py @@ -0,0 +1 @@ +from . import account_register_payments diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py new file mode 100644 index 00000000000..5d3ac4fb9d3 --- /dev/null +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -0,0 +1,43 @@ +# Copyright 2018 Sergio Teruel +# Copyright 2018 Carlos Dauden +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class AccountRegisterPayments(models.TransientModel): + _name = 'account.register.payments' + _inherit = ['account.register.payments', 'account.abstract.payment'] + + def get_payment_vals(self): + vals = super(AccountRegisterPayments, self).get_payment_vals() + vals.update({ + 'promissory_note': self.promissory_note, + 'date_due': self.date_due, + }) + return vals + + def create_payment(self): + # Overwrite original method for obtain payment and return action + payment = self.env['account.payment'].create(self.get_payment_vals()) + payment.post() + if payment.payment_method_id != self.env.ref( + 'account_check_printing.account_payment_method_check'): + return {'type': 'ir.actions.act_window_close'} + action = self.env.ref( + 'account.action_account_payments_payable').read()[0] + action['views'] = [ + (self.env.ref('account.view_account_payment_form').id, 'form')] + action['res_id'] = payment.id + return action + + @api.onchange('promissory_note') + def _onchange_promissory_note(self): + super()._onchange_promissory_note() + if not self.date_due and self.promissory_note: + invoices = False + if self._name == 'account.register.payments': + active_ids = self._context.get('active_ids') + invoices = self.env['account.invoice'].browse(active_ids) + if invoices: + self.date_due = max(invoices.mapped('date_due')) From 8f5ac7dbd12aa08893d211ce4e310474af9995ac Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Fri, 23 Oct 2020 12:04:56 +0200 Subject: [PATCH 02/21] [FIX+IMP] account_payment_promissory_note: Bug on payments + Unnecesary inheritance Fixed a bug that causes the expiration date not to be defined by default Eliminated the inheritance on 'account.payment' and 'account.register.payment' of 'account.abstract.payment' because the main models deppend on it yet. --- .../__manifest__.py | 2 +- .../models/account_payment.py | 3 +- .../wizard/account_register_payments.py | 30 +++++-------------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py index 90c94f71ddc..936e1e77c44 100644 --- a/account_payment_promissory_note/__manifest__.py +++ b/account_payment_promissory_note/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Account Payment Promissory Note', - 'version': '12.0.1.0.0', + 'version': '12.0.2.0.0', 'license': 'AGPL-3', 'author': "Tecnativa," "Odoo Community Association (OCA)", diff --git a/account_payment_promissory_note/models/account_payment.py b/account_payment_promissory_note/models/account_payment.py index 367e18ff180..22296589c00 100644 --- a/account_payment_promissory_note/models/account_payment.py +++ b/account_payment_promissory_note/models/account_payment.py @@ -6,8 +6,7 @@ class AccountPayment(models.Model): - _name = 'account.payment' - _inherit = ['account.payment', 'account.abstract.payment'] + _inherit = 'account.payment' promissory_note = fields.Boolean( readonly=True, diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 5d3ac4fb9d3..152544adc9b 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -6,31 +6,17 @@ class AccountRegisterPayments(models.TransientModel): - _name = 'account.register.payments' - _inherit = ['account.register.payments', 'account.abstract.payment'] + _inherit = 'account.register.payments' - def get_payment_vals(self): - vals = super(AccountRegisterPayments, self).get_payment_vals() - vals.update({ - 'promissory_note': self.promissory_note, - 'date_due': self.date_due, - }) + def get_payments_vals(self): + vals = super(AccountRegisterPayments, self).get_payments_vals() + for val in vals: + val.update({ + 'promissory_note': self.promissory_note, + 'date_due': self.date_due, + }) return vals - def create_payment(self): - # Overwrite original method for obtain payment and return action - payment = self.env['account.payment'].create(self.get_payment_vals()) - payment.post() - if payment.payment_method_id != self.env.ref( - 'account_check_printing.account_payment_method_check'): - return {'type': 'ir.actions.act_window_close'} - action = self.env.ref( - 'account.action_account_payments_payable').read()[0] - action['views'] = [ - (self.env.ref('account.view_account_payment_form').id, 'form')] - action['res_id'] = payment.id - return action - @api.onchange('promissory_note') def _onchange_promissory_note(self): super()._onchange_promissory_note() From ddee5f5cf92c24a43c50577f7025bc7c53e64ad9 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Thu, 29 Oct 2020 09:48:36 +0100 Subject: [PATCH 03/21] [IMP] account_payment_promissory_note: black, isort, prettier --- .../__manifest__.py | 23 ++-- .../models/account_abstract_payment.py | 12 +- .../models/account_payment.py | 18 ++- .../tests/__init__.py | 1 - .../test_account_payment_promissory_note.py | 108 +++++++++--------- .../views/account_payment_invoice_view.xml | 9 +- .../views/account_payment_view.xml | 74 ++++++------ .../wizard/account_register_payments.py | 19 ++- 8 files changed, 133 insertions(+), 131 deletions(-) diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py index 936e1e77c44..182c2ffb7ac 100644 --- a/account_payment_promissory_note/__manifest__.py +++ b/account_payment_promissory_note/__manifest__.py @@ -2,17 +2,16 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { - 'name': 'Account Payment Promissory Note', - 'version': '12.0.2.0.0', - 'license': 'AGPL-3', - 'author': "Tecnativa," - "Odoo Community Association (OCA)", - 'category': 'Invoicing Management', - 'website': "https://github.com/OCA/account-payment", - 'depends': ['account'], - 'data': [ - 'views/account_payment_view.xml', - 'views/account_payment_invoice_view.xml' + "name": "Account Payment Promissory Note", + "version": "12.0.2.0.0", + "license": "AGPL-3", + "author": "Tecnativa," "Odoo Community Association (OCA)", + "category": "Invoicing Management", + "website": "https://github.com/OCA/account-payment", + "depends": ["account"], + "data": [ + "views/account_payment_view.xml", + "views/account_payment_invoice_view.xml", ], - 'installable': True, + "installable": True, } diff --git a/account_payment_promissory_note/models/account_abstract_payment.py b/account_payment_promissory_note/models/account_abstract_payment.py index f94da120234..ae7d7e4f8c0 100644 --- a/account_payment_promissory_note/models/account_abstract_payment.py +++ b/account_payment_promissory_note/models/account_abstract_payment.py @@ -6,16 +6,12 @@ class AccountAbstractPayment(models.AbstractModel): - _inherit = 'account.abstract.payment' + _inherit = "account.abstract.payment" - promissory_note = fields.Boolean( - string='Promissory Note', - ) - date_due = fields.Date( - string='Due Date', - ) + promissory_note = fields.Boolean(string="Promissory Note",) + date_due = fields.Date(string="Due Date",) - @api.onchange('promissory_note') + @api.onchange("promissory_note") def _onchange_promissory_note(self): if not self.promissory_note: self.date_due = False diff --git a/account_payment_promissory_note/models/account_payment.py b/account_payment_promissory_note/models/account_payment.py index 22296589c00..a6abc4fd939 100644 --- a/account_payment_promissory_note/models/account_payment.py +++ b/account_payment_promissory_note/models/account_payment.py @@ -6,29 +6,25 @@ class AccountPayment(models.Model): - _inherit = 'account.payment' + _inherit = "account.payment" promissory_note = fields.Boolean( - readonly=True, - states={'draft': [('readonly', False)]}, - ) - date_due = fields.Date( - readonly=True, - states={'draft': [('readonly', False)]}, + readonly=True, states={"draft": [("readonly", False)]}, ) + date_due = fields.Date(readonly=True, states={"draft": [("readonly", False)]},) def _get_liquidity_move_line_vals(self, amount): res = super()._get_liquidity_move_line_vals(amount) if self.promissory_note: - res['date_maturity'] = self.date_due + res["date_maturity"] = self.date_due return res - @api.onchange('promissory_note') + @api.onchange("promissory_note") def _onchange_promissory_note(self): super()._onchange_promissory_note() if not self.date_due and self.promissory_note: invoices = False - if self._name == 'account.payment': + if self._name == "account.payment": invoices = self.invoice_ids if invoices: - self.date_due = max(invoices.mapped('date_due')) + self.date_due = max(invoices.mapped("date_due")) diff --git a/account_payment_promissory_note/tests/__init__.py b/account_payment_promissory_note/tests/__init__.py index 0bdf6c91e44..227c4a785bb 100644 --- a/account_payment_promissory_note/tests/__init__.py +++ b/account_payment_promissory_note/tests/__init__.py @@ -1,2 +1 @@ from . import test_account_payment_promissory_note - diff --git a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py index 3378fedf03b..bcb39f78507 100644 --- a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py +++ b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py @@ -1,78 +1,82 @@ # Copyright 2020 Tecnativa - Carlos Roca. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo.tests.common import TransactionCase import datetime +from odoo.tests.common import TransactionCase + class TestAccountPaymentPromissoryNote(TransactionCase): - def setUp(self): super(TestAccountPaymentPromissoryNote, self).setUp() - payment_method = self.env['account.payment.method'].create({ - 'name': 'Test_MTH', - 'code': 'TST', - 'payment_type': 'inbound', - }) - self.payment_1 = self.env['account.payment'].create({ - 'payment_type': 'inbound', - 'payment_method_id': payment_method.id, - 'amount': 50.00, - 'journal_id': self.env['account.journal'].search( - [('type', '=', 'sale')], limit=1).id, - }) - self.company = self.env.ref('base.main_company') - partner = self.env.ref('base.partner_demo') - self.payment_2 = self.env['account.payment'].create({ - 'invoice_ids': [ - ( - 0, - 0, - { - 'company_id': self.company.id, - 'partner_id': partner.id, - 'date_invoice': '2020-09-14', - 'date_due': '2020-09-23', - 'type': 'out_invoice', - } - ), - ( - 0, - 0, - { - 'company_id': self.company.id, - 'partner_id': partner.id, - 'date_invoice': '2020-09-14', - 'date_due': '2020-09-22', - 'type': 'out_invoice', - } - ), - ], - 'payment_type': 'inbound', - 'payment_method_id': payment_method.id, - 'amount': 50.00, - 'journal_id': self.env['account.journal'].search( - [('type', '=', 'sale')], limit=1).id, - }) + payment_method = self.env["account.payment.method"].create( + {"name": "Test_MTH", "code": "TST", "payment_type": "inbound"} + ) + self.payment_1 = self.env["account.payment"].create( + { + "payment_type": "inbound", + "payment_method_id": payment_method.id, + "amount": 50.00, + "journal_id": self.env["account.journal"] + .search([("type", "=", "sale")], limit=1) + .id, + } + ) + self.company = self.env.ref("base.main_company") + partner = self.env.ref("base.partner_demo") + self.payment_2 = self.env["account.payment"].create( + { + "invoice_ids": [ + ( + 0, + 0, + { + "company_id": self.company.id, + "partner_id": partner.id, + "date_invoice": "2020-09-14", + "date_due": "2020-09-23", + "type": "out_invoice", + }, + ), + ( + 0, + 0, + { + "company_id": self.company.id, + "partner_id": partner.id, + "date_invoice": "2020-09-14", + "date_due": "2020-09-22", + "type": "out_invoice", + }, + ), + ], + "payment_type": "inbound", + "payment_method_id": payment_method.id, + "amount": 50.00, + "journal_id": self.env["account.journal"] + .search([("type", "=", "sale")], limit=1) + .id, + } + ) def test_1_onchange_promissory_note_without_invoices(self): - self.payment_1.date_due = '2020-09-21' + self.payment_1.date_due = "2020-09-21" self.payment_1._onchange_promissory_note() self.assertFalse(self.payment_1.date_due) self.payment_1.promissory_note = True - self.payment_1.date_due = '2020-09-21' + self.payment_1.date_due = "2020-09-21" self.payment_1._onchange_promissory_note() self.assertEqual( self.payment_1.date_due, - datetime.datetime.strptime('2020-09-21', '%Y-%m-%d').date() + datetime.datetime.strptime("2020-09-21", "%Y-%m-%d").date(), ) def test_2_onchange_promissory_note_with_invoices(self): - self.payment_2.date_due = '2020-09-21' + self.payment_2.date_due = "2020-09-21" self.payment_2._onchange_promissory_note() self.assertFalse(self.payment_2.date_due) self.payment_2.promissory_note = True self.payment_2._onchange_promissory_note() self.assertEqual( self.payment_2.date_due, - datetime.datetime.strptime('2020-09-23', '%Y-%m-%d').date() + datetime.datetime.strptime("2020-09-23", "%Y-%m-%d").date(), ) diff --git a/account_payment_promissory_note/views/account_payment_invoice_view.xml b/account_payment_promissory_note/views/account_payment_invoice_view.xml index 972a75d7f98..55334e0196c 100644 --- a/account_payment_promissory_note/views/account_payment_invoice_view.xml +++ b/account_payment_promissory_note/views/account_payment_invoice_view.xml @@ -1,12 +1,15 @@ - + account.register.payments - - + + diff --git a/account_payment_promissory_note/views/account_payment_view.xml b/account_payment_promissory_note/views/account_payment_view.xml index ba0769895b7..2d62685c068 100644 --- a/account_payment_promissory_note/views/account_payment_view.xml +++ b/account_payment_promissory_note/views/account_payment_view.xml @@ -1,36 +1,42 @@ - + - - - account.payment - - - - - - - - - - - account.payment - - - - - - - - - - - account.payment - - - - - - - - + + account.payment + + + + + + + + + + account.payment + + + + + + + + + + account.payment + + + + + + + diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 152544adc9b..3741eb17fba 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -6,24 +6,23 @@ class AccountRegisterPayments(models.TransientModel): - _inherit = 'account.register.payments' + _inherit = "account.register.payments" def get_payments_vals(self): vals = super(AccountRegisterPayments, self).get_payments_vals() for val in vals: - val.update({ - 'promissory_note': self.promissory_note, - 'date_due': self.date_due, - }) + val.update( + {"promissory_note": self.promissory_note, "date_due": self.date_due,} + ) return vals - @api.onchange('promissory_note') + @api.onchange("promissory_note") def _onchange_promissory_note(self): super()._onchange_promissory_note() if not self.date_due and self.promissory_note: invoices = False - if self._name == 'account.register.payments': - active_ids = self._context.get('active_ids') - invoices = self.env['account.invoice'].browse(active_ids) + if self._name == "account.register.payments": + active_ids = self._context.get("active_ids") + invoices = self.env["account.invoice"].browse(active_ids) if invoices: - self.date_due = max(invoices.mapped('date_due')) + self.date_due = max(invoices.mapped("date_due")) From 3cc39fbea31431e4908e63075229324e422e8247 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Thu, 29 Oct 2020 13:08:35 +0100 Subject: [PATCH 04/21] [MIG] account_payment_promissory_note: Migration to v13.0 --- account_payment_promissory_note/README.rst | 10 ++-- .../__manifest__.py | 2 +- .../i18n/account_payment_promissory_note.pot | 36 +++++++---- account_payment_promissory_note/i18n/es.po | 60 +++++++++++++------ .../models/account_abstract_payment.py | 3 +- .../models/account_payment.py | 9 ++- .../static/description/index.html | 6 +- .../test_account_payment_promissory_note.py | 8 +-- .../views/account_payment_invoice_view.xml | 6 +- .../views/account_payment_view.xml | 13 ---- .../wizard/account_register_payments.py | 13 ++-- 11 files changed, 95 insertions(+), 71 deletions(-) diff --git a/account_payment_promissory_note/README.rst b/account_payment_promissory_note/README.rst index 4499d7be187..b9546ef7e80 100644 --- a/account_payment_promissory_note/README.rst +++ b/account_payment_promissory_note/README.rst @@ -14,13 +14,13 @@ Account Payment Promissory Note :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--payment-lightgray.png?logo=github - :target: https://github.com/OCA/account-payment/tree/12.0/account_payment_promissory_note + :target: https://github.com/OCA/account-payment/tree/13.0/account_payment_promissory_note :alt: OCA/account-payment .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/account-payment-12-0/account-payment-12-0-account_payment_promissory_note + :target: https://translation.odoo-community.org/projects/account-payment-13-0/account-payment-13-0-account_payment_promissory_note :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/96/12.0 + :target: https://runbot.odoo-community.org/runbot/96/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -81,6 +81,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/account-payment `_ project on GitHub. +This module is part of the `OCA/account-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py index 182c2ffb7ac..ec128f70f74 100644 --- a/account_payment_promissory_note/__manifest__.py +++ b/account_payment_promissory_note/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Payment Promissory Note", - "version": "12.0.2.0.0", + "version": "13.0.1.0.0", "license": "AGPL-3", "author": "Tecnativa," "Odoo Community Association (OCA)", "category": "Invoicing Management", diff --git a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot index 6469b81bd1b..c1b58a26f2f 100644 --- a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot +++ b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * account_payment_promissory_note +# * account_payment_promissory_note # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,32 +14,46 @@ msgstr "" "Plural-Forms: \n" #. module: account_payment_promissory_note -#: model:ir.model,name:account_payment_promissory_note.model_account_abstract_payment -msgid "Contains the logic shared between models which allows to register payments" +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__display_name +msgid "Display Name" msgstr "" #. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__date_due #: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__date_due msgid "Due Date" msgstr "" +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__id +msgid "ID" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin____last_update +msgid "Last Modified on" +msgstr "" + #. module: account_payment_promissory_note #: model:ir.model,name:account_payment_promissory_note.model_account_payment msgid "Payments" msgstr "" #. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__promissory_note #: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__promissory_note #: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search msgid "Promissory Note" msgstr "" #. module: account_payment_promissory_note -#: model:ir.model,name:account_payment_promissory_note.model_account_register_payments -msgid "Register Payments" +#: model:ir.model,name:account_payment_promissory_note.model_account_promissory_note_mixin +msgid "Promissory Note Mixin" msgstr "" +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment_register +msgid "Register Payment" +msgstr "" diff --git a/account_payment_promissory_note/i18n/es.po b/account_payment_promissory_note/i18n/es.po index 6931a103c59..81e890dc721 100644 --- a/account_payment_promissory_note/i18n/es.po +++ b/account_payment_promissory_note/i18n/es.po @@ -8,41 +8,65 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-14 08:53+0000\n" "PO-Revision-Date: 2020-10-14 10:55+0200\n" +"Last-Translator: Carlos \n" "Language-Team: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.6\n" -"Last-Translator: Carlos \n" -"Language: es\n" #. module: account_payment_promissory_note -#: model:ir.model,name:account_payment_promissory_note.model_account_abstract_payment -msgid "Contains the logic shared between models which allows to register payments" -msgstr "Contiene la lógica compartida entre los modelos que permiten el registro de pagos" - -#. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__promissory_note -#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search -msgid "Promissory Note" -msgstr "Pagaré" +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__display_name +msgid "Display Name" +msgstr "" #. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_abstract_payment__date_due #: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_register_payments__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__date_due +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__date_due msgid "Due Date" msgstr "Fecha de Vencimiento" +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__id +msgid "ID" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin____last_update +msgid "Last Modified on" +msgstr "" + #. module: account_payment_promissory_note #: model:ir.model,name:account_payment_promissory_note.model_account_payment msgid "Payments" msgstr "Pagos" #. module: account_payment_promissory_note -#: model:ir.model,name:account_payment_promissory_note.model_account_register_payments -msgid "Register Payments" -msgstr "Registrar pagos" +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__promissory_note +#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_search +msgid "Promissory Note" +msgstr "Pagaré" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_promissory_note_mixin +msgid "Promissory Note Mixin" +msgstr "" + +#. module: account_payment_promissory_note +#: model:ir.model,name:account_payment_promissory_note.model_account_payment_register +msgid "Register Payment" +msgstr "" + +#~ msgid "" +#~ "Contains the logic shared between models which allows to register payments" +#~ msgstr "" +#~ "Contiene la lógica compartida entre los modelos que permiten el registro " +#~ "de pagos" + +#~ msgid "Register Payments" +#~ msgstr "Registrar pagos" diff --git a/account_payment_promissory_note/models/account_abstract_payment.py b/account_payment_promissory_note/models/account_abstract_payment.py index ae7d7e4f8c0..1a56d885ce6 100644 --- a/account_payment_promissory_note/models/account_abstract_payment.py +++ b/account_payment_promissory_note/models/account_abstract_payment.py @@ -6,7 +6,8 @@ class AccountAbstractPayment(models.AbstractModel): - _inherit = "account.abstract.payment" + _name = "account.promissory.note.mixin" + _description = "Promissory Note Mixin" promissory_note = fields.Boolean(string="Promissory Note",) date_due = fields.Date(string="Due Date",) diff --git a/account_payment_promissory_note/models/account_payment.py b/account_payment_promissory_note/models/account_payment.py index a6abc4fd939..48bc73dfb34 100644 --- a/account_payment_promissory_note/models/account_payment.py +++ b/account_payment_promissory_note/models/account_payment.py @@ -6,7 +6,8 @@ class AccountPayment(models.Model): - _inherit = "account.payment" + _name = "account.payment" + _inherit = ["account.payment", "account.promissory.note.mixin"] promissory_note = fields.Boolean( readonly=True, states={"draft": [("readonly", False)]}, @@ -23,8 +24,6 @@ def _get_liquidity_move_line_vals(self, amount): def _onchange_promissory_note(self): super()._onchange_promissory_note() if not self.date_due and self.promissory_note: - invoices = False - if self._name == "account.payment": - invoices = self.invoice_ids + invoices = self.invoice_ids if invoices: - self.date_due = max(invoices.mapped("date_due")) + self.date_due = max(invoices.mapped("invoice_date_due")) diff --git a/account_payment_promissory_note/static/description/index.html b/account_payment_promissory_note/static/description/index.html index 88196172e73..60807a7796d 100644 --- a/account_payment_promissory_note/static/description/index.html +++ b/account_payment_promissory_note/static/description/index.html @@ -367,7 +367,7 @@

Account Payment Promissory Note

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runbot

This module allows you to set a date due in a payment, as promissory notes require.

Table of contents

@@ -397,7 +397,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -426,7 +426,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/account-payment project on GitHub.

+

This module is part of the OCA/account-payment project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

diff --git a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py index bcb39f78507..08ee6a85d86 100644 --- a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py +++ b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py @@ -32,8 +32,8 @@ def setUp(self): { "company_id": self.company.id, "partner_id": partner.id, - "date_invoice": "2020-09-14", - "date_due": "2020-09-23", + "invoice_date": "2020-09-14", + "invoice_date_due": "2020-09-23", "type": "out_invoice", }, ), @@ -43,8 +43,8 @@ def setUp(self): { "company_id": self.company.id, "partner_id": partner.id, - "date_invoice": "2020-09-14", - "date_due": "2020-09-22", + "invoice_date": "2020-09-14", + "invoice_date_due": "2020-09-22", "type": "out_invoice", }, ), diff --git a/account_payment_promissory_note/views/account_payment_invoice_view.xml b/account_payment_promissory_note/views/account_payment_invoice_view.xml index 55334e0196c..1cab9a115f5 100644 --- a/account_payment_promissory_note/views/account_payment_invoice_view.xml +++ b/account_payment_promissory_note/views/account_payment_invoice_view.xml @@ -1,8 +1,8 @@ - - account.register.payments - + + account.payment.register + diff --git a/account_payment_promissory_note/views/account_payment_view.xml b/account_payment_promissory_note/views/account_payment_view.xml index 2d62685c068..75663758ff4 100644 --- a/account_payment_promissory_note/views/account_payment_view.xml +++ b/account_payment_promissory_note/views/account_payment_view.xml @@ -13,19 +13,6 @@ - - account.payment - - - - - - - - account.payment diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 3741eb17fba..744a6e17463 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -6,13 +6,14 @@ class AccountRegisterPayments(models.TransientModel): - _inherit = "account.register.payments" + _name = "account.payment.register" + _inherit = ["account.payment.register", "account.promissory.note.mixin"] def get_payments_vals(self): vals = super(AccountRegisterPayments, self).get_payments_vals() for val in vals: val.update( - {"promissory_note": self.promissory_note, "date_due": self.date_due,} + {"promissory_note": self.promissory_note, "date_due": self.date_due} ) return vals @@ -20,9 +21,7 @@ def get_payments_vals(self): def _onchange_promissory_note(self): super()._onchange_promissory_note() if not self.date_due and self.promissory_note: - invoices = False - if self._name == "account.register.payments": - active_ids = self._context.get("active_ids") - invoices = self.env["account.invoice"].browse(active_ids) + active_ids = self._context.get("active_ids") + invoices = self.env["account.move"].browse(active_ids) if invoices: - self.date_due = max(invoices.mapped("date_due")) + self.date_due = max(invoices.mapped("invoice_date_due")) From 9d9b06e34a945c2c4f966173ae685ffee2bbfa71 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Wed, 18 Nov 2020 15:55:53 +0100 Subject: [PATCH 05/21] [IMP] account_payment_promissory_note: Changes on due_date Applied changes on due_date for take care about the partner groups on register payments. On one hand, if the field due_date is empty the camp will take the latest due_date of the invoices that form the payment. On the other hand, if we set a value on due_date field, all the payments generated will take this value. --- .../i18n/account_payment_promissory_note.pot | 8 ++++++ account_payment_promissory_note/i18n/es.po | 28 +++++++++++++++---- .../models/account_payment.py | 3 +- .../views/account_payment_invoice_view.xml | 6 ++++ .../wizard/account_register_payments.py | 18 ++++++++---- 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot index c1b58a26f2f..d700cdcfc75 100644 --- a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot +++ b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot @@ -13,6 +13,14 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: account_payment_promissory_note +#: model_terms:ir.ui.view,arch_db:account_payment_promissory_note.view_account_payment_form_multi +msgid "" +" + Set date due to all payments or empty to select last date due of each partner invoices group - + diff --git a/account_payment_promissory_note/views/account_payment_view.xml b/account_payment_promissory_note/views/account_payment_view.xml index 75663758ff4..de13bf2b97a 100644 --- a/account_payment_promissory_note/views/account_payment_view.xml +++ b/account_payment_promissory_note/views/account_payment_view.xml @@ -4,26 +4,26 @@ account.payment - + - + account.payment - + - +
diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 7c80f764421..38b182f3a81 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -26,10 +26,11 @@ def get_payments_vals(self): @api.onchange("promissory_note") def _onchange_promissory_note(self): - super()._onchange_promissory_note() + result = super()._onchange_promissory_note() if not self.date_due and self.promissory_note: active_ids = self._context.get("active_ids") invoices = self.env["account.move"].browse(active_ids) same_partner = len(invoices.mapped("partner_id")) == 1 if invoices and self.group_payment and same_partner: self.date_due = max(invoices.mapped("invoice_date_due")) + return result From 781c463c2349e96af78958e22b2671343d0f0784 Mon Sep 17 00:00:00 2001 From: CarlosRoca13 Date: Thu, 27 Oct 2022 17:32:19 +0200 Subject: [PATCH 11/21] [MIG] account_payment_promissory_note: Migration to 15.0 --- .../models/account_payment.py | 13 ++++- .../test_account_payment_promissory_note.py | 58 +++++++++---------- .../wizard/account_register_payments.py | 22 ++++--- 3 files changed, 49 insertions(+), 44 deletions(-) diff --git a/account_payment_promissory_note/models/account_payment.py b/account_payment_promissory_note/models/account_payment.py index 9c32f71ef2d..0e6bbfd4750 100644 --- a/account_payment_promissory_note/models/account_payment.py +++ b/account_payment_promissory_note/models/account_payment.py @@ -30,8 +30,19 @@ def _prepare_payment_moves(self): def _onchange_promissory_note(self): result = super()._onchange_promissory_note() if not self.date_due and self.promissory_note: - invoices = self.invoice_ids + invoices = self.reconciled_invoice_ids same_partner = len(invoices.mapped("partner_id")) == 1 if invoices and same_partner: self.date_due = max(invoices.mapped("invoice_date_due")) return result + + def write(self, vals): + for payment in self: + if "promissory_note" in vals: + if not vals["promissory_note"]: + payment.line_ids.date_maturity = vals.get("date") or payment.date + elif "date_due" in vals: + payment.line_ids.date_maturity = vals["date_due"] + elif payment.promissory_note and "date_due" in vals: + payment.line_ids.date_maturity = vals["date_due"] + return super().write(vals) diff --git a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py index 42c997c0daa..7b8dd9748ef 100644 --- a/account_payment_promissory_note/tests/test_account_payment_promissory_note.py +++ b/account_payment_promissory_note/tests/test_account_payment_promissory_note.py @@ -34,19 +34,10 @@ def setUp(self): } ) self.invoice_2.action_post() - self.payment_1 = self.env["account.payment"].create( - { - "payment_type": "inbound", - "payment_method_line_id": self.payment_method.id, - "amount": 50.00, - "journal_id": self.env["account.journal"] - .search([("type", "=", "sale")], limit=1) - .id, - } - ) - self.payment_2 = self.env["account.payment"].create( + + def test_1_onchange_promissory_note_without_invoices(self): + payment = self.env["account.payment"].create( { - "invoice_ids": [(4, self.invoice_1.id), (4, self.invoice_2.id)], "payment_type": "inbound", "payment_method_line_id": self.payment_method.id, "amount": 50.00, @@ -55,27 +46,34 @@ def setUp(self): .id, } ) - - def test_1_onchange_promissory_note_without_invoices(self): - self.payment_1.date_due = "2020-09-21" - self.payment_1._onchange_promissory_note() - self.assertFalse(self.payment_1.date_due) - self.payment_1.promissory_note = True - self.payment_1.date_due = "2020-09-21" - self.payment_1._onchange_promissory_note() + payment.date_due = "2020-09-21" + payment._onchange_promissory_note() + self.assertFalse(payment.date_due) + payment.promissory_note = True + payment.date_due = "2020-09-21" + payment._onchange_promissory_note() self.assertEqual( - self.payment_1.date_due, + payment.date_due, datetime.datetime.strptime("2020-09-21", "%Y-%m-%d").date(), ) def test_2_onchange_promissory_note_with_invoices(self): - self.payment_2.date_due = "2020-09-21" - self.payment_2._onchange_promissory_note() - self.assertFalse(self.payment_2.date_due) - self.payment_2.promissory_note = True - self.payment_2._onchange_promissory_note() + wiz_form = Form( + self.env["account.payment.register"].with_context( + active_model="account.move", + active_ids=[self.invoice_1.id, self.invoice_2.id], + ) + ) + wiz_form.group_payment = True + wiz = wiz_form.save() + payment = wiz._create_payments() + payment.date_due = "2020-09-21" + payment._onchange_promissory_note() + self.assertFalse(payment.date_due) + payment.promissory_note = True + payment._onchange_promissory_note() self.assertEqual( - self.payment_2.date_due, + payment.date_due, datetime.datetime.strptime("2020-09-23", "%Y-%m-%d").date(), ) @@ -86,12 +84,10 @@ def test_3_due_date_propagation(self): active_ids=[self.invoice_1.id, self.invoice_2.id], ) ) - wiz_form.payment_method_line_id = self.payment_method wiz_form.promissory_note = True wiz_form.group_payment = True wiz_form.date_due = datetime.datetime.strptime("2020-09-23", "%Y-%m-%d").date() wiz = wiz_form.save() - action_vals = wiz.create_payments() - payment = self.env["account.payment"].search(action_vals["domain"]) - for line in payment.move_line_ids: + payment = wiz._create_payments() + for line in payment.line_ids: self.assertEqual(line.date_maturity, payment.date_due) diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 38b182f3a81..7a30ab65dcf 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -9,26 +9,24 @@ class AccountRegisterPayments(models.TransientModel): _name = "account.payment.register" _inherit = ["account.payment.register", "account.promissory.note.mixin"] - def get_payments_vals(self): - vals = super().get_payments_vals() - for val in vals: + def _create_payments(self): + payments = super()._create_payments() + for payment in payments: if not self.date_due: - invoices = self.env["account.move"].browse(val["invoice_ids"][0][2]) + invoices = payment.reconciled_invoice_ids max_date = max(invoices.mapped("invoice_date_due")) - val.update( - {"promissory_note": self.promissory_note, "date_due": max_date} - ) + payment.promissory_note = self.promissory_note + payment.date_due = max_date else: - val.update( - {"promissory_note": self.promissory_note, "date_due": self.date_due} - ) - return vals + payment.promissory_note = self.promissory_note + payment.date_due = self.date_due + return payments @api.onchange("promissory_note") def _onchange_promissory_note(self): result = super()._onchange_promissory_note() if not self.date_due and self.promissory_note: - active_ids = self._context.get("active_ids") + active_ids = self.env.context.get("active_ids") invoices = self.env["account.move"].browse(active_ids) same_partner = len(invoices.mapped("partner_id")) == 1 if invoices and self.group_payment and same_partner: From e78b8e55da7dde6108bc8cbaf11aff405db81390 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 3 Nov 2022 08:01:01 +0000 Subject: [PATCH 12/21] [UPD] Update account_payment_promissory_note.pot --- .../i18n/account_payment_promissory_note.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot index d700cdcfc75..71bb96e01fe 100644 --- a/account_payment_promissory_note/i18n/account_payment_promissory_note.pot +++ b/account_payment_promissory_note/i18n/account_payment_promissory_note.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -21,11 +21,6 @@ msgid "" " " msgstr "" -#. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__display_name -msgid "Display Name" -msgstr "" - #. module: account_payment_promissory_note #: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment__date_due #: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_payment_register__date_due @@ -33,16 +28,6 @@ msgstr "" msgid "Due Date" msgstr "" -#. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin__id -msgid "ID" -msgstr "" - -#. module: account_payment_promissory_note -#: model:ir.model.fields,field_description:account_payment_promissory_note.field_account_promissory_note_mixin____last_update -msgid "Last Modified on" -msgstr "" - #. module: account_payment_promissory_note #: model:ir.model,name:account_payment_promissory_note.model_account_payment msgid "Payments" From 7049213aab44b9ef1028236034b07f7240d900a1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 3 Nov 2022 08:04:11 +0000 Subject: [PATCH 13/21] [UPD] README.rst --- account_payment_promissory_note/README.rst | 11 ++++++----- .../static/description/index.html | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/account_payment_promissory_note/README.rst b/account_payment_promissory_note/README.rst index b9546ef7e80..4bcf601cea7 100644 --- a/account_payment_promissory_note/README.rst +++ b/account_payment_promissory_note/README.rst @@ -14,13 +14,13 @@ Account Payment Promissory Note :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--payment-lightgray.png?logo=github - :target: https://github.com/OCA/account-payment/tree/13.0/account_payment_promissory_note + :target: https://github.com/OCA/account-payment/tree/15.0/account_payment_promissory_note :alt: OCA/account-payment .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/account-payment-13-0/account-payment-13-0-account_payment_promissory_note + :target: https://translation.odoo-community.org/projects/account-payment-15-0/account-payment-15-0-account_payment_promissory_note :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/96/13.0 + :target: https://runbot.odoo-community.org/runbot/96/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -47,7 +47,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -67,6 +67,7 @@ Contributors * Sergio Teruel * Alexandre Díaz * Carlos Roca + * César A. Sánchez Maintainers ~~~~~~~~~~~ @@ -81,6 +82,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/account-payment `_ project on GitHub. +This module is part of the `OCA/account-payment `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_payment_promissory_note/static/description/index.html b/account_payment_promissory_note/static/description/index.html index 60807a7796d..10e21887b13 100644 --- a/account_payment_promissory_note/static/description/index.html +++ b/account_payment_promissory_note/static/description/index.html @@ -367,7 +367,7 @@

Account Payment Promissory Note

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/account-payment Translate me on Weblate Try me on Runbot

This module allows you to set a date due in a payment, as promissory notes require.

Table of contents

@@ -397,7 +397,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -415,6 +415,7 @@

Contributors

  • Sergio Teruel
  • Alexandre Díaz
  • Carlos Roca
  • +
  • César A. Sánchez
  • @@ -426,7 +427,7 @@

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

    This module is part of the OCA/account-payment project on GitHub.

    +

    This module is part of the OCA/account-payment project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    From 2852890923634fdd8651cc294965266b912bbc90 Mon Sep 17 00:00:00 2001 From: Oihane Crucelaegui Date: Tue, 18 Apr 2023 12:55:38 +0200 Subject: [PATCH 14/21] [FIX] account_payment_promissory_note: avoid error when paying vendor bills --- .../wizard/account_register_payments.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/account_payment_promissory_note/wizard/account_register_payments.py b/account_payment_promissory_note/wizard/account_register_payments.py index 7a30ab65dcf..eb210c404da 100644 --- a/account_payment_promissory_note/wizard/account_register_payments.py +++ b/account_payment_promissory_note/wizard/account_register_payments.py @@ -14,9 +14,10 @@ def _create_payments(self): for payment in payments: if not self.date_due: invoices = payment.reconciled_invoice_ids - max_date = max(invoices.mapped("invoice_date_due")) - payment.promissory_note = self.promissory_note - payment.date_due = max_date + if invoices: + max_date = max(invoices.mapped("invoice_date_due")) + payment.promissory_note = self.promissory_note + payment.date_due = max_date else: payment.promissory_note = self.promissory_note payment.date_due = self.date_due From 97a2aee0763bfd987c4cc358e15c19bcbceb081c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 18 Apr 2023 11:34:15 +0000 Subject: [PATCH 15/21] account_payment_promissory_note 15.0.1.0.1 --- account_payment_promissory_note/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_payment_promissory_note/__manifest__.py b/account_payment_promissory_note/__manifest__.py index 409f870e557..6350b4493b9 100644 --- a/account_payment_promissory_note/__manifest__.py +++ b/account_payment_promissory_note/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Account Payment Promissory Note", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "license": "AGPL-3", "author": "Tecnativa," "Odoo Community Association (OCA)", "category": "Invoicing Management", From 2fa232261050dbaf6b01dd6f626a3c30ddeb7aff Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 11:41:01 +0000 Subject: [PATCH 16/21] [UPD] README.rst --- account_payment_promissory_note/README.rst | 15 +++++--- .../static/description/index.html | 38 ++++++++++--------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/account_payment_promissory_note/README.rst b/account_payment_promissory_note/README.rst index 4bcf601cea7..61414d4d15b 100644 --- a/account_payment_promissory_note/README.rst +++ b/account_payment_promissory_note/README.rst @@ -2,10 +2,13 @@ Account Payment Promissory Note =============================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6cb3841a80f2eea96416e9d74eedd1957a2ebc8dd7a2bb87afc634c71bb475c5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Account Payment Promissory Note .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/account-payment-15-0/account-payment-15-0-account_payment_promissory_note :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/96/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-payment&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows you to set a date due in a payment, as promissory notes require. @@ -46,7 +49,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/account_payment_promissory_note/static/description/index.html b/account_payment_promissory_note/static/description/index.html index 10e21887b13..42f2d299f32 100644 --- a/account_payment_promissory_note/static/description/index.html +++ b/account_payment_promissory_note/static/description/index.html @@ -1,20 +1,20 @@ - + - + Account Payment Promissory Note