Description: Install and run Odoo without demo data
Commit: kmitl:97d92dba  
Subject: [IMP] hr_recruitment_kmitl: enhance file upload UI and improve layout in application form
Author: Sukrit leelakornkij
Committer: Nopparut Saelim
Commit: stock-logistics-warehouse:4ded2829  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: stock-logistics-request:fa8a6725  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: product-attribute:38ea6888  
Subject: Translated using Weblate (Portuguese (Brazil))
Author: Rodrigo A. Madureira
Committer: Weblate
Commit: social:6c3434b6  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: account-analytic:fec6e341  
Subject: Added translation using Weblate (Galician (gl_ES))
Author: Cándido Martínez
Committer: Weblate
Commit: partner-contact:7acbeb8d  
Subject: Translated using Weblate (French)
Author: risto42
Committer: Weblate
Commit: operating-unit:dd59492d  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: agreement:800e753c  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: server-backend:ccf60878  
Subject: Update requirements.txt
Author: Nopparut Saelim
Committer: GitHub
Commit: account-reconcile:c031db9d  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: mis-builder:82d39175  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: reporting-engine:4cafaadb  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: odoo:6491e005  
Subject: [FIX] survey: avoid timer early submissions due to time difference
Author: João Alves
Committer: João Horta Alves
Commit: account-financial-reporting:948901d9  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: project:7a5c615c  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: server-tools:3abe25d7  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: server-ux:23e96d19  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: hr:3af635cb  
Subject: Translated using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: account-financial-tools:c3b3e7dd  
Subject: Added translation using Weblate (Italian)
Author: mymage
Committer: Weblate
Commit: web:fb9be06e  
Subject: Translated using Weblate (Portuguese (Brazil))
Author: Luis Felipe Miléo
Committer: Weblate
Commit: account-invoicing:7207e6e2  
Subject: [BOT] post-merge updates
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: purchase-workflow:ecf70d6c  
Subject: Translated using Weblate (Turkish)
Author: Betül Öğmen
Committer: Weblate
Commit: server-brand:2bc45d77  
Subject: [UPD] addons table in README.md
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: l10n-thailand:0b7b078e  
Subject: [UPD] addons table in README.md
Author: OCA-git-bot
Committer: OCA-git-bot
Commit: odoo-modules:76529673  
Subject: Merge branch '16.0' of github.com:Aginix/odoo-modules into 16.0
Author: Nonpawit Teerachetmongkol
Committer: Nonpawit Teerachetmongkol
Version: 16.0
Config: Without demo
Total time: 8m
Date Level Type Message
2026-04-07 04:40:56 INFO runbot Init build environment with config Without demo
2026-04-07 04:40:56 Starting step install_without_demo from config Without demo
2026-04-07 04:40:56 INFO runbot Using Dockerfile Tag odoo:DockerDefaultAke
2026-04-07 04:42:43 WARNING server odoo.modules.module:411 Missing `license` key in manifest for 'agx_approval', defaulting to LGPL-3
2026-04-07 04:42:44 WARNING server odoo.modules.module:411 Missing `license` key in manifest for 'agx_construction', defaulting to LGPL-3
2026-04-07 04:43:00 INFO server odoo.modules.loading:336 1 modules loaded in 10.97s, 7917 queries (+7917 extra)
2026-04-07 04:43:27 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:27 WARNING server odoo.addons.base.models.ir_module:964 module office_order: description is empty !
2026-04-07 04:43:31 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:34 WARNING server odoo.addons.base.models.ir_module:964 module aginix_hrms_base: description is empty !
2026-04-07 04:43:38 WARNING server odoo.addons.base.models.ir_module:964 module hr_employee_education_history: description is empty !
2026-04-07 04:43:39 WARNING server odoo.addons.base.models.ir_module:964 module hr_employee_role: description is empty !
2026-04-07 04:43:43 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:45 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:47 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:48 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of sarabun.document() have the same label: Attachment Count. [Modules: agx_sarabun and mail]
2026-04-07 04:43:49 WARNING server odoo.addons.base.models.ir_ui_view:773
A button with icon attribute (fa-envelope-open) must have title in its tag, parents, descendants or have text
View error context:
{'file': '/data/build/kmitl/agx_sarabun/views/sarabun_document_views.xml',
 'line': 13,
 'name': 'sarabun.document.view.tree.incoming',
 'view': ir.ui.view(834,),
 'view.model': 'sarabun.document',
 'view.parent': ir.ui.view(),
 'xmlid': 'sarabun_document_view_tree_incoming'}
2026-04-07 04:43:49 WARNING server odoo.addons.base.models.ir_ui_view:773
A button with icon attribute (fa-envelope) must have title in its tag, parents, descendants or have text
View error context:
{'file': '/data/build/kmitl/agx_sarabun/views/sarabun_document_views.xml',
 'line': 14,
 'name': 'sarabun.document.view.tree.incoming',
 'view': ir.ui.view(834,),
 'view.model': 'sarabun.document',
 'view.parent': ir.ui.view(),
 'xmlid': 'sarabun_document_view_tree_incoming'}
2026-04-07 04:43:51 WARNING server odoo.addons.base.models.ir_module:964 module hr_employee_security_role: description is empty !
2026-04-07 04:43:52 WARNING server odoo.models:4437 Creating record hr.access_hr_central_user in module hr_employee_security_role.
2026-04-07 04:43:52 WARNING server odoo.models:4437 Creating record hr.access_hr_department_manager in module hr_employee_security_role.
2026-04-07 04:43:52 WARNING server odoo.models:4437 Creating record hr.access_hr_departure_reason_manager in module hr_employee_security_role.
2026-04-07 04:43:52 WARNING server odoo.addons.base.models.ir_ui_view:412 Error-prone use of @class in view hr.employee.form.inherit (): use the hasclass(*classes) function to filter elements by their classes
2026-04-07 04:43:56 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:43:56 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of sarabun.document() have the same label: Attachment Count. [Modules: agx_sarabun and mail]
2026-04-07 04:44:02 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (position_level_id, position_level_ids) of hr.employee() have the same label: Position Level. [Modules: hr_employee_position_level and hr_employee_position_level]
2026-04-07 04:44:02 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:44:03 WARNING server odoo.addons.base.models.ir_module:964 module hr_employee_position_level: description is empty !
2026-04-07 04:44:03 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (position_level_id, position_level_ids) of hr.employee() have the same label: Position Level. [Modules: hr_employee_position_level and hr_employee_position_level]
2026-04-07 04:44:20 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (position_level_id, position_level_ids) of hr.employee() have the same label: Position Level. [Modules: hr_employee_position_level and hr_employee_position_level]
2026-04-07 04:44:20 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of office.order() have the same label: Attachment Count. [Modules: office_order and mail]
2026-04-07 04:44:20 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (attachment_count, message_attachment_count) of sarabun.document() have the same label: Attachment Count. [Modules: agx_sarabun and mail]
2026-04-07 04:44:34 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (position_level_id, position_level_ids) of hr.employee() have the same label: Position Level. [Modules: hr_employee_position_level and hr_employee_position_level]
2026-04-07 04:44:34 WARNING server odoo.addons.base.models.ir_module:964 module hr_employee_academic_standing_thailand: description is empty !
2026-04-07 04:45:25 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.move.line() have the same label: รหัสงบประมาณ. [Modules: budget and budget]
This error is already known.
2026-04-07 04:46:36 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:46:37 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.move.line() have the same label: รหัสงบประมาณ. [Modules: budget and budget]
This error is already known.
2026-04-07 04:46:38 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (participant_ids, target_ids) of kmitl.project() have the same label: กลุ่มเป้าหมาย/ผู้ดำเนินโครงการ. [Modules: kmitl_project and kmitl_project]
2026-04-07 04:46:38 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (organizer_ids, target_ids) of kmitl.project() have the same label: กลุ่มเป้าหมาย/ผู้ดำเนินโครงการ. [Modules: kmitl_project and kmitl_project]
2026-04-07 04:46:41 WARNING server odoo.modules.loading:276
The models ['kmitl.project.exception.confirm'] have no access rules in module kmitl_project, consider adding some, like:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
kmitl_project.access_kmitl_project_exception_confirm,access_kmitl_project_exception_confirm,kmitl_project.model_kmitl_project_exception_confirm,base.group_user,1,0,0,0
2026-04-07 04:46:43 WARNING server odoo.fields:2831 Field procurement.plan.procurement_method_id with unknown comodel_name 'procurement.method'
2026-04-07 04:46:43 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.move.line() have the same label: รหัสงบประมาณ. [Modules: budget and budget]
This error is already known.
2026-04-07 04:46:43 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:46:49 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (tax_id, price_tax) of purchase.request.line() have the same label: Tax. [Modules: purchase_request_price_tax_included and purchase_request_price_tax_included]
2026-04-07 04:46:49 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (tax_id, price_tax) of purchase.request.line.make.purchase.order.item() have the same label: Tax. [Modules: purchase_request_price_tax_included and purchase_request_price_tax_included]
2026-04-07 04:46:53 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:46:54 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_expenditure_amount, capital_budget_amount) of budget.appropriation.compilation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:46:54 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (create_uid, user_id) of budget.appropriation.compilation() have the same label: Created by. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:46:54 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (create_uid, user_id) of budget.appropriation.master.summary() have the same label: Created by. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:46:54 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_budget_amount, capital_expenditure_amount) of budget.appropriation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation]
2026-04-07 04:46:54 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:46:56 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_budget_amount, capital_expenditure_amount) of budget.appropriation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation]
2026-04-07 04:47:27 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:34 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_expenditure_amount, capital_budget_amount) of budget.appropriation.compilation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:47:34 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (create_uid, user_id) of budget.appropriation.compilation() have the same label: Created by. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:47:34 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (create_uid, user_id) of budget.appropriation.master.summary() have the same label: Created by. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:47:36 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:47:36 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_budget_amount, capital_expenditure_amount) of budget.appropriation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation]
2026-04-07 04:47:36 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (capital_expenditure_amount, capital_budget_amount) of budget.appropriation.compilation() have the same label: งบลงทุน. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:47:36 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (create_uid, user_id) of budget.appropriation.compilation() have the same label: Created by. [Modules: budget_appropriation_summary and budget_appropriation_summary]
2026-04-07 04:47:37 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:39 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:39 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:39 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:40 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:40 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:44 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (account_id, code) of budget.appropriation.line() have the same label: รหัสงบประมาณ. [Modules: budget_appropriation and budget_appropriation]
2026-04-07 04:47:44 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:44 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:45 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:45 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:46 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (quantity_unsigned, quantity) of stock.valuation.layer() have the same label: Quantity. [Modules: stock_picking_kmitl and stock_account]
2026-04-07 04:47:46 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:46 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:47 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:47 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:48 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (tax_id, price_tax) of purchase.request.line() have the same label: Tax. [Modules: purchase_request_price_tax_included and purchase_request_price_tax_included]
2026-04-07 04:47:48 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (tax_id, price_tax) of purchase.request.line.make.purchase.order.item() have the same label: Tax. [Modules: purchase_request_price_tax_included and purchase_request_price_tax_included]
2026-04-07 04:47:50 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:50 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:51 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:51 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:52 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:52 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:52 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:52 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:53 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (tax_id, price_tax) of purchase.request.line() have the same label: Tax. [Modules: purchase_request_price_tax_included and purchase_request_price_tax_included]
2026-04-07 04:47:55 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:55 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:47:57 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:47:57 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:48:00 WARNING server odoo.addons.base.models.ir_ui_view:412 Error-prone use of @class in view view.work.acceptance.form l10n inherit (): use the hasclass(*classes) function to filter elements by their classes
2026-04-07 04:48:00 WARNING server odoo.addons.base.models.ir_ui_view:412 Error-prone use of @class in view view.work.acceptance.form l10n inherit (): use the hasclass(*classes) function to filter elements by their classes
2026-04-07 04:48:00 WARNING server odoo.addons.base.models.ir_ui_view:412 Error-prone use of @class in view view.work.acceptance.form l10n inherit (): use the hasclass(*classes) function to filter elements by their classes
2026-04-07 04:48:00 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:48:00 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:48:00 WARNING server py.warnings:328
/data/build/odoo/odoo/fields.py:809: UserWarning: Field 'purchase.order.wa_ids' in dependency of purchase.order.pending_wa_count should be searchable. This is necessary to determine which records to recompute when work.acceptance.state is modified. You should either make the field searchable, or simplify the field dependency.
  File "/data/build/odoo/odoo-bin", line 8, in <module>
    odoo.cli.main()
  File "/data/build/odoo/odoo/cli/command.py", line 66, in main
    o.run(args)
  File "/data/build/odoo/odoo/cli/server.py", line 187, in run
    main(args)
  File "/data/build/odoo/odoo/cli/server.py", line 180, in main
    rc = odoo.service.server.start(preload=preload, stop=stop)
  File "/data/build/odoo/odoo/service/server.py", line 1427, in start
    rc = server.run(preload, stop)
  File "/data/build/odoo/odoo/service/server.py", line 596, in run
    rc = preload_registries(preload)
  File "/data/build/odoo/odoo/service/server.py", line 1327, in preload_registries
    registry = Registry.new(dbname, update_module=update_module)
  File "<decorator-gen-16>", line 2, in new
  File "/data/build/odoo/odoo/tools/func.py", line 87, in locked
    return func(inst, *args, **kwargs)
  File "/data/build/odoo/odoo/modules/registry.py", line 87, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/data/build/odoo/odoo/modules/loading.py", line 493, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/data/build/odoo/odoo/modules/loading.py", line 374, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/data/build/odoo/odoo/modules/loading.py", line 210, in load_module_graph
    registry.init_models(cr, model_names, {'module': package.name}, new_install)
  File "/data/build/odoo/odoo/modules/registry.py", line 538, in init_models
    func()
  File "/data/build/odoo/odoo/addons/base/models/ir_model.py", line 47, in mark_modified
    records.modified(fnames)
  File "/data/build/odoo/odoo/models.py", line 6165, in modified
    todo = [self._modified([self._fields[fname] for fname in fnames], create)]
  File "/data/build/odoo/odoo/models.py", line 6216, in _modified
    tree = self.pool.get_trigger_tree(fields, select=select)
  File "/data/build/odoo/odoo/modules/registry.py", line 345, in get_trigger_tree
    if field in self._field_triggers
  File "/data/build/odoo/odoo/tools/func.py", line 28, in __get__
    value = self.fget(obj)
  File "/data/build/odoo/odoo/modules/registry.py", line 439, in _field_triggers
    dependencies = list(field.resolve_depends(self))
  File "/data/build/odoo/odoo/fields.py", line 809, in resolve_depends
    warnings.warn(
2026-04-07 04:48:00 WARNING server py.warnings:328
/data/build/odoo/odoo/fields.py:809: UserWarning: Field 'purchase.order.wa_ids' in dependency of purchase.order.pending_wa_count should be searchable. This is necessary to determine which records to recompute when work.acceptance.is_disbursed is modified. You should either make the field searchable, or simplify the field dependency.
  File "/data/build/odoo/odoo-bin", line 8, in <module>
    odoo.cli.main()
  File "/data/build/odoo/odoo/cli/command.py", line 66, in main
    o.run(args)
  File "/data/build/odoo/odoo/cli/server.py", line 187, in run
    main(args)
  File "/data/build/odoo/odoo/cli/server.py", line 180, in main
    rc = odoo.service.server.start(preload=preload, stop=stop)
  File "/data/build/odoo/odoo/service/server.py", line 1427, in start
    rc = server.run(preload, stop)
  File "/data/build/odoo/odoo/service/server.py", line 596, in run
    rc = preload_registries(preload)
  File "/data/build/odoo/odoo/service/server.py", line 1327, in preload_registries
    registry = Registry.new(dbname, update_module=update_module)
  File "<decorator-gen-16>", line 2, in new
  File "/data/build/odoo/odoo/tools/func.py", line 87, in locked
    return func(inst, *args, **kwargs)
  File "/data/build/odoo/odoo/modules/registry.py", line 87, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/data/build/odoo/odoo/modules/loading.py", line 493, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/data/build/odoo/odoo/modules/loading.py", line 374, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/data/build/odoo/odoo/modules/loading.py", line 210, in load_module_graph
    registry.init_models(cr, model_names, {'module': package.name}, new_install)
  File "/data/build/odoo/odoo/modules/registry.py", line 538, in init_models
    func()
  File "/data/build/odoo/odoo/addons/base/models/ir_model.py", line 47, in mark_modified
    records.modified(fnames)
  File "/data/build/odoo/odoo/models.py", line 6165, in modified
    todo = [self._modified([self._fields[fname] for fname in fnames], create)]
  File "/data/build/odoo/odoo/models.py", line 6216, in _modified
    tree = self.pool.get_trigger_tree(fields, select=select)
  File "/data/build/odoo/odoo/modules/registry.py", line 345, in get_trigger_tree
    if field in self._field_triggers
  File "/data/build/odoo/odoo/tools/func.py", line 28, in __get__
    value = self.fget(obj)
  File "/data/build/odoo/odoo/modules/registry.py", line 439, in _field_triggers
    dependencies = list(field.resolve_depends(self))
  File "/data/build/odoo/odoo/fields.py", line 809, in resolve_depends
    warnings.warn(
2026-04-07 04:48:01 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:48:01 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:48:01 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (work_end_display, work_end) of purchase.order() have the same label: Work End. [Modules: purchase_contract_kmitl and purchase_contract_kmitl]
2026-04-07 04:48:01 WARNING server odoo.addons.base.models.ir_model:1077 Two fields (days_to_expire_display, days_to_expire) of purchase.order() have the same label: Days to Expire. [Modules: purchase_order_expiration and purchase_order_expiration]
2026-04-07 04:48:02 Log limit reached (full logs are still available in the log file)
2026-04-07 04:48:57 Step install_without_demo finished in 8m
2026-04-07 04:48:57 Starting step run_without_demo from config Without demo
2026-04-07 04:48:57 INFO runbot Start running build 10206-16-0
2026-04-07 04:48:57 INFO runbot Using Dockerfile Tag odoo:DockerDefaultAke
2026-04-07 04:50:43 INFO server odoo.modules.loading:336 1 modules loaded in 0.02s, 0 queries (+0 extra)
2026-04-07 04:50:43 WARNING server odoo.modules.module:411 Missing `license` key in manifest for 'agx_approval', defaulting to LGPL-3
2026-04-07 04:50:43 WARNING server odoo.modules.module:411 Missing `license` key in manifest for 'agx_construction', defaulting to LGPL-3
2026-04-07 04:50:47 INFO server odoo.modules.loading:336 318 modules loaded in 3.14s, 0 queries (+0 extra)
2026-04-07 04:51:57 WARNING server py.warnings:328
/data/build/odoo/odoo/fields.py:809: UserWarning: Field 'purchase.order.wa_ids' in dependency of purchase.order.pending_wa_count should be searchable. This is necessary to determine which records to recompute when work.acceptance.state is modified. You should either make the field searchable, or simplify the field dependency.
  File "/usr/lib/python3.12/threading.py", line 1030, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.12/threading.py", line 1010, in run
    self._target(*self._args, **self._kwargs)
  File "/data/build/odoo/odoo/service/server.py", line 1129, in _runloop
    self.process_work()
  File "/data/build/odoo/odoo/service/server.py", line 1228, in process_work
    base.models.ir_cron.ir_cron._process_jobs(db_name)
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 135, in _process_jobs
    registry[cls._name]._process_job(db, cron_cr, job)
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 350, in _process_job
    ir_cron._callback(job['cron_name'], job['ir_actions_server_id'], job['id'])
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 391, in _callback
    self.env['ir.actions.server'].browse(server_action_id).run()
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 675, in run
    res = runner(run_self, eval_context=eval_context)
  File "/data/build/odoo/addons/website/models/ir_actions_server.py", line 61, in _run_action_code_multi
    res = super(ServerAction, self)._run_action_code_multi(eval_context)
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 545, in _run_action_code_multi
    safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self))  # nocopy allows to return 'action'
  File "/data/build/odoo/odoo/tools/safe_eval.py", line 399, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "ir.actions.server(751,)", line 1, in <module>
  File "/data/build/kmitl/purchase_order_expiration/models/purchase_order.py", line 34, in action_recompute_expire
    records._compute_days_to_expire()
  File "/data/build/kmitl/purchase_order_expiration/models/purchase_order.py", line 47, in _compute_days_to_expire
    record.days_to_expire = (record.work_end - today).days
  File "/data/build/odoo/odoo/fields.py", line 1337, in __set__
    records.write({self.name: write_value})
  File "/data/build/odoo/addons/purchase_stock/models/purchase.py", line 95, in write
    res = super(PurchaseOrder, self).write(vals)
  File "/data/build/odoo/addons/purchase_requisition/models/purchase.py", line 158, in write
    result = super(PurchaseOrder, self).write(vals)
  File "/data/build/purchase-workflow/purchase_exception/models/purchase.py", line 41, in write
    result = super().write(vals)
  File "/data/build/odoo/addons/purchase/models/purchase.py", line 235, in write
    res = super().write(vals)
  File "/data/build/odoo/addons/mail/models/mail_thread.py", line 315, in write
    result = super(MailThread, self).write(values)
  File "/data/build/odoo/addons/mail/models/mail_activity_mixin.py", line 241, in write
    return super(MailActivityMixin, self).write(vals)
  File "/data/build/kmitl/account_analytic_kmitl/models/analytic_mixin.py", line 82, in write
    res = super().write(vals)
  File "/data/build/odoo/addons/analytic/models/analytic_mixin.py", line 82, in write
    return super().write(vals)
  File "/data/build/odoo/odoo/models.py", line 3766, in write
    if self.pool.is_modifying_relations(field):
  File "/data/build/odoo/odoo/modules/registry.py", line 458, in is_modifying_relations
    result = field in self._field_triggers and (
  File "/data/build/odoo/odoo/tools/func.py", line 28, in __get__
    value = self.fget(obj)
  File "/data/build/odoo/odoo/modules/registry.py", line 439, in _field_triggers
    dependencies = list(field.resolve_depends(self))
  File "/data/build/odoo/odoo/fields.py", line 809, in resolve_depends
    warnings.warn(
2026-04-07 04:51:57 WARNING server py.warnings:328
/data/build/odoo/odoo/fields.py:809: UserWarning: Field 'purchase.order.wa_ids' in dependency of purchase.order.pending_wa_count should be searchable. This is necessary to determine which records to recompute when work.acceptance.is_disbursed is modified. You should either make the field searchable, or simplify the field dependency.
  File "/usr/lib/python3.12/threading.py", line 1030, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.12/threading.py", line 1010, in run
    self._target(*self._args, **self._kwargs)
  File "/data/build/odoo/odoo/service/server.py", line 1129, in _runloop
    self.process_work()
  File "/data/build/odoo/odoo/service/server.py", line 1228, in process_work
    base.models.ir_cron.ir_cron._process_jobs(db_name)
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 135, in _process_jobs
    registry[cls._name]._process_job(db, cron_cr, job)
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 350, in _process_job
    ir_cron._callback(job['cron_name'], job['ir_actions_server_id'], job['id'])
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 391, in _callback
    self.env['ir.actions.server'].browse(server_action_id).run()
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 675, in run
    res = runner(run_self, eval_context=eval_context)
  File "/data/build/odoo/addons/website/models/ir_actions_server.py", line 61, in _run_action_code_multi
    res = super(ServerAction, self)._run_action_code_multi(eval_context)
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 545, in _run_action_code_multi
    safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self))  # nocopy allows to return 'action'
  File "/data/build/odoo/odoo/tools/safe_eval.py", line 399, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
  File "ir.actions.server(751,)", line 1, in <module>
  File "/data/build/kmitl/purchase_order_expiration/models/purchase_order.py", line 34, in action_recompute_expire
    records._compute_days_to_expire()
  File "/data/build/kmitl/purchase_order_expiration/models/purchase_order.py", line 47, in _compute_days_to_expire
    record.days_to_expire = (record.work_end - today).days
  File "/data/build/odoo/odoo/fields.py", line 1337, in __set__
    records.write({self.name: write_value})
  File "/data/build/odoo/addons/purchase_stock/models/purchase.py", line 95, in write
    res = super(PurchaseOrder, self).write(vals)
  File "/data/build/odoo/addons/purchase_requisition/models/purchase.py", line 158, in write
    result = super(PurchaseOrder, self).write(vals)
  File "/data/build/purchase-workflow/purchase_exception/models/purchase.py", line 41, in write
    result = super().write(vals)
  File "/data/build/odoo/addons/purchase/models/purchase.py", line 235, in write
    res = super().write(vals)
  File "/data/build/odoo/addons/mail/models/mail_thread.py", line 315, in write
    result = super(MailThread, self).write(values)
  File "/data/build/odoo/addons/mail/models/mail_activity_mixin.py", line 241, in write
    return super(MailActivityMixin, self).write(vals)
  File "/data/build/kmitl/account_analytic_kmitl/models/analytic_mixin.py", line 82, in write
    res = super().write(vals)
  File "/data/build/odoo/addons/analytic/models/analytic_mixin.py", line 82, in write
    return super().write(vals)
  File "/data/build/odoo/odoo/models.py", line 3766, in write
    if self.pool.is_modifying_relations(field):
  File "/data/build/odoo/odoo/modules/registry.py", line 458, in is_modifying_relations
    result = field in self._field_triggers and (
  File "/data/build/odoo/odoo/tools/func.py", line 28, in __get__
    value = self.fget(obj)
  File "/data/build/odoo/odoo/modules/registry.py", line 439, in _field_triggers
    dependencies = list(field.resolve_depends(self))
  File "/data/build/odoo/odoo/fields.py", line 809, in resolve_depends
    warnings.warn(
2026-04-07 04:51:57 ERROR server odoo.sql_db:324
bad query: INSERT INTO "mail_channel_member" ("channel_id", "create_date", "create_uid", "fold_state", "is_pinned", "last_interest_dt", "partner_id", "write_date", "write_uid") VALUES (2, '2026-04-07 04:51:57.412391', 1, 'open', true, '2026-04-07 04:51:57', 2, '2026-04-07 04:51:57.412391', 1), (2, '2026-04-07 04:51:57.412391', 1, 'open', true, '2026-04-07 04:51:57', 2, '2026-04-07 04:51:57.412391', 1) RETURNING "id"
ERROR: duplicate key value violates unique constraint "mail_channel_member_partner_unique"
DETAIL:  Key (channel_id, partner_id)=(2, 2) already exists.
2026-04-07 04:51:57 ERROR server odoo.addons.base.models.ir_cron:400
Call from cron Notify Contract Nearly Expire for server action #752 failed in Job #35
Traceback (most recent call last):
  File "/data/build/odoo/odoo/tools/safe_eval.py", line 399, in safe_eval
    return unsafe_eval(c, globals_dict, locals_dict)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "ir.actions.server(752,)", line 1, in <module>
  File "/data/build/kmitl/purchase_order_expiration/models/purchase_order.py", line 101, in _cron_notify_contract_expire
    channel_data = self.env['mail.channel'].sudo().channel_get(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/addons/mail/models/mail_channel.py", line 894, in channel_get
    channel = self.create({
              ^^^^^^^^^^^^^
  File "<decorator-gen-159>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 430, in _model_create_multi
    return create(self, [arg])
           ^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/addons/mail/models/mail_channel.py", line 239, in create
    channels = super(Channel, self.with_context(mail_create_bypass_create_check=self.env['mail.channel.member']._bypass_create_check, mail_create_nolog=True, mail_create_nosubscribe=True)).create(vals_list)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-142>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/addons/mail/models/mail_thread.py", line 258, in create
    threads = super(MailThread, self).create(vals_list)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-68>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/addons/base/models/ir_fields.py", line 670, in create
    recs = super().create(vals_list)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-15>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/models.py", line 4019, in create
    records = self._create(data_list)
              ^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/models.py", line 4256, in _create
    field.create([
  File "/data/build/odoo/odoo/fields.py", line 4282, in create
    self.write_batch(record_values, True)
  File "/data/build/odoo/odoo/fields.py", line 4308, in write_batch
    return self.write_real(records_commands_list, create)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/fields.py", line 4508, in write_real
    flush()
  File "/data/build/odoo/odoo/fields.py", line 4464, in flush
    comodel.create(to_create)
  File "<decorator-gen-157>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/addons/mail/models/mail_channel_member.py", line 88, in create
    return super().create(vals_list)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-68>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/addons/base/models/ir_fields.py", line 670, in create
    recs = super().create(vals_list)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<decorator-gen-15>", line 2, in create
  File "/data/build/odoo/odoo/api.py", line 431, in _model_create_multi
    return create(self, arg)
           ^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/models.py", line 4019, in create
    records = self._create(data_list)
              ^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/models.py", line 4200, in _create
    cr.execute(
  File "/data/build/odoo/odoo/sql_db.py", line 321, in execute
    res = self._obj.execute(query, params)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "mail_channel_member_partner_unique"
DETAIL:  Key (channel_id, partner_id)=(2, 2) already exists.


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/build/odoo/odoo/addons/base/models/ir_cron.py", line 391, in _callback
    self.env['ir.actions.server'].browse(server_action_id).run()
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 675, in run
    res = runner(run_self, eval_context=eval_context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/addons/website/models/ir_actions_server.py", line 61, in _run_action_code_multi
    res = super(ServerAction, self)._run_action_code_multi(eval_context)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/addons/base/models/ir_actions.py", line 545, in _run_action_code_multi
    safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self))  # nocopy allows to return 'action'
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/build/odoo/odoo/tools/safe_eval.py", line 413, in safe_eval
    raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr))
ValueError: <class 'psycopg2.errors.UniqueViolation'>: "duplicate key value violates unique constraint "mail_channel_member_partner_unique"
DETAIL:  Key (channel_id, partner_id)=(2, 2) already exists.
" while evaluating
'model._cron_notify_contract_expire()'
2026-04-07 09:03:01 INFO runbot Kill build 10206-16-0