Tuesday, June 25, 2024
47 changes
15 changes
Miscellaneous changes
Steps to reproduce: - Create a new payment term; "days end of month on the 30" - create an invoice in may - set the newly created payment term - create a invoice line - save Issue: the due date (`maturity_date`) is 2024-06-29 Cause: Use of `relativedelta` with the singular form of `month` -> absolute value It was set to 2 so it would always give 29 -> year-02-29 and so `days_next_month = relativedelta(days=min(int(self.days_next_month), (date_end_of_month + relativedelta(mont
Original PR description
Steps to reproduce: - Create a new payment term; "days end of month on the 30" - create an invoice in may - set the newly created payment term - create a invoice line - save Issue: the due date…
Steps to reproduce: - Create a new payment term; "days end of month on the 30" - create an invoice in may - set the newly created payment term - create a invoice line - save Issue: the due date (`maturity_date`) is 2024-06-29 Cause: Use of `relativedelta` with the singular form of `month` -> absolute value It was set to 2 so it would always give 29 -> year-02-29 and so `days_next_month = relativedelta(days=min(int(self.days_next_month), (date_end_of_month + relativedelta(month=2)).day))` would always return 29 since 29 <= (29, 30, 31) ``` >>> import datetime >>> from dateutil.relativedelta import relativedelta >>> date_end_of_month datetime.datetime(2024, 5, 31, 17, 4, 14, 791820) >>> (date_end_of_month + relativedelta(month=2)) datetime.datetime(2024, 2, 29, 17, 4, 14, 791820) >>> min(31, 30, (date_end_of_month + relativedelta(month=2)).day) 29 ``` Solution: use the relative form of `relativedelta`; that is, the plural form `months` ``` >>> (date_end_of_month + relativedelta(months=1)) datetime.datetime(2024, 6, 30, 17, 4, 14, 791820) ``` source: https://dateutil.readthedocs.io/en/stable/relativedelta.html Note: Had to change the existing test on the overlapping year since ``` >>> december_date datetime.datetime(2023, 12, 12, 0, 0) >>> december_date + datetime.timedelta(days=30) datetime.datetime(2024, 1, 11, 0, 0) ``` and from date the maturity date would be 31st of January opw-3916451 Forward-Port-Of: odoo/odoo#166560
Steps: ========== - Install the point_of_sale and Razorpay payment provider modules. - Create an online payment method for the Razorpay payment provider. - Add the created payment method to the shop. - Open the shop, place an order, and use the Razorpay payment method. - Scan the QR code for payment and complete the payment with public users. Issue: ========== - An error occurs stating 'Email must be a valid email address,' causing the task to be blocked. Cause: ========== - The
Original PR description
Steps: ========== - Install the point_of_sale and Razorpay payment provider modules. - Create an online payment method for the Razorpay payment provider. - Add the created payment method to the shop. - Open the shop, place an order, and use the Razorpay payment method. - Scan the QR code for payment and complete the payment with public users. Issue: ========== - An error occurs stating 'Email must be a valid email address,' causing the task to be blocked. Cause: ========== - The email for public users is not found. FIX: ========== - Add an empty email address option for public users. task-3992084 Forward-Port-Of: odoo/odoo#169974
**Current behavior:** Having a storage location with a storage category that has a max quantity acting on some productA, and a putaway rule that will move product from an intermediary location to the location with the category: Creating a move for productA into the intermediary location that won't hit the cap applied on the second location, then creating an additional move (separate picking) with a demand that exceeds the cap will result in the cap not getting respected during the quant move
Original PR description
**Current behavior:** Having a storage location with a storage category that has a max quantity acting on some productA, and a putaway rule that will move product from an intermediary location to the…
**Current behavior:** Having a storage location with a storage category that has a max quantity acting on some productA, and a putaway rule that will move product from an intermediary location to the location with the category: Creating a move for productA into the intermediary location that won't hit the cap applied on the second location, then creating an additional move (separate picking) with a demand that exceeds the cap will result in the cap not getting respected during the quant move process. **Expected behavior:** The second move will not get assigned via putaway rule to the second location, as its quantity is too large. **Steps to reproduce:** 1. Create a storage category with a capacity: `product: productA` `quantity: 5` 2. Create an internal location: `parent location: WH/STOCK` `storage category: from step 1` 3. Create a putaway rule: `product: productA` `src location: WH/STOCK` `dest location: from step 2` `storage category: from step1` 4. Create a receipt picking with a move for productA that will not exceed the storage categ. cap -> confirm the picking 5. Create another receipt picking with a move for productA that exceeds the storage categ. cap -> confirm -> fill out the quantity -> validate 6. Go to the storage location and view its quants, see it's more than the max capacity **Cause of the issue:** During the picking assignment, the current/pending quantity of the proposed location gets calculated. Prior to the 7dda6bb refactor on the `qty_done` field, this current/pending quantity was stored in the method in a local variable, coincidentally also called qty_done. It got changed to quantity in this commit, which is also the name of one of the method arguments that represents the quantity value of the current move line which is being validated. Thus, the incoming quantity becomes the current quantity in the location which, of course, does not validate the defined cap. **Fix:** Rename the local variable. opw-3926597 Forward-Port-Of: odoo/odoo#169746
**Description of the issue/feature this PR addresses:** This PR addresses the orientation of chart labels in survey live session. Previously, chart labels in the survey live session struggled to display longer labels effectively. Labels are now tilted by min 20 degrees for better visibility and display of longer labels in survey live sessions chart. **Task**-3884116 Forward-Port-Of: odoo/odoo#170305 Forward-Port-Of: odoo/odoo#163288
Original PR description
**Description of the issue/feature this PR addresses:** This PR addresses the orientation of chart labels in survey live session. Previously, chart labels in the survey live session struggled to display longer labels effectively. Labels are now tilted by min 20 degrees for better visibility and display of longer labels in survey live sessions chart. **Task**-3884116 Forward-Port-Of: odoo/odoo#170305 Forward-Port-Of: odoo/odoo#163288
This traceback occurs when the user tries to activate stripe through onboarding without installing `website_payment`. To reproduce this issue:- 1) Install `sale` 2) Now switch to a new company by creating a `new company` 4) With the new company try to `activate the stripe` from the `sales Onboarding` 5) A traceback occurs Error:- ``` ValueError: Invalid field 'website_id' on model 'payment.provider' ``` As you can see `website_id` field is defined in `website_payment` at [1]
Original PR description
This traceback occurs when the user tries to activate stripe through onboarding without installing `website_payment`. To reproduce this issue:- 1) Install `sale` 2) Now switch to a new company by creating a `new company` 4) With the new company try to `activate the stripe` from the `sales Onboarding` 5) A traceback occurs Error:- ``` ValueError: Invalid field 'website_id' on model 'payment.provider' ``` As you can see `website_id` field is defined in `website_payment` at [1], but it is used in the `payment` module [2]. Which leads to the above traceback when `website_payment` is not installed. [1] https://github.com/odoo/odoo/blob/16e8de01b14ddac69cd706f8f64e762406769542/addons/website_payment/models/payment_provider.py#L12-L16 [2] https://github.com/odoo/odoo/blob/16e8de01b14ddac69cd706f8f64e762406769542/addons/payment/models/res_company.py#L48-L53 sentry-5504774122 Forward-Port-Of: odoo/odoo#170550 Forward-Port-Of: odoo/odoo#169953
Issue ---- Phone number can span two lines with some fonts for reports that use the contact widget (e.g. Delivery Slip). Steps ----- - Use Raleway font. You can do this by going to Settings -> Configure Document Layout (under Companies) -> Choose Raleway. - Change the phone number of the current company to `+33 3 28 44 55 01`. - Create a delivery (without lines) and print a Delivery Slip without validating. - The phone number spans two lines. Cause ----- When the phone numbe
Original PR description
Issue ---- Phone number can span two lines with some fonts for reports that use the contact widget (e.g. Delivery Slip). Steps ----- - Use Raleway font. You can do this by going to Settings -> Configure Document Layout (under Companies) -> Choose Raleway. - Change the phone number of the current company to `+33 3 28 44 55 01`. - Create a delivery (without lines) and print a Delivery Slip without validating. - The phone number spans two lines. Cause ----- When the phone number is long and takes up space in some fonts, the phone number is line-wrapped, which is ok for other text but not for phone numbers. opw-3834061 Forward-Port-Of: odoo/odoo#169638 Forward-Port-Of: odoo/odoo#166336
### Current Behavior: - Go in the project app, click on a project and click on a task - Change the stage of the task The duration spent in the previous stage is displayed in the new stage. Note: if you refresh the page the bug will disappear. ### Cause of the issue: The `duration_tracking` of the `project.task` model is a non stored computed json field. During the computation of this field, the previous trackings of the object are retrieved from `mail.tracking.value` model: https
Original PR description
### Current Behavior: - Go in the project app, click on a project and click on a task - Change the stage of the task The duration spent in the previous stage is displayed in the new stage. Note: if…
### Current Behavior: - Go in the project app, click on a project and click on a task - Change the stage of the task The duration spent in the previous stage is displayed in the new stage. Note: if you refresh the page the bug will disappear. ### Cause of the issue: The `duration_tracking` of the `project.task` model is a non stored computed json field. During the computation of this field, the previous trackings of the object are retrieved from `mail.tracking.value` model: https://github.com/odoo/odoo/blob/bb0cb2896236ead6b474cd1b3a685ff447716b95/addons/mail/models/mail_tracking_duration_mixin.py#L45-L60 To be sure that these trackings will be correctly retrieved, the model used by the query are even flushed. However, these mail tracking values are only created at the end of the sql transaction because the `_track_finalize` method is part of the precommit hooks of the transaction and is hence only run during the general sql flush: https://github.com/odoo/odoo/blob/784f90d25614e4816ac3ed26f0643b562071edbd/odoo/sql_db.py#L134-L138 https://github.com/odoo/odoo/blob/784f90d25614e4816ac3ed26f0643b562071edbd/odoo/tools/misc.py#L1215-L1221 As such, the mail tracking values generated by the old value of the stage will only be accessible at the end of the transaction and will not be available during the computation duration_tracking run for the project task in its final stage. Leading to an incorrect computation of the field during onchanges: https://github.com/odoo/odoo/blob/bb0cb2896236ead6b474cd1b3a685ff447716b95/addons/mail/models/mail_tracking_duration_mixin.py#L62-L64 ### Fix: In order for the the mail tracking values generated by the old stage to be present during the final computation of our duration_tracking we trigger the `_track_finalize` precommit hook on the records for which it should be run at the end of the transaction before the execution of our query. opw-3837359 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#161688
**Current behavior:** Sharing an editable link to a project with a portal user creates an undesirable scenario where they can read a project record and associated tasks but trying to use the chatter on a task's page results in a vague access error. **Expected behavior:** An editable share link should require the invitee to login prior to accessing records and the chatter. **Steps to reproduce:** 1. Make a project shareable with external users, share an editable link with a por
Original PR description
**Current behavior:** Sharing an editable link to a project with a portal user creates an undesirable scenario where they can read a project record and associated tasks but trying to use the chatter…
**Current behavior:**
Sharing an editable link to a project with a portal user creates
an undesirable scenario where they can read a project record and
associated tasks but trying to use the chatter on a task's page
results in a vague access error.
**Expected behavior:**
An editable share link should require the invitee to login prior
to accessing records and the chatter.
**Steps to reproduce:**
1. Make a project shareable with external users, share an
editable link with a portal user
2. Open the generated link in an incognito window, go to a task
that has the chatter text area input available
3. Try to leave a comment, observe the vague error
(access error behind the scenes)
**Cause of the issue:**
The hash which is generated with the share link for the invitee
uses the project record's `_mail_post_token_field` to permit
access on that record. The system which should recognize this
case and also permit access to that project's task records is
not working properly. Eventually, we fail a consteq() check on
the hash in the URL and the token generated by the ORM to
determine accessibility of the record (because it uses the
task's `_mail_post_token_field` value while ours was generated
using the project's).
**Fix:**
Create a method on the `mail.thread` extension in `portal` which
can be overridden in inheriting classes to return a logical
parent's `_sign_token()` result.
When checking for chatter post access, check both values against
the provided hash.
opw-3777597
Forward-Port-Of: odoo/odoo#170492
Forward-Port-Of: odoo/odoo#160170The field `max_tax_lock_date` is not always computed correctly. This is since the compute function does not depend on the `tax_lock_date` field. It should not happen in production since the `tax_lock_date` and the check of `max_tax_lock_date` should not happen in the same transaction. But it can still cause issues in tests. The missing dependency is added in this commit. enterprise PR (fixing a test): https://github.com/odoo/enterprise/pull/65262 Forward-Port-Of: odoo/odoo#170475
Original PR description
The field `max_tax_lock_date` is not always computed correctly. This is since the compute function does not depend on the `tax_lock_date` field. It should not happen in production since the `tax_lock_date` and the check of `max_tax_lock_date` should not happen in the same transaction. But it can still cause issues in tests. The missing dependency is added in this commit. enterprise PR (fixing a test): https://github.com/odoo/enterprise/pull/65262 Forward-Port-Of: odoo/odoo#170475
Steps: - Install the project - Enable use custom enable server from general settings. Set an alias domain - Create a new project - Wizard pops up Issue: - Default value of alias domain is not set. Cause: - alias_domain_id is related to alias_id and it is not present in the view. Fix: - Issue is been fixed by adding a field in wizard view as alias domain was getting fetched on that field. - Additionally the same field is been to added to form view as well. task-3744319 Forwar
Original PR description
Steps: - Install the project - Enable use custom enable server from general settings. Set an alias domain - Create a new project - Wizard pops up Issue: - Default value of alias domain is not set. Cause: - alias_domain_id is related to alias_id and it is not present in the view. Fix: - Issue is been fixed by adding a field in wizard view as alias domain was getting fetched on that field. - Additionally the same field is been to added to form view as well. task-3744319 Forward-Port-Of: odoo/odoo#154681
Previously, the floating icon wasn't an OWL component and has been refactored into an OWL component. When refactored he lost the auto move up top logic that came with the css classes 'o_bottom_fixed_element' and 'o_bottom_fixed_element_move_up' This commit reintroduce this auto move up behavior by default within the OWL component by listening to the scroll event of the document and identifying whenever we reach the end of the document. It is useful so we ensure the users can click all l
Original PR description
Previously, the floating icon wasn't an OWL component and has been refactored into an OWL component. When refactored he lost the auto move up top logic that came with the css classes…
Previously, the floating icon wasn't an OWL component and has been refactored into an OWL component. When refactored he lost the auto move up top logic that came with the css classes 'o_bottom_fixed_element' and 'o_bottom_fixed_element_move_up' This commit reintroduce this auto move up behavior by default within the OWL component by listening to the scroll event of the document and identifying whenever we reach the end of the document. It is useful so we ensure the users can click all links potentially present in the footer. If the icon is dragged and moved elsewhere, we prevent this smart behavior from happening until next refresh of the state. Commit introducing the drag & drop feature : https://github.com/odoo/odoo/commit/d9f07235484 Commit of the OWL refactoring : https://github.com/odoo/odoo/commit/20c1772d Steps to reproduce : - Install LiveChat - Toggle Mobile display - Scroll down to the bottom of page -> The livechat floating icon doesn't go up as it was before task-3946855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169831 Forward-Port-Of: odoo/odoo#169383
Summary ----- When creating an expense in a currency different from the company's currency, the exchange rate is rounded to 6 decimal places. If the rate and the expense amount are high enough, the rounding error affects the expense amount in the company's currency and later, in the journal entries created after the expense is approved. Steps to Reproduce ----- 1. Set a strong currency for the company (e.g., USD) 2. Add a weak currency in the currencies (e.g., IQD) 3. Create
Original PR description
Summary ----- When creating an expense in a currency different from the company's currency, the exchange rate is rounded to 6 decimal places. If the rate and the expense amount are high enough, the…
Summary
-----
When creating an expense in a currency different from the company's currency, the exchange rate is rounded to 6 decimal places. If the rate and the expense amount are high enough, the rounding error affects the expense amount in the company's currency and later, in the journal entries created after the expense is approved.
Steps to Reproduce
-----
1. Set a strong currency for the company (e.g., USD)
2. Add a weak currency in the currencies (e.g., IQD)
3. Create an expense with a high amount (e.g., 1,000,000 for the IQD/USD pair)
4. Set the weak currency for the expense
5. Observe the overly rounded amount in the weak currency
Cause
-----
The error comes from the exchange rate being rounded too much and too early.
Fix
-----
Modify "digits" attribute of the "currency_rate" field to increase precision.
Note
-----
Some inaccuracy remains, but expenses rarely exceed 1000 USD for companies using weak currencies, so the number of issues should be reduced.
opw-3684727
Forward-Port-Of: odoo/odoo#167606**Reproduce issue:** - Drop and drop a form snippet - Set a field as a multiple checkbox - Toggle on option 1 - Set a space at the end of option 1 so "option 1 " - Blur the input **Result:** You will find, Option 1 is no more selected. The root cause of this issue appears to be the unexpected trimming of the HTML input box. By default, HTML trims leading and trailing spaces, as well as considers multiple inner spaces as a single space. Consequently, inconsistencies arise between
Original PR description
**Reproduce issue:** - Drop and drop a form snippet - Set a field as a multiple checkbox - Toggle on option 1 - Set a space at the end of option 1 so "option 1 " - Blur the input **Result:** You will find, Option 1 is no more selected. The root cause of this issue appears to be the unexpected trimming of the HTML input box. By default, HTML trims leading and trailing spaces, as well as considers multiple inner spaces as a single space. Consequently, inconsistencies arise between the input value, ID, and display name. This commit trims the value from the initial to maintain consistency. As a result, `option 1`, `option 1 `, ` option 1`, and `option 1` will all be trimmed and considered the same. task-3254884 Forward-Port-Of: odoo/odoo#170365 Forward-Port-Of: odoo/odoo#128692
Add raw data directly to each records themselves, instead of storing them in a separate object. This way, we avoid having verify if the raw data exists in the main object, we can directly access it. This commit also include a backport of https://github.com/odoo/odoo/pull/168466, commit message: Before this commit, loading the POS took a long time when there were more than 1000 products and pricelists. The reason was that the `computeProductPricelistCache` function had a time complexity
Original PR description
Add raw data directly to each records themselves, instead of storing them in a separate object. This way, we avoid having verify if the raw data exists in the main object, we can directly access it. This commit also include a backport of https://github.com/odoo/odoo/pull/168466, commit message: Before this commit, loading the POS took a long time when there were more than 1000 products and pricelists. The reason was that the `computeProductPricelistCache` function had a time complexity of O(n^2 * m) due to nested loops over products and pricelist items, and several calls to the raw function which is O(n) itself. This commit optimizes the `computeProductPricelistCache` function by performing a single loop over pricelist items and another over products. This change improves the loading speed from 10 minutes to 10 seconds with 1000 products and pricelist items. Forward-Port-Of: odoo/odoo#169115
Check if the user selected the carrier for storable/consumable products before proceeding to payment. opw-3810367 See also: - https://github.com/odoo/enterprise/pull/60550 Forward-Port-Of: odoo/odoo#166259 Forward-Port-Of: odoo/odoo#161476
Original PR description
Check if the user selected the carrier for storable/consumable products before proceeding to payment. opw-3810367 See also: - https://github.com/odoo/enterprise/pull/60550 Forward-Port-Of: odoo/odoo#166259 Forward-Port-Of: odoo/odoo#161476
10 changes
Enhancements to existing features
Sale order forms now hide the recurring details area when there is no information to show. This removes unnecessary blank space and makes subscription-related orders easier to read.
Original PR description
Prior to this commit, when the `recurring_details` field was empty in the footer of a sale order form view, this field was always rendered and created an unwanted empty space. This commit hides the field when it's empty. task-3983459 Requires: - https://github.com/odoo/odoo/pull/169625 --- | Before | After | |--------|--------| | <img width="357" alt="Capture d’écran 2024-06-20 à 14 37 43" src="https://github.com/odoo/enterprise/assets/80679690/1fe04ec4-f6a5-4067-9160-5055bb6a228b"> | <img width="314" alt="Capture d’écran 2024-06-20 à 14 37 59" src="https://github.com/odoo/enterprise/assets/80679690/fbab2795-b3a6-4f51-aec5-01a6f05c837d"> |
Resolved issues and error corrections
Peruvian cash and bank reports now use Odoo's official SUNAT bank code field instead of an older built-in code list. This helps keep reports aligned with current compliance data and reduces the risk of outdated bank codes being used.
Original PR description
Now was added the Odoo field to bank code provided by the SUNNAT, and that field must be used in the bank report. Now is used and deprecated the dict that has that codes.
An unnecessary internal log message was removed from the spreadsheet chart editing area. This helps keep browser logs cleaner without changing any user-facing spreadsheet behavior.
This update corrects an internal styling value used to control shadows in the Enterprise web interface. It has no visible impact for users, but keeps the underlying stylesheet valid and easier to maintain.
Original PR description
In commit odoo/enterprise@aab87024b9dc901dfbca9a9de9739a698989d3f4 we introduced variables to enable the box-shadows on some bootstrap components. However the property was set to `0` which is an invalid property value. The correct value is `none`. This issue doesn't have any visible impact, so it's safe to be fixed in master. task-3755095
This fix keeps the new message separator appearing correctly in WhatsApp conversations, even after many messages are sent. It also updates the related automated test so it matches the corrected notification behavior.
Original PR description
When sending a lot of messages, it can happen that the new message separator does not appear anymore. The community counterpart of this PR fixes this issue but modify a notification payload that is asserted in a whatsapp test. This PR updates this test to match the notification content. community: https://github.com/odoo/odoo/pull/170601
Features or functions removed from Odoo
An unused helper for document spreadsheet template tours was removed. This is an internal cleanup that reduces maintenance overhead without changing how users work with spreadsheets or documents.
Original PR description
This commit removes a test helper for template tours that was no longer used. Task: [4011350](https://www.odoo.com/web#id=4011350&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Miscellaneous changes
Current behaviour: --- Brazilian phone numbers are not managed correctly following the 2016 changes in Brazil. (Adding a 9 to mobile phone numbers) Cause of the issue: --- Phonenumbers metadata were patched to add 9 in mobile numbers, however, when E164 is selected, phone numbers aren't formatted, thus patched metadata not being applied. See format_number in phonenumbers "Early exit for E164 case" Fix: --- See community commit Adding extra tests in test_whatsapp opw-3861847
Original PR description
Current behaviour: --- Brazilian phone numbers are not managed correctly following the 2016 changes in Brazil. (Adding a 9 to mobile phone numbers) Cause of the issue: --- Phonenumbers metadata were patched to add 9 in mobile numbers, however, when E164 is selected, phone numbers aren't formatted, thus patched metadata not being applied. See format_number in phonenumbers "Early exit for E164 case" Fix: --- See community commit Adding extra tests in test_whatsapp opw-3861847 Forward-Port-Of: odoo/enterprise#65336
### Issue: The VAT lines in tax reports do not populate correctly. ### Steps to reproduce: - Activate l10n_es module - Go to Accounting > Reporting > Statement Reports > Tax Report - Select a 'Generic Tax Report' and click on 'VAT Record Books (XLSX)' - In the report, only Spain and partners without countries have a NIF number ### Cause: A line of code is only populating the NIF field in the report if the partner has no country or if the country is Spain. In addition, other lines
Original PR description
### Issue: The VAT lines in tax reports do not populate correctly. ### Steps to reproduce: - Activate l10n_es module - Go to Accounting > Reporting > Statement Reports > Tax Report - Select a 'Generic Tax Report' and click on 'VAT Record Books (XLSX)' - In the report, only Spain and partners without countries have a NIF number ### Cause: A line of code is only populating the NIF field in the report if the partner has no country or if the country is Spain. In addition, other lines related to the NIF are not populated as they should. ### Solution: Add conditions to populate the NIF lines as the specs demands it. Specs: https://sede.agenciatributaria.gob.es/static_files/AEAT/LSI.xlsx (second point) opw-3918623 Forward-Port-Of: odoo/enterprise#63923
At component record creation, the sequence is based on `mps.mps_sequence`. However, mps can contain multiple records. This PR extract the sequence of the parent record to calculate the sequence of its components. Forward-Port-Of: odoo/enterprise#65064
Original PR description
At component record creation, the sequence is based on `mps.mps_sequence`. However, mps can contain multiple records. This PR extract the sequence of the parent record to calculate the sequence of its components. Forward-Port-Of: odoo/enterprise#65064
This will add an input type: gratification for the luxembourg payslips. If there is a gratification in the other inputs, the rules will be added to the payslip and the gratification is computed in the same way as the 13th month. Task: 3794333 Forward-Port-Of: odoo/enterprise#64830 Forward-Port-Of: odoo/enterprise#63800
Original PR description
This will add an input type: gratification for the luxembourg payslips. If there is a gratification in the other inputs, the rules will be added to the payslip and the gratification is computed in the same way as the 13th month. Task: 3794333 Forward-Port-Of: odoo/enterprise#64830 Forward-Port-Of: odoo/enterprise#63800