From 0e946daadd67c4b9a99c8567c31ac37320507311 Mon Sep 17 00:00:00 2001 From: ps-tubtim Date: Mon, 17 Aug 2020 14:57:43 +0700 Subject: [PATCH 01/24] [12.0][ADD] hr_expense_advance_clearing_sequence --- .../README.rst | 84 ++++ .../__init__.py | 3 + .../__manifest__.py | 20 + .../data/hr_expense_data.xml | 11 + .../models/__init__.py | 3 + .../models/hr_expense_sheet.py | 24 + .../readme/CONFIGURE.rst | 6 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 429 ++++++++++++++++++ .../tests/__init__.py | 3 + ...st_hr_expense_advance_clearing_sequence.py | 96 ++++ 13 files changed, 682 insertions(+) create mode 100644 hr_expense_advance_clearing_sequence/README.rst create mode 100644 hr_expense_advance_clearing_sequence/__init__.py create mode 100644 hr_expense_advance_clearing_sequence/__manifest__.py create mode 100644 hr_expense_advance_clearing_sequence/data/hr_expense_data.xml create mode 100644 hr_expense_advance_clearing_sequence/models/__init__.py create mode 100644 hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py create mode 100644 hr_expense_advance_clearing_sequence/readme/CONFIGURE.rst create mode 100644 hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst create mode 100644 hr_expense_advance_clearing_sequence/readme/DESCRIPTION.rst create mode 100644 hr_expense_advance_clearing_sequence/static/description/icon.png create mode 100644 hr_expense_advance_clearing_sequence/static/description/index.html create mode 100644 hr_expense_advance_clearing_sequence/tests/__init__.py create mode 100644 hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py diff --git a/hr_expense_advance_clearing_sequence/README.rst b/hr_expense_advance_clearing_sequence/README.rst new file mode 100644 index 000000000..8b924fc92 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/README.rst @@ -0,0 +1,84 @@ +==================================== +HR Expense Advance Clearing Sequence +==================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fhr-lightgray.png?logo=github + :target: https://github.com/OCA/hr/tree/12.0/hr_expense_advance_clearing_sequence + :alt: OCA/hr +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/hr-12-0/hr-12-0-hr_expense_advance_clearing_sequence + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/116/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the possibility to define a sequence for the expense report's reference that Employee advance. +This reference is then set as default when you create a new expense report, using the defined sequence. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +You can change the default sequence (EXAV0001) by the one of your choice +going to *Settings > Technical > Sequences & Identifiers > Sequences*, and +editing the record `Expense report sequence (Advance)`. + +You will only have access to that section if your section has `Technical features` +permission check marked. + +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 +~~~~~~~ + +* Ecosoft + +Contributors +~~~~~~~~~~~~ + +* Pimolnat Suntian + +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/hr `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_expense_advance_clearing_sequence/__init__.py b/hr_expense_advance_clearing_sequence/__init__.py new file mode 100644 index 000000000..8ebc8a7c5 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import models diff --git a/hr_expense_advance_clearing_sequence/__manifest__.py b/hr_expense_advance_clearing_sequence/__manifest__.py new file mode 100644 index 000000000..d5f174ee0 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +{ + 'name': 'HR Expense Advance Clearing Sequence', + 'version': '12.0.1.0.0', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'author': 'Ecosoft, Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/hr', + 'depends': [ + 'hr_expense_sequence', + 'hr_expense_advance_clearing', + ], + 'data': [ + 'data/hr_expense_data.xml', + ], + 'installable': True, + 'maintainer': 'ps-tubtim', +} diff --git a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml new file mode 100644 index 000000000..495198211 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml @@ -0,0 +1,11 @@ + + + + + Expense report sequence (Advance) + hr.expense.sheet.advance + + EXAV + + + diff --git a/hr_expense_advance_clearing_sequence/models/__init__.py b/hr_expense_advance_clearing_sequence/models/__init__.py new file mode 100644 index 000000000..38117e21e --- /dev/null +++ b/hr_expense_advance_clearing_sequence/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import hr_expense_sheet diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py new file mode 100644 index 000000000..ef21157ed --- /dev/null +++ b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py @@ -0,0 +1,24 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo import api, models + + +class HrExpenseSheet(models.Model): + _inherit = 'hr.expense.sheet' + _rec_name = 'number' + + @api.model + def create(self, vals): + if 'expense_line_ids' in vals.keys(): + from_expense = vals['expense_line_ids'][0][1] + if from_expense: + expense = self.env['hr.expense'].browse(from_expense) + else: + from_report = vals['expense_line_ids'][0][2][0] + expense = self.env['hr.expense'].browse(from_report) + if vals.get('number', '/') == '/' and expense.advance: + number = self.env['ir.sequence'].next_by_code( + 'hr.expense.sheet.advance') + vals['number'] = number + return super(HrExpenseSheet, self).create(vals) diff --git a/hr_expense_advance_clearing_sequence/readme/CONFIGURE.rst b/hr_expense_advance_clearing_sequence/readme/CONFIGURE.rst new file mode 100644 index 000000000..f4f415a42 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +You can change the default sequence (EXAV0001) by the one of your choice +going to *Settings > Technical > Sequences & Identifiers > Sequences*, and +editing the record `Expense report sequence (Advance)`. + +You will only have access to that section if your section has `Technical features` +permission check marked. diff --git a/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst b/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..0ef1f84c3 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Pimolnat Suntian diff --git a/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.rst b/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.rst new file mode 100644 index 000000000..2d68ce3ba --- /dev/null +++ b/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module adds the possibility to define a sequence for the expense report's reference that Employee advance. +This reference is then set as default when you create a new expense report, using the defined sequence. diff --git a/hr_expense_advance_clearing_sequence/static/description/icon.png b/hr_expense_advance_clearing_sequence/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/hr_expense_advance_clearing_sequence/static/description/index.html b/hr_expense_advance_clearing_sequence/static/description/index.html new file mode 100644 index 000000000..c0ddaf36e --- /dev/null +++ b/hr_expense_advance_clearing_sequence/static/description/index.html @@ -0,0 +1,429 @@ + + + + + + +HR Expense Advance Clearing Sequence + + + +
+

HR Expense Advance Clearing Sequence

+ + +

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

+

This module adds the possibility to define a sequence for the expense report’s reference that Employee advance. +This reference is then set as default when you create a new expense report, using the defined sequence.

+

Table of contents

+ +
+

Configuration

+

You can change the default sequence (EXAV0001) by the one of your choice +going to Settings > Technical > Sequences & Identifiers > Sequences, and +editing the record Expense report sequence (Advance).

+

