Tuesday, June 18, 2024
52 changes · saas-17.3
Resolved issues and error corrections
This change adds a missing way for the spreadsheet app to identify Odoo pivot tables. It helps pivot-related actions work correctly, reducing errors when users interact with pivot data in spreadsheets.
Original PR description
In order to fix an issue with the odoo pivot actions, we need to add a new getter to get the odoo pivot ids. Task: 3992325 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale tests now use USD consistently instead of depending on each company's configured currency. This prevents false test failures in environments using a different currency, helping keep releases stable without changing customer-facing behavior.
Original PR description
The tests were failing when the company currency was not USD, because the tests were using the company currency to create the products and the pricelists. This commit changes the tests to always use USD as the company currency. Runbot errors ids: 64677,64676,64675,64674,64673,64672,64671,64670,64669,64668,64667,64666,64665,64664,64663,64662,64661,64660,64659,64658,64657,64656,64655,64654,64653,64652,64651,64650,64649,64648,64647,64646,64645,64644,64643,64642,64641,64640,64639,64638,64637,64636,64635,64634,64633,64632,64631,64630,64629,64628,64627,64626,64625,64624,64623,64622
Disabled icon buttons in the course content list no longer show an unintended border. This removes a visual glitch and makes course navigation look cleaner and more consistent for learners.
Original PR description
## Issue In Course List, After v17.3 + There a topless border in icons where button is disabled. Which looks weird and doesn't make sense as we don't need any border there. ## Technical This issue came from this commit odoo@7d66dcb , where `disabled="1"` was added inside the button. The default `btn.disabled` has button border in [bootstrap](https://github.com/odoo/odoo/blob/51af11c9180fe48ba3492ffd3402a22bde211318/addons/web/static/lib/bootstrap/dist/css/bootstrap.css#L3048-L3053) code. That's why the border is appearing there. ## After this PR There will be no borders where icon buttons are disabled. Task-3975450
The DIAN support document button on Colombian vendor bills now appears only when the related journal is properly configured for it. This helps prevent users from trying to send documents through an unsupported or incomplete setup.
Original PR description
The "Send Support Document to DIAN" button was displayed on vendor bills even when the associated journal was not set up for it (the field "Resolución de Facturación" was not set up for that move's journal). The button is now invisible if the correct conditions are not met. task-3990920
This fix stabilizes an automated test for the Gantt view around daylight saving time changes. It helps keep release validation reliable and reduces false test failures without changing user-facing behavior.
Original PR description
We forgot to fix the non deterministic test "date grid and dst winterToSummer (1 cell part)" in https://github.com/odoo/enterprise/pull/64541. We finish the job here. Runbot issue: 67941
Users creating a signature request will no longer see a confusing validation error simply because they switch browser tabs after choosing a template. The required signer information is still checked when they actually try to send the request, keeping safeguards in place while reducing unnecessary interruptions.
Original PR description
Before this commit, when you started creating a signature request through the pop-up, added a template and changed your browser tab, a validation error would be triggered telling you that you didn't insert the partners for the signing roles. This is counter intuitive because the user didn't even try to create the sign request through the button, it just moved to another tab. After this commit, we removed this validation error. It was not needed because if the user tried to send the signature request without any inserted partners, the action would already be blocked by another validation error asking to add the partner for each sign role. task-3961814
Miscellaneous changes
Steps to reproduce: - install point of sale and HR - create some data in the point of sale app - switch the user language to arabic - open the point of sale dashboard => some cells are in error, the date cannot be recognised. The reason is that `formatDateTime` returns the date with arabic numbers, which can't be parsed by the spreadsheet engine. The option `numberingSystem` is ignored by `formatDateTime`. With this commit, we change the date numbering system before. opw-3992621
Original PR description
Steps to reproduce: - install point of sale and HR - create some data in the point of sale app - switch the user language to arabic - open the point of sale dashboard => some cells are in error, the date cannot be recognised. The reason is that `formatDateTime` returns the date with arabic numbers, which can't be parsed by the spreadsheet engine. The option `numberingSystem` is ignored by `formatDateTime`. With this commit, we change the date numbering system before. opw-3992621 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169627
**Steps to reproduce:** - Install Point of Sale module - Create an order through the PoS day and time X - Re-print the receipt/ticket another day **Current behavior before PR:** When reprint an order's receipt in a day different than the order creation date you will have the current date at the end of the receipt. This is happening because when exporting the data of the order to print the receipt we are setting the date to be printed equals to the receipt date which is the current time
Original PR description
**Steps to reproduce:** - Install Point of Sale module - Create an order through the PoS day and time X - Re-print the receipt/ticket another day **Current behavior before PR:** When reprint an order's receipt in a day different than the order creation date you will have the current date at the end of the receipt. This is happening because when exporting the data of the order to print the receipt we are setting the date to be printed equals to the receipt date which is the current time. https://github.com/odoo/odoo/blob/17.0/addons/point_of_sale/static/src/app/store/models.js#L1610 https://github.com/odoo/odoo/blob/17.0/addons/point_of_sale/static/src/app/store/models.js#L1625 **Desired behavior after PR is merged:** We are now passing the order date instead of the receipt date. opw-3979454 Forward-Port-Of: odoo/odoo#169265
Steps to reproduce: [phonenumbers] - Create a customer from Malaysia and add a phone number '123456789' -> it will be formatted '+60 12-345 6789' - Create an invoice - Confirm - Click on Process Now Issue: There will be a warning "The Buyer’s contact phone number (BT-57) shall start with “0“ or “+”, followed by a maximum of 15 number and minimum 4 character after the “+“ or “0“ , if exist." Solution: Only keep digits and the "+" symbol note: The test has changed in order to be m
Original PR description
Steps to reproduce: [phonenumbers] - Create a customer from Malaysia and add a phone number '123456789' -> it will be formatted '+60 12-345 6789' - Create an invoice - Confirm - Click on Process Now…
Steps to reproduce: [phonenumbers] - Create a customer from Malaysia and add a phone number '123456789' -> it will be formatted '+60 12-345 6789' - Create an invoice - Confirm - Click on Process Now Issue: There will be a warning "The Buyer’s contact phone number (BT-57) shall start with “0“ or “+”, followed by a maximum of 15 number and minimum 4 character after the “+“ or “0“ , if exist." Solution: Only keep digits and the "+" symbol note: The test has changed in order to be more realistic. That is, if I have a foreign contact I will: - or use/set the correct format manually (if not, it should raise an error from the third-party api) - or install `phonenumbers` to automatically format it (if not on a saas) `phone_validation` is in 'auto_intsall' whenever `base` and `mail` are installed (and if the library `phonenumbers` is installed) and works as followed: ``` >>> import phonenumbers >>> raw_phone = '(870)-931-0505' >>> parsed_number = phonenumbers.parse(raw_phone, "US") >>> phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.INTERNATIONAL) '+1 870-931-0505' ``` opw-3912128 Forward-Port-Of: odoo/odoo#164717
This is a follow-up of [1]. The ability to duplicate from the list view appeared with version 17.0 and was not taken into account during the forward-port. [1]: https://github.com/odoo/odoo/commit/1688a19266809d23f525563dbbb20175cbd8da83 Forward-Port-Of: odoo/odoo#167031
Original PR description
This is a follow-up of [1]. The ability to duplicate from the list view appeared with version 17.0 and was not taken into account during the forward-port. [1]: https://github.com/odoo/odoo/commit/1688a19266809d23f525563dbbb20175cbd8da83 Forward-Port-Of: odoo/odoo#167031
Versions -------- - 16.0+ Steps ----- 1. Enable lock SO on confirmation; 2. enable wire transfer as payment provider' 3. go to website; 4. buy a product using wire transfer; 5. confirm the generated SO in the back-end; 6. front-end says payment has been confirmed. Issue ----- The confirmation status of the SO doesn't reflect the confirmation status of the payment. Cause ----- The `action_lock` method looks at any relevant wire transfers that are pending, and confirms them.
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Enable lock SO on confirmation; 2. enable wire transfer as payment provider' 3. go to website; 4. buy a product using wire transfer; 5. confirm the generated SO in the back-end; 6. front-end says payment has been confirmed. Issue ----- The confirmation status of the SO doesn't reflect the confirmation status of the payment. Cause ----- The `action_lock` method looks at any relevant wire transfers that are pending, and confirms them. Solution -------- Decouple wire transfer confirmation from the locking of sale orders. opw-3751481 Forward-Port-Of: odoo/odoo#169369 Forward-Port-Of: odoo/odoo#169135
Previously, if a product had a vendor set with some minimum quantity, it wouldn't be displayed in the BoM Overview if the line quantity didn't match this minimum. This meant that if that vendor was the only one set for this product, then no resupply route would be displayed and no lead time would be found. This is an issue, as it's inconsistent with how it would actually work when creating a MO from that BoM. (i.e. create the PO to that vendor, but with its default price). Instead, when no s
Original PR description
Previously, if a product had a vendor set with some minimum quantity, it wouldn't be displayed in the BoM Overview if the line quantity didn't match this minimum. This meant that if that vendor was the only one set for this product, then no resupply route would be displayed and no lead time would be found. This is an issue, as it's inconsistent with how it would actually work when creating a MO from that BoM. (i.e. create the PO to that vendor, but with its default price). Instead, when no supplier is found for the right quantity, we display the first suitable vendor anyway, but with a different color. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169150 Forward-Port-Of: odoo/odoo#165573
Some part of the `action_send_chat_request` method has been wrongly indented in [1]. As a result, this block is executed as part of a loop while it should not. This PR put the block of code out of the loop. [1]: https://github.com/odoo/odoo/pull/129770 Forward-Port-Of: odoo/odoo#169454 Forward-Port-Of: odoo/odoo#169379
Original PR description
Some part of the `action_send_chat_request` method has been wrongly indented in [1]. As a result, this block is executed as part of a loop while it should not. This PR put the block of code out of the loop. [1]: https://github.com/odoo/odoo/pull/129770 Forward-Port-Of: odoo/odoo#169454 Forward-Port-Of: odoo/odoo#169379
Issue ---- When uploading a file, the chatter is unmounted from the right side of the screen then remounted to the bottom as soon as the file is uploaded to preview. For multiple files, the `onUploaded` hook is called before the re-mounted chatter root element becomes accessible to the component. This results in dereferencing `null` in `onUploaded`. Steps ----- - Create a new bill. - Upload multiple attachments. Make sure that: - There are no attachments when you upload. - The
Original PR description
Issue ---- When uploading a file, the chatter is unmounted from the right side of the screen then remounted to the bottom as soon as the file is uploaded to preview. For multiple files, the `onUploaded` hook is called before the re-mounted chatter root element becomes accessible to the component. This results in dereferencing `null` in `onUploaded`. Steps ----- - Create a new bill. - Upload multiple attachments. Make sure that: - There are no attachments when you upload. - The attachments are large enough so the second attachment is uploaded just after the first is previewed (and the chatter is unmounted from the right). opw-3985584 Forward-Port-Of: odoo/odoo#169095
This fixes a bug introduced in 96638eb, where lines with discount apply it twice. Backport of https://github.com/odoo/odoo/pull/168212 cc @robinengels --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168819
Original PR description
This fixes a bug introduced in 96638eb, where lines with discount apply it twice. Backport of https://github.com/odoo/odoo/pull/168212 cc @robinengels --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168819
Problem: Combo product can have a price that is not the expected one Steps to reproduce: - Install "Point of Sale" app - Go to POS settings and go to the Tax settings - In the tab "Advanced Options", check "Included in Price" - Create a product of type "Combo", set the price to $7.00 - Add 3 combo choices with products prices as $7.00, $2.50 and $1.50 with no extra price - In the shop, sell this combo - The total price is $6.99 rather than $7.00 Cause: The condition supposed to fi
Original PR description
Problem: Combo product can have a price that is not the expected one Steps to reproduce: - Install "Point of Sale" app - Go to POS settings and go to the Tax settings - In the tab "Advanced Options", check "Included in Price" - Create a product of type "Combo", set the price to $7.00 - Add 3 combo choices with products prices as $7.00, $2.50 and $1.50 with no extra price - In the shop, sell this combo - The total price is $6.99 rather than $7.00 Cause: The condition supposed to fill the remaining price in the last orderline was always false opw-3897431 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167472
Problem: When a user saves a quotation in the POS session, the quotation gets confirmed into a SO and its invoice_status is "invoiced" but no invoice was created. This occurs because the POS has another POS as its trusted POS. The user is expected the quotation to stay as a quotation when they save it in the POS. Steps to reproduce: - Install "Point of Sale" and "Sales" apps - Create another POS that is not a bar/restaurant - On the settings of the "Shop" POS, set the newly created POS as
Original PR description
Problem: When a user saves a quotation in the POS session, the quotation gets confirmed into a SO and its invoice_status is "invoiced" but no invoice was created. This occurs because the POS has…
Problem: When a user saves a quotation in the POS session, the quotation gets confirmed into a SO and its invoice_status is "invoiced" but no invoice was created. This occurs because the POS has another POS as its trusted POS. The user is expected the quotation to stay as a quotation when they save it in the POS. Steps to reproduce: - Install "Point of Sale" and "Sales" apps - Create another POS that is not a bar/restaurant - On the settings of the "Shop" POS, set the newly created POS as its trusted POS - Create a sales quotation and save - Open a session in "Shop" POS and click "quotation/order" to import the sales quotation and click on "Settle the order" - Click on "More..." > "Park Order" - The quotation is now confirmed into a SO when it should not be Cause: All quotations with state "draft" or "sent" are confirmed while they shouldn't if the sale is not completed opw-3885845 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168007 Forward-Port-Of: odoo/odoo#166485
In this PR fixes the following issue ---------------------------------------------------------- - The pull request addresses a mobile view issue where the context 'show_project_update' is False so the showProjectUpdate method will not be called and the missing record error will not appear. - As part of this pull request, the visible property will be set for the x and y so that the scroll bar will appear at the bottom when fever records are displayed. task-3681318 Forward-Port-Of
Original PR description
In this PR fixes the following issue ---------------------------------------------------------- - The pull request addresses a mobile view issue where the context 'show_project_update' is False so the showProjectUpdate method will not be called and the missing record error will not appear. - As part of this pull request, the visible property will be set for the x and y so that the scroll bar will appear at the bottom when fever records are displayed. task-3681318 Forward-Port-Of: odoo/odoo#151377
This error occurs when we create a new sales order, then proceed to create an invoice within that sales order, and finally attempt to open the ``Accrued Revenue Entry`` from the action button. Steps to reproduce: - Install the ``sale_management`` and ``account_accountant`` modules - Create new sales orders > ``Confirm`` > ``Create Invoice`` button > Down Payment in % > ``Confirm`` > ``Sale Order`` smart button - Go to action button > ``Accrued Revenue Entry`` Traceback : ``Asse
Original PR description
This error occurs when we create a new sales order, then proceed to create an invoice within that sales order, and finally attempt to open the ``Accrued Revenue Entry`` from the action button. Steps…
This error occurs when we create a new sales order, then proceed to create an invoice within that sales order, and finally attempt to open the ``Accrued Revenue Entry`` from the action button. Steps to reproduce: - Install the ``sale_management`` and ``account_accountant`` modules - Create new sales orders > ``Confirm`` > ``Create Invoice`` button > Down Payment in % > ``Confirm`` > ``Sale Order`` smart button - Go to action button > ``Accrued Revenue Entry`` Traceback : ``AssertionError precision_rounding must be positive, got 0.0`` At [1] within ``o.order_line``, we are encountering an issue where ``precision_rounding`` is being retrieved as zero. This is leading to an error. This commit will fix the above error by implementing a check for the ``is_downpayment`` in the order line. [1]: https://github.com/odoo/odoo/blob/34b651de35b986db404a3950866bed7bc7e1fae2/addons/account/wizard/accrued_orders.py#L174 sentry-4857910663 Forward-Port-Of: odoo/odoo#165014
Steps to reproduce: 1. As a frontend user, add a product to the cart 2. As a backend user, add a note line to the created order 3. As a frontend user, open the cart Before this commit: The note line in the order is deleted After this commit: The note line in the order is still there The note line deletion was introduced long ago with ee0199cac4f58bc8aefd0ea1410d16fb6b9f4e31, as a side-effect of deleting lines with inactive products. This commit also makes sure that notes/section
Original PR description
Steps to reproduce: 1. As a frontend user, add a product to the cart 2. As a backend user, add a note line to the created order 3. As a frontend user, open the cart Before this commit: The note line in the order is deleted After this commit: The note line in the order is still there The note line deletion was introduced long ago with ee0199cac4f58bc8aefd0ea1410d16fb6b9f4e31, as a side-effect of deleting lines with inactive products. This commit also makes sure that notes/section lines are not shown in the cart, as the current template and code are not designed to handle lines without products (it raises while trying to fetch the combination info of the soline product). Forward-Port-Of: odoo/odoo#169355 Forward-Port-Of: odoo/odoo#168521
Currently people wanting to use a bank journal for their credit card transactions have to use a hack to set the default account as a credit card account, since the domain does not allow this. To make the life of people easier, we now allow selecting a credit card account on bank journals. [task-3891250](https://www.odoo.com/web#id=3891250&model=project.task) Forward-Port-Of: odoo/odoo#167188 Forward-Port-Of: odoo/odoo#163947
Original PR description
Currently people wanting to use a bank journal for their credit card transactions have to use a hack to set the default account as a credit card account, since the domain does not allow this. To make the life of people easier, we now allow selecting a credit card account on bank journals. [task-3891250](https://www.odoo.com/web#id=3891250&model=project.task) Forward-Port-Of: odoo/odoo#167188 Forward-Port-Of: odoo/odoo#163947
We now allow grouping by other fields that account_id in the report, namely product_id, and product_category_id. However, for the deferral generation, we continue grouping by account_id. task-id 3925943 https://github.com/odoo/enterprise/pull/64699 Forward-Port-Of: odoo/odoo#165592
Original PR description
We now allow grouping by other fields that account_id in the report, namely product_id, and product_category_id. However, for the deferral generation, we continue grouping by account_id. task-id 3925943 https://github.com/odoo/enterprise/pull/64699 Forward-Port-Of: odoo/odoo#165592
Steps : * Create a loyalty program of any type * Create 2 or more rewards * Create a sale order and use the loyalty program and reward we just created * Go back to the loyalty program and try to delete that reward Issue : The record cannot be deleted as another model requires the record being deleted Fix : Changed the unlink method to delete the record if this record id is not required by another model and archive the record if it is required opw : 3879031 --- I confirm I hav
Original PR description
Steps : * Create a loyalty program of any type * Create 2 or more rewards * Create a sale order and use the loyalty program and reward we just created * Go back to the loyalty program and try to delete that reward Issue : The record cannot be deleted as another model requires the record being deleted Fix : Changed the unlink method to delete the record if this record id is not required by another model and archive the record if it is required opw : 3879031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#164293
When using the action_view_opportunity for assigned partners we should be able to see the lost leads when filtering by 'Lost', but if we don't set the active_test to False for the context we won't be able to see them in this view. So since we retrieve the leads with `self.env['crm.lead'].with_context(**action_context_origin)` we need to make sure the active_test is False to get all the leads related to the partner. ## Steps to reproduce: 1. Install website_crm_partner_assign. 2. Create at
Original PR description
When using the action_view_opportunity for assigned partners we should be able to see the lost leads when filtering by 'Lost', but if we don't set the active_test to False for the context we won't be able to see them in this view. So since we retrieve the leads with `self.env['crm.lead'].with_context(**action_context_origin)` we need to make sure the active_test is False to get all the leads related to the partner. ## Steps to reproduce: 1. Install website_crm_partner_assign. 2. Create at least 2 leads (one active and one lost) for a new partner. 3. Make sure we have set this partner as assigned partner. 4. Now on the partner form go to the leads action to see the leads related to the partner. opw-3903070 Forward-Port-Of: odoo/odoo#166832
The "Reload Chart Template" button currently doesn't work with the argentinian localization. It is due to some python constrains that don't allow to modify some fields if there are accounting entries. The issue is that the constrains will be raised, when any writing on those fields is done, even if the new value is the same as the old one. When reloading the chart template it is re-writing the values, but they are not different, so no exception should be raised. The fix here is
Original PR description
The "Reload Chart Template" button currently doesn't work with the argentinian localization. It is due to some python constrains that don't allow to modify some fields if there are accounting entries. The issue is that the constrains will be raised, when any writing on those fields is done, even if the new value is the same as the old one. When reloading the chart template it is re-writing the values, but they are not different, so no exception should be raised. The fix here is to move those constrains into the `def write` override, where there's more control (as we have the new values as argument). task-3878511 Forward-Port-Of: odoo/odoo#168995 Forward-Port-Of: odoo/odoo#166537
- Replace "middle rate" & "average rate" by "medium rate" - Fix misusage of accounts in taxes See: https://github.com/Skatteetaten/saf-t fixes odoo/odoo#161396 task-3864178 Co-Authored-By: Henrik Norlin <henrik.norl@gmail.com> **Enterprise PR:** odoo/enterprise#64363 Forward-Port-Of: odoo/odoo#161517
Original PR description
- Replace "middle rate" & "average rate" by "medium rate" - Fix misusage of accounts in taxes See: https://github.com/Skatteetaten/saf-t fixes odoo/odoo#161396 task-3864178 Co-Authored-By: Henrik Norlin <henrik.norl@gmail.com> **Enterprise PR:** odoo/enterprise#64363 Forward-Port-Of: odoo/odoo#161517
Steps to reproduce: ------------------- - in settings, activate "Recurring Tasks" - create a recurring task with a dateline to today and a recurrence every "1 Days Until tomorrow" - save - change the state to "Done" - on the new created task, change the state to "Done" Issue: ------ Steps can be repeated indefinitely, creating an infinite number of recurring tasks with a specific end date for the recurrence. Cause: ------ There is no check with the `repeat_until` field when creat
Original PR description
Steps to reproduce: ------------------- - in settings, activate "Recurring Tasks" - create a recurring task with a dateline to today and a recurrence every "1 Days Until tomorrow" - save - change the state to "Done" - on the new created task, change the state to "Done" Issue: ------ Steps can be repeated indefinitely, creating an infinite number of recurring tasks with a specific end date for the recurrence. Cause: ------ There is no check with the `repeat_until` field when creating a recurring task. opw-3941688 Forward-Port-Of: odoo/odoo#168003
The counters are primarily used as boolean to determine whether or not to display the card. Therefore, as soon as you have one record, we can show the card without needing to recheck it later. In the worst-case scenario, you might see a card pointing to an empty list view. This approach helps us avoid recalculating whether there is a record for this card on each refresh. The approach is to cache the counter in the session as soon as there are more than 0 records. This way, if there are
Original PR description
The counters are primarily used as boolean to determine whether or not to display the card. Therefore, as soon as you have one record, we can show the card without needing to recheck it later. In the…
The counters are primarily used as boolean to determine whether or not to display the card. Therefore, as soon as you have one record, we can show the card without needing to recheck it later. In the worst-case scenario, you might see a card pointing to an empty list view. This approach helps us avoid recalculating whether there is a record for this card on each refresh. The approach is to cache the counter in the session as soon as there are more than 0 records. This way, if there are no invoices but a sale order is validated, the invoice counter will be recomputed, and you will see the invoice card the next time. For the duration of the same session, we won't recompute it and will always display the invoice card. We only re-request the computation if the counter in the session was 0 or if we need to show the counter, as in this case, we want to display the most precise number. This approach will also avoid flickering when the view is updated. Since we already know the count, we can display the card immediately without waiting for the RPC callback. To further reduce flickering, we have moved the spinner to the bottom, preventing the content from shifting upwards once the loader disappears. On another note, we've updated the policy for the parallel RPC requests made to /my/counter. Instead of splitting the counter into 3 RPC calls, we now allow 5 counters per RPC, with a maximum of three RPCs. An update of the view portal.portal_docs_entry is required to benefit from this cache for /my/counter, Forward-Port-Of: odoo/odoo#169113
As the selection badge is not checking if a badge is selected to set the value, when clicking to a badge that is selected yet, is updating the value to itself, so the value does not change.  By checking if the badge is trying to assign the same value, we can set the badge to false.  cc @Te
Original PR description
As the selection badge is not checking if a badge is selected to set the value, when clicking to a badge that is selected yet, is updating the value to itself, so the value does not change.  By checking if the badge is trying to assign the same value, we can set the badge to false.  cc @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167823 Forward-Port-Of: odoo/odoo#140544
- On a record A; - Click on a link to open a record B (with an old style URL); - The record B is open; Before this commit, the record A is missing on the browser history. This occurs because, when an old style URL is converted into a canonical URL, a replacement of the current URL is done. This replacement was done to update the old URL when the URL was copy/paste on the browser. In this particular case, the replacement is not necessary, because the current URL is the one of the record
Original PR description
- On a record A; - Click on a link to open a record B (with an old style URL); - The record B is open; Before this commit, the record A is missing on the browser history. This occurs because, when an old style URL is converted into a canonical URL, a replacement of the current URL is done. This replacement was done to update the old URL when the URL was copy/paste on the browser. In this particular case, the replacement is not necessary, because the current URL is the one of the record A. Doing the replacement, will remove the record A from the browser history. Now, the URL retro-compatibility will only update the URL, if the URL in the browser is the one with the old style. Forward-Port-Of: odoo/odoo#167474
step: -install l10n_it and account_peppol without demo data -setup a peppol demo account -give your company a codigo fiscal -settings > Italian Electronic Invoicing > check "Allow Odoo to process invoices" -> constraint This happens because when creating demo edi, the id_client is set as "demo{company_id}", but the id_client must be unique so when registering two edi services for the same company, there is a collision. After this PR, we avoid the collision by adding the proxy_type to t
Original PR description
step:
-install l10n_it and account_peppol without demo data -setup a peppol demo account
-give your company a codigo fiscal
-settings > Italian Electronic Invoicing > check "Allow Odoo to process invoices"
-> constraint
This happens because when creating demo edi, the id_client is set as "demo{company_id}", but the id_client must be unique so when registering two edi services for the same company, there is a collision.
After this PR, we avoid the collision by adding the proxy_type to the demo id_client.
opw-3983974
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#169385When a user duplicates a view of a website page and then attempts to open either the original or duplicated view and click on ``edit``, a traceback will appear. Steps to reproduce: - Install the ``website`` module - Website > Site > Pages - Create one new page > Actions > Duplicate - Repeat 2-3 times - Click on the newly created page or a duplicated one > ``Edit`` Traceback : - ``Expected singleton: ir.ui.view(2224, 2225)`` When duplicating a website page view, we encounter an is
Original PR description
When a user duplicates a view of a website page and then attempts to open either the original or duplicated view and click on ``edit``, a traceback will appear. Steps to reproduce: - Install the…
When a user duplicates a view of a website page and then attempts to open either the original or duplicated view and click on ``edit``, a traceback will appear. Steps to reproduce: - Install the ``website`` module - Website > Site > Pages - Create one new page > Actions > Duplicate - Repeat 2-3 times - Click on the newly created page or a duplicated one > ``Edit`` Traceback : - ``Expected singleton: ir.ui.view(2224, 2225)`` When duplicating a website page view, we encounter an issue where the ``key`` value remains unchanged, leading to an error. This occurs because, after calling the super in the ``copy_data`` method, the ``key`` is already set on the fields that are being copied to the new record, and ``website.page`` delegates some of its fields to the ``ir.ui.view`` that it holds. This commit will fix the above error by calling the ``copy`` method instead of ``copy_data``. sentry - 4991676595 opw-3936237 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#163989
Steps to reproduce: - Install l10n_ph modules - Configure Vendor Tax ID - Create Vendor Bill - Set the Vendor with Tax ID - Set a invoice lines with withholding tax - Action > Download BIR 2307 XLS Current behaviour: - Exception raised Expected behaviour: - Generate a BIR 2307 XLS file Explanation: From SaaS 17.2+, account.tax doesn't have _compute_amount anymore. It is replaced by compute_all method. opw-3991609 Forward-Port-Of: odoo/odoo#169389
Original PR description
Steps to reproduce: - Install l10n_ph modules - Configure Vendor Tax ID - Create Vendor Bill - Set the Vendor with Tax ID - Set a invoice lines with withholding tax - Action > Download BIR 2307 XLS Current behaviour: - Exception raised Expected behaviour: - Generate a BIR 2307 XLS file Explanation: From SaaS 17.2+, account.tax doesn't have _compute_amount anymore. It is replaced by compute_all method. opw-3991609 Forward-Port-Of: odoo/odoo#169389
Issue: ------ With many departments (for example 40), in the kiosk mode, when we identify ourselves manually, we are obliged to reduce the screen size in order to access the employees. Solution: --------- Force a max height for the section with the departments. This enables the `overflow-auto` class to take effect. It is now possible to scroll along the Y axis. opw-3956359 Forward-Port-Of: odoo/odoo#169616
Original PR description
Issue: ------ With many departments (for example 40), in the kiosk mode, when we identify ourselves manually, we are obliged to reduce the screen size in order to access the employees. Solution: --------- Force a max height for the section with the departments. This enables the `overflow-auto` class to take effect. It is now possible to scroll along the Y axis. opw-3956359 Forward-Port-Of: odoo/odoo#169616
Before this PR, only model-defined methods could be called by the `parent` helper function given to callbacks of `onRpc` in tests. This meant that callbacks registered through the `mock_rpc` registry couldn't use this inheritance system (i.e a callback defined after another couldn't call the previous one). This PR makes it so that all listeners are aligned in a queue and a call to `parent` will simply call the next callback (eventually falling back to the model-defined methods), allowing r
Original PR description
Before this PR, only model-defined methods could be called by the `parent` helper function given to callbacks of `onRpc` in tests. This meant that callbacks registered through the `mock_rpc` registry couldn't use this inheritance system (i.e a callback defined after another couldn't call the previous one). This PR makes it so that all listeners are aligned in a queue and a call to `parent` will simply call the next callback (eventually falling back to the model-defined methods), allowing registry-defined methods to be called in between. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#169596
In the Discuss app, update the avatar for each WhatsApp channel category message, from a static to a dynamic one. The avatar image is fetched from the associated partner. task-3908710 Forward-Port-Of: odoo/enterprise#64450 Forward-Port-Of: odoo/enterprise#63078
Original PR description
In the Discuss app, update the avatar for each WhatsApp channel category message, from a static to a dynamic one. The avatar image is fetched from the associated partner. task-3908710 Forward-Port-Of: odoo/enterprise#64450 Forward-Port-Of: odoo/enterprise#63078
This commit improves the usability of excalidraw on mobile and adds other minor improvements. Here's the list of improvements made: * An info banner is added to the draw dialog to inform users on the different behaviors of each link type. * A button is added in order to open the excalidraw link in another tab. * When on mobile the iFrame's default width is set to 100% * The handles have been moved inside the iFrame in order to gain some space for the drawing. They also have a modifie
Original PR description
This commit improves the usability of excalidraw on mobile and adds other minor improvements. Here's the list of improvements made: * An info banner is added to the draw dialog to inform users on the different behaviors of each link type. * A button is added in order to open the excalidraw link in another tab. * When on mobile the iFrame's default width is set to 100% * The handles have been moved inside the iFrame in order to gain some space for the drawing. They also have a modified style. task-3859451 Forward-Port-Of: odoo/enterprise#60422
When using the 'Find missing transactions' from account_online_synchronization module, the `transaction_details` field gets encapsulated in `<p></p>` HTML tags This is caused by that field being declared as a HTML field in the transient model `account.bank.statement.line.transient`, but then as a JSON field in the `account.bank.statement.line` model. That encapsulation causes Python JSON decoder to fail to decode from `transaction_details` when called in `_format_transaction_details()
Original PR description
When using the 'Find missing transactions' from account_online_synchronization module, the `transaction_details` field gets encapsulated in `<p></p>` HTML tags This is caused by that field being declared as a HTML field in the transient model `account.bank.statement.line.transient`, but then as a JSON field in the `account.bank.statement.line` model. That encapsulation causes Python JSON decoder to fail to decode from `transaction_details` when called in `_format_transaction_details()` in the bank reconciliation widget, resulting in a traceback Removing the HTML tags after the call to `read()` in the transient model allows the field to be correctly decoded. opw-3783078 opw-3773454 opw-3772561 and more. Forward-Port-Of: odoo/enterprise#58505
Suppose the SII workflow cron job runs, and there are no records with the `ask_for_status` or `accepted` l10n_cl_dte_status, but there are a lot with the `claimed` status. If the token on the certificate happens to be invalid, `_l10n_cl_ask_claim_status` will raise an InvalidToken exception and abort the cron job. This prevents the records from being processed. This fix clears an invalid token if it's detected, so that when the next record is processed a new one will be created. The record raisi
Original PR description
Suppose the SII workflow cron job runs, and there are no records with the `ask_for_status` or `accepted` l10n_cl_dte_status, but there are a lot with the `claimed` status. If the token on the certificate happens to be invalid, `_l10n_cl_ask_claim_status` will raise an InvalidToken exception and abort the cron job. This prevents the records from being processed. This fix clears an invalid token if it's detected, so that when the next record is processed a new one will be created. The record raising the exception should succeed the next time the cron job runs. opw-3920273 Forward-Port-Of: odoo/enterprise#63809
Currently, an error occurs when uploading an XML file to generate an invoice. Step to produce: - Install the 'l10n_mx_edi' module. - Go to Accounting / Configuration / Accounting / Taxes, And delete all 'Exento' taxes. - Go to Accounting / Configuration / Accounting / Tax Groups, And delete all 'Exento' Tax Group. - Navigate to Accounting / Customers / Invoices, And upload an XML file to generate an invoice, - Ensure that the XML file contains the "TipoFactor" with a value of "Exento"
Original PR description
Currently, an error occurs when uploading an XML file to generate an invoice. Step to produce: - Install the 'l10n_mx_edi' module. - Go to Accounting / Configuration / Accounting / Taxes, And delete…
Currently, an error occurs when uploading an XML file to generate an invoice. Step to produce: - Install the 'l10n_mx_edi' module. - Go to Accounting / Configuration / Accounting / Taxes, And delete all 'Exento' taxes. - Go to Accounting / Configuration / Accounting / Tax Groups, And delete all 'Exento' Tax Group. - Navigate to Accounting / Customers / Invoices, And upload an XML file to generate an invoice, - Ensure that the XML file contains the "TipoFactor" with a value of "Exento". (use this XML file [1]). AttributeError: 'NoneType' object has no attribute 'id' An error occurs when attempting to generate an invoice by uploading an XML file because system tries to retrieve an ID from the external_id of a tax group at [2] which is not available. link [1]: https://github.com/odoo/enterprise/blob/1e3dfa7c6a57c251d77801c316818b5a9fae6cc5/l10n_mx_edi/tests/test_files/test_bill_import_extento.xml#L1 link [2]: https://github.com/odoo/enterprise/blob/1e3dfa7c6a57c251d77801c316818b5a9fae6cc5/l10n_mx_edi/models/account_move.py#L2381 To resolve the issue, Add a condition to ensure that an external_id of a tax group is available. sentry-5312222893 Forward-Port-Of: odoo/enterprise#63874 Forward-Port-Of: odoo/enterprise#62257
In ubuntu noble, some timezone where removed, like US/Pacific. Translate it to the equivalent: "America/Los_Angeles" runbot-67857 Forward-Port-Of: odoo/enterprise#64774 Forward-Port-Of: odoo/enterprise#64369
Original PR description
In ubuntu noble, some timezone where removed, like US/Pacific. Translate it to the equivalent: "America/Los_Angeles" runbot-67857 Forward-Port-Of: odoo/enterprise#64774 Forward-Port-Of: odoo/enterprise#64369
*l10n_ro_saft According to the related community commit, we consider the account type `liability_credit_card` also as a liquidity account for bank journals. We adapt the reconciliation wizard and Romanian SAFT code to take this into account. task-3891250 Related to https://github.com/odoo/odoo/pull/166258 Forward-Port-Of: odoo/enterprise#63437 Forward-Port-Of: odoo/enterprise#63259
Original PR description
*l10n_ro_saft According to the related community commit, we consider the account type `liability_credit_card` also as a liquidity account for bank journals. We adapt the reconciliation wizard and Romanian SAFT code to take this into account. task-3891250 Related to https://github.com/odoo/odoo/pull/166258 Forward-Port-Of: odoo/enterprise#63437 Forward-Port-Of: odoo/enterprise#63259
Steps to reproduce ================== - Go to products - Open studio - Edit the 'Product label 2x7' report - Click on 'Print preview' => Product model not defined, Please contact your administrator. Cause of the issue ================== This report is made to be edited from studio, but since the context key is missing, it fails https://github.com/odoo/odoo/blob/26de73f7c5a8fef32aaafa8c36619249caf0318d/addons/product/report/product_label_report.py#L19 Since 17.1, the user s
Original PR description
Steps to reproduce ================== - Go to products - Open studio - Edit the 'Product label 2x7' report - Click on 'Print preview' => Product model not defined, Please contact your administrator. Cause of the issue ================== This report is made to be edited from studio, but since the context key is missing, it fails https://github.com/odoo/odoo/blob/26de73f7c5a8fef32aaafa8c36619249caf0318d/addons/product/report/product_label_report.py#L19 Since 17.1, the user service is no more. This means it is no longer patched to add the studio key automatically https://github.com/odoo/enterprise/pull/52372 opw-3942356 Forward-Port-Of: odoo/enterprise#63426
We now allow grouping by other fields that account_id in the report, namely product_id, and product_category_id. However, for the deferral generation, we continue grouping by account_id. task-id 3925943 https://github.com/odoo/odoo/pull/169490 Forward-Port-Of: odoo/enterprise#62534
Original PR description
We now allow grouping by other fields that account_id in the report, namely product_id, and product_category_id. However, for the deferral generation, we continue grouping by account_id. task-id 3925943 https://github.com/odoo/odoo/pull/169490 Forward-Port-Of: odoo/enterprise#62534
Currently in the help center, knowledge articles without names are not sorted out, leading to empty divs being displayed. This PR will fix this by excluding articles without name in the _compute_latest_articles(). task-3940889 Forward-Port-Of: odoo/enterprise#62994
Original PR description
Currently in the help center, knowledge articles without names are not sorted out, leading to empty divs being displayed. This PR will fix this by excluding articles without name in the _compute_latest_articles(). task-3940889 Forward-Port-Of: odoo/enterprise#62994
[FIX] helpdesk: fix activity default filter Clicking on an Activity group used to set a default filter, in effect of which user will only see helpdesk tickets with HIS activites that are overdue/today. This behaviour got temporarily removed and than reintroduced with (ref.1) (ref.1) achieves that by adding default filters to the search views, it issue persisted in the helpdesk view becase filters wern't present. This commits adds filters to the helpdesk's search view so they can be u
Original PR description
[FIX] helpdesk: fix activity default filter Clicking on an Activity group used to set a default filter, in effect of which user will only see helpdesk tickets with HIS activites that are…
[FIX] helpdesk: fix activity default filter
Clicking on an Activity group used to set a default filter, in effect of which
user will only see helpdesk tickets with HIS activites that are overdue/today.
This behaviour got temporarily removed and than reintroduced with (ref.1)
(ref.1) achieves that by adding default filters to the search views, it issue
persisted in the helpdesk view becase filters wern't present.
This commits adds filters to the helpdesk's search view so they can be used
by mechanisms (re)introdcuted in (ref.1)
(ref.1)
[FIX] mail: Fix activity default filter issue
https://github.com/odoo/odoo/commit/3d18b9faa1fdcf00d48091ad4be244ca00d33524
[Reproduce steps]
- Install helpdesk
- (optional) create a helpdesk ticket where:
- current user has a future activity
- other user has an overdue activity
- open ActivityMenu dropdown (clock icon ".fa-clock-o")
- BUG (ux issue): filters aren't present
- (if optional): created ticket is shown (beside current user not having any overdue/today activity in there)
opw-3859535
https://github.com/odoo/enterprise/assets/33809926/ca77aa45-f842-41a3-b551-d27e4b87a83b
Forward-Port-Of: odoo/enterprise#63748With the introduction of alias domains in 17.0 an issue was uncovered in the helpdesk module where any additional alias names with different domains would be added as followers. This stemmed from an issue in _ticket_email_split which was not properly filtering emails out that matched the alias name because self was not yet defined when the method was called. This was not a problem before because this was immediately fed into _mail_find_partner_from_emails that would also filter out by alias_name
Original PR description
With the introduction of alias domains in 17.0 an issue was uncovered in the helpdesk module where any additional alias names with different domains would be added as followers. This stemmed from an issue in _ticket_email_split which was not properly filtering emails out that matched the alias name because self was not yet defined when the method was called. This was not a problem before because this was immediately fed into _mail_find_partner_from_emails that would also filter out by alias_name. This is no longer the case because the domain has to also match. Passing in the newly created ticket and using this to map to team_id.alias_name fixes this issue by properly filtering out alias emails even with different domains. opw-3920634 Forward-Port-Of: odoo/enterprise#63477
Fix a test in l10n_no_saft that relied on a wrong tax account being linked to the wrong input VAT tax task-3864178 **Community PR:** odoo/odoo#161517 Forward-Port-Of: odoo/enterprise#64363
Original PR description
Fix a test in l10n_no_saft that relied on a wrong tax account being linked to the wrong input VAT tax task-3864178 **Community PR:** odoo/odoo#161517 Forward-Port-Of: odoo/enterprise#64363
Since https://github.com/odoo/odoo/commit/1f438ca0e109b9e93c895824bd8342a2df170503 , the various product label reports have changed their name. Is still does not make much sense to edit them from studio, since they are composed of mostly generated data and not model fields. We thus blacklist them again. opw-3942356 Forward-Port-Of: odoo/enterprise#63425
Original PR description
Since https://github.com/odoo/odoo/commit/1f438ca0e109b9e93c895824bd8342a2df170503 , the various product label reports have changed their name. Is still does not make much sense to edit them from studio, since they are composed of mostly generated data and not model fields. We thus blacklist them again. opw-3942356 Forward-Port-Of: odoo/enterprise#63425
Steps to reproduce : - Install pos and product barcodelookup - Open a session - Go to create product - Enter barcode - Click on save button Issue : Can't create product and traceback comes. Cause : It was trying to call function ( barcode_lookup ) which is not defined in from where it was called ( product.product ). Fix : Called the funbction in a proper manner in a right way. Forward-Port-Of: odoo/enterprise#64810
Original PR description
Steps to reproduce : - Install pos and product barcodelookup - Open a session - Go to create product - Enter barcode - Click on save button Issue : Can't create product and traceback comes. Cause : It was trying to call function ( barcode_lookup ) which is not defined in from where it was called ( product.product ). Fix : Called the funbction in a proper manner in a right way. Forward-Port-Of: odoo/enterprise#64810
Issue: ------ When we click on "Helpdesk Ticket" in the activities, we are redirected to the kanban view (`helpdesk_ticket_view_kanban`), but no filter is added. Cause: ------ When going to the kanban view via activities, the search view selected is `helpdesk_ticket_view_search_analysis`, which does not contain filters on the `my_activity_date_deadline` field. When we go to the kanban view via the "Tickets" button, we have the search view `helpdesk_tickets_view_search` which is c
Original PR description
Issue: ------ When we click on "Helpdesk Ticket" in the activities, we are redirected to the kanban view (`helpdesk_ticket_view_kanban`), but no filter is added. Cause: ------ When going to the…
Issue: ------ When we click on "Helpdesk Ticket" in the activities, we are redirected to the kanban view (`helpdesk_ticket_view_kanban`), but no filter is added. Cause: ------ When going to the kanban view via activities, the search view selected is `helpdesk_ticket_view_search_analysis`, which does not contain filters on the `my_activity_date_deadline` field. When we go to the kanban view via the "Tickets" button, we have the search view `helpdesk_tickets_view_search` which is correct. Via ticket button, we are taking `helpdesk_ticket_action_team` action that forces the search view with `helpdesk_tickets_view_search`. Via ticket button: helpdesk_tickets_view_search (priority: 20) Via activity: helpdesk_ticket_view_search_analysis (priority: 16) 16 is the default value for the `priority` field. Solution: --------- Set a priority lower than the default on the `helpdesk_tickets_view_search` view, to make sure it is selected. opw-3976395 Forward-Port-Of: odoo/enterprise#64756
When task assignees have more than one task at the same time in field service, and tries to remove the planned date from one of the tasks, A traceback will appear. Steps to reproduce the error: - Go to Field Service > Create a new task with the planned date and Assignees - Create another task with the same planned date and Assignees > Save - Now try to remove the planned date Traceback: ``` AttributeError: 'bool' object has no attribute 'tzinfo' File "odoo/http.py", line 2254, i
Original PR description
When task assignees have more than one task at the same time in field service, and tries to remove the planned date from one of the tasks, A traceback will appear. Steps to reproduce the error: - Go…
When task assignees have more than one task at the same time in field service,
and tries to remove the planned date from one of the tasks,
A traceback will appear.
Steps to reproduce the error:
- Go to Field Service > Create a new task with the planned date and Assignees
- Create another task with the same planned date and Assignees > Save
- Now try to remove the planned date
Traceback:
```
AttributeError: 'bool' object has no attribute 'tzinfo'
File "odoo/http.py", line 2254, in __call__
response = request._serve_db()
File "odoo/http.py", line 1829, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1849, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1827, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1834, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2059, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 740, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/web/models/models.py", line 1011, in onchange
todo = [
File "addons/web/models/models.py", line 1014, in <listcomp>
if field_name not in done and snapshot0.has_changed(field_name)
File "addons/web/models/models.py", line 1127, in has_changed
return self[field_name] != self.record[field_name]
File "odoo/models.py", line 6608, in __getitem__
return self._fields[key].__get__(self, self.env.registry[self._name])
File "odoo/fields.py", line 1261, in __get__
self.compute_value(recs)
File "odoo/fields.py", line 1443, in compute_value
records._compute_field_value(self)
File "addons/mail/models/mail_thread.py", line 416, in _compute_field_value
return super()._compute_field_value(field)
File "odoo/models.py", line 4934, in _compute_field_value
fields.determine(field.compute, self)
File "odoo/fields.py", line 100, in determine
return needle(*args)
File "home/odoo/src/enterprise/saas-17.2/project_enterprise/models/project_task.py", line 227, in _compute_planning_overlap
absolute_min_start = utc.localize(self[0].planned_date_begin)
File "__init__.py", line 257, in localize
if dt.tzinfo is not None:
```
https://github.com/odoo/enterprise/blob/74e8fa829cf17677ddcb29d91a0521d5d5b9a1b6/project_enterprise/models/project_task.py#L229-L230 When the user removes the planned date,
"planned_date_begin" and "date_deadline" will be False.
So it will lead to the above traceback.
sentry-5444639133
Forward-Port-Of: odoo/enterprise#63976