Friday, February 27, 2026
38 changes · 19.0
New functionality added to Odoo
This update adds support for obtaining real-time currency exchange rates from the Central Bank of Cuba (BCC). This enhancement allows Odoo to accurately reflect the current exchange rates for transactions involving Cuban currency, improving financial reporting and operational accuracy. It leverages official BCC data for reliable currency conversions.
Original PR description
This commit introduces a new exchange rate provider for the Central Bank of Cuba (BCC). - Implement new exchange rate provider for Central Bank of Cuba (BCC) - Retrieve rates from official BCC source - Reference: https://www.bc.gob.cu/tasas-de-cambio (official published data and documentation) - Parse and normalize published currency values - Support multiple rate types (official, public, special)" Forward-Port-Of: odoo/enterprise#108789 Forward-Port-Of: odoo/enterprise#108367
Enhancements to existing features
When users reverse a vendor bill and create a new invoice, the main attachment is now copied to the new vendor document. This keeps supporting documents available on the replacement invoice and reduces manual re-upload work.
Original PR description
This commit copies the main attachment to the newly created vendor through the "Reverse and Create Invoice" Button. task-5905299
Resolved issues and error corrections
Typing tabs inside monospace banners now keeps character columns aligned by converting tabs to four spaces. Users can also reduce indentation with Shift+Tab, making formatted notes and code snippets easier to edit consistently.
Original PR description
Tabs are aligned on 40px boundaries. This leads to misalignment of characters when using the monospace banner. This commit fixes this by replacing all tabs inside monospace banners by four spaces. Steps to reproduce: - Go to a "To do" note - Insert a monospace banner - Type some text on several lines - Type tab at the begin of some lines => Character columns were misaligned. task-5916747
Documentation and clarification updates
This pull request updates the contributor agreement record for an individual contributor. It helps ensure the project has the required legal confirmation before accepting contributions.
Original PR description
Description of the issue/feature this PR addresses: Cla Current behavior before PR: No cla Desired behavior after PR is merged: Verified --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change removes Guatemala city reference data that depended on a component not included with the Guatemala localization module. It prevents installation or update problems for businesses using the Guatemala localization setup.
Original PR description
This reverts commit 728465e0a4a9b651dd6e1059bd4788b0c13e2a52. The model `res.city` is defined in `base_address_extended` which isn't in `l10n_gt` dependencies. runbot-241066
This update narrows broad error handling so the system no longer unintentionally catches critical shutdown or interruption signals. It is mainly an internal quality and reliability cleanup that helps align the codebase with accepted Python practices without changing normal user workflows.
Original PR description
Replace bare `except:` clauses with `except Exception:` for PEP 8 compliance. Bare except catches all exceptions including SystemExit, KeyboardInterrupt, and GeneratorExit, which is rarely intended.
CRM lead generation now correctly recognizes when a user has no credits and shows the appropriate credit-related message. This avoids misleading users into thinking their filters returned no results, making it clearer what action is needed to continue generating leads.
Original PR description
Before this commit, when the user uses CRM to generate new leads and does not have credits, the error message they would get is "Your request did not return any result (no credits were used). Try removing some filters." This commit fixes this in _perform_request by instead of expecting InsufficientCreditError raised it now expects the credit_error flag to be set. task-5925047 Forward-Port-Of: odoo/odoo#250433
This fixes an HR issue where deleting an archived employee version could be incorrectly blocked by a validation message. Businesses can now remove obsolete archived employee records without unnecessary errors, while active version safeguards remain in place.
Original PR description
Version – saas-18.4 Issue: Deleting an archived version of an employee that has only a single version raises a `ValidationError` stating: `Employee %s must always have at least one active version.` Steps to Reproduce: - Make an archived version of an employee which have exactly one version. - Try to delete that archived version - Validation Error will occur which states that `Employee %s must always have at least one active version.` Cause: The validation logic prevents deletion when the number of versions being deleted equals the total number of unarchived versions of the employee. Fix: Improved the ValidationError logic by ensuring that no error is raised when the version being deleted is archived. Impact: Archived employee versions can now be deleted without raising unnecessary errors. Task – 5347109 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238344
Product pages now avoid showing free-text attributes with only one custom value in extra specification or single-value sections. This prevents duplicate or confusing attribute displays because shoppers already see and edit that value in the main product attributes area.
Original PR description
### Issue: Due to this bug, an attribute with a single custom value will be shown in specifications and single value attributes. #### Steps to reproduce: 1- Create a product. Add a `Free text`…
### Issue: Due to this bug, an attribute with a single custom value will be shown in specifications and single value attributes. #### Steps to reproduce: 1- Create a product. Add a `Free text` attribute. 2- Navigate to product page on the website. 3- From website editor, style tab, switch `specification` style. 4- With specification style set to `None`, you can see this attribute in single value attributes list. 5- With other 2 styles you can see this attributes in specifications. Expected: In both steps 4 and 5, this attributes shouldn't be displayed there because it is already displayed in main attributes where you can set the value. Initially fix was to filter `ProductTemplateAttributeLine` in `_prepare_single_value_for_display`, however it would cause empty specification sections. To avoid that we also need to filter out single custom value attributes in `_prepare_categories_for_display`. opw-5484721 Forward-Port-Of: odoo/odoo#250755 Forward-Port-Of: odoo/odoo#244234
Back-in-stock notification emails now use the email address of the company linked to the website where the customer requested the alert. This prevents customers from receiving messages from the wrong company address in multi-company or multi-website setups.
Original PR description
…notification # The problem The mail sent to notify a customer that a product is back in stock used the e-mail of the company associated with the product. We would rather use the e-mail of the company associated with the website the notification request was done in. This commit aligns versions 18.0+ with what is done on master (https://github.com/odoo/odoo/commit/8ec57b1115a55e8b59db9b8c1e843c6a1c888db3) opw-5868889 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250593 Forward-Port-Of: odoo/odoo#249299
Test emails sent from Email Marketing are now fully cleaned up after use, including the related chatter message. This prevents contacts from showing confusing removed-message notices caused only by test mail activity.
Original PR description
**Steps to reproduce:** - Go to Email Marketing app - Create a mailing campaign - Set its recipients to Contact - Click on the test button to send a test mail to any mail - Go to the first contact…
**Steps to reproduce:**
- Go to Email Marketing app
- Create a mailing campaign
- Set its recipients to Contact
- Click on the test button to send a test mail to any mail
- Go to the first contact record
- Chatter will show `This message has been removed` message
**Issue:**
Previously, message created for testing were ignored by the Chatter as they were empty. As we now keep empty messages visible but with removed content display, they shows up on related records.
```py
record = self.env[mailing.mailing_model_real].search([], limit=1)
```
**Fix:**
Ensure the related messages are unlinked at the same time as the test mail in `send_mail_test` by setting `is_notification` to `False` to trigger the `unlink` logic.
```py
def unlink(self):
# cascade-delete the parent message for all mails that are not created for a notification
mail_msg_cascade_ids = [mail.mail_message_id.id for mail in self if not mail.is_notification]
res = super(MailMail, self).unlink()
if mail_msg_cascade_ids:
self.env['mail.message'].browse(mail_msg_cascade_ids).unlink()
return res
```
related: https://github.com/odoo/odoo/commit/21f92550f83cbd38df2c223c65c61bd16dc8e2b0
opw-5502787
Forward-Port-Of: odoo/odoo#247805This fix prevents harmless asset-loading errors from being reported after automated tours have already finished. It helps keep test and deployment checks focused on real issues, reducing noise for teams monitoring build results.
Original PR description
Similarly to commit https://github.com/odoo/odoo/commit/493bab4f460dd4069d5cb6805933b8088067ff17 hiding "failed to fetch" errors, this commit adds AssetsLoadingError as those represents "just" another category of failed assets request (i.e. lazy loaded) after tour termination. runbot-233826 Forward-Port-Of: odoo/odoo#248003
Point of Sale sessions now keep opening notes even when no cash payment method is configured. This prevents important shift-start information from being lost for businesses that operate without cash handling.
Original PR description
Before this commit: -------------- - When the cash method was not available for config, opening notes values were not being stored in session data. After this commit: -------------- - Opening notes values will be stored in session data even when the cash method is not available for config. task-5474822 Forward-Port-Of: odoo/odoo#249953 Forward-Port-Of: odoo/odoo#243956
POS receipts now show the correct tax label when a fiscal position changes the tax rate, such as replacing 21% tax with 6%. This helps customers and staff see tax information that matches the actual tax applied to the order.
Original PR description
Steps: - Install l10n_be_pos_restaurant. - Create a restaurant POS configuration with presets. - Assign a fiscal position to one preset that replaces 21% tax with 6%. - Open a POS session and process an order using that preset. Issue: - The POS receipt still displays the 21% tax's tax group label, even though the 6% tax is correctly applied. Cause: - Fiscal position was not taken into account when computing the tax group label for POS receipt orderlines. Fix: - Apply the fiscal position when determining the POS receipt tax group label. Task-5899938 Forward-Port-Of: odoo/odoo#250563 Forward-Port-Of: odoo/odoo#248571
The Attendance list view now shows distinct labels for check-in and check-out location fields. This removes a confusing duplicate Longitude label in the optional fields menu, making it easier for users to choose the correct attendance location information.
Original PR description
Steps to reproduce: -------------------------------------- 1. Install the Attendance module 2. Go to the attendance list view 3. Click on the optional fields tray Observation: -------------------------------------- Duplicate field name Longitude (In) Issue: -------------------------------------- For the `in_location` field, a duplicate string was added in the list view Solution: -------------------------------------- Changed string to `Location (In)` for `in_location` field and changed string to `Location (Out)` for `out_location` field Before: <img width="348" height="511" alt="image" src="https://github.com/user-attachments/assets/109ff380-df4f-4dc6-ad01-a955d85436c7" /> After: <img width="330" height="503" alt="image" src="https://github.com/user-attachments/assets/894e6045-ec34-4296-8aff-f0e7bee32d9f" /> opw-5909500 Forward-Port-Of: odoo/odoo#249404
Duplicating a project task now skips subtasks that were archived. This prevents old or inactive work items from reappearing in copied tasks, keeping project task lists cleaner and more accurate.
Original PR description
Currently, when duplicating a task that contains `archived subtasks`, the archived subtasks are also duplicated. **Steps to reproduce:** - Install the `project` module. - Open any `project` and create a task with a subtask. - `Archive` the subtask. - `Duplicate` the parent task. **Observation:** The duplicated task contains a copy of the archived subtask, even though it is inactive. **Root Cause:** At [1], subtasks are duplicated without checking their active status. As a result, archived (`active=False`) subtasks are also copied during duplication. **Fix:** This commit ensures that archived subtasks are not copied when duplicating a task. [1]: https://github.com/odoo/odoo/blob/531b887aec92c2fbf57495992be9fbc32d9ea20e/addons/project/models/project_task.py#L822 opw-5926009 Forward-Port-Of: odoo/odoo#250901 Forward-Port-Of: odoo/odoo#248167
Invoices with early payment discounts now calculate the discount using the same global rounding method across accounting entries. This prevents small one-cent mismatches on journal items and keeps invoice totals, discounts, and electronic exports consistent.
Original PR description
**PROBLEM** There is a rounding issue with early payment discount when cash discount tax reduction is set to always (upon invoice). The move.line created for the discount is computed by applying the discount to each line, rounding each line individually. But the early payment discount is computed by rounding globally. **STEP TO REPRODUCE** 1. Create a payment term, with early discount of 1%, and cash discount tax reduction set to 'Always (upon invoice)'. 2. Create an invoice with 4 identical lines, unit price 4.76€ and tax 15%. 3. set the payment term on the invoice and save. 4. Go to journal item, early payment discount is 0.20€. 5. toggle discount_amount column on the the journal item tab. 6. notice on the last line, that balance - discount_amount = 0.19€ instead of 0.20€ opw-5865308 Forward-Port-Of: odoo/odoo#247996
The self-ordering flow now shows the “Missing Required Details” prompt only when a required option is both unselected and hidden from view. This prevents customers from seeing a confusing prompt when all required choices are already visible on the screen.
Original PR description
The "Missing Required Details" widget appeared when there was required attributes to choose in combo item or on the product page AND when the height of the screen was smaller than the content size. So sometimes, it was showing when it was not required and when we clicking on it, nothing was done because we saw everything on the screen. So, what I did, is basically change the condition for displaying the widget. Now it will appear only when a title of a required attributes is hidden by the header and this required attribute is not selected. part ot task: 5493798 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update backports fixes for Odoo's web testing tools to improve reliability when handling file responses and failed test output. It helps developers diagnose issues more clearly and reduces unintended behavior in test matchers, with no direct change to everyday user workflows.
Original PR description
### [FIX] web: Hoot - backport fixes This commit backports the following fixes that have been applied in further versions: - add correct mime type to XHR blob responses [1]; - fix missing diff from failed test results [2]; - wrap 'raw' value option in a dictionnary to limit unintended use, use 'raw' as a default for text-based matchers [3]. [1] 9156bf1 [2] 2216a0b [3] 3080362 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250929
This update corrects a typing-related error in the Sales combo configurator. It helps prevent avoidable failures when users work with sale product combinations, making the sales flow more reliable.
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 Forward-Port-Of: odoo/odoo#249973
The Model Overview report now handles unfamiliar field types gracefully instead of failing. This helps administrators generate reports reliably even when optional or specialized modules add newer field types.
Original PR description
This PR fixes a crash in the 'Model Overview' report (KeyError: 'vector') when models contain field types not recognized by the ir.qweb.field.selection widget (e.g. ector from the i module). The rendering logic in IrQwebFieldSelection.value_to_html assumed that alue would always be present in the selection map. This change adds a .get() fallback to display the raw value instead of crashing. Steps to reproduce: 1. Have a model with a field of type 'vector' (or any type missing from logical widget map). 2. Print Model Overview. 3. Observe KeyError. Closes #247281
Accounting users without HR permissions can now open bank account details from a contact without hitting an access error. The employee-related field is hidden from users who should not see HR data, keeping the workflow usable while respecting permissions.
Original PR description
**Steps to reproduce** - have `hr` and `account` installed - add a bank account to a contact - switch to a user with accounting rights but no HR rights - on the contact form, click on the tag of the bank account in the "Bank accounts" field - Access Error due to missing rights related to employee model **Cause** The `_compute_employee_id` method requires read access on the `hr.employee` model. **Solution** Hide the field for non-HR users. opw-5217072
Odoo now correctly creates first-page previews when a non-PDF file contains an embedded PDF, such as Peppol XML invoices. This prevents preview failures and helps users see document thumbnails reliably in attachment views.
Original PR description
The pdf_first_page route failed when called on non-PDF attachments that contain an embedded PDF (e.g. XML invoices generated via Peppol). This fix makes the route correctly extract and process the embedded PDF, allowing proper thumbnail generation in those cases. task-5246989 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Purchase down payment lines are no longer included in automatic unit price calculations when viewing purchase orders. This avoids unintended price recalculations and keeps down payment amounts stable and accurate.
Original PR description
## Issue: When viewing purchase order lines, the system attempts to compute the unit price for downpayment lines. This results in unintended behavior. ## Cause: PR…
## Issue: When viewing purchase order lines, the system attempts to compute the unit price for downpayment lines. This results in unintended behavior. ## Cause: PR https://github.com/odoo/odoo/pull/236669 introduced the `price_unit_product_uom` field along with its compute method `_compute_price_unit_product_uom` to manage PO comparison. Although the compute method correctly skips section and note lines, it does not exclude downpayment lines. Downpayment lines are identified by the `is_downpayment` field, which was introduced earlier in PR https://github.com/odoo/odoo/pull/176137. As a result, the computation is incorrectly applied to downpayment lines. ## With this commit: The UoM price computation is prevented for purchase order lines where is_downpayment is set to True. Downpayment lines are now treated similarly to section and note lines to prevent unintended price recalculations. Steps to reproduce : [Video](https://drive.google.com/file/d/1JrMN8x-i86QjRfMnaeYu-Jac03iFoJs3/view?usp=drive_link) OPW - 5930652
Customers booking an event booth with an email already known to the system now see clearer guidance to sign in or create an account. This avoids confusion for people who are recognized as contacts but do not yet have portal access, helping them continue the booking process more smoothly.
Original PR description
When booking with an email that belongs to an existing partner, a 'Sign in' link is shown to the booker. If the partner has no portal access, then it is not relevant as they could also need to create an account. Therefore, change the wording by adding 'or create an account'. This way, the use of the login page redirection is more complete. opw-5419532 Forward-Port-Of: odoo/odoo#250740 Forward-Port-Of: odoo/odoo#241445
Users can now insert columns from within list items in the HTML editor without triggering an error. The editor correctly splits the list and places the new column layout in the expected position, improving reliability while editing structured content.
Original PR description
Problem: When trying to add a column under a list item, a traceback occurs. Cause: The list item is removed during the operation, but the selection that is restored still references the removed list item. As a result, the selection is restored on a disconnected element, causing a traceback. Solution: Handle column insertion inside lists separately. In this case, according to the specifications, we split the list and insert the columns between the resulting lists (or after the list if the cursor is in the last list item). This avoids restoring the selection on a removed node. Steps to reproduce: - Add any list. - Run `/column` while the cursor is inside a list item. - Observe the traceback. task-5916246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249958 Forward-Port-Of: odoo/odoo#248206
This fix prevents an error when a selection field contains a value that is no longer listed in its available options. Instead, Odoo now displays the stored raw value, helping users view records without interruption.
Original PR description
When a selection field contains a value not found in the current options list, display the raw value instead of raising an error. 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
Recent tests were failing due to a conflict between modules activating different currencies (EUR vs. USD). This update ensures the OCR consistently uses the default USD currency, resolving the test failures and improving overall test reliability. This ensures consistent test results and a more stable system.
Original PR description
When the tests are run with all modules installed and demo data, some of them fail. One of the other modules activates the EUR currency, which causes the OCR to select it instead of leaving the default USD currency. - Test `test_bank_account` fails because, when the `currency_id` field is set, it triggers a re-computation of `partner_bank_id` which will reset its value to `False`. Runbot build error [240759](https://runbot.odoo.com/odoo/runbot.build.error/240759). - Test `test_invoice_ocr_note_author` fails because it's not expected that the `currency_id` is modified and logged in the tracking message. Runbot build error [238512](https://runbot.odoo.com/odoo/runbot.build.error/238512) (only in saas-19.2 and up, but it is mentionned here as the fix is the same). To make the tests more reliable, we now ensure only the USD currency is active.
This update fixes a technical error that prevented managers without specific appraisal rights from scheduling meetings. The issue stemmed from access restrictions on related partner IDs. The fix simplifies the process by directly using employee work contact IDs, ensuring reliable meeting scheduling for all managers.
Original PR description
Steps to reproduce: - Create two employees: one as a manager and the other as a subordinate. - Ensure that the manager does not have any officer or appraisal rights. - Create an appraisal for the subordinate through the manager. - Confirm the appraisal and then click the Schedule Meeting button Issue: - The manager should schedule a meeting even though he does not have the rights, but a traceback error occurs due to access rights issues when trying to schedule a meeting. Reason: - The manager is unable to access the related_partner_id due to restrictions set by the officer/manager group, which results in a traceback error. Fix: - Replace the related_partner_id with the work_contact_id of the employee. Since related_partner_id is computed from work_contact_id, we can directly use work_contact_id task-5881127
This update resolves an issue where work entries weren't being generated when multiple resource calendar attendances were adjacent in time. The fix prevents the system from incorrectly combining consecutive attendances, ensuring that work entries are created as expected for credit time and other work entry types. This improves the accuracy of time tracking for employees.
Original PR description
When you have two resource calendar attendances that are stuck together, and you generate work entries, the second one doesn't appear: Bug is caused when having two attendances stuck together: In a resource.calendar, change the time of a resource.calendar.attendance to finish at 15.36 and create a new one that begins at 15.36 and finished at 16.36 with a work entry type of Credit time. Go and regenerate work entries and you can see that no work entries are generated for credit time. Fixed by adding keep_distinct in an interval to not fuse them together. Also added extra checks to another test to not pass with incorrect values. task-5894994
This update fixes a bug that prevented payment advice reports from functioning correctly when employees had multiple bank accounts. The team verified all bank BICs and ensured the system now accurately generates payment advice reports even with invalid data for non-primary bank accounts. This ensures accurate financial reporting for our users.
Original PR description
steps to reproduce: - install `l10n_in_hr_payroll` - create an employee, with multiple bank accounts - add invalid BIC in one of the bank accounts with isn't primary - notice that you will still be able create the advice report with invalid data. issue: - after the support of multiple bank accounts, the payment advice methods were not adapted with it. fix: - checked all the banks and their BIC. task-5890497
This update resolves an issue where action buttons on the work entry Gantt view would cause errors when no employees were selected. The fix hides these buttons automatically when there are no employees, preventing unexpected errors and improving user experience.
Original PR description
On gantt view of work entries when user multi-selects entries, action buttons appears Ex. Set, Reset etc. When their are no employees in the column, on clicking these action buttons gives traceback. Ex:- `TypeError: Cannot read properties of undefined (reading '0')` or `KeyError: 'employee_id'` This fix will hide these buttons when there are no employees present. task-[5445718](https://www.odoo.com/odoo/project/1251/tasks/5445718)
This update fixes an issue where check printing in the Philippines wasn't accurately reflecting payments after withholding taxes. Now, the check amount will correctly display the net payment amount, ensuring accurate financial reporting for Philippine businesses. A new test case has been added to verify this change.
Original PR description
In Philippines' check localization module, the amount on check should be based on the net amount after deducing withholding amount for payments if the payment is with taxes that are set as withholding on payment. This commit fixes the check print's values to reflect the net amount. Minimal test case is also added to safeguard the new behavior. [Task-5928813](https://www.odoo.com/odoo/all-tasks/5928813) Forward-Port-Of: odoo/enterprise#108611
This update resolves an error that occurred when users attempted to initiate the Colombian Electronic Invoicing certification process without a pre-existing certificate. The fix prevents a traceback by ensuring the 'cert_sudo' variable is properly initialized, improving the stability of the certification workflow.
Original PR description
When no certificate is found in the company, clicking on ``Begin Certification Process`` raises a traceback. Steps to reproduce the error: - Install ``l10n_co_dian`` module with demo data - Switch to the CO Company - Go to Invoicing > Configuration > Settings > Colombian Electronic Invoicing - Set the Testing ID for Operation mode - In Certificates, delete the existing certificate - Click on Activate the certification process > Begin Certification Process > Ok Traceback: ```py UnboundLocalError cannot access local variable 'cert_sudo' where it is not associated with a value ``` https://github.com/odoo/enterprise/blob/6294be57cf1aa577ec546a958514bc8ec6705935/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1459 The variable ``cert_sudo`` is used outside of the for loop. If no certificate is found, ``cert_sudo`` will be undefined, leading to the UnboundLocalError. sentry-7256943298
This update resolves issues with the Belgian XBRL report, specifically correcting inaccurate translations and removing irrelevant company types. The changes enhance the report's reliability and compliance, ensuring accurate financial data reporting for Belgian businesses.
Original PR description
This commit fixes several issues in the Belgian XBRL report. - Values in report like "false" were being wrongly translated. - Not all company types are valid/relevant. Removed invalid company types. task-5907118
This update corrects a warning generated during document testing related to fake PDF content. The team replaced these fake files with the standard minimal PDF used for testing, ensuring consistent and reliable test results. This resolves a technical issue that could have impacted the stability of the documents functionality.
Original PR description
While creating attachments/documents for testing, using a "fake PDF content" generates warning from PyPDF 5.4.0 (even with `strict=False`) when the said PDF is eventually parsed. This commit replaces those "fake PDF content" by reading the "minimal" PDF file provided for testing purposes in `base`. runbot-231278 Forward-Port-Of: odoo/enterprise#108779
This pull request adds a Contributor License Agreement signature record for mega-ramo. It is an administrative legal update that confirms contribution eligibility and does not change product functionality.
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 Forward-Port-Of: odoo/odoo#250493
This pull request records that contributor ngochung207 has signed the required Contributor License Agreement. It supports Odoo's legal compliance process and does not change product functionality for users.
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 Forward-Port-Of: odoo/odoo#250278