Name: [FIX] pos_loyalty, sale_loyalty: backport two upstream loyalty fixes - Post install tests: from website to website_timesheet

State: Killed

PR State: open

PR Author: David Tran

PR Author Email:

PR: #1290

Committer: David Tran

Committer Email: david.tran@tvtmarine.com

Commit: f204e4fb2d9e4a010c2386d21b9ef777d17c13cc

Description:

                                [FIX] sale_loyalty: allow invoicing-only users to open sale orders

Steps to reproduce:
1. Create a user in the Invoicing group (account.group_account_invoice)
   only, without any Sales group.
2. As that user, open any sale order form (draft or confirmed with
   loyalty history).

Issue:
The form never opens; the client raises "You are not allowed to
access 'Loyalty Coupon' (loyalty.card) records". This blocks a user
who already has read/write access to sale.order in core, via the
access_sale_order_invoicing_payments rule in sale's own security
CSV, from doing their job.

Cause:
Two non-sudo reads in the sale.order extension hit loyalty models
that are restricted to the Sales groups: the gift card stat button
count queries loyalty.card directly, and the loyalty summary looks
up the coupon point name via coupon_point_ids.coupon_id without the
sudo already used one line above for loyalty.history.

Fix:
Gate the gift card count query behind a has_access('read') check, so
a user without access simply sees a zero count (the stat button
stays hidden), matching the has_access guard sale.order already uses
in _create_invoices(). Read the coupon point name through sudo(),
consistent with the loyalty.history read beside it, since the
loyalty summary is meant to be visible to anyone who can already
read the order.

Signed-off-by: David Tran <david.tran@tvtmarine.com>
(cherry picked from commit d5acfaf89b7beffa9ff6c3289432ee0507e55683)
                                

Branch: 19.0

Age:

Up-time: Not finished

Odoo 19 Test Suite Using Docker

Post install tests: from website to website_timesheet

  • install_module account,account_add_gln,account_check_printing,account_debit_note,account_edi,account_edi_proxy_client,account_edi_ubl_cii,account_fleet,account_payment,account_payment_interco,account_peppol,account_peppol_advanced_fields,account_peppol_response,account_qr_code_emv,account_qr_code_sepa,account_tax_python,account_test,account_update_tax_tags,analytic,api_doc,attachment_indexation,auth_oauth,auth_passkey,auth_passkey_portal,auth_password_policy,auth_password_policy_portal,auth_password_policy_signup,auth_signup,auth_timeout,auth_totp,auth_totp_mail,auth_totp_portal,barcodes,barcodes_gs1_nomenclature,base,base_address_extended,base_automation,base_geolocalize,base_iban,base_import,base_import_module,base_install_request,base_setup,base_sparse_field,base_vat,board,bus,calendar,calendar_sms,certificate,cloud_storage,cloud_storage_azure,cloud_storage_google,cloud_storage_migration,contacts,crm,crm_iap_enrich,crm_iap_mine,crm_livechat,crm_mail_plugin,crm_sms,data_recycle,delivery,delivery_mondialrelay,delivery_stock_picking_batch,digest,event,event_booth,event_booth_sale,event_crm,event_crm_sale,event_product,event_sale,event_sms,fleet,gamification,gamification_sale_crm,google_account,google_address_autocomplete,google_calendar,google_gmail,google_recaptcha,hr,hr_attendance,hr_calendar,hr_expense,hr_fleet,hr_gamification,hr_holidays,hr_holidays_attendance,hr_holidays_homeworking,hr_homeworking,hr_homeworking_calendar,hr_hourly_cost,hr_livechat,hr_maintenance,hr_org_chart,hr_presence,hr_recruitment,hr_recruitment_skills,hr_recruitment_sms,hr_recruitment_survey,hr_skills,hr_skills_event,hr_skills_slides,hr_skills_survey,hr_timesheet,hr_timesheet_attendance,hr_work_entry,hr_work_entry_holidays,html_builder,html_editor,http_routing,iap,iap_crm,iap_mail,im_livechat,iot_base,l10n_vn_edi_viettel,l10n_vn_edi_viettel_pos,l10n_vn_viin,l10n_vn_viin_account_asset,l10n_vn_viin_account_reports,l10n_vn_viin_account_reports_asset,l10n_vn_viin_freight_project,l10n_vn_viin_stock_reports,link_tracker,loyalty,lunch,mail,mail_bot,mail_bot_hr,mail_group,mail_plugin,maintenance,marketing_card,mass_mailing,mass_mailing_crm,mass_mailing_crm_sms,mass_mailing_event,mass_mailing_event_sms,mass_mailing_event_track,mass_mailing_event_track_sms,mass_mailing_sale,mass_mailing_sale_sms,mass_mailing_slides,mass_mailing_sms,mass_mailing_themes,microsoft_account,microsoft_calendar,microsoft_outlook,mrp,mrp_account,mrp_landed_costs,mrp_product_expiry,mrp_repair,mrp_subcontracting,mrp_subcontracting_account,mrp_subcontracting_dropshipping,mrp_subcontracting_landed_costs,mrp_subcontracting_purchase,mrp_subcontracting_repair,onboarding,partner_autocomplete,partnership,payment,payment_adyen,payment_aps,payment_asiapay,payment_authorize,payment_buckaroo,payment_custom,payment_demo,payment_dpo,payment_ecpay,payment_flutterwave,payment_iyzico,payment_mercado_pago,payment_mollie,payment_nuvei,payment_paymob,payment_paypal,payment_payu,payment_razorpay,payment_redsys,payment_stripe,payment_toss_payments,payment_worldline,payment_xendit,phone_validation,point_of_sale,portal,portal_rating,pos_account_tax_python,pos_adyen,pos_cashdro,pos_cashmatic,pos_discount,pos_dpopay,pos_edi_ubl,pos_event,pos_event_sale,pos_glory_cash,pos_hr,pos_hr_restaurant,pos_imin,pos_loyalty,pos_mercado_pago,pos_mollie,pos_mrp,pos_online_payment,pos_online_payment_self_order,pos_pine_labs,pos_qfpay,pos_razorpay,pos_repair,pos_restaurant,pos_restaurant_adyen,pos_restaurant_loyalty,pos_restaurant_stripe,pos_safaricom,pos_sale,pos_sale_loyalty,pos_sale_margin,pos_self_order,pos_self_order_adyen,pos_self_order_pine_labs,pos_self_order_qfpay,pos_self_order_razorpay,pos_self_order_sale,pos_self_order_stripe,pos_self_order_viva_com,pos_sms,pos_stripe,pos_viva_com,privacy_lookup,product,product_email_template,product_expiry,product_margin,product_matrix,project,project_account,project_hr_expense,project_hr_skills,project_mail_plugin,project_mrp,project_mrp_account,project_mrp_sale,project_mrp_stock_landed_costs,project_purchase,project_purchase_stock,project_sale_expense,project_sms,project_stock,project_stock_account,project_stock_landed_costs,project_timesheet_holidays,project_todo,purchase,purchase_edi_ubl_bis3,purchase_mrp,purchase_product_matrix,purchase_repair,purchase_requisition,purchase_requisition_sale,purchase_requisition_stock,purchase_stock,rating,repair,resource,resource_mail,rpc,sale,sale_crm,sale_edi_ubl,sale_expense,sale_expense_margin,sale_gelato,sale_gelato_stock,sale_loyalty,sale_loyalty_delivery,sale_management,sale_margin,sale_mrp,sale_mrp_margin,sale_pdf_quote_builder,sale_product_matrix,sale_project,sale_project_stock,sale_project_stock_account,sale_purchase,sale_purchase_project,sale_purchase_stock,sale_service,sale_sms,sale_stock,sale_stock_margin,sale_stock_product_expiry,sale_timesheet,sale_timesheet_margin,sales_team,sms,sms_twilio,snailmail,snailmail_account,social_media,spreadsheet,spreadsheet_account,spreadsheet_dashboard,spreadsheet_dashboard_account,spreadsheet_dashboard_event_sale,spreadsheet_dashboard_hr_expense,spreadsheet_dashboard_hr_timesheet,spreadsheet_dashboard_im_livechat,spreadsheet_dashboard_pos_hr,spreadsheet_dashboard_pos_restaurant,spreadsheet_dashboard_sale,spreadsheet_dashboard_sale_timesheet,spreadsheet_dashboard_stock_account,spreadsheet_dashboard_website_sale,spreadsheet_dashboard_website_sale_slides,stock,stock_account,stock_delivery,stock_dropshipping,stock_fleet,stock_landed_costs,stock_maintenance,stock_picking_batch,stock_sms,survey,survey_crm,test_access_rights,test_action_bindings,test_assetsbundle,test_auth_custom,test_base_automation,test_convert,test_converter,test_crm_full,test_data_module,test_data_module_install,test_discuss_full,test_event_full,test_html_field_history,test_http,test_import_export,test_inherit,test_inherit_depends,test_inherits,test_inherits_depends,test_mail,test_mail_full,test_mail_sms,test_main_flows,test_mass_mailing,test_mimetypes,test_orm,test_read_group,test_resource,test_rpc,test_runbot_support,test_sale_product_configurators,test_sale_purchase_edi_ubl,test_search_panel,test_spreadsheet,test_testing_utilities,test_translation_import,test_uninstall,test_viin_approval,test_viin_mail_tracking,test_viin_stock_account,test_viin_web_cohort,test_viin_web_gantt,test_viin_web_map,test_viin_web_sankey,test_website,test_website_modules,test_website_slides_full,theme_default,to_account_accountant,to_account_asset,to_account_asset_purchase,to_account_counterpart,to_account_payment,to_account_reports,to_attendance_device,to_base,to_config_management,to_equipment_maintenance_schedule,to_equipment_woking_frequency,to_erponline_utility,to_fee_definition,to_fee_definition_sale,to_geo_routes,to_git,to_git_odoo_version,to_hr_employee_grade,to_invoice_tax_details,to_legal_invoice_number,to_mail_template_multilang_fix,to_maintenance_by_working_hours,to_maintenance_notification,to_maintenance_request_simple_mediate,to_odoo_module,to_odoo_module_sale,to_odoo_version,to_okr,to_okr_project,to_product_code_sequence,to_product_dimensions,to_product_license,to_product_license_sale,to_product_maintenance_schedule,to_product_milestone,to_product_odoo_version,to_product_return_reason,to_product_return_reason_stock,to_sale_order_advance,to_sshkey,to_stock_asset,to_stock_asset_equipment,to_stock_equipment,to_token_expiration,to_upload_file,to_web_thousand_sep,to_website_apps_store,transifex,uom,utm,viin_account,viin_account_onbehalf_payment,viin_api_request_logger,viin_appointment,viin_appointment_crm,viin_appointment_sale,viin_appointment_sale_crm,viin_appointment_website,viin_appointment_website_hr,viin_approval,viin_approval_account,viin_approval_analytic,viin_approval_flexible_flow,viin_approval_maintenance,viin_approval_mrp,viin_approval_procurement,viin_approval_project,viin_approval_purchase,viin_approval_purchase_stock,viin_approval_purpose_routing,viin_approval_sale,viin_approval_sale_project,viin_approval_stock,viin_backend_theme,viin_brand,viin_brand_account,viin_brand_auth_oauth,viin_brand_auth_signup,viin_brand_auth_totp,viin_brand_auth_totp_mail,viin_brand_auth_totp_portal,viin_brand_base_import,viin_brand_base_setup,viin_brand_calendar,viin_brand_contacts,viin_brand_crm,viin_brand_digest,viin_brand_fleet,viin_brand_hr,viin_brand_hr_expense,viin_brand_hr_skills,viin_brand_html_editor,viin_brand_im_livechat,viin_brand_l10n_vn,viin_brand_mail,viin_brand_mail_bot,viin_brand_mail_plugin,viin_brand_mass_mailing,viin_brand_mass_mailing_crm,viin_brand_mass_mailing_sale,viin_brand_mass_mailing_sms,viin_brand_mass_mailing_themes,viin_brand_mrp,viin_brand_onboarding,viin_brand_payment,viin_brand_payment_paypal,viin_brand_portal,viin_brand_pos,viin_brand_product,viin_brand_purchase,viin_brand_sale,viin_brand_sale_management,viin_brand_social_media,viin_brand_spreadsheet,viin_brand_spreadsheet_dashboard,viin_brand_stock,viin_brand_web,viin_brand_web_unsplash,viin_brand_website,viin_brand_website_event,viin_brand_website_event_exhibitor,viin_brand_website_forum,viin_brand_website_links,viin_brand_website_profile,viin_brand_website_sale,viin_brand_website_slides,viin_crm,viin_document,viin_document_account,viin_document_freight,viin_document_freight_air,viin_document_freight_consol,viin_document_hr,viin_document_hr_recruitment,viin_document_mrp,viin_document_parsing,viin_document_project,viin_document_purchase,viin_document_sale,viin_document_stock,viin_freight_air,viin_freight_air_consol,viin_freight_complete_suite,viin_freight_consol,viin_freight_customs,viin_freight_customs_consol,viin_freight_document_parsing,viin_freight_gantt,viin_freight_management,viin_freight_project,viin_freight_road,viin_freight_sale,viin_freight_sale_margin,viin_freight_sale_multi_currency,viin_freight_sale_onbehalf,viin_freight_sale_purchase,viin_helpdesk,viin_hr,viin_hr_holidays_gantt,viin_hr_maintenance,viin_logistics,viin_logistics_account,viin_logistics_cargo_template,viin_logistics_package_type,viin_logistics_route,viin_logistics_sale,viin_logistics_sale_stock,viin_logistics_sale_timesheet,viin_logistics_sales_team,viin_mail_thread_product,viin_mail_thread_stock,viin_mail_thread_uom,viin_mail_tracking,viin_maintenance,viin_maintenance_preventive_mode,viin_product,viin_project,viin_project_gantt,viin_qrcode,viin_safe_ir_metadata_proxy,viin_sale_multi_currency,viin_sale_onbehalf_management,viin_sale_supplier_pricelist,viin_sale_supplier_pricelist_margin,viin_sale_supplier_pricelist_margin_timesheet,viin_spreadsheet,viin_spreadsheet_dashboard_crm,viin_spreadsheet_dashboard_finance,viin_spreadsheet_dashboard_freight,viin_stock,viin_stock_account,viin_stock_account_ee,viin_tracking_location,viin_tracking_location_route,viin_web_cohort,viin_web_gantt,viin_web_map,viin_web_sankey,viin_zalo,viin_zalo_account,viin_zalo_auth_oauth,viin_zalo_crm,viin_zalo_helpdesk,viin_zalo_sale,viin_zalo_website_livechat,web,web_hierarchy,web_tour,web_unsplash,website,website_blog,website_cf_turnstile,website_crm,website_crm_iap_reveal,website_crm_livechat,website_crm_partner_assign,website_crm_sms,website_customer,website_event,website_event_booth,website_event_booth_exhibitor,website_event_booth_sale,website_event_booth_sale_exhibitor,website_event_crm,website_event_exhibitor,website_event_sale,website_event_track,website_event_track_live,website_event_track_live_quiz,website_event_track_quiz,website_forum,website_google_map,website_hr_recruitment,website_hr_recruitment_livechat,website_links,website_livechat,website_mail,website_mail_group,website_mass_mailing,website_mass_mailing_sms,website_partner,website_payment,website_profile,website_project,website_sale,website_sale_autocomplete,website_sale_collect,website_sale_collect_wishlist,website_sale_comparison,website_sale_comparison_wishlist,website_sale_gelato,website_sale_loyalty,website_sale_mass_mailing,website_sale_mondialrelay,website_sale_mrp,website_sale_slides,website_sale_stock,website_sale_stock_wishlist,website_sale_wishlist,website_slides,website_slides_forum,website_slides_survey,website_sms,website_timesheet
  • exec_odoo --db_port 5432 --log-level=test --max-cron-threads=0 --http-interface=127.0.0.1 --load=base,rpc,web,viin_brand,to_erponline_utility,test_runbot_support --stop-after-init --test-enable --test-tags=/website,/website_blog,/website_cf_turnstile,/website_crm,/website_crm_iap_reveal,/website_crm_livechat,/website_crm_partner_assign,/website_crm_sms,/website_customer,/website_event,/website_event_booth,/website_event_booth_exhibitor,/website_event_booth_sale,/website_event_booth_sale_exhibitor,/website_event_crm,/website_event_exhibitor,/website_event_sale,/website_event_track,/website_event_track_live,/website_event_track_live_quiz,/website_event_track_quiz,/website_forum,/website_google_map,/website_hr_recruitment,/website_hr_recruitment_livechat,/website_links,/website_livechat,/website_mail,/website_mail_group,/website_mass_mailing,/website_mass_mailing_sms,/website_partner,/website_payment,/website_profile,/website_project,/website_sale,/website_sale_autocomplete,/website_sale_collect,/website_sale_collect_wishlist,/website_sale_comparison,/website_sale_comparison_wishlist,/website_sale_gelato,/website_sale_loyalty,/website_sale_mass_mailing,/website_sale_mondialrelay,/website_sale_mrp,/website_sale_slides,/website_sale_stock,/website_sale_stock_wishlist,/website_sale_wishlist,/website_slides,/website_slides_forum,/website_slides_survey,/website_sms,/website_timesheet,-at_install,-/website_event_booth_exhibitor/tests/test_wevent_booth_exhibitor.py:TestWEventBoothExhibitorCommon.test_register,-/website_sale/tests/test_website_sale_image.py:TestWebsiteSaleRemoveImage.test_website_sale_add_and_remove_main_product_image_no_variant,-:TestIndustryFsmUi.test_ui,-/sale_management/tests/test_sale_ui.py:TestUi.test_04_portal_sale_signature_without_name_tour,-:TestMigrateEmployeeWithContract,-:TestMigrateEmployee,-/l10n_pe_edi_pos/tests/test_frontend.py:TestUi.test_pos_invoice_order_and_refund,-/helpdesk/tests/test_helpdesk_rating.py:TestHelpdeskRating.test_helpdesk_dashboard,-/website/tests/test_ui.py:TestUi.test_33_website_menus,-/account/tests/test_tour.py:TestUi.test_01_account_tour,-/website_sale_wishlist/tests/test_wishlist_process.py:TestWishlistProcess.test_01_wishlist_tour,-/test_l10n_be_hr_payroll_account/tests/test_employee_job_change.py:TestEmployeeJobChange.test_employee_job_change,-/test_website_sale_full/tests/test_ui_rental_comparison.py:TestUi.test_website_sale_renting_comparison_ui,-/knowledge/tests/test_knowledge_editor_commands.py:TestKnowledgeEditorCommands.test_knowledge_calendar_command_tour,-:TestAddToCartSnippet.test_configure_product,-.test_generic_localization,-:TestPickShipBackorder.test_pick_assign_and_backorder,-/hr_holidays/tests/test_leave_requests.py:TestLeaveRequests.test_calendar_event_create_access_rights,-:TestError.test_04_multi_db,-:TestOrderEdiUbl.test_so_import_product_from_po,-:TestReportsRendering.test_report_specific_paperformat_args,-:TestKpiProvider
Create Date Level Message
09/24/2026 20:40:15 INFO
Using Docker Image Odoo 19 Ubuntu 24.04 Python 3.12:

FROM ubuntu:noble

ENV LANG C.UTF-8
ENV ODOO_TEST_FAILURE_RETRIES=2

# Retrieve the target architecture to install the correct wkhtmltopdf package
ARG TARGETARCH

USER root

SHELL ["/bin/bash", "-c"]

# Install debian packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends apt-transport-https build-essential ca-certificates curl file fonts-freefont-ttf fonts-noto-cjk gawk gnupg gsfonts libldap2-dev libjpeg9-dev libsasl2-dev libxslt1-dev lsb-release npm ocrmypdf sed sudo unzip xfonts-75dpi zip zlib1g-dev software-properties-common git \
&& rm -rf /var/lib/apt/lists/*

# Install Python3 packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends publicsuffix python3 flake8 python3-dbfread python3-dev python3-gevent python3-pip python3-setuptools python3-wheel python3-markdown python3-mock python3-phonenumbers python3-websocket python3-google-auth libpq-dev pylint python3-jwt python3-asn1crypto python3-html2text python3-suds python3-xmlsec \
&& rm -rf /var/lib/apt/lists/*

# Install wkhtml
RUN curl -o xfonts-base.deb http://archive.ubuntu.com/ubuntu/pool/main/x/xfonts-base/xfonts-base_1.0.5+nmu1_all.deb && dpkg -i xfonts-base.deb
RUN curl -o wkhtmltox.deb -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb \
&& apt-get install -y --no-install-recommends ./wkhtmltox.deb \
&& rm -rf /var/lib/apt/lists/* wkhtmltox.deb xfonts-base.deb

# Install Odoo:Depends
ADD https://raw.githubusercontent.com/brendangregg/FlameGraph/master/flamegraph.pl /usr/local/bin/flamegraph.pl
RUN chmod +rx /usr/local/bin/flamegraph.pl
ADD https://raw.githubusercontent.com/Viindoo/odoo/19.0/debian/control /tmp/control.txt
RUN apt-get update \
&& sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \
| awk '/^ [a-z]/ { gsub(/,/,"") ; print $1 }' | sort -u \
| egrep -v 'postgresql-client' \
| sed 's/python-imaging/python-pil/'| sed 's/python-pypdf/python-pypdf2/' | sed 's/python3-lxml-html-clean/python3-lxml/' \
| DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --break-system-packages --no-cache-dir setuptools wheel && \
python3 -m pip install --break-system-packages coverage==7.4.4 flamegraph

# install latest postgresql-client
RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main' > /etc/apt/sources.list.d/pgdg.list \
&& GNUPGHOME="$(mktemp -d)" \
&& export GNUPGHOME \
&& repokey='B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8' \
&& gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "${repokey}" \
&& gpg --batch --armor --export "${repokey}" > /etc/apt/trusted.gpg.d/pgdg.gpg.asc \
&& gpgconf --kill all \
&& rm -rf "$GNUPGHOME" \
&& apt-get update \
&& apt-get install --no-install-recommends -y postgresql-client \
&& rm -f /etc/apt/sources.list.d/pgdg.list \
&& rm -rf /var/lib/apt/lists/*

# Install Google Chrome
ARG CHROME_VERSION=150.0.7871.114

RUN set -eux; \
echo 'repo_add_once="false"' > /etc/default/google-chrome; \
curl -sSLf "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" \
-o /tmp/chrome.deb; \
apt-get update; \
apt-get -y install --no-install-recommends /tmp/chrome.deb; \
apt-mark hold google-chrome-stable; \
rm -f /tmp/chrome.deb /etc/apt/sources.list.d/google-chrome.list; \
rm -rf /var/lib/apt/lists/*; \
google-chrome --version | grep -F "${CHROME_VERSION}"

# Install phantomjs
RUN curl -sSL https://nightly.odoo.com/resources/phantomjs.tar.bz2 -o /tmp/phantomjs.tar.bz2 \
&& tar xvfO /tmp/phantomjs.tar.bz2 phantomjs-2.1.1-linux-x86_64/bin/phantomjs > /usr/local/bin/phantomjs \
&& chmod +x /usr/local/bin/phantomjs \
&& rm -f /tmp/phantomjs.tar.bz2

ENV PIP_BREAK_SYSTEM_PACKAGES=1

ADD https://raw.githubusercontent.com/Viindoo/odoo/19.0/requirements.txt /root/requirements.txt
RUN python3 -m pip install --break-system-packages --no-cache-dir setuptools wheel && \
python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir -r /root/requirements.txt && \
python3 -m pip install --no-cache-dir ebaysdk==2.1.5 pdf417gen==0.7.1

RUN python3 -m pip install --break-system-packages --no-cache-dir requests pyOpenSSL

# Install debian packages
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssl iputils-ping openssh-client chromium-browser \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --no-cache-dir --upgrade websocket-client==1.2.3 flake8==6.1.0
#RUN python3 -m pip uninstall pylint pylint-odoo isort Pygments -y
RUN python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir --upgrade pylint-odoo==9.0.5
RUN python3 -m pip install --break-system-packages --upgrade --force-reinstall --ignore-installed --no-cache-dir --upgrade Pygments==2.15.0 --no-deps

# Install nodejs
RUN curl -fsSLO --compressed "https://nodejs.org/dist/v18.20.0/node-v18.20.0-linux-x64.tar.xz" \
&& tar -xJf "node-v18.20.0-linux-x64.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
&& rm "node-v18.20.0-linux-x64.tar.xz" \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs

RUN npm install -g rtlcss@3.4.0 es-check@6.0.0 eslint@8.57.1 prettier@2.7.1 eslint-config-prettier@8.5.0 eslint-plugin-prettier@4.2.1
# Tránh warning do bug của ubuntu
RUN rm -rf /usr/lib/python3.12/dist-packages/charset_normalizer-3.3.2.dist-info

# Install cloc package
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cloc pv \
&& rm -rf /var/lib/apt/lists/*

RUN python3 -m pip install --no-cache-dir --upgrade google-auth==2.36.0
RUN python3 -m pip install --no-cache --use-pep517 python-pkcs11~=0.7.0
09/24/2026 21:05:59 INFO
Post install tests: from website to website_timesheet:
Command: exec_odoo args: --db_port 5432 --log-level=test --max-cron-threads=0 --http-interface=127.0.0.1 --load=base,rpc,web,viin_brand,to_erponline_utility,test_runbot_support --stop-after-init --test-enable --test-tags=/website,/website_blog,/website_cf_turnstile,/website_crm,/website_crm_iap_reveal,/website_crm_livechat,/website_crm_partner_assign,/website_crm_sms,/website_customer,/website_event,/website_event_booth,/website_event_booth_exhibitor,/website_event_booth_sale,/website_event_booth_sale_exhibitor,/website_event_crm,/website_event_exhibitor,/website_event_sale,/website_event_track,/website_event_track_live,/website_event_track_live_quiz,/website_event_track_quiz,/website_forum,/website_google_map,/website_hr_recruitment,/website_hr_recruitment_livechat,/website_links,/website_livechat,/website_mail,/website_mail_group,/website_mass_mailing,/website_mass_mailing_sms,/website_partner,/website_payment,/website_profile,/website_project,/website_sale,/website_sale_autocomplete,/website_sale_collect,/website_sale_collect_wishlist,/website_sale_comparison,/website_sale_comparison_wishlist,/website_sale_gelato,/website_sale_loyalty,/website_sale_mass_mailing,/website_sale_mondialrelay,/website_sale_mrp,/website_sale_slides,/website_sale_stock,/website_sale_stock_wishlist,/website_sale_wishlist,/website_slides,/website_slides_forum,/website_slides_survey,/website_sms,/website_timesheet,-at_install,-/website_event_booth_exhibitor/tests/test_wevent_booth_exhibitor.py:TestWEventBoothExhibitorCommon.test_register,-/website_sale/tests/test_website_sale_image.py:TestWebsiteSaleRemoveImage.test_website_sale_add_and_remove_main_product_image_no_variant,-:TestIndustryFsmUi.test_ui,-/sale_management/tests/test_sale_ui.py:TestUi.test_04_portal_sale_signature_without_name_tour,-:TestMigrateEmployeeWithContract,-:TestMigrateEmployee,-/l10n_pe_edi_pos/tests/test_frontend.py:TestUi.test_pos_invoice_order_and_refund,-/helpdesk/tests/test_helpdesk_rating.py:TestHelpdeskRating.test_helpdesk_dashboard,-/website/tests/test_ui.py:TestUi.test_33_website_menus,-/account/tests/test_tour.py:TestUi.test_01_account_tour,-/website_sale_wishlist/tests/test_wishlist_process.py:TestWishlistProcess.test_01_wishlist_tour,-/test_l10n_be_hr_payroll_account/tests/test_employee_job_change.py:TestEmployeeJobChange.test_employee_job_change,-/test_website_sale_full/tests/test_ui_rental_comparison.py:TestUi.test_website_sale_renting_comparison_ui,-/knowledge/tests/test_knowledge_editor_commands.py:TestKnowledgeEditorCommands.test_knowledge_calendar_command_tour,-:TestAddToCartSnippet.test_configure_product,-.test_generic_localization,-:TestPickShipBackorder.test_pick_assign_and_backorder,-/hr_holidays/tests/test_leave_requests.py:TestLeaveRequests.test_calendar_event_create_access_rights,-:TestError.test_04_multi_db,-:TestOrderEdiUbl.test_so_import_product_from_po,-:TestReportsRendering.test_report_specific_paperformat_args,-:TestKpiProvider
09/24/2026 21:05:59 INFO
Docker command:
cd /data/build; mkdir -p /data/build/.pip-tmp && TMPDIR=/data/build/.pip-tmp python3 -m pip install --user --no-cache-dir --progress-bar off -r Viindoo-tvtmaaddons-19.0/requirements.txt && mkdir -p /data/build/.pip-tmp && TMPDIR=/data/build/.pip-tmp python3 -m pip install --user --no-cache-dir --progress-bar off -r Viindoo-erponline-enterprise-19.0/requirements.txt && python3 rb-f204e4f-225059/odoo-bin --addons-path rb-f204e4f-225059/odoo/addons,rb-f204e4f-225059/addons,Viindoo-tvtmaaddons-19.0,Viindoo-erponline-enterprise-19.0,Viindoo-branding-19.0 -d rb-f204e4f-225059-418410 --data-dir /data/build/datadir --db_port 5432 --log-level=test --max-cron-threads=0 --http-interface=127.0.0.1 --load=base,rpc,web,viin_brand,to_erponline_utility,test_runbot_support --stop-after-init --test-enable --test-tags=/website,/website_blog,/website_cf_turnstile,/website_crm,/website_crm_iap_reveal,/website_crm_livechat,/website_crm_partner_assign,/website_crm_sms,/website_customer,/website_event,/website_event_booth,/website_event_booth_exhibitor,/website_event_booth_sale,/website_event_booth_sale_exhibitor,/website_event_crm,/website_event_exhibitor,/website_event_sale,/website_event_track,/website_event_track_live,/website_event_track_live_quiz,/website_event_track_quiz,/website_forum,/website_google_map,/website_hr_recruitment,/website_hr_recruitment_livechat,/website_links,/website_livechat,/website_mail,/website_mail_group,/website_mass_mailing,/website_mass_mailing_sms,/website_partner,/website_payment,/website_profile,/website_project,/website_sale,/website_sale_autocomplete,/website_sale_collect,/website_sale_collect_wishlist,/website_sale_comparison,/website_sale_comparison_wishlist,/website_sale_gelato,/website_sale_loyalty,/website_sale_mass_mailing,/website_sale_mondialrelay,/website_sale_mrp,/website_sale_slides,/website_sale_stock,/website_sale_stock_wishlist,/website_sale_wishlist,/website_slides,/website_slides_forum,/website_slides_survey,/website_sms,/website_timesheet,-at_install,-/website_event_booth_exhibitor/tests/test_wevent_booth_exhibitor.py:TestWEventBoothExhibitorCommon.test_register,-/website_sale/tests/test_website_sale_image.py:TestWebsiteSaleRemoveImage.test_website_sale_add_and_remove_main_product_image_no_variant,-:TestIndustryFsmUi.test_ui,-/sale_management/tests/test_sale_ui.py:TestUi.test_04_portal_sale_signature_without_name_tour,-:TestMigrateEmployeeWithContract,-:TestMigrateEmployee,-/l10n_pe_edi_pos/tests/test_frontend.py:TestUi.test_pos_invoice_order_and_refund,-/helpdesk/tests/test_helpdesk_rating.py:TestHelpdeskRating.test_helpdesk_dashboard,-/website/tests/test_ui.py:TestUi.test_33_website_menus,-/account/tests/test_tour.py:TestUi.test_01_account_tour,-/website_sale_wishlist/tests/test_wishlist_process.py:TestWishlistProcess.test_01_wishlist_tour,-/test_l10n_be_hr_payroll_account/tests/test_employee_job_change.py:TestEmployeeJobChange.test_employee_job_change,-/test_website_sale_full/tests/test_ui_rental_comparison.py:TestUi.test_website_sale_renting_comparison_ui,-/knowledge/tests/test_knowledge_editor_commands.py:TestKnowledgeEditorCommands.test_knowledge_calendar_command_tour,-:TestAddToCartSnippet.test_configure_product,-.test_generic_localization,-:TestPickShipBackorder.test_pick_assign_and_backorder,-/hr_holidays/tests/test_leave_requests.py:TestLeaveRequests.test_calendar_event_create_access_rights,-:TestError.test_04_multi_db,-:TestOrderEdiUbl.test_so_import_product_from_po,-:TestReportsRendering.test_report_specific_paperformat_args,-:TestKpiProvider ;
09/24/2026 21:05:59 INFO
Restoring from: rb-f204e4f-225059-418401
09/24/2026 21:05:59 INFO
Container rb-f204e4f-225059-418410 started !
09/24/2026 22:15:36 INFO
Cleaning all resource
09/24/2026 22:15:36 INFO
Cleanup finished