You will only have access to that section if your section has Technical features +permission check marked.

+
+
+

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

+
    +
  • Ecosoft
  • +
+
+
+

Contributors

+ +
+
+

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/hr project on GitHub.

+

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

+
+
+
+ + diff --git a/hr_expense_advance_clearing_sequence/tests/__init__.py b/hr_expense_advance_clearing_sequence/tests/__init__.py new file mode 100644 index 000000000..7cb5c3276 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import test_hr_expense_advance_clearing_sequence diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py new file mode 100644 index 000000000..84e6b3c42 --- /dev/null +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -0,0 +1,96 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from odoo.tests.common import Form, SavepointCase + + +class TestHrExpenseAdvanceClearingSequence(SavepointCase): + + @classmethod + def setUpClass(self): + super().setUpClass() + self.expense_model = self.env['hr.expense'] + self.expense_sheet_model = self.env['hr.expense.sheet'] + self.product = self.env.ref('product.product_product_4') + + employee_home = self.env['res.partner'].create({ + 'name': 'Employee Home Address', + }) + self.employee = self.env['hr.employee'].create({ + 'name': 'Employee', + 'address_home_id': employee_home.id, + }) + advance_account = self.env['account.account'].create({ + 'code': '154000', + 'name': 'Employee Advance', + 'user_type_id': self.env.ref( + 'account.data_account_type_current_assets').id, + 'reconcile': True, + }) + self.emp_advance = self.env.ref('hr_expense_advance_clearing.' + 'product_emp_advance') + self.emp_advance.property_account_expense_id = advance_account + + self.expense = self._create_expense(self, 'Advance 1,000', self.employee, + self.emp_advance, 1000.0, advance=True) + + self.sheet = self._create_expense_sheet( + self, 'Advance 1,000', self.employee, self.emp_advance, 1000.0, + advance=True) + + def _create_expense(self, description, employee, + product, amount, advance=False, + payment_mode='own_account'): + with Form(self.env['hr.expense']) as expense: + expense.advance = advance + expense.name = description + expense.employee_id = employee + expense.product_id = product + expense.unit_amount = amount + expense.payment_mode = payment_mode + expense = expense.save() + expense.tax_ids = False # Test no vat + return expense + + def _create_expense_sheet(self, description, employee, + product, amount, advance=False): + expense = self._create_expense(self, description, employee, + product, amount, advance) + # Add expense to expense sheet + expense_sheet = self.env['hr.expense.sheet'].create({ + 'name': description, + 'employee_id': expense.employee_id.id, + 'expense_line_ids': [(6, 0, [expense.id])], + }) + return expense_sheet + + def test_create_sequence_from_expense(self): + # Test number != '/' + expense_sheet = self.env['hr.expense.sheet'].create({ + 'name': 'Advance 1,000', + 'employee_id': self.expense.employee_id.id, + 'expense_line_ids': [[4, self.expense.id, False]], + }) + self.assertNotEqual(expense_sheet.number, '/', 'Number create') + # Test number 1 != number 2 + sheet_number_1 = expense_sheet.number + sheet2 = expense_sheet.copy() + sheet_number_2 = sheet2.number + self.assertNotEqual( + sheet_number_1, + sheet_number_2, + 'Numbers are different' + ) + + def test_create_sequence_from_report(self): + # Test number != '/' + self.assertNotEqual(self.sheet.number, '/', 'Number create') + # Test number 1 != number 2 + sheet_number_1 = self.sheet.number + sheet2 = self.sheet.copy() + sheet_number_2 = sheet2.number + self.assertNotEqual( + sheet_number_1, + sheet_number_2, + 'Numbers are different' + ) From 941ce3c3846d476739d37d6351da6c6e77bede1f Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 17 Aug 2020 08:43:51 +0000 Subject: [PATCH 02/24] [UPD] Update hr_expense_advance_clearing_sequence.pot --- .../hr_expense_advance_clearing_sequence.pot | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot diff --git a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot new file mode 100644 index 000000000..c2fa170ab --- /dev/null +++ b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_expense_advance_clearing_sequence +# +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: hr_expense_advance_clearing_sequence +#: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet +msgid "Expense Report" +msgstr "" + From fd96bf04200db6fec6b2cfde088ed957b4a3ed59 Mon Sep 17 00:00:00 2001 From: Saran440 Date: Sat, 10 Oct 2020 21:57:16 +0700 Subject: [PATCH 03/24] [IMP] hr_expense_advance_clearing_sequence : black, isort, prettier --- .../__manifest__.py | 25 ++-- .../data/hr_expense_data.xml | 6 +- .../models/hr_expense_sheet.py | 23 ++-- ...st_hr_expense_advance_clearing_sequence.py | 119 +++++++++--------- 4 files changed, 86 insertions(+), 87 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/__manifest__.py b/hr_expense_advance_clearing_sequence/__manifest__.py index d5f174ee0..8f96d0328 100644 --- a/hr_expense_advance_clearing_sequence/__manifest__.py +++ b/hr_expense_advance_clearing_sequence/__manifest__.py @@ -2,19 +2,14 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) { - 'name': 'HR Expense Advance Clearing Sequence', - 'version': '12.0.1.0.0', - 'license': 'AGPL-3', - 'category': 'Human Resources', - 'author': 'Ecosoft, Odoo Community Association (OCA)', - 'website': 'https://github.com/OCA/hr', - 'depends': [ - 'hr_expense_sequence', - 'hr_expense_advance_clearing', - ], - 'data': [ - 'data/hr_expense_data.xml', - ], - 'installable': True, - 'maintainer': 'ps-tubtim', + "name": "HR Expense Advance Clearing Sequence", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "category": "Human Resources", + "author": "Ecosoft, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/hr", + "depends": ["hr_expense_sequence", "hr_expense_advance_clearing"], + "data": ["data/hr_expense_data.xml"], + "installable": True, + "maintainer": "ps-tubtim", } diff --git a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml index 495198211..1789f14d2 100644 --- a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml +++ b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml @@ -1,11 +1,9 @@ - + - Expense report sequence (Advance) hr.expense.sheet.advance - + EXAV - diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py index ef21157ed..0a48e6e3a 100644 --- a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py +++ b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py @@ -5,20 +5,21 @@ class HrExpenseSheet(models.Model): - _inherit = 'hr.expense.sheet' - _rec_name = 'number' + _inherit = "hr.expense.sheet" + _rec_name = "number" @api.model def create(self, vals): - if 'expense_line_ids' in vals.keys(): - from_expense = vals['expense_line_ids'][0][1] + if "expense_line_ids" in vals.keys(): + from_expense = vals["expense_line_ids"][0][1] if from_expense: - expense = self.env['hr.expense'].browse(from_expense) + expense = self.env["hr.expense"].browse(from_expense) else: - from_report = vals['expense_line_ids'][0][2][0] - expense = self.env['hr.expense'].browse(from_report) - if vals.get('number', '/') == '/' and expense.advance: - number = self.env['ir.sequence'].next_by_code( - 'hr.expense.sheet.advance') - vals['number'] = number + from_report = vals["expense_line_ids"][0][2][0] + expense = self.env["hr.expense"].browse(from_report) + if vals.get("number", "/") == "/" and expense.advance: + number = self.env["ir.sequence"].next_by_code( + "hr.expense.sheet.advance" + ) + vals["number"] = number return super(HrExpenseSheet, self).create(vals) diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py index 84e6b3c42..ac81168fb 100644 --- a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -5,43 +5,50 @@ class TestHrExpenseAdvanceClearingSequence(SavepointCase): - @classmethod - def setUpClass(self): + def setUpClass(cls): super().setUpClass() - self.expense_model = self.env['hr.expense'] - self.expense_sheet_model = self.env['hr.expense.sheet'] - self.product = self.env.ref('product.product_product_4') + cls.expense_model = cls.env["hr.expense"] + cls.expense_sheet_model = cls.env["hr.expense.sheet"] + cls.product = cls.env.ref("product.product_product_4") - employee_home = self.env['res.partner'].create({ - 'name': 'Employee Home Address', - }) - self.employee = self.env['hr.employee'].create({ - 'name': 'Employee', - 'address_home_id': employee_home.id, - }) - advance_account = self.env['account.account'].create({ - 'code': '154000', - 'name': 'Employee Advance', - 'user_type_id': self.env.ref( - 'account.data_account_type_current_assets').id, - 'reconcile': True, - }) - self.emp_advance = self.env.ref('hr_expense_advance_clearing.' - 'product_emp_advance') - self.emp_advance.property_account_expense_id = advance_account + employee_home = cls.env["res.partner"].create({"name": "Employee Home Address"}) + cls.employee = cls.env["hr.employee"].create( + {"name": "Employee", "address_home_id": employee_home.id} + ) + advance_account = cls.env["account.account"].create( + { + "code": "154000", + "name": "Employee Advance", + "user_type_id": cls.env.ref( + "account.data_account_type_current_assets" + ).id, + "reconcile": True, + } + ) + cls.emp_advance = cls.env.ref( + "hr_expense_advance_clearing." "product_emp_advance" + ) + cls.emp_advance.property_account_expense_id = advance_account - self.expense = self._create_expense(self, 'Advance 1,000', self.employee, - self.emp_advance, 1000.0, advance=True) + cls.expense = cls._create_expense( + cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True + ) - self.sheet = self._create_expense_sheet( - self, 'Advance 1,000', self.employee, self.emp_advance, 1000.0, - advance=True) + cls.sheet = cls._create_expense_sheet( + cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True + ) - def _create_expense(self, description, employee, - product, amount, advance=False, - payment_mode='own_account'): - with Form(self.env['hr.expense']) as expense: + def _create_expense( + self, + description, + employee, + product, + amount, + advance=False, + payment_mode="own_account", + ): + with Form(self.env["hr.expense"]) as expense: expense.advance = advance expense.name = description expense.employee_id = employee @@ -52,45 +59,43 @@ def _create_expense(self, description, employee, expense.tax_ids = False # Test no vat return expense - def _create_expense_sheet(self, description, employee, - product, amount, advance=False): - expense = self._create_expense(self, description, employee, - product, amount, advance) + def _create_expense_sheet( + self, description, employee, product, amount, advance=False + ): + expense = self._create_expense( + self, description, employee, product, amount, advance + ) # Add expense to expense sheet - expense_sheet = self.env['hr.expense.sheet'].create({ - 'name': description, - 'employee_id': expense.employee_id.id, - 'expense_line_ids': [(6, 0, [expense.id])], - }) + expense_sheet = self.env["hr.expense.sheet"].create( + { + "name": description, + "employee_id": expense.employee_id.id, + "expense_line_ids": [(6, 0, [expense.id])], + } + ) return expense_sheet def test_create_sequence_from_expense(self): # Test number != '/' - expense_sheet = self.env['hr.expense.sheet'].create({ - 'name': 'Advance 1,000', - 'employee_id': self.expense.employee_id.id, - 'expense_line_ids': [[4, self.expense.id, False]], - }) - self.assertNotEqual(expense_sheet.number, '/', 'Number create') + expense_sheet = self.env["hr.expense.sheet"].create( + { + "name": "Advance 1,000", + "employee_id": self.expense.employee_id.id, + "expense_line_ids": [[4, self.expense.id, False]], + } + ) + self.assertNotEqual(expense_sheet.number, "/", "Number create") # Test number 1 != number 2 sheet_number_1 = expense_sheet.number sheet2 = expense_sheet.copy() sheet_number_2 = sheet2.number - self.assertNotEqual( - sheet_number_1, - sheet_number_2, - 'Numbers are different' - ) + self.assertNotEqual(sheet_number_1, sheet_number_2, "Numbers are different") def test_create_sequence_from_report(self): # Test number != '/' - self.assertNotEqual(self.sheet.number, '/', 'Number create') + self.assertNotEqual(self.sheet.number, "/", "Number create") # Test number 1 != number 2 sheet_number_1 = self.sheet.number sheet2 = self.sheet.copy() sheet_number_2 = sheet2.number - self.assertNotEqual( - sheet_number_1, - sheet_number_2, - 'Numbers are different' - ) + self.assertNotEqual(sheet_number_1, sheet_number_2, "Numbers are different") From c4c889e9a31ec88076857efaf78c4a028b0a838f Mon Sep 17 00:00:00 2001 From: Saran440 Date: Sun, 11 Oct 2020 09:58:41 +0700 Subject: [PATCH 04/24] [13.0][MIG] hr_expense_advance_clearing_sequence --- .../README.rst | 17 +++--- .../__manifest__.py | 6 +- .../models/hr_expense_sheet.py | 11 +--- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +-- ...st_hr_expense_advance_clearing_sequence.py | 57 ++++++++++--------- 6 files changed, 50 insertions(+), 51 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/README.rst b/hr_expense_advance_clearing_sequence/README.rst index 8b924fc92..67698d532 100644 --- a/hr_expense_advance_clearing_sequence/README.rst +++ b/hr_expense_advance_clearing_sequence/README.rst @@ -13,14 +13,14 @@ HR Expense Advance Clearing Sequence .. |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%2Fhr-lightgray.png?logo=github - :target: https://github.com/OCA/hr/tree/12.0/hr_expense_advance_clearing_sequence - :alt: OCA/hr +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--expense-lightgray.png?logo=github + :target: https://github.com/OCA/hr-expense/tree/13.0/hr_expense_advance_clearing_sequence + :alt: OCA/hr-expense .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/hr-12-0/hr-12-0-hr_expense_advance_clearing_sequence + :target: https://translation.odoo-community.org/projects/hr-expense-13-0/hr-expense-13-0-hr_expense_advance_clearing_sequence :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/116/12.0 + :target: https://runbot.odoo-community.org/runbot/289/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,10 +46,10 @@ permission check marked. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +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. @@ -65,6 +65,7 @@ Contributors ~~~~~~~~~~~~ * Pimolnat Suntian +* Saran Lim. Maintainers ~~~~~~~~~~~ @@ -79,6 +80,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/hr `_ project on GitHub. +This module is part of the `OCA/hr-expense `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_expense_advance_clearing_sequence/__manifest__.py b/hr_expense_advance_clearing_sequence/__manifest__.py index 8f96d0328..589e99c59 100644 --- a/hr_expense_advance_clearing_sequence/__manifest__.py +++ b/hr_expense_advance_clearing_sequence/__manifest__.py @@ -3,13 +3,13 @@ { "name": "HR Expense Advance Clearing Sequence", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "license": "AGPL-3", "category": "Human Resources", "author": "Ecosoft, Odoo Community Association (OCA)", - "website": "https://github.com/OCA/hr", + "website": "https://github.com/OCA/hr-expense", "depends": ["hr_expense_sequence", "hr_expense_advance_clearing"], "data": ["data/hr_expense_data.xml"], "installable": True, - "maintainer": "ps-tubtim", + "maintainer": ["ps-tubtim"], } diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py index 0a48e6e3a..8d9e1eff7 100644 --- a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py +++ b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py @@ -6,20 +6,15 @@ class HrExpenseSheet(models.Model): _inherit = "hr.expense.sheet" - _rec_name = "number" @api.model def create(self, vals): if "expense_line_ids" in vals.keys(): - from_expense = vals["expense_line_ids"][0][1] - if from_expense: - expense = self.env["hr.expense"].browse(from_expense) - else: - from_report = vals["expense_line_ids"][0][2][0] - expense = self.env["hr.expense"].browse(from_report) + from_expense = vals["expense_line_ids"][0][2] + expense = self.env["hr.expense"].browse(from_expense) if vals.get("number", "/") == "/" and expense.advance: number = self.env["ir.sequence"].next_by_code( "hr.expense.sheet.advance" ) vals["number"] = number - return super(HrExpenseSheet, self).create(vals) + return super().create(vals) diff --git a/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst b/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst index 0ef1f84c3..720bec61f 100644 --- a/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst +++ b/hr_expense_advance_clearing_sequence/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Pimolnat Suntian +* Saran Lim. diff --git a/hr_expense_advance_clearing_sequence/static/description/index.html b/hr_expense_advance_clearing_sequence/static/description/index.html index c0ddaf36e..ba8828797 100644 --- a/hr_expense_advance_clearing_sequence/static/description/index.html +++ b/hr_expense_advance_clearing_sequence/static/description/index.html @@ -367,7 +367,7 @@

HR Expense Advance Clearing Sequence

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

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

+

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runbot

This module adds the possibility to define a sequence for the expense report’s reference that Employee advance. This reference is then set as default when you create a new expense report, using the defined sequence.

Table of contents

@@ -393,10 +393,10 @@

Configuration

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

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.

@@ -411,6 +411,7 @@

Authors

Contributors

@@ -420,7 +421,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/hr project on GitHub.

+

This module is part of the OCA/hr-expense project on GitHub.

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

diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py index ac81168fb..ae2fb38ea 100644 --- a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -1,42 +1,43 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from odoo import tools +from odoo.modules.module import get_resource_path from odoo.tests.common import Form, SavepointCase class TestHrExpenseAdvanceClearingSequence(SavepointCase): + @classmethod + def _load(cls, module, *args): + tools.convert_file( + cls.cr, + module, + get_resource_path(module, *args), + {}, + "init", + False, + "test", + cls.registry._assertion_report, + ) + @classmethod def setUpClass(cls): super().setUpClass() + cls._load("account", "test", "account_minimal_test.xml") cls.expense_model = cls.env["hr.expense"] cls.expense_sheet_model = cls.env["hr.expense.sheet"] - cls.product = cls.env.ref("product.product_product_4") - - employee_home = cls.env["res.partner"].create({"name": "Employee Home Address"}) - cls.employee = cls.env["hr.employee"].create( - {"name": "Employee", "address_home_id": employee_home.id} - ) - advance_account = cls.env["account.account"].create( - { - "code": "154000", - "name": "Employee Advance", - "user_type_id": cls.env.ref( - "account.data_account_type_current_assets" - ).id, - "reconcile": True, - } - ) - cls.emp_advance = cls.env.ref( - "hr_expense_advance_clearing." "product_emp_advance" - ) - cls.emp_advance.property_account_expense_id = advance_account - + cls.partner_1 = cls.env.ref("base.res_partner_12") + cls.employee_1 = cls.env.ref("hr.employee_hne") + cls.employee_1.address_home_id = cls.partner_1.id + transfer_account = cls.browse_ref(cls, "account.transfer_account") + cls.emp_advance = cls.env.ref("hr_expense_advance_clearing.product_emp_advance") + cls.emp_advance.property_account_expense_id = transfer_account cls.expense = cls._create_expense( - cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True + cls, "Advance 1,000", cls.employee_1, cls.emp_advance, 1000.0, advance=True ) cls.sheet = cls._create_expense_sheet( - cls, "Advance 1,000", cls.employee, cls.emp_advance, 1000.0, advance=True + cls, "Advance 1,000", cls.employee_1, cls.emp_advance, 1000.0, advance=True ) def _create_expense( @@ -48,7 +49,7 @@ def _create_expense( advance=False, payment_mode="own_account", ): - with Form(self.env["hr.expense"]) as expense: + with Form(self.expense_model) as expense: expense.advance = advance expense.name = description expense.employee_id = employee @@ -66,7 +67,7 @@ def _create_expense_sheet( self, description, employee, product, amount, advance ) # Add expense to expense sheet - expense_sheet = self.env["hr.expense.sheet"].create( + expense_sheet = self.expense_sheet_model.create( { "name": description, "employee_id": expense.employee_id.id, @@ -75,9 +76,9 @@ def _create_expense_sheet( ) return expense_sheet - def test_create_sequence_from_expense(self): + def test_01_create_sequence_from_expense(self): # Test number != '/' - expense_sheet = self.env["hr.expense.sheet"].create( + expense_sheet = self.expense_sheet_model.create( { "name": "Advance 1,000", "employee_id": self.expense.employee_id.id, @@ -91,7 +92,7 @@ def test_create_sequence_from_expense(self): sheet_number_2 = sheet2.number self.assertNotEqual(sheet_number_1, sheet_number_2, "Numbers are different") - def test_create_sequence_from_report(self): + def test_02_create_sequence_from_report(self): # Test number != '/' self.assertNotEqual(self.sheet.number, "/", "Number create") # Test number 1 != number 2 From 986d439514c95c37087b86adac91550bd59292e3 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 15 May 2021 17:12:07 +0000 Subject: [PATCH 05/24] [UPD] Update hr_expense_advance_clearing_sequence.pot --- .../i18n/hr_expense_advance_clearing_sequence.pot | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot index c2fa170ab..bbfec204a 100644 --- a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot +++ b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * hr_expense_advance_clearing_sequence +# * hr_expense_advance_clearing_sequence # 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" @@ -17,4 +17,3 @@ msgstr "" #: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet msgid "Expense Report" msgstr "" - From 3567e77c754c898e5a61f5b7856b5334cfcd0f75 Mon Sep 17 00:00:00 2001 From: Saran440 Date: Sun, 16 May 2021 20:11:56 +0700 Subject: [PATCH 06/24] [14.0][MIG] hr_expense_advance_clearing_sequence --- .../__manifest__.py | 2 +- .../data/hr_expense_data.xml | 2 +- .../models/hr_expense_sheet.py | 11 ++-- ...st_hr_expense_advance_clearing_sequence.py | 53 +++++++++---------- 4 files changed, 31 insertions(+), 37 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/__manifest__.py b/hr_expense_advance_clearing_sequence/__manifest__.py index 589e99c59..1e8a51f98 100644 --- a/hr_expense_advance_clearing_sequence/__manifest__.py +++ b/hr_expense_advance_clearing_sequence/__manifest__.py @@ -3,7 +3,7 @@ { "name": "HR Expense Advance Clearing Sequence", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "category": "Human Resources", "author": "Ecosoft, Odoo Community Association (OCA)", diff --git a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml index 1789f14d2..6f93de1e9 100644 --- a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml +++ b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml @@ -4,6 +4,6 @@ Expense report sequence (Advance) hr.expense.sheet.advance - EXAV + AV diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py index 8d9e1eff7..d2745022e 100644 --- a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py +++ b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py @@ -9,12 +9,7 @@ class HrExpenseSheet(models.Model): @api.model def create(self, vals): - if "expense_line_ids" in vals.keys(): - from_expense = vals["expense_line_ids"][0][2] - expense = self.env["hr.expense"].browse(from_expense) - if vals.get("number", "/") == "/" and expense.advance: - number = self.env["ir.sequence"].next_by_code( - "hr.expense.sheet.advance" - ) - vals["number"] = number + if vals.get("advance") or self.env.context.get("default_advance"): + number = self.env["ir.sequence"].next_by_code("hr.expense.sheet.advance") + vals["number"] = number return super().create(vals) diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py index ae2fb38ea..0d50dd632 100644 --- a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -1,37 +1,28 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) -from odoo import tools -from odoo.modules.module import get_resource_path from odoo.tests.common import Form, SavepointCase class TestHrExpenseAdvanceClearingSequence(SavepointCase): - @classmethod - def _load(cls, module, *args): - tools.convert_file( - cls.cr, - module, - get_resource_path(module, *args), - {}, - "init", - False, - "test", - cls.registry._assertion_report, - ) - @classmethod def setUpClass(cls): super().setUpClass() - cls._load("account", "test", "account_minimal_test.xml") cls.expense_model = cls.env["hr.expense"] cls.expense_sheet_model = cls.env["hr.expense.sheet"] cls.partner_1 = cls.env.ref("base.res_partner_12") cls.employee_1 = cls.env.ref("hr.employee_hne") cls.employee_1.address_home_id = cls.partner_1.id - transfer_account = cls.browse_ref(cls, "account.transfer_account") + user_type_expense = cls.env.ref("account.data_account_type_expenses") + account_expense = cls.env["account.account"].create( + { + "code": "NC1113", + "name": "HR Expense - Test Purchase Account", + "user_type_id": user_type_expense.id, + } + ) cls.emp_advance = cls.env.ref("hr_expense_advance_clearing.product_emp_advance") - cls.emp_advance.property_account_expense_id = transfer_account + cls.emp_advance.property_account_expense_id = account_expense cls.expense = cls._create_expense( cls, "Advance 1,000", cls.employee_1, cls.emp_advance, 1000.0, advance=True ) @@ -48,14 +39,19 @@ def _create_expense( amount, advance=False, payment_mode="own_account", + account=False, ): - with Form(self.expense_model) as expense: - expense.advance = advance + with Form( + self.env["hr.expense"].with_context(default_advance=advance) + ) as expense: expense.name = description expense.employee_id = employee - expense.product_id = product + if not advance: + expense.product_id = product expense.unit_amount = amount expense.payment_mode = payment_mode + if account: + expense.account_id = account expense = expense.save() expense.tax_ids = False # Test no vat return expense @@ -70,6 +66,7 @@ def _create_expense_sheet( expense_sheet = self.expense_sheet_model.create( { "name": description, + "advance": advance, "employee_id": expense.employee_id.id, "expense_line_ids": [(6, 0, [expense.id])], } @@ -78,23 +75,25 @@ def _create_expense_sheet( def test_01_create_sequence_from_expense(self): # Test number != '/' - expense_sheet = self.expense_sheet_model.create( + advance_sheet = self.expense_sheet_model.create( { "name": "Advance 1,000", + "advance": True, "employee_id": self.expense.employee_id.id, "expense_line_ids": [[4, self.expense.id, False]], } ) - self.assertNotEqual(expense_sheet.number, "/", "Number create") + self.assertNotEqual(advance_sheet.number, "/", "Number create") + self.assertNotEqual(advance_sheet.number.find("AV"), -1) # Test number 1 != number 2 - sheet_number_1 = expense_sheet.number - sheet2 = expense_sheet.copy() - sheet_number_2 = sheet2.number - self.assertNotEqual(sheet_number_1, sheet_number_2, "Numbers are different") + self.assertNotEqual( + advance_sheet.number, advance_sheet.copy().number, "Numbers are different" + ) def test_02_create_sequence_from_report(self): # Test number != '/' self.assertNotEqual(self.sheet.number, "/", "Number create") + self.assertNotEqual(self.sheet.number.find("AV"), -1) # Test number 1 != number 2 sheet_number_1 = self.sheet.number sheet2 = self.sheet.copy() From 3bd4aa745c68e3785e34dc9729870fc7db8e178a Mon Sep 17 00:00:00 2001 From: oca-travis Date: Wed, 15 Jun 2022 05:08:05 +0000 Subject: [PATCH 07/24] [UPD] Update hr_expense_advance_clearing_sequence.pot --- .../hr_expense_advance_clearing_sequence.pot | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot index bbfec204a..29530da77 100644 --- a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot +++ b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,7 +13,22 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: hr_expense_advance_clearing_sequence +#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet__display_name +msgid "Display Name" +msgstr "" + #. module: hr_expense_advance_clearing_sequence #: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet msgid "Expense Report" msgstr "" + +#. module: hr_expense_advance_clearing_sequence +#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet__id +msgid "ID" +msgstr "" + +#. module: hr_expense_advance_clearing_sequence +#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet____last_update +msgid "Last Modified on" +msgstr "" From e2d6540fe648a1dc4bb73b90c6b33348d469dfb1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 15 Jun 2022 05:12:42 +0000 Subject: [PATCH 08/24] [UPD] README.rst --- hr_expense_advance_clearing_sequence/README.rst | 10 +++++----- .../static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/README.rst b/hr_expense_advance_clearing_sequence/README.rst index 67698d532..ce37e4ae9 100644 --- a/hr_expense_advance_clearing_sequence/README.rst +++ b/hr_expense_advance_clearing_sequence/README.rst @@ -14,13 +14,13 @@ HR Expense Advance Clearing Sequence :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--expense-lightgray.png?logo=github - :target: https://github.com/OCA/hr-expense/tree/13.0/hr_expense_advance_clearing_sequence + :target: https://github.com/OCA/hr-expense/tree/14.0/hr_expense_advance_clearing_sequence :alt: OCA/hr-expense .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/hr-expense-13-0/hr-expense-13-0-hr_expense_advance_clearing_sequence + :target: https://translation.odoo-community.org/projects/hr-expense-14-0/hr-expense-14-0-hr_expense_advance_clearing_sequence :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/289/13.0 + :target: https://runbot.odoo-community.org/runbot/289/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -49,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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -80,6 +80,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/hr-expense `_ project on GitHub. +This module is part of the `OCA/hr-expense `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_expense_advance_clearing_sequence/static/description/index.html b/hr_expense_advance_clearing_sequence/static/description/index.html index ba8828797..1de3de567 100644 --- a/hr_expense_advance_clearing_sequence/static/description/index.html +++ b/hr_expense_advance_clearing_sequence/static/description/index.html @@ -367,7 +367,7 @@

HR Expense Advance Clearing Sequence

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

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runbot

This module adds the possibility to define a sequence for the expense report’s reference that Employee advance. This reference is then set as default when you create a new expense report, using the defined sequence.

Table of contents

@@ -396,7 +396,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.

@@ -421,7 +421,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/hr-expense project on GitHub.

+

This module is part of the OCA/hr-expense project on GitHub.

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

From 01daf77b4495c767ae272ede776e9c8dd405ad72 Mon Sep 17 00:00:00 2001 From: Saran440 Date: Fri, 10 Mar 2023 16:07:09 +0700 Subject: [PATCH 09/24] [MIG] hr_expense_advance_clearing_sequence: Migration to 15.0 --- hr_expense_advance_clearing_sequence/__manifest__.py | 2 +- .../models/hr_expense_sheet.py | 4 +++- .../tests/test_hr_expense_advance_clearing_sequence.py | 9 ++------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/__manifest__.py b/hr_expense_advance_clearing_sequence/__manifest__.py index 1e8a51f98..5d276af17 100644 --- a/hr_expense_advance_clearing_sequence/__manifest__.py +++ b/hr_expense_advance_clearing_sequence/__manifest__.py @@ -3,7 +3,7 @@ { "name": "HR Expense Advance Clearing Sequence", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "license": "AGPL-3", "category": "Human Resources", "author": "Ecosoft, Odoo Community Association (OCA)", diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py index d2745022e..c40e6caa8 100644 --- a/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py +++ b/hr_expense_advance_clearing_sequence/models/hr_expense_sheet.py @@ -10,6 +10,8 @@ class HrExpenseSheet(models.Model): @api.model def create(self, vals): if vals.get("advance") or self.env.context.get("default_advance"): - number = self.env["ir.sequence"].next_by_code("hr.expense.sheet.advance") + number = ( + self.env["ir.sequence"].next_by_code("hr.expense.sheet.advance") or "/" + ) vals["number"] = number return super().create(vals) diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py index 0d50dd632..6ca746a5d 100644 --- a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -1,10 +1,10 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) -from odoo.tests.common import Form, SavepointCase +from odoo.tests.common import Form, TransactionCase -class TestHrExpenseAdvanceClearingSequence(SavepointCase): +class TestHrExpenseAdvanceClearingSequence(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -39,19 +39,14 @@ def _create_expense( amount, advance=False, payment_mode="own_account", - account=False, ): with Form( self.env["hr.expense"].with_context(default_advance=advance) ) as expense: expense.name = description expense.employee_id = employee - if not advance: - expense.product_id = product expense.unit_amount = amount expense.payment_mode = payment_mode - if account: - expense.account_id = account expense = expense.save() expense.tax_ids = False # Test no vat return expense From 8356d4fa199c2c3dc01d15b6d4c8094515990ae1 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 18 May 2023 08:26:23 +0000 Subject: [PATCH 10/24] [UPD] Update hr_expense_advance_clearing_sequence.pot --- .../hr_expense_advance_clearing_sequence.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot index 29530da77..8a765dab7 100644 --- a/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot +++ b/hr_expense_advance_clearing_sequence/i18n/hr_expense_advance_clearing_sequence.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,22 +13,7 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: hr_expense_advance_clearing_sequence -#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet__display_name -msgid "Display Name" -msgstr "" - #. module: hr_expense_advance_clearing_sequence #: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet msgid "Expense Report" msgstr "" - -#. module: hr_expense_advance_clearing_sequence -#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet__id -msgid "ID" -msgstr "" - -#. module: hr_expense_advance_clearing_sequence -#: model:ir.model.fields,field_description:hr_expense_advance_clearing_sequence.field_hr_expense_sheet____last_update -msgid "Last Modified on" -msgstr "" From 31daab7c79890c45fda090ece1afc0107da9967c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 18 May 2023 08:30:37 +0000 Subject: [PATCH 11/24] [UPD] README.rst --- hr_expense_advance_clearing_sequence/README.rst | 10 +++++----- .../static/description/index.html | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/README.rst b/hr_expense_advance_clearing_sequence/README.rst index ce37e4ae9..51bd046e2 100644 --- a/hr_expense_advance_clearing_sequence/README.rst +++ b/hr_expense_advance_clearing_sequence/README.rst @@ -14,13 +14,13 @@ HR Expense Advance Clearing Sequence :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--expense-lightgray.png?logo=github - :target: https://github.com/OCA/hr-expense/tree/14.0/hr_expense_advance_clearing_sequence + :target: https://github.com/OCA/hr-expense/tree/15.0/hr_expense_advance_clearing_sequence :alt: OCA/hr-expense .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/hr-expense-14-0/hr-expense-14-0-hr_expense_advance_clearing_sequence + :target: https://translation.odoo-community.org/projects/hr-expense-15-0/hr-expense-15-0-hr_expense_advance_clearing_sequence :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/289/14.0 + :target: https://runbot.odoo-community.org/runbot/289/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -49,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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -80,6 +80,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/hr-expense `_ project on GitHub. +This module is part of the `OCA/hr-expense `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_expense_advance_clearing_sequence/static/description/index.html b/hr_expense_advance_clearing_sequence/static/description/index.html index 1de3de567..3c38a5567 100644 --- a/hr_expense_advance_clearing_sequence/static/description/index.html +++ b/hr_expense_advance_clearing_sequence/static/description/index.html @@ -367,7 +367,7 @@

HR Expense Advance Clearing Sequence

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

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runbot

This module adds the possibility to define a sequence for the expense report’s reference that Employee advance. This reference is then set as default when you create a new expense report, using the defined sequence.

Table of contents

@@ -396,7 +396,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.

@@ -421,7 +421,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/hr-expense project on GitHub.

+

This module is part of the OCA/hr-expense project on GitHub.

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

From 6e8c7142ffdfbefc6c3488c980865fc3f312f88d Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 28 Jun 2023 14:26:44 +0000 Subject: [PATCH 12/24] Added translation using Weblate (Italian) --- .../i18n/it.po | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 hr_expense_advance_clearing_sequence/i18n/it.po diff --git a/hr_expense_advance_clearing_sequence/i18n/it.po b/hr_expense_advance_clearing_sequence/i18n/it.po new file mode 100644 index 000000000..f1cd49f4e --- /dev/null +++ b/hr_expense_advance_clearing_sequence/i18n/it.po @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_expense_advance_clearing_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: hr_expense_advance_clearing_sequence +#: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet +msgid "Expense Report" +msgstr "" From 61350c54ab5ec39103f87adb5449f4e1cefb72ad Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 28 Jun 2023 14:27:31 +0000 Subject: [PATCH 13/24] Translated using Weblate (Italian) Currently translated at 100.0% (1 of 1 strings) Translation: hr-expense-15.0/hr-expense-15.0-hr_expense_advance_clearing_sequence Translate-URL: https://translation.odoo-community.org/projects/hr-expense-15-0/hr-expense-15-0-hr_expense_advance_clearing_sequence/it/ --- hr_expense_advance_clearing_sequence/i18n/it.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/i18n/it.po b/hr_expense_advance_clearing_sequence/i18n/it.po index f1cd49f4e..cfbf0117f 100644 --- a/hr_expense_advance_clearing_sequence/i18n/it.po +++ b/hr_expense_advance_clearing_sequence/i18n/it.po @@ -6,15 +6,17 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-06-28 17:08+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: hr_expense_advance_clearing_sequence #: model:ir.model,name:hr_expense_advance_clearing_sequence.model_hr_expense_sheet msgid "Expense Report" -msgstr "" +msgstr "Nota spese" From 17d9c7ea6b2a51dc90b826c2c35023683f9e8629 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 13:12:24 +0000 Subject: [PATCH 14/24] [UPD] README.rst --- .../README.rst | 15 +++++--- .../static/description/index.html | 38 ++++++++++--------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/README.rst b/hr_expense_advance_clearing_sequence/README.rst index 51bd046e2..9e68ec143 100644 --- a/hr_expense_advance_clearing_sequence/README.rst +++ b/hr_expense_advance_clearing_sequence/README.rst @@ -2,10 +2,13 @@ HR Expense Advance Clearing Sequence ==================================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:bd7e0c67df8c4c24f503ae64b5fe115680ede878874802964d283e7f92bec65d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ HR Expense Advance Clearing Sequence .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/hr-expense-15-0/hr-expense-15-0-hr_expense_advance_clearing_sequence :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/289/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/hr-expense&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds the possibility to define a sequence for the expense report's reference that Employee advance. This reference is then set as default when you create a new expense report, using the defined sequence. @@ -48,7 +51,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/hr_expense_advance_clearing_sequence/static/description/index.html b/hr_expense_advance_clearing_sequence/static/description/index.html index 3c38a5567..9deb54ed9 100644 --- a/hr_expense_advance_clearing_sequence/static/description/index.html +++ b/hr_expense_advance_clearing_sequence/static/description/index.html @@ -1,20 +1,20 @@ - + - + HR Expense Advance Clearing Sequence -
-

HR Expense Advance Clearing Sequence

+
+ + +Odoo Community Association + +
+

HR Expense Advance Clearing Sequence

-

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runboat

-

This module adds the possibility to define a sequence for the expense -report’s reference that Employee advance. This reference is then set as -default when you create a new expense report, using the defined -sequence.

+

Beta License: AGPL-3 OCA/hr-expense Translate me on Weblate Try me on Runboat

+

Adds a dedicated sequence for advance hr.expense records (those +with expense_type='advance'). When an advance is created, its +number field — added by hr_expense_sequence — is populated from +the hr.expense.advance sequence (prefix AV by default) instead +of the generic hr.expense sequence used for regular expenses.

+

19.0 note: 18.0 keyed the sequence off the sheet-level advance flag +(sequence code hr.expense.sheet.advance). The 19.0 redesign moves +the flag to per-expense expense_type, so the sequence code is now +hr.expense.advance and lives on hr.expense.create instead of +hr.expense.sheet.create.

Table of contents

    @@ -388,7 +399,7 @@

    HR Expense Advance Clearing Sequence

-

Configuration

+

Configuration

You can change the default sequence (EXAV0001) by the one of your choice going to Settings > Technical > Sequences & Identifiers > Sequences, and editing the record Expense report sequence (Advance).

@@ -396,30 +407,30 @@

Configuration

features permission check marked.

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed -feedback.

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Ecosoft
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -427,10 +438,13 @@

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/hr-expense project on GitHub.

+

Current maintainers:

+

ps-tubtim dnplkndll

+

This module is part of the OCA/hr-expense project on GitHub.

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

+
From c4cff306492729e11358077792087b487d0f6d8e Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 28 May 2026 13:43:36 -0400 Subject: [PATCH 23/24] [MIG] hr_expense_advance_clearing_sequence: Migration to 19.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Inherit hr.expense (was hr.expense.sheet); key off expense_type='advance' (was sheet.advance Boolean). - Sequence code renamed hr.expense.sheet.advance → hr.expense.advance. - Test rewritten against per-expense flow; subclasses D2's TestHrExpenseAdvanceClearing. --- .../data/hr_expense_data.xml | 4 +-- .../models/__init__.py | 2 +- .../models/hr_expense.py | 16 +++++----- .../readme/DESCRIPTION.md | 15 ++++++--- ...st_hr_expense_advance_clearing_sequence.py | 31 +++++++++++++------ 5 files changed, 42 insertions(+), 26 deletions(-) diff --git a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml index d69d120c8..b7f33011b 100644 --- a/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml +++ b/hr_expense_advance_clearing_sequence/data/hr_expense_data.xml @@ -1,8 +1,8 @@ - Expense report sequence (Advance) - hr.expense.sheet.advance + Employee Advance sequence + hr.expense.advance AV diff --git a/hr_expense_advance_clearing_sequence/models/__init__.py b/hr_expense_advance_clearing_sequence/models/__init__.py index 38117e21e..36af45d93 100644 --- a/hr_expense_advance_clearing_sequence/models/__init__.py +++ b/hr_expense_advance_clearing_sequence/models/__init__.py @@ -1,3 +1,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) -from . import hr_expense_sheet +from . import hr_expense diff --git a/hr_expense_advance_clearing_sequence/models/hr_expense.py b/hr_expense_advance_clearing_sequence/models/hr_expense.py index 2be1473b5..dd3035263 100644 --- a/hr_expense_advance_clearing_sequence/models/hr_expense.py +++ b/hr_expense_advance_clearing_sequence/models/hr_expense.py @@ -1,20 +1,18 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# Copyright 2026 Ledo # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from odoo import api, models -class HrExpenseSheet(models.Model): - _inherit = "hr.expense.sheet" +class HrExpense(models.Model): + _inherit = "hr.expense" @api.model_create_multi def create(self, vals_list): - default_advance = self.env.context.get("default_advance") for vals in vals_list: - if vals.get("advance") or default_advance: - number = ( - self.env["ir.sequence"].next_by_code("hr.expense.sheet.advance") - or "/" + if vals.get("expense_type") == "advance" and vals.get("number", "/") == "/": + vals["number"] = ( + self.env["ir.sequence"].next_by_code("hr.expense.advance") or "/" ) - vals["number"] = number - return super().create(vals) + return super().create(vals_list) diff --git a/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.md b/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.md index 9e1458424..681def12d 100644 --- a/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.md +++ b/hr_expense_advance_clearing_sequence/readme/DESCRIPTION.md @@ -1,4 +1,11 @@ -This module adds the possibility to define a sequence for the expense -report's reference that Employee advance. This reference is then set as -default when you create a new expense report, using the defined -sequence. +Adds a dedicated sequence for **advance** `hr.expense` records (those +with `expense_type='advance'`). When an advance is created, its `number` +field — added by `hr_expense_sequence` — is populated from the +`hr.expense.advance` sequence (prefix `AV` by default) instead of the +generic `hr.expense` sequence used for regular expenses. + +19.0 note: 18.0 keyed the sequence off the sheet-level `advance` flag +(sequence code `hr.expense.sheet.advance`). The 19.0 redesign moves the +flag to per-expense `expense_type`, so the sequence code is now +`hr.expense.advance` and lives on `hr.expense.create` instead of +`hr.expense.sheet.create`. diff --git a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py index 2ca89fbdd..d92d46802 100644 --- a/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py +++ b/hr_expense_advance_clearing_sequence/tests/test_hr_expense_advance_clearing_sequence.py @@ -1,4 +1,5 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# Copyright 2026 Ledo # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from odoo.tests import tagged @@ -10,15 +11,25 @@ @tagged("-at_install", "post_install") class TestHrExpenseAdvanceClearingSequence(TestHrExpenseAdvanceClearing): - @classmethod - def setUpClass(cls): - super().setUpClass() + def test_advance_gets_AV_sequence_number(self): + """Creating an advance expense fills `number` from the AV sequence.""" + advance = self._new_advance(500.0) + self.assertNotEqual(advance.number, "/") + self.assertIn("AV", advance.number) + # Second advance gets a different number. + advance2 = self._new_advance(500.0) + self.assertNotEqual(advance.number, advance2.number) - def test_01_create_sequence_from_sheet(self): - advance_sheet = self.advance - self.assertNotEqual(advance_sheet.number, "/", "Number create") - self.assertNotEqual(advance_sheet.number.find("AV"), -1) - # Test duplicate advance, number should be different - self.assertNotEqual( - advance_sheet.number, advance_sheet.copy().number, "Numbers are different" + def test_regular_expense_uses_default_sequence(self): + """A regular (non-advance) expense uses the standard hr.expense + sequence (provided by hr_expense_sequence), not the advance one.""" + regular = self.env["hr.expense"].create( + { + "name": "regular", + "employee_id": self.expense_employee.id, + "product_id": self.product_a.id, + "total_amount_currency": 100.0, + "payment_mode": "own_account", + } ) + self.assertNotIn("AV", regular.number or "") From 611223ea16cdcf2520e86852029e1dd246237e2b Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Thu, 28 May 2026 13:43:49 -0400 Subject: [PATCH 24/24] [DO NOT MERGE] hr_expense_advance_clearing_sequence: pin hr_expense_sequence + hr_expense_advance_clearing to open PRs --- test-requirements.txt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..1253cf427 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,5 @@ +# DO NOT MERGE — temporary pins until upstream deps land. +# - OCA/hr-expense#353: hr_expense_sequence 19.0 MIG (A2 dep) +# - OCA/hr-expense#358: hr_expense_advance_clearing 19.0 MIG (D2 dep) +odoo-addon-hr_expense_sequence @ git+https://github.com/OCA/hr-expense.git@refs/pull/353/head#subdirectory=hr_expense_sequence +odoo-addon-hr_expense_advance_clearing @ git+https://github.com/OCA/hr-expense.git@refs/pull/358/head#subdirectory=hr_expense_advance_clearing