Thursday, May 27, 2021
41 changes · master
New functionality added to Odoo
The web editor now offers animated shape options for images, grouped into categories such as basics, solids, patterns, lines, floats, and specials. This gives users more creative control when designing pages and marketing content, while also ensuring email templates save these edited images correctly.
Original PR description
Description of the issue/feature this PR addresses: Add new animated shapes for images with several categories in the web editor : Basics, Solids, Patterns, Lines, Floats and Specials. **Task #2508574** Current behavior before PR: There are no animated shapes for images. Desired behavior after PR is merged: Add new animated shapes for images. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
Website editors can now choose different connector styles and colors for the process steps snippet. This gives business users more control over page design and helps align website sections with brand visuals without custom development.
Original PR description
Allow to choose different connectors for the steps snippet Allow to change the color of the connectors
Resolved issues and error corrections
This fix changes how the website footer company name is overridden so edits are handled in a separate template. It helps prevent duplicated company names in the footer when website content is edited, keeping the site footer cleaner and more reliable.
Original PR description
The footer company name override from the website is done in a separate template from website.layout in order to avoid duplicating it when edited. Related to https://github.com/odoo/odoo/pull/69943 task-2468472 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
In a Manufacturing Order, the components' quantities are rounded using the rounding precision of the produced product's UoM. This leads to incorrect values. To reproduce the error: 1. In Settings, enable "Units of Measure" 2. In UoM, edit Units: - Rounding Precision: 1 3. Create two products P_finished and P_compo - P_compo's Product Type: Consumable - P_compo's UoM: L - P_finished's UoM: Units 4. Create a Bill of Materials - Product: P_finished - 1 Compone
Original PR description
In a Manufacturing Order, the components' quantities are rounded using
the rounding precision of the produced product's UoM. This leads to
incorrect values.
To reproduce the error:
1. In Settings, enable "Units of Measure"
2. In UoM, edit Units:
- Rounding Precision: 1
3. Create two products P_finished and P_compo
- P_compo's Product Type: Consumable
- P_compo's UoM: L
- P_finished's UoM: Units
4. Create a Bill of Materials
- Product: P_finished
- 1 Component:
- Product: P_compo
- Quantity: 0.2
- UoM: L
5. Create a Manufacturing Order:
- Product: P_finished
6. Confirm, Mark as Done
Error: Qty to consumes became 0 and consumed qty is 0. Both values
should be 0.2L, but they have been rounded using the rounding precision
of Units
OPW-2529462
Forward-Port-Of: odoo/odoo#71146The Contact Us page is now built as a static page with fixed company information and no embedded Google map. This makes the page easier to install and maintain while keeping the contact form available through the website form module.
Original PR description
Task : https://tinyurl.com/3ydtkjbw This PR is linked to : https://github.com/odoo/upgrade/pull/2398 Currently, contactus page is dynamic (Google map snippet, Company Data, Contact Form), in order to make it static : - Company data snippet have been removed and replace by static data - Google map snippet have been removed - Contact us page is now created by the website_form module (since website_form needs to add data to contactus page in order for the form to work) and there is no more override of the contactus page (website_crm) -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users tabbing out of an empty lookup field will no longer automatically select the first suggested record. This reduces accidental data entry and keeps records unchanged unless the user typed or actively chose an option.
Original PR description
PURPOSE When tabbing out of a focus m2x field, the 'most likely record' is set > this is a good thing problem is, we only want to do that if the user actually wrote something SPEC Only set the first value of the dropdown is the user wrote at least one character TASK 2455781 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update streamlines how Odoo shows notifications in several apps, making messages more consistent for users. It is mainly an internal cleanup that should improve maintainability while preserving existing behavior.
Original PR description
task-2476867
Approval requests now show a helpful placeholder for location information, making the form clearer for users. A visual issue in enterprise forms was also fixed so the first visible tab displays its left border correctly, even when earlier tabs are hidden.
This update standardizes how notifications are handled across many Odoo apps, making messages more consistent for users and easier for teams to maintain. It affects areas such as accounting, documents, barcode workflows, field service, IoT, helpdesk, events, signing, and social integrations without introducing a major visible feature change.
Original PR description
task-2476867
Payroll structures now use simpler internal codes instead of repeated lookups, reducing database requests and improving payslip calculation performance. The update also refines Belgian payroll behavior, including social certificate generation, public holiday handling, fleet eligibility by company, and safeguards for detached employees.
Original PR description
Instead of doing self.env.ref('module.my_structure') in a lot of places,
compare the code instead. This greatly reduces the number of SQL requests,
as you can see on the performances tests that are adapted in this commit.The social media apps now use the updated Odoo service addresses required by the In-App Purchase platform. This keeps Facebook, LinkedIn, Twitter, and other social integrations aligned with the latest backend routing guidelines, helping maintain reliable connectivity.
Original PR description
Our In App Purchase servers introduced new guidelines concerning endpoints. All social endpoints should now reach social.api.odoo.com and the endpoints should match the syntax: /api/social/$proxy_name/$v/<endpoint>. This commit applies these new guidelines across our social apps. Task-2520594
Installing SEPA Direct Debit no longer automatically installs the full Accounting app. Businesses using only the Invoicing app can now access batch payment capabilities needed for SEPA Direct Debit without taking on the broader Accounting app dependency.
Original PR description
Beforehand, when installing the SEPA DD module, the Accounting App was also installed, because of a dependency between the batch payment feature and the account_accountant module. Now, a bridge module breaks this dependency, and SEPA DD can be used with the Invoicing App. This means that Batch Payment, being a dependency of SEPA DD, is available to the Invoicing App. task-2375697 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Payslip calculations for Belgian payroll now perform fewer database requests. This should make payroll processing faster and reduce system load, especially when computing multiple payslips.
Original PR description
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
This fixes a small duplicate code issue in the website editor that was introduced by an earlier change. It helps keep the editor code cleaner and reduces the chance of inconsistent behavior without changing the user experience.
Original PR description
wrongly introduced in #69471 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Duplicating a helpdesk ticket no longer carries over related return, coupon, credit note, repair, sales, field service, or stock records from the original ticket. This prevents new tickets from staying incorrectly linked to a previous customer or sales order, and also improves the helpdesk dashboard layout on smaller screens.
Original PR description
Activate the sales services, When we duplicating the ticket having records attached for return, coupons and credit notes are also copied with the new tickets. Even if we change the customer on the ticket still it's linked the records with the previous customer and the sales order if the customer is linked with the sales order. Reset the Team Views in the helpdesk dashboard as it was a bit cropped. TaskID: 2518829 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
SEPA Direct Debit can now be installed and used with the Invoicing app without automatically installing the full Accounting app. This reduces unnecessary app dependencies while preserving batch payment reconciliation through a separate bridge module.
Original PR description
Beforehand, when installing the SEPA DD module, the Accounting App was also installed, because of a dependency between the batch payment feature and the account_accountant module. Now, a bridge module breaks this dependency, and SEPA DD can be used with the Invoicing App. task-2375697
This commit brings some functionnal changes to the palette selection screen: - The list of proposed palettes doesn't depend on the uploaded logo anymore. It is now a fixed list of 20 palettes manually chosen among the existing ones. - The recommended palette is not chosen among the existing palettes based on the logo's extracted colors anymore. The recommended palette is now a fully custom palette generated based on the two colors extracted from the logo. Description of the issue/
Original PR description
This commit brings some functionnal changes to the palette selection screen: - The list of proposed palettes doesn't depend on the uploaded logo anymore. It is now a fixed list of 20 palettes manually chosen among the existing ones. - The recommended palette is not chosen among the existing palettes based on the logo's extracted colors anymore. The recommended palette is now a fully custom palette generated based on the two colors extracted from the logo. 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 Forward-Port-Of: odoo/odoo#69512
Before this commit, the copyright color was set as !important from the portal and could not be overriden by the website, leading to inconsistent display between the website and the portal. Now, we do not change the background color of the header and the footer of the portal. task-2468472 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#70538
Original PR description
Before this commit, the copyright color was set as !important from the portal and could not be overriden by the website, leading to inconsistent display between the website and the portal. Now, we do not change the background color of the header and the footer of the portal. task-2468472 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#70538
Before this commit the PyInotify filesystem watcher used by the code autoreload feature (`--dev=reload`) would not get a chance to free it's inotify watches before the reexec, hence at each reexec triggered by a code reload the inotify watches where accumulated until potentially reaching the kernel limit `fs.inotify.max_user_watches`. This patch ensures that inotify properly closes it's file descriptor before we reexec: https://github.com/dsoprea/PyInotify/blob/f77596a/inotify/adapters.
Original PR description
Before this commit the PyInotify filesystem watcher used by the code autoreload feature (`--dev=reload`) would not get a chance to free it's inotify watches before the reexec, hence at each reexec triggered by a code reload the inotify watches where accumulated until potentially reaching the kernel limit `fs.inotify.max_user_watches`. This patch ensures that inotify properly closes it's file descriptor before we reexec: https://github.com/dsoprea/PyInotify/blob/f77596a/inotify/adapters.py#L79 -- I confirm I have sold my soul to the devil and read "The Exorcist"'s script at least 10 times Forward-Port-Of: odoo/odoo#71238
Steps: - Install Website - Go to Website - Click "Go to Website" Bug: The default phone number on the website is not fictional and may cause unwanted spam. Explanation: In North America, only 555-0100 through 555-0199 are specifically reserved for fictional use. > The industry also reserved a block of 100 numbers as fictitious, > non-working numbers (555-0100 through 0199) for use by the > entertainment and advertising industries. Source: https://www.nationalnanpa.com/pdf/NRUF
Original PR description
Steps: - Install Website - Go to Website - Click "Go to Website" Bug: The default phone number on the website is not fictional and may cause unwanted spam. Explanation: In North America, only 555-0100 through 555-0199 are specifically reserved for fictional use. > The industry also reserved a block of 100 numbers as fictitious, > non-working numbers (555-0100 through 0199) for use by the > entertainment and advertising industries. Source: https://www.nationalnanpa.com/pdf/NRUF/ATIS-0300115.pdf opw:2530388 Forward-Port-Of: odoo/odoo#71264
Before this commit: B2CS is not decreased in case of refund but it's shown in CDNUR but CDNUR has a condition that only shows a refund of B2CL. HSN value is not decreased in case of refund After this commit: Refund is decreased from B2CS and not show that in CDNUR HSN value is decreased in case of refund B2CS = Business to Consumers Small B2CL = Business to Consumers Large (invoice value is more than Rs.2.5 lakhs) CDNUR = Credit/Debit Notes for Unregistered HSN = Harmoni
Original PR description
Before this commit: B2CS is not decreased in case of refund but it's shown in CDNUR but CDNUR has a condition that only shows a refund of B2CL. HSN value is not decreased in case of refund After this commit: Refund is decreased from B2CS and not show that in CDNUR HSN value is decreased in case of refund B2CS = Business to Consumers Small B2CL = Business to Consumers Large (invoice value is more than Rs.2.5 lakhs) CDNUR = Credit/Debit Notes for Unregistered HSN = Harmonized System of Nomenclature(hsn code per product) OPW: 2446769 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#71170 Forward-Port-Of: odoo/odoo#65578
Before, when using the manage order, if a payment method was used and then removed from the pos.config, we couldn't load the old order anymore because of unknow reference. To fix this, we load all methods at the opening of the pos but when we display the payment methods we only show those in the pos.config. task-id: 2541708 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#71263
Original PR description
Before, when using the manage order, if a payment method was used and then removed from the pos.config, we couldn't load the old order anymore because of unknow reference. To fix this, we load all methods at the opening of the pos but when we display the payment methods we only show those in the pos.config. task-id: 2541708 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#71263
While using the cash rounding, there were issues when rounding up and down. The pre filled amount was correct but the rest of the transaction was wrong. (Wrong due, wrong change,...) This commit re calculate the rounding applied when using up or down payment. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#71219
Original PR description
While using the cash rounding, there were issues when rounding up and down. The pre filled amount was correct but the rest of the transaction was wrong. (Wrong due, wrong change,...) This commit re calculate the rounding applied when using up or down payment. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#71219
Change “default_partner_id” from “commercial_partner_id” to “bank_partner_id” for “partner_bank_id” field in from view. If not, on an invoice, a newly created partner bank (via “Recipient Bank” field) would be created for the partner instead of the current company. Task: 2524441 Forward-Port-Of: odoo/odoo#71213
Original PR description
Change “default_partner_id” from “commercial_partner_id” to “bank_partner_id” for “partner_bank_id” field in from view. If not, on an invoice, a newly created partner bank (via “Recipient Bank” field) would be created for the partner instead of the current company. Task: 2524441 Forward-Port-Of: odoo/odoo#71213
Bug === Since 4da64b3f3c8dff88d8e0e01c65374590cc0bf4f7 , if multiple users of different companies are in the same channel, and if the type of the channel is "email", a traceback is raised when sending a message. Technical ========= "with_user" drop the SU flag and is not enough to bypass the multi company ACLs. Moreover, we do not want to send a "channel_seen" bus notifications and we can mark the message as seen on the JS side directly. Changes ======= So now, the traceback is
Original PR description
Bug === Since 4da64b3f3c8dff88d8e0e01c65374590cc0bf4f7 , if multiple users of different companies are in the same channel, and if the type of the channel is "email", a traceback is raised when sending a message. Technical ========= "with_user" drop the SU flag and is not enough to bypass the multi company ACLs. Moreover, we do not want to send a "channel_seen" bus notifications and we can mark the message as seen on the JS side directly. Changes ======= So now, the traceback is not raised anymore in that case, and the message is marked as seen if the receiver has the web client open. But, if the receiver has not the web client open, when he will login, the message will not be marked as seen. This can be improved but at the moment we just want to revert the fix that cause the traceback and fix the issue in most cases. Task 2427790 Forward-Port-Of: odoo/odoo#71267 Forward-Port-Of: odoo/odoo#65185
Technical name is not added to test_tags since 95b4f2a at_install tag is added by default since introducing @tagged decorator: b356b19 Clarify how special tags at_install/post_install work. Also, add dots for @ tagged doc, because otherwise we have a mess in sphinx docs. --- task-2431630 Forward-Port-Of: odoo/odoo#71130
Original PR description
Technical name is not added to test_tags since 95b4f2a at_install tag is added by default since introducing @tagged decorator: b356b19 Clarify how special tags at_install/post_install work. Also, add dots for @ tagged doc, because otherwise we have a mess in sphinx docs. --- task-2431630 Forward-Port-Of: odoo/odoo#71130
When planning a Manufacturing Order, if an operation takes place in work center with a different time zone, the computed date may be incorrect (the start date may be outside the working hours) To reproduce the error: (Use demo data. Current timezone: Europe/Brussels) 1. In Settings, enable "Work Orders" 2. Open an existing Work Center 3. Click on "Standard 40 hours/week" 4. Set Timezone to "Asia/Bangkok" - Note that all slots are between 8:00-12:00 and 13:00-17:00 5. Create two s
Original PR description
When planning a Manufacturing Order, if an operation takes place in work center with a different time zone, the computed date may be incorrect (the start date may be outside the working hours) To…
When planning a Manufacturing Order, if an operation takes place in work
center with a different time zone, the computed date may be incorrect
(the start date may be outside the working hours)
To reproduce the error:
(Use demo data. Current timezone: Europe/Brussels)
1. In Settings, enable "Work Orders"
2. Open an existing Work Center
3. Click on "Standard 40 hours/week"
4. Set Timezone to "Asia/Bangkok"
- Note that all slots are between 8:00-12:00 and 13:00-17:00
5. Create two storable products P_compo and P_finished
6. Create a Bill of Materials BM:
- Product: P_finished
- BoM Type: Manufacture this product
- Components: 1 x P_compo
- Operations: 3 x Operation with existing work centers
7. Create a Manufacturing Order:
- Bill of Material: BM
- Quantity: 100
8. Save, Confirm, Plan
Error: (it depends on the time the test is done) The 'Scheduled Start
Date' of the second operation is incorrect. Adding the time zone
difference gives a time that is outside the work center's timetable
(i.e., outside 8:00-12:00 and 13:00-17:00).
The computations do not consider the time zone of the work center.
OPW-2393330
Forward-Port-Of: odoo/odoo#71310
Forward-Port-Of: odoo/odoo#70841Steps: - Go to Website - Click "Go to Website" Bug: The default phone number on the website is not fictional and may cause unwanted spam. Explanation: In North America, only 555-0100 through 555-0199 are specifically reserved for fictional use. > The industry also reserved a block of 100 numbers as fictitious, > non-working numbers (555-0100 through 0199) for use by the > entertainment and advertising industries. Source: https://www.nationalnanpa.com/pdf/NRUF/ATIS-0300115.pdf
Original PR description
Steps: - Go to Website - Click "Go to Website" Bug: The default phone number on the website is not fictional and may cause unwanted spam. Explanation: In North America, only 555-0100 through 555-0199 are specifically reserved for fictional use. > The industry also reserved a block of 100 numbers as fictitious, > non-working numbers (555-0100 through 0199) for use by the > entertainment and advertising industries. Source: https://www.nationalnanpa.com/pdf/NRUF/ATIS-0300115.pdf opw:2530388 Forward-Port-Of: odoo/odoo#71311
This legacy package was supposed to be an alias to `odoo.upgrade`. However, depending on how your import its sub-packages (and in which order), we were ending with the module being loaded multiple times, breaking the expectation of a singleton. ```python In [1]: from odoo.addons.base.maintenance.migrations import util as m1 In [2]: import odoo.addons.base.maintenance.migrations.util as m2 In [3]: m1 Out[3]: <module 'odoo.upgrade.util' from '/Users/chs/devel/odoo/odoo/stable/odoo/ad
Original PR description
This legacy package was supposed to be an alias to `odoo.upgrade`. However, depending on how your import its sub-packages (and in which order), we were ending with the module being loaded multiple…
This legacy package was supposed to be an alias to `odoo.upgrade`. However, depending on how your import its sub-packages (and in which order), we were ending with the module being loaded multiple times, breaking the expectation of a singleton. ```python In [1]: from odoo.addons.base.maintenance.migrations import util as m1 In [2]: import odoo.addons.base.maintenance.migrations.util as m2 In [3]: m1 Out[3]: <module 'odoo.upgrade.util' from '/Users/chs/devel/odoo/odoo/stable/odoo/addons/base/maintenance/migrations/util.py'> In [4]: m2 Out[4]: <module 'odoo.addons.base.maintenance.migrations.util' from '/Users/chs/devel/odoo/odoo/stable/odoo/addons/base/maintenance/migrations/util.py'> In [5]: from odoo.addons.base.maintenance.migrations import util as m3 In [6]: m3 Out[6]: <module 'odoo.addons.base.maintenance.migrations.util' from '/Users/chs/devel/odoo/odoo/stable/odoo/addons/base/maintenance/migrations/util.py'> In [7]: m2 == m3 Out[7]: True In [8]: m1 == m3 Out[8]: False In [9]: ``` Now, with this import hook, we ensure that the modules imported from `odoo.addons.base.maintenance.migrations` are aliases to ones imported from `odoo.upgrade`. ```python In [1]: import odoo.addons.base.maintenance.migrations.util as m2 In [2]: m2.__name__ Out[2]: 'odoo.upgrade.util' ``` Forward-Port-Of: odoo/odoo#71323 Forward-Port-Of: odoo/odoo#69386
German localization for the point of sale application. Related task ID: 2055957 Enterprise related PR: https://github.com/odoo/enterprise/pull/15996 This is the change needed in the community edition to allow the "in-place" inheritance in some specific places of the flow. Forward-Port-Of: odoo/odoo#65148
Original PR description
German localization for the point of sale application. Related task ID: 2055957 Enterprise related PR: https://github.com/odoo/enterprise/pull/15996 This is the change needed in the community edition to allow the "in-place" inheritance in some specific places of the flow. Forward-Port-Of: odoo/odoo#65148
`./odoo-bin -h` prints unnecessary spaces between sentences. --- task-2431630 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 Forward-Port-Of: odoo/odoo#71331
Original PR description
`./odoo-bin -h` prints unnecessary spaces between sentences. --- task-2431630 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 Forward-Port-Of: odoo/odoo#71331
German localization for the point of sale application. Related task ID: 2055957 Community eddition related PR: https://github.com/odoo/odoo/pull/65148 (Weirdly enough, I could not create this PR as draft) Following the new regulation of the German government, a Technical Security System (`TSS`) is needed in every PoS. A `TSS` is a device that mainly records every operation of a transaction. It is the central technical component for securing the basic data records against subsequent manipu
Original PR description
German localization for the point of sale application. Related task ID: 2055957 Community eddition related PR: https://github.com/odoo/odoo/pull/65148 (Weirdly enough, I could not create this PR as…
German localization for the point of sale application. Related task ID: 2055957 Community eddition related PR: https://github.com/odoo/odoo/pull/65148 (Weirdly enough, I could not create this PR as draft) Following the new regulation of the German government, a Technical Security System (`TSS`) is needed in every PoS. A `TSS` is a device that mainly records every operation of a transaction. It is the central technical component for securing the basic data records against subsequent manipulation. A cloud-based solution was chosen with the help of Fiskaly which is a German company providing the required services in the form of APIs. To be compliant with the regulation, several features have been implemented: ### Configuration In order for the user to use this localization, his company need to be registered at the financial authorities in the company setting. The following features use the IAP Fiskaly service as a middleware: - The registration can be done by clicking on a button (the option will only appear if the company resides in Germany). An `organization` with the required information will then be created at Fiskaly side. This also results in the creation of `credentials` (an API `key` and `secret`) that allows the user's system to use the services provided by Fiskaly and will be stored in the user's system. - Whenever a mandatory field is updated (e.g., street or city), a request is sent to update the `organization` information at Fiskaly side. - Requesting a new pair of `credentials` is also possible (in case the current ones got corrupted for example) After retrieving the `credentials`, the user can now create their `TSS`. To do so, a `client` need to be created at Fiskaly side. This `client` will represent the cash register of the user. It is possible to create more than one `TSS` per `client` but this is not recommended. A one to one mapping will probably reflect the regulation. - Creating both `client` and `TSS` can be done in the pos_config form. A checkbox will need to be ticked and the form needs to be saved. This will send the required data and the newly created `TSS id` and `client id` will be stored for further use. - Deleting a pos_config will also disable its corresponding `TSS`. ### Point of Sale UI Fiskaly works with a transaction system for the order. A `transaction` is first created with a HTTP request. Afterwards, a second HTTP request with the mandatory information of the order is sent to update and finalize the `transaction`. This is what we call `short transaction`. There are also different types of transaction. - The basic PoS only works with `transaction` of type `receipt` which simply retrieves the payment information along the taxes. - A `transaction` of type `receipt` is always created and finalized (two requests are sent, one after the other) whenever an order is validated in the payment screen. This happens before the order is sent to the Odoo server. - The receipt shows the mandatory data received from the `transaction` finalization response. - A `transaction` can also be canceled if it was first created. For example, if during the validation of an order, the second HTTP request failed due to some unknown error (the first request went through, meaning that a `transaction` was created at Fiskaly side), the system cannot proceed further and complete the validation of the order. The user can cancel the order which will send a HTTP request to Fiskaly in order to cancel said `transaction`. - The unpaid orders are stored in the `localStorage` along their `transaction id` if the `transaction` was created but not finalized. The user should not delete their browser cache, otherwise the unpaid orders will be lost and the `transaction` will be indefinitely open at Fiskaly side. - The unpaid orders are properly loaded from the `localStorage` with their `transaction id`. - The `TSS related information` (the ones shown in the receipt) are also sent to the Odoo server and stored. - The reprint feature also shows the `TSS related information` in the receipt. - Once the PoS UI loads, the system retrieves the German taxes from an API of Fiskaly. The values cannot be hard-coded since they can change because of the Covid-19 crisis. A VAT check is applied when selecting a product which verifies if the tax value of the selected product matches one of the VAT retrieved from Fiskaly. - The restaurant PoS with floor works the same way as the basic one. Some additional features were added to make it compliant with the new regulation. Not only it is working with `transaction` of type `receipt`, but it is also using `transaction` of type `order`. This type of `transaction` retrieves the order line information such as its quantity, its name and its price per unit (vat included). Normally, a `long transaction` would be the ideal schema for this kind of PoS but this is not suited with the restaurant module.. A `long transaction` is simply a `transaction` where we need to update it several times before finalizing it. Fortunately, it is possible to only use `short transaction`: - A `transaction` of type `order` is created and finalized when there's a difference in the order lines between the PoS UI and the Odoo server. This happens when changing screen from product Screen to the floor Screen. More precisely it happens when the `create_from_ui` method is called. The difference between the order in the UI and the order stored in the database is then computed and sent. Based on the result, a `transaction` is created and finalized. - When validating an order, a rpc call is made to the Odoo server to see if there's any difference before it actually validates. It is possible for the order to not be synced yet after the creation/modification of an order because the screen did not change to the floor screen. Based on the response from the server, a `transaction` of type `order` is created and finalized. - The `time_start` data added in the receipt is not taken from the `transaction` of type `receipt` when validating the order but from the creation time of the order. - When canceling an order, upon calling the `remove_from_ui` method, it will give the order lines of the order stored in the database as differences (the data in the database is more relevant than the one in the UI). Based on the result (if the order was not actually empty), a `transaction` of type `order` is created and finalized followed by a canceled `transaction` of type `receipt`. - The price change and price discount of a product also have been taken into account. Since it is already considered as another order lines, it is also considered as such when creating the `transaction` of type `order`. - Split billing feature also has been automatically taken into account with the previous features. - Bill printing feature does not show the `TSS related information` in the receipt since they are empty. ### DSFinV-K and Cash point closing (closing a session) When closing a session, all the information regarding the orders of the session needs to be sent to the DSFinV-K API of Fiskaly. This allows to retrieve those information in a standardized data format which has to be provided in the case of an audit: - When closing a session, a HTTP request is sent to create a `cash point closing` at Fiskaly side with the required data. A lot of data is sent and can be seen in the `pos_session.py` file. Note: if the amount of an order exceeds 200€, the address buyer should be recorded and sent. If the buyer or the address was not recorded from the user, the system will simply send an empty address. Odoo is not responsible for the user's lack of responsibility. - An export of the data sent can be created and is `DSFinV-K export`. The export can be created either for a specific PoS or for every PoS. A period of time needs to be specified. The creation of a `DSFinV-K export` will trigger an export at Fiskaly side. - Once a `DSFinV-K export` have been created, depending on the `state`, a button will be available to refresh its `state`. This will simply send a request to get the state of the export at Fiskaly side. - Once the export has been completed (`state == 'completed'`), a button will appear allowing to download the export. ----------------- Everything works only for company residing in Germany. The **vast majority of potential errors** have been taken into account and properly handled. The localization is not ready yet because the required fiscal API (Fiskaly) is not 100% ready yet and some minor change and verification (there will some unknown variables that will come) will need to be done just in case. Stuff to do: - ~~remove the `txLastRevision` in the `Order` js class, it's useless because we use short transaction~~ - Add the fiskaly service IAP endpoint for production - disable TSS upon archiving PoS ? - ~~handle duplicate (should create new tss for the duplicated pos)~~ Stuff to be angry with the alpha APIs: - When creating a `cash point closing` with only one order, most of the time (95%), the `cash point closing` will not be properly created at Fiskaly side because there will be an error with the code `42601` which is a `SYNTAX ERROR` in a PostgreSQL... - With their management API, when deleting an organization, for some unknown reason : INTERNAL ERROR :dagger: Forward-Port-Of: odoo/enterprise#15996
Forward-Port-Of: odoo/enterprise#18514
Original PR description
Forward-Port-Of: odoo/enterprise#18514
Forward-Port-Of: odoo/enterprise#18555
Original PR description
Forward-Port-Of: odoo/enterprise#18555
Error: When module `l10n_cl_edi_stock` is installed, if the user tries to enable the option 'Batch Pickings', it will lead to an Odoo Error with a traceback. When the module `stock_picking_batch` is installed (i.e., when 'Batch Picking' is enabled), a view is created based on `stock.view_picking_form`, except that the header is replaced: https://github.com/odoo/odoo/blob/b4e1e9f3ae86e6b5e7015c0241791f733ee942f4/addons/stock_picking_batch/views/stock_picking_batch_views.xml#L10-L13 Howev
Original PR description
Error: When module `l10n_cl_edi_stock` is installed, if the user tries to enable the option 'Batch Pickings', it will lead to an Odoo Error with a traceback. When the module `stock_picking_batch` is installed (i.e., when 'Batch Picking' is enabled), a view is created based on `stock.view_picking_form`, except that the header is replaced: https://github.com/odoo/odoo/blob/b4e1e9f3ae86e6b5e7015c0241791f733ee942f4/addons/stock_picking_batch/views/stock_picking_batch_views.xml#L10-L13 However, in `l10n_cl_edi_stock`, the field `country_code` is declared in the replaced header. As a result, (still in `l10n_cl_edi_stock`) the invisibility condition can not be computed: https://github.com/odoo/enterprise/blob/6cd63c5c64073e38e4b90ea612a0928c23983df2/l10n_cl_edi_stock/views/stock_picking_views.xml#L35 OPW-2487757 Forward-Port-Of: odoo/enterprise#18402
The timezone used to plan workorders is the timezone of the workcenter's working hours (field `resource_calendar_id`), not the workcenter's timezone Linked to OPW-2393330 Forward-Port-Of: odoo/enterprise#18556 Forward-Port-Of: odoo/enterprise#18524
Original PR description
The timezone used to plan workorders is the timezone of the workcenter's working hours (field `resource_calendar_id`), not the workcenter's timezone Linked to OPW-2393330 Forward-Port-Of: odoo/enterprise#18556 Forward-Port-Of: odoo/enterprise#18524
before this commit, the kanban view contains the 'existing field' section folded by default because of this behavior, users have to unfold the 'existing field' section every time even if it is the only content in the 'add' tab. so, this commit fixes the issue by making the 'existing field' section unfolded by default in kanban. TaskID-2453573 Forward-Port-Of: odoo/enterprise#16262
Original PR description
before this commit, the kanban view contains the 'existing field' section folded by default because of this behavior, users have to unfold the 'existing field' section every time even if it is the only content in the 'add' tab. so, this commit fixes the issue by making the 'existing field' section unfolded by default in kanban. TaskID-2453573 Forward-Port-Of: odoo/enterprise#16262
- No longer display an error when the user hangs up on their own before the session is established. This error was confusing enough that some people reported it as a bug. - Add '600 Busy Everywhere' to recognized status codes. Forward-Port-Of: odoo/enterprise#18540
Original PR description
- No longer display an error when the user hangs up on their own before the session is established. This error was confusing enough that some people reported it as a bug. - Add '600 Busy Everywhere' to recognized status codes. Forward-Port-Of: odoo/enterprise#18540
Before this commit: B2CS is not decreased in case of refund but it's shown in CDNUR but CDNUR has a condition that only shows a refund of B2CL. HSN value is not decreased in case of refund After this commit: Refund is decreased from B2CS and not show that in CDNUR HSN value is decreased in case of refund B2CS = Business to Consumers Small B2CL = Business to Consumers Large (invoice value is more than Rs.2.5 lakhs) CDNUR = Credit/Debit Notes for Unregistered HSN = Harmoni
Original PR description
Before this commit: B2CS is not decreased in case of refund but it's shown in CDNUR but CDNUR has a condition that only shows a refund of B2CL. HSN value is not decreased in case of refund After this commit: Refund is decreased from B2CS and not show that in CDNUR HSN value is decreased in case of refund B2CS = Business to Consumers Small B2CL = Business to Consumers Large (invoice value is more than Rs.2.5 lakhs) CDNUR = Credit/Debit Notes for Unregistered HSN = Harmonized System of Nomenclature(hsn code per product) OPW: 2446769 Forward-Port-Of: odoo/enterprise#18467 Forward-Port-Of: odoo/enterprise#16154
Following the validation of the report line domains with odoo/enterprise#18228 `l10n_mx_reports/data/account_financial_report_data.xml` no longer loads correctly because the domain is invalid for account.move.line. ``` File "/home/odoo/src/enterprise/12.0/account_reports/models/account_financial_report.py", line 455, in _validate_domain raise ValidationError(error_format % (record.name, str(e))) odoo.tools.convert.ParseError: "Error while validating the domain of line 101 Caja:
Original PR description
Following the validation of the report line domains with odoo/enterprise#18228 `l10n_mx_reports/data/account_financial_report_data.xml` no longer loads correctly because the domain is invalid for…
Following the validation of the report line domains with
odoo/enterprise#18228
`l10n_mx_reports/data/account_financial_report_data.xml` no longer
loads correctly because the domain is invalid for account.move.line.
```
File "/home/odoo/src/enterprise/12.0/account_reports/models/account_financial_report.py", line 455, in _validate_domain
raise ValidationError(error_format % (record.name, str(e)))
odoo.tools.convert.ParseError: "Error while validating the domain of line 101 Caja:
Invalid field 'tag_ids' in leaf "<osv.ExtendedLeaf: ('tag_ids', 'in', [5]) on account_move_line (ctx: )>"
None" while parsing /home/odoo/src/enterprise/12.0/l10n_mx_reports/data/account_financial_report_data.xml:55, near
<record id="mx_afrl_101" model="account.financial.html.report.line">
<field name="name">101 Caja</field>
<field name="code">MX_COA_101</field>
<field name="sequence" eval="0"/>
<field name="level" eval="2"/>
<field name="figure_type">no_unit</field>
<field name="parent_id" ref="mx_afrl_1"/>
<field name="domain" eval="[('tag_ids', 'in', [ref('l10n_mx.account_tag_101_01'),])]"/>
</record>
```
The reason for this lies in the fact l10n_mx_reports uses financial report lines in an uproper way to only store the domains for account.account records to use in a custom report: https://github.com/odoo/enterprise/blob/12.0/l10n_mx_reports/models/coa.py#L59. We fix this by overriding the constraint in order to adapt the check made for those lines.
upg-10593
Forward-Port-Of: odoo/enterprise#18383When the user opens an accounting report, if he adds filters that belong to the current company and then switches to another company, an error will be raised. To reproduce the error: 1. In Settings, enable "Analytic Accounting" 2. Create a company C02 3. Accounting > Reporting > Profit and Loss 4. Add an Analytic Account 5. Switch to C02 Error: A permission error is displayed because the user tries to use an analytic account that belongs to the first company. Going again to Accoun
Original PR description
When the user opens an accounting report, if he adds filters that belong to the current company and then switches to another company, an error will be raised. To reproduce the error: 1. In Settings, enable "Analytic Accounting" 2. Create a company C02 3. Accounting > Reporting > Profit and Loss 4. Add an Analytic Account 5. Switch to C02 Error: A permission error is displayed because the user tries to use an analytic account that belongs to the first company. Going again to Accounting > Reporting > Profit and Loss will raise the same error: the user has to switch to the first company and remove the filter. A similar issue occurs with Analytic Tags. OPW-2461265 Forward-Port-Of: odoo/enterprise#18545 Forward-Port-Of: odoo/enterprise#18232