Tuesday, March 25, 2025
50 changes
2 changes
Miscellaneous changes
Before this commit: ------------------------- When increasing the quantity of a combo product before adding it to the cart, only `1 unit` was added due to a hardcoded quantity value. After this commit: ----------------------- - The hardcoded quantity of `1` was removed. - The selected quantity is now correctly added to the cart, preserving user input. Task-4592610 Forward-Port-Of: odoo/odoo#203058 Forward-Port-Of: odoo/odoo#199160
Original PR description
Before this commit: ------------------------- When increasing the quantity of a combo product before adding it to the cart, only `1 unit` was added due to a hardcoded quantity value. After this commit: ----------------------- - The hardcoded quantity of `1` was removed. - The selected quantity is now correctly added to the cart, preserving user input. Task-4592610 Forward-Port-Of: odoo/odoo#203058 Forward-Port-Of: odoo/odoo#199160
[IMP] web: eslint the new l10n_br_edi_pos module task-3564171 ---- [IMP] point_of_sale: add some hooks for l10n_br_edi_pos This doesn't change behavior, only adds a way to modify the behavior from other modules. task-3564171 Forward-Port-Of: odoo/odoo#201790 Forward-Port-Of: odoo/odoo#193834
Original PR description
[IMP] web: eslint the new l10n_br_edi_pos module task-3564171 ---- [IMP] point_of_sale: add some hooks for l10n_br_edi_pos This doesn't change behavior, only adds a way to modify the behavior from other modules. task-3564171 Forward-Port-Of: odoo/odoo#201790 Forward-Port-Of: odoo/odoo#193834
1 change
Miscellaneous changes
As defined in https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/form/form_controller.js#L322 A record save in Form Controllers can be prevented when `onWillSaveRecord` returns `false`. But since the override in `HelpdeskTeamController` did not consider `super`, it would always break such a flow. Forward-Port-Of: odoo/enterprise#81769
Original PR description
As defined in https://github.com/odoo/odoo/blob/17.0/addons/web/static/src/views/form/form_controller.js#L322 A record save in Form Controllers can be prevented when `onWillSaveRecord` returns `false`. But since the override in `HelpdeskTeamController` did not consider `super`, it would always break such a flow. Forward-Port-Of: odoo/enterprise#81769
15 changes
Enhancements to existing features
This update removes unused animation code from the VoIP menu area. It helps keep the interface code cleaner and avoids relying on an animation name that browsers do not recognize, with no expected change for users.
Original PR description
This commit removes the unused `o-voip-SystrayItem-vibrateAnimation` CSS animation and also removes the `vibrate` animation as it is an unknown CSS animation-name. Reference: - https://developer.mozilla.org/en-US/docs/Web/CSS/animation
7 changes
Resolved issues and error corrections
Long signature request names are now shortened on employee contract cards so they no longer overlap other information. This keeps the kanban view tidy and makes contract status indicators stay visually consistent.
Original PR description
- after having long name of signature request linked to the contract, it's conflicting the visual of kanban view - with same path, kanban state can not stable on their position - because of that, to make stability of kanban state changed path too - Before fix: - for long name of signature request, overwrite the kanban view  - After fix - perfectly fit the name in kanban view, - only show the limited character and appending `...`  - OPW-4590161
This update streamlines automated testing across Point of Sale and related country-specific modules by removing duplicate checks, merging overlapping test scenarios, and splitting large tests into easier-to-maintain parts. It helps improve test reliability and maintainability without changing business functionality.
Original PR description
Cleaning all tours and tests in PoS related modules, removing duplicated tests and tours, and fixing some issues in the tests. Deleted / merged tests: - The test `test_01_pos_basic_order` is now splitted in separate method to easier debug and maintain. - The test `test_06_pos_discount_display_with_multiple_pricelist` is merged with `test_01_pos_basic_order` in `pos_pricelist` tour. - The test `test_product_combo_price` is removed since test content is duplicate in `test_07_product_combo` which also tests prices. - The test `test_autofill_cash_count` is merged with `test_properly_display_price` since it is a sub-test of it. - The test `test_product_search_2` is merged with `test_product_search` - Tests `test_rounding_up`, `test_rounding_down` and `test_rounding_half_up` are deleted since class `TestPosCashRounding` already tests rounding. taskId: 4467373
The barcode interface has been tidied up by removing an animation that was incorrectly defined and therefore not working. This reduces unnecessary styling code without changing how users interact with barcode operations.
Original PR description
This commit removes the malformed (and thus unapplied) `highlighting-flash-primary` CSS animation.
In a nutshell, the animation as written in SCSS doesn't interpret the `theme-color("primary")` call and write it as-is in the generated CSS... which, in return, is an unknown CSS value.
Note: this commit also removes the `highlighting-flash-white` animation as it isn't used.Resolved issues and error corrections
The payroll accounting test for Belgian salary advances now includes the required journal setup, so it no longer fails when demo data is not installed. This improves reliability of automated testing without changing behavior for end users.
Original PR description
Before this fix, the salary advance test was failing when no demo data was installed due to a missing journal on the structure. This commit adds a journal to the structure to avoid test failure without demo data. task-4672827
This fixes an internal automated test issue in the recruitment appointment module when demo data is not available. It helps keep validation checks reliable so future updates can be tested without false failures.
Original PR description
runbot-160911
Code cleanup and technical improvements
This draft refactor removes remaining field service references from several business areas, helping simplify the product and reduce maintenance around a discontinued scope. The change touches manufacturing work orders, sales planning, spreadsheets, and Studio tests, with limited direct impact expected for end users.
Spreadsheet test helpers now use a faster pivot insertion approach by default. This reduces waiting time during automated test runs, helping developers validate spreadsheet changes more quickly without changing customer-facing behavior.
Original PR description
This commit changes the default insertion mode of the pivot in the tests helpers, to use the dynamic pivot instead of the static one. It allows to avoid to wait for the pivot to be loaded before actually inserting it. The gain is about 20% of the time for spreadsheet tests, 15% for spreadsheet_edition tests (enterprise) and 5% for the whole spreadsheet test suite. Task: 4655122
Miscellaneous changes
Steps to reproduce: - Open Expenses. - Upload a sample expense pdf. The blue ribbon shows up saying “” - Do not click on the refresh button. Instead, put in some value for the amount and submit and approve the expense. - Go back to the expenses list view Issue: Notice this expense is at the top of the list and grayed out Cause: The order is determined by the extract_state_processed field: https://github.com/odoo/enterprise/blob/ba06e216ab73c73e3a67fd917623c6ad357b869f/hr_expense_ext
Original PR description
Steps to reproduce: - Open Expenses. - Upload a sample expense pdf. The blue ribbon shows up saying “” - Do not click on the refresh button. Instead, put in some value for the amount and submit and…
Steps to reproduce: - Open Expenses. - Upload a sample expense pdf. The blue ribbon shows up saying “” - Do not click on the refresh button. Instead, put in some value for the amount and submit and approve the expense. - Go back to the expenses list view Issue: Notice this expense is at the top of the list and grayed out Cause: The order is determined by the extract_state_processed field: https://github.com/odoo/enterprise/blob/ba06e216ab73c73e3a67fd917623c6ad357b869f/hr_expense_extract/models/hr_expense.py#L21 An expense is muted when this field is set to `True`: https://github.com/odoo/enterprise/blob/1df090289f3c45c200d133734989a6d9a8073145/hr_recruitment_extract/views/hr_applicant_views.xml#L67 Solution: We override `iap_extract` method https://github.com/odoo/enterprise/blob/2e3113562309bf4d440e12ab09eaf94d0b302f1f/iap_extract/models/extract_mixin.py#L69 If the expense is not in draft, it indicates that the process continued without waiting for the extraction process to complete (values were manually entered). To ensure a consistent extraction state, we extend the "Check OCR Status" logic to prevent an infinite waiting_extraction status. opw-4239404 Forward-Port-Of: odoo/enterprise#80705 Forward-Port-Of: odoo/enterprise#75202
Steps to reproduce: - With an ES company setup - Create and confirm invoice with: - Spanish partner - Amount > 3005.06 (mod347 threshold) - Type for mod 347: Regular operation - Create and confirm a jounral entry with: - Payable account, debit 4000 - Receivable account, credit 4000 - Type for mod 347: Regular operation - Check Mod 347 Tax Report Issue: 'Total number of persons and entities' shows 0 This occurs because some lines of mod 347 report need to be grouped by
Original PR description
Steps to reproduce: - With an ES company setup - Create and confirm invoice with: - Spanish partner - Amount > 3005.06 (mod347 threshold) - Type for mod 347: Regular operation - Create and confirm a jounral entry with: - Payable account, debit 4000 - Receivable account, credit 4000 - Type for mod 347: Regular operation - Check Mod 347 Tax Report Issue: 'Total number of persons and entities' shows 0 This occurs because some lines of mod 347 report need to be grouped by partner, only keeping the partners whose balance for the line is above 3005.06€, so we first get all the partners that match the domain but don't reach the threshold. We exclude these partners with a 'NOT IN' clause. However, when the partner is not set, a NULL values is retrieved causing the clause to be evaluated NULL instead of False and the total count will be 0 opw-4544950 Forward-Port-Of: odoo/enterprise#81954 Forward-Port-Of: odoo/enterprise#81687
Forward-Port-Of: odoo/enterprise#82033 Forward-Port-Of: odoo/enterprise#81564
Original PR description
Forward-Port-Of: odoo/enterprise#82033 Forward-Port-Of: odoo/enterprise#81564
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Original PR description
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Before this commit: The "I Take It" button visibility was inconsistent across different view because different conditions were used to determine its visibility in each view. After this commit: This commit enhance the visibility of the "I Take It" button now it has consistent visibility across the views by follow same condition for every view. task-4455488 Forward-Port-Of: odoo/enterprise#81950 Forward-Port-Of: odoo/enterprise#79319
Original PR description
Before this commit: The "I Take It" button visibility was inconsistent across different view because different conditions were used to determine its visibility in each view. After this commit: This commit enhance the visibility of the "I Take It" button now it has consistent visibility across the views by follow same condition for every view. task-4455488 Forward-Port-Of: odoo/enterprise#81950 Forward-Port-Of: odoo/enterprise#79319
This test tour fails on sunday. Reason: - Here in the test create timesheets in previous week to check overtime in timesheets. - The formula works as today - current week day --> gives monday of this week - But on when it sunday it gives monday of previous week. - Timesheets are further created the previous weeks if given monday. - But we only go one week previous to check Fix: - Selecting next monday if weekday is sunday as we go back one previous week in tour. task-4667966
Original PR description
This test tour fails on sunday. Reason: - Here in the test create timesheets in previous week to check overtime in timesheets. - The formula works as today - current week day --> gives monday of this week - But on when it sunday it gives monday of previous week. - Timesheets are further created the previous weeks if given monday. - But we only go one week previous to check Fix: - Selecting next monday if weekday is sunday as we go back one previous week in tour. task-4667966 Forward-Port-Of: odoo/enterprise#81975
Since there is no else condition, the rule raises an error on payslip computation. Forward-Port-Of: odoo/enterprise#81979
Original PR description
Since there is no else condition, the rule raises an error on payslip computation. Forward-Port-Of: odoo/enterprise#81979
Issue: cannot groupby status on appraisal analysis neither filter by state in graph view Solve: update the state field values of report to match the original model Task: 4653149 Forward-Port-Of: odoo/enterprise#81600
Original PR description
Issue: cannot groupby status on appraisal analysis neither filter by state in graph view Solve: update the state field values of report to match the original model Task: 4653149 Forward-Port-Of: odoo/enterprise#81600
Miscellaneous changes
Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#81096
Original PR description
Fixed the `Request Owner` field to list all users in the selected companies. The previous domain was based on `company_id`, which was computed from the selected `category_id`. However, if no category was selected (`category_id` was null), no `request_owner_id` was listed. The new fix computes all selected companies from `self.env`. task-4637199 Forward-Port-Of: odoo/enterprise#81096
### Issue: Currently, the `use_create_components_lots` of the manufacturing picking type is not used in barcode to allow/forbid the creation of new lots. ### Steps to reproduce: - Inventory > Configuration > Warehouse Management > Operation Types - Manufacturing > uncheck: Create New Lots/Serial Numbers for Component - Create a product tracked by SN and put one SN in stock. - Create and confirm an MO for an other product using your tracked product as component. - Go to the barcode a
Original PR description
### Issue: Currently, the `use_create_components_lots` of the manufacturing picking type is not used in barcode to allow/forbid the creation of new lots. ### Steps to reproduce: - Inventory >…
### Issue: Currently, the `use_create_components_lots` of the manufacturing picking type is not used in barcode to allow/forbid the creation of new lots. ### Steps to reproduce: - Inventory > Configuration > Warehouse Management > Operation Types - Manufacturing > uncheck: Create New Lots/Serial Numbers for Component - Create a product tracked by SN and put one SN in stock. - Create and confirm an MO for an other product using your tracked product as component. - Go to the barcode app > Manufacturing > your MO - Click on the component line and scan a string that do not correspond to an existing SN of your tracked product. > The Scanned string is added as a "lot_name" on a new line. In particular, at validation a new move line without lot and with a set lot_name will be created. This line without lot will be used in all the `pre_button_mark_done` checks like: `_check_sn_uniqueness` which btw will fail if you scanned 2 non-existing lots. And, if you manage to pass all check for instance by scanning a non-existing lot and the initially reserved one, the validation of the new move line will create the lot. Cause of the issue: Scanning the non existing lot will correctly fail to find a match via the barcode parser: https://github.com/odoo/enterprise/blob/026a5b8a83bd6b94588baa9a35530495d9e067cd/stock_barcode/static/src/models/barcode_model.js#L963 As such and since a line is selected, you will end up setting the barcode as a lotName: https://github.com/odoo/enterprise/blob/026a5b8a83bd6b94588baa9a35530495d9e067cd/stock_barcode/static/src/models/barcode_model.js#L1018-L1034 This happens notably because you `this.canCreateNewLot` is always set to `True` on productions but should not: https://github.com/odoo/enterprise/blob/026a5b8a83bd6b94588baa9a35530495d9e067cd/stock_barcode_mrp/static/src/models/barcode_mrp_model.js#L126-L128 opw-4618963 Forward-Port-Of: odoo/enterprise#81681 Forward-Port-Of: odoo/enterprise#81272
Issue ===== When validating an uncompleted return in Barcode, an error is raised. How to reproduce ================ - Open Barcode app > Operations > Receipts and create a new receipt; - Scan at least two times the same product's barcode; - Validate. - Re-open the same receipt and click on "Return Products"; - Scan one product then validate -> The return is correctly validated but an "Invalid Operation" error is raised. Cause of the issue ================== The return's move is d
Original PR description
Issue ===== When validating an uncompleted return in Barcode, an error is raised. How to reproduce ================ - Open Barcode app > Operations > Receipts and create a new receipt; - Scan at…
Issue ===== When validating an uncompleted return in Barcode, an error is raised. How to reproduce ================ - Open Barcode app > Operations > Receipts and create a new receipt; - Scan at least two times the same product's barcode; - Validate. - Re-open the same receipt and click on "Return Products"; - Scan one product then validate -> The return is correctly validated but an "Invalid Operation" error is raised. Cause of the issue ================== The return's move is done but `_split` is called and calling this method on a done move is forbidden. How to fix ========== In the `split_uncompleted_moves` move's method, done and cancel move are skipped. Also, the JS method who call `post_barcode_process` will now doesn't call it if operation is done or cancelled or if there is no moves (to avoid to do useless RPC.) [OPW-4535205](https://www.odoo.com/odoo/project/49/tasks/4535205) [OPW-4535257](https://www.odoo.com/odoo/project/49/tasks/4535257) Forward-Port-Of: odoo/enterprise#81531 Forward-Port-Of: odoo/enterprise#81312
# HOW TO REPRODUCE: - Create products FNS & CMP - Set available quantity of CMP to 2 - Create MO of 1 FNS and 2 CMP -> Confirm - Open MO in barcode - Set FNS quantity to 1 - Set CMP quantity to 1 (1/2 of the demand) -> Produce MO => The CMP move has 2 lines of 1 unit, so 2 unit have been consumed instead of the 1 put on the barcode. https://github.com/user-attachments/assets/237c81bc-f342-4293-bc76-008b5c7cf876 OPW-4517284 Forward-Port-Of: odoo/enterprise#81912 Forward-Port-Of
Original PR description
# HOW TO REPRODUCE: - Create products FNS & CMP - Set available quantity of CMP to 2 - Create MO of 1 FNS and 2 CMP -> Confirm - Open MO in barcode - Set FNS quantity to 1 - Set CMP quantity to 1 (1/2 of the demand) -> Produce MO => The CMP move has 2 lines of 1 unit, so 2 unit have been consumed instead of the 1 put on the barcode. https://github.com/user-attachments/assets/237c81bc-f342-4293-bc76-008b5c7cf876 OPW-4517284 Forward-Port-Of: odoo/enterprise#81912 Forward-Port-Of: odoo/enterprise#81343
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Original PR description
Steps to reproduce: 1. In recruitment app, generate an offer for an applicant. 2. Send the offer by email and sign it by both parties. Bug: The generated sign request is not linked to the offer using the reference_doc field. Fix: Link the offer to the sign request upon creation in the submit endpoint. task-4607475 Forward-Port-Of: odoo/enterprise#80391
Steps to reproduce the bug: - create a storable product “P1” and “C1” - create a quality point for C1: - Operation type: Manufacturing - Control per: quantity - Control Frequency: all - Partial Test: 10% - Type: pass-fail - Create a manufacturing order: - Finished product: 2 units of P1 - Components: C1 -> 10 units - Confirm the MO - go to the quality check Problem: A quality check is created, but the quantity to test is based on the manufacturin
Original PR description
Steps to reproduce the bug:
- create a storable product “P1” and “C1”
- create a quality point for C1:
- Operation type: Manufacturing
- Control per: quantity
- Control Frequency: all
- Partial Test: 10%
- Type: pass-fail
- Create a manufacturing order:
- Finished product: 2 units of P1
- Components: C1 -> 10 units
- Confirm the MO
- go to the quality check
Problem:
A quality check is created, but the quantity to test is based on the manufacturing order's produced quantity instead of the stock move line quantity linked to the quality check.
opw-4527413
Forward-Port-Of: odoo/enterprise#81773