Commit: odoo:ea3fbfa8  
Subject: Merge branch 'odoo:18.0' into 18.0
Author: AnhBT
Committer: GitHub
Commit: erp:5a8e1ec4  
Subject: [IMP] dtg_sale_report: sale_resale_report_insert_column_total_net_revenue
Author: thoason7595-lang
Commit: external:9aca1e8e  
Subject: [ADD] *: Add new modules
Author: AnhBT
Commit: enterprise:bb9401ed  
Subject: [I18N] .weblate.json: add missing modules
Author: Tiffany Chang (tic)
Build time: 29m
Wait time: 46m
Load time: 1h35m
Children:
Build 7642 Post install tests for stock_barcode_mrp_subcontracting -> !test_main_flows 17m
Build 7643 Post install tests for test_main_flows -> !web 17m
Build 7644 Post install tests for web -> web 17m
Build 7645 Post install tests for !website -> 17m
Date Level Type Message
2026-02-27 03:30:43 INFO runbot Init build environment with config Post install Only
2026-02-27 03:30:43 Starting step Install all from config Post install Only
2026-02-27 03:30:43 Using Dockerfile Tag odoo:Docker18
2026-02-27 03:59:49 INFO runbot Getting results for build 07639-18-0
2026-02-27 03:59:49 ERROR runbot
Error found in logs:
2026-02-27 03:59:38,561 60 ERROR 07639-18-0-all odoo.sql_db: bad query: b'\n            CREATE MATERIALIZED VIEW IF NOT EXISTS sale_report_data AS (\n            WITH cte_chot AS (SELECT date_order, id as sale_id, inverse_amount_total as company_total\n                  FROM sale_order\n                  WHERE state != \'cancel\'\n                  and inverse_amount_total > 0),\n            cte_huy AS (SELECT date_order as cancel_date, id as sale_id, inverse_amount_total as company_total\n                 FROM sale_order\n                 WHERE state = \'cancel\'\n                 and inverse_amount_total > 0),\n            cte_pickings_ranked AS (SELECT sp.sale_id,\n                                    sp.date_done,\n                                    spt.code                                                                    as picking_type,\n                                    ROW_NUMBER() OVER (PARTITION BY sp.sale_id, spt.code ORDER BY sp.date_done) as rn\n                             FROM stock_picking sp\n                                      JOIN stock_picking_type spt ON sp.picking_type_id = spt.id\n                             WHERE spt.code = \'outgoing\'\n                               AND sp.state = \'done\'\n                               AND sp.sale_id IS NOT NULL),\n            cte_invoice_totals AS (SELECT so.id                                                                               as sale_id,\n                                   SUM(CASE WHEN am.move_type = \'out_invoice\' THEN am.inverse_amount_total ELSE 0 END) as shipping_total\n                            FROM sale_order so\n                                     JOIN account_move am ON so.name = am.invoice_origin\n                            WHERE am.move_type = \'out_invoice\'\n                            GROUP BY so.id),\n            cte_chuyen AS (SELECT pr.date_done                   as shipping_date,\n                           pr.sale_id,\n                           COALESCE(it.shipping_total, 0) as company_total\n                    FROM cte_pickings_ranked pr\n                             LEFT JOIN cte_invoice_totals it ON pr.sale_id = it.sale_id\n                    WHERE pr.rn = 1),\n            cte_invoice_to_sale AS (SELECT aml.move_id,\n                                             sol.order_id AS sale_id,\n                                             r.id as refund_move_id\n                             FROM account_move_line aml\n                                      JOIN sale_order_line_invoice_rel rel ON rel.invoice_line_id = aml.id\n                                      JOIN sale_order_line sol ON sol.id = rel.order_line_id\n                                      LEFT JOIN (SELECT id, reversed_entry_id FROM account_move WHERE reversed_entry_id IS NOT NULL and state = \'posted\') r \n                                            ON aml.move_id = r.reversed_entry_id),\n            cte_invoice_to_sale_distinct AS (\n                -- CTE ri\xc3\xaang \xc4\x91\xe1\xbb\x83 reuse: l\xe1\xba\xa5y DISTINCT sale_id, move_id\n                SELECT DISTINCT sale_id, move_id\n                FROM cte_invoice_to_sale\n            ),\n            cte_refund_invoice_to_sale_distinct AS (\n                -- CTE ri\xc3\xaang \xc4\x91\xe1\xbb\x83 reuse: l\xe1\xba\xa5y DISTINCT sale_id, refund_move_id\n                SELECT DISTINCT sale_id, refund_move_id\n                FROM cte_invoice_to_sale\n\t\t\t\twhere refund_move_id is not null\n\t\t\t\t\t),\n            cte_hoan_pay_base AS (\n                SELECT \n                    its.sale_id,\n                    so.name,\n                    its.refund_move_id,\n                    -pay.amount_company_currency_signed AS amount,\n                    rc.code AS country_code,\n                    (inv_move.delivery_date)::DATE AS shipping_date,\n                    (pay.payment_date AT TIME ZONE \'UTC\' AT TIME ZONE \'Europe/Brussels\')::DATE::DATE AS refund_accounting_date,\n                    2 AS priority\n                FROM account_partial_reconcile apr\n                    JOIN account_move_line inv_aml ON apr.credit_move_id = inv_aml.id\n                    JOIN account_move inv_move ON inv_aml.move_id = inv_move.id\n                    JOIN cte_refund_invoice_to_sale_distinct its ON its.refund_move_id = inv_move.id\n                    JOIN sale_order so ON so.id = its.sale_id\n                    JOIN res_partner rp ON rp.id = so.partner_id\n                    JOIN res_country rc ON rc.id = rp.country_id\n                    JOIN account_move_line pay_aml ON apr.debit_move_id = pay_aml.id\n                    JOIN account_move pay_move ON pay_aml.move_id = pay_move.id\n                    JOIN account_payment pay ON pay.move_id = pay_move.id\n                WHERE inv_move.move_type = \'out_refund\'\n                  AND inv_move.state = \'posted\'\n                  AND pay_move.move_type = \'entry\'\n                  AND pay.state = \'paid\'\n                  AND inv_move.delivery_date IS NOT NULL\n            ),\n            cte_hoan_pay_base_current_month AS (\n                -- Ho\xc3\xa0n ti\xe1\xbb\x81n c\xe1\xbb\xa7a \xc4\x91\xc6\xa1n giao trong th\xc3\xa1ng N: \n                -- Credit note l\xe1\xba\xadp t\xe1\xbb\xab 1/N \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT  sale_id,\n                        DATE_TRUNC(\'month\', shipping_date) as refund_month,\n                        SUM(amount) AS company_total\n                FROM cte_hoan_pay_base\n                WHERE\n                   -- ho\xc3\xa0n \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                    refund_accounting_date < DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                GROUP BY sale_id, DATE_TRUNC(\'month\', shipping_date)\n            ),\n            cte_hoan_pay_base_prev_month_transferred AS (\n                -- Ho\xc3\xa0n ti\xe1\xbb\x81n c\xe1\xbb\xa7a \xc4\x91\xc6\xa1n giao tr\xc6\xb0\xe1\xbb\x9bc th\xc3\xa1ng N:\n                -- Credit note l\xe1\xba\xadp t\xe1\xbb\xab 7/N \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT sale_id,\n                       CASE\n                           -- N\xe1\xba\xbfu ho\xc3\xa0n trong ng\xc3\xa0y <= 6 th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date -1\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) <= 6\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date) - INTERVAL \'1 month\'\n                           -- N\xe1\xba\xbfu ho\xc3\xa0n trong ng\xc3\xa0y >= 7, th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) >= 7\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date)\n                           ELSE NULL\n                       END as refund_month,\n                       amount\n                FROM cte_hoan_pay_base\n                WHERE\n                    -- ho\xc3\xa0n sau 6/N+1\n                    refund_accounting_date >= DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n            ),\n            cte_hoan_pay_base_prev_month_transferred_grouped AS (\n                SELECT sale_id, refund_month, SUM(amount) AS company_total\n                FROM cte_hoan_pay_base_prev_month_transferred\n                GROUP BY sale_id, refund_month\n            ),\n            cte_hoan_pay AS (\n                SELECT refund_month::date,\n                       sale_id,\n                       company_total\n                FROM cte_hoan_pay_base_current_month\n                UNION ALL\n                SELECT refund_month::date,\n                       sale_id,\n                       company_total\n                FROM cte_hoan_pay_base_prev_month_transferred_grouped\n            ),\n            cte_hoan_base AS (\n                -- revesed h\xc3\xb3a \xc4\x91\xc6\xa1n g\xe1\xbb\x91c\n                SELECT \n                    its.sale_id,\n                    so.name,\n                    its.refund_move_id,\n                    apr.amount as amount,\n                    rc.code AS country_code,\n                    (inv_move.delivery_date)::DATE AS shipping_date,\n                    (inv_move.invoice_date)::DATE AS refund_accounting_date,\n                    1 AS priority\n                FROM account_partial_reconcile apr\n                    JOIN account_move_line inv_aml ON apr.credit_move_id = inv_aml.id\n                    JOIN account_move inv_move ON inv_aml.move_id = inv_move.id\n                    JOIN cte_refund_invoice_to_sale_distinct its ON its.refund_move_id = inv_move.id\n                    JOIN sale_order so ON so.id = its.sale_id\n                    JOIN res_partner rp ON rp.id = so.partner_id\n                    JOIN res_country rc ON rc.id = rp.country_id\n                    JOIN account_move_line pay_aml ON apr.debit_move_id = pay_aml.id\n                    JOIN account_move pay_move ON pay_aml.move_id = pay_move.id\n                WHERE inv_move.move_type = \'out_refund\'\n                    AND inv_move.state = \'posted\'\n                    AND inv_move.payment_state in (\'paid\',\'partial\')\n                    AND pay_move.move_type = \'out_invoice\'\n            ),\n            cte_hoan_base_current_month AS (\n                -- Ho\xc3\xa0n ti\xe1\xbb\x81n c\xe1\xbb\xa7a \xc4\x91\xc6\xa1n giao trong th\xc3\xa1ng N:\n                -- Credit note l\xe1\xba\xadp t\xe1\xbb\xab 1/N \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT  sale_id,\n                        DATE_TRUNC(\'month\', shipping_date) as refund_month,\n                        SUM(amount) AS company_total\n                FROM cte_hoan_base\n                WHERE\n                   -- ho\xc3\xa0n \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                    refund_accounting_date < DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                GROUP BY sale_id, DATE_TRUNC(\'month\', shipping_date)\n            ),\n            cte_hoan_base_prev_month_transferred AS (\n                -- Ho\xc3\xa0n ti\xe1\xbb\x81n c\xe1\xbb\xa7a \xc4\x91\xc6\xa1n giao tr\xc6\xb0\xe1\xbb\x9bc th\xc3\xa1ng N:\n                -- Credit note l\xe1\xba\xadp t\xe1\xbb\xab 7/N \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT sale_id,\n                       CASE\n                           -- N\xe1\xba\xbfu ho\xc3\xa0n trong ng\xc3\xa0y <= 6 th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date -1\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) <= 6\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date) - INTERVAL \'1 month\'\n                           -- N\xe1\xba\xbfu ho\xc3\xa0n trong ng\xc3\xa0y >= 7, th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) >= 7\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date)\n                           ELSE NULL\n                       END as refund_month,\n                       amount\n                FROM cte_hoan_base\n                WHERE\n                    -- ho\xc3\xa0n sau 6/N+1\n                    refund_accounting_date >= DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n            ),\n            cte_hoan_base_prev_month_transferred_grouped AS (\n                SELECT sale_id, refund_month, SUM(amount) AS company_total\n                FROM cte_hoan_base_prev_month_transferred\n                GROUP BY sale_id, refund_month\n            ),\n            cte_hoan AS (\n                SELECT refund_month::date,\n                       sale_id,\n                       company_total\n                FROM cte_hoan_base_current_month\n                UNION ALL\n                SELECT refund_month::date,\n                       sale_id,\n                       company_total\n                FROM cte_hoan_base_prev_month_transferred_grouped\n            ),\n            cte_completion_base AS (\n                -- Ho\xc3\xa0n t\xe1\xba\xa5t \xc4\x91\xc6\xa1n h\xc3\xa0ng: C\xc3\xa1c ho\xc3\xa1 \xc4\x91\xc6\xa1n kh\xc3\xb4ng c\xc3\xb2n n\xe1\xbb\xa3 + \xc4\x91\xc3\xa3 giao h\xc3\xa0ng + \xc4\x91\xc3\xa3 thanh to\xc3\xa1n\n                SELECT its.sale_id,\n                       MAX(so.inverse_amount_total) as company_total,\n                       SUM(am.amount_residual) as amount_residual,\n                       MAX(am.shipping_date_done) as last_delivery,\n                       MIN(am.shipping_date_done) as first_delivery,\n                       MAX(afr.create_date) as last_pay,\n                       MIN(afr.create_date) as first_pay\n                FROM account_move am\n                  JOIN account_move_line aml ON am.id = aml.move_id\n                  LEFT JOIN account_full_reconcile afr ON aml.full_reconcile_id = afr.id\n                  JOIN cte_invoice_to_sale_distinct its ON its.move_id = am.id\n                  JOIN sale_order so ON so.id = its.sale_id\n                WHERE am.move_type = \'out_invoice\'\n                  AND am.state = \'posted\'\n                GROUP BY its.sale_id\n            ),\n            cte_real_sales_base AS (\n                -- Doanh s\xe1\xbb\x91 th\xe1\xbb\xb1c t\xe1\xba\xbf: C\xc3\xa1c ho\xc3\xa1 \xc4\x91\xc6\xa1n \xc4\x91\xc3\xa3 thanh to\xc3\xa1n (to\xc3\xa0n b\xe1\xbb\x99 ho\xe1\xba\xb7c m\xe1\xbb\x99t ph\xe1\xba\xa7n)\n                -- Bao g\xe1\xbb\x93m: Ho\xc3\xa1 \xc4\x91\xc6\xa1n b\xc3\xa1n + B\xe1\xba\xa3n ghi thanh to\xc3\xa1n (entry)\n                -- L\xc6\xb0u \xc3\xbd: journal_id d\xc3\xb9ng \xc4\x91\xe1\xbb\x83 lo\xe1\xba\xa1i b\xe1\xbb\x8f thanh to\xc3\xa1n lo\xe1\xba\xa1i COD\n                SELECT its.sale_id,\n                       its.move_id,\n                       apr.amount,\n                       pay_move.journal_id,  -- Lo\xe1\xba\xa1i s\xe1\xbb\x95 thanh to\xc3\xa1n (\xc4\x91\xe1\xbb\x83 ph\xc3\xa2n bi\xe1\xbb\x87t COD)\n                       rc.code AS country_code,\n                       (inv_move.delivery_date)::DATE as shipping_date,\n                       (pay.payment_date AT TIME ZONE \'UTC\' AT TIME ZONE \'Europe/Brussels\')::DATE::DATE as payment_date\n                FROM account_partial_reconcile apr\n                  JOIN account_move_line inv_aml ON apr.debit_move_id = inv_aml.id\n                  JOIN account_move inv_move ON inv_aml.move_id = inv_move.id\n                  JOIN cte_invoice_to_sale_distinct its ON its.move_id = inv_move.id\n                  JOIN sale_order so ON so.id = its.sale_id\n                  JOIN res_partner rp ON rp.id = so.partner_id\n                  JOIN res_country rc ON rc.id = rp.country_id\n                  JOIN account_move_line pay_aml ON apr.credit_move_id = pay_aml.id\n                  JOIN account_move pay_move ON pay_aml.move_id = pay_move.id\n                  JOIN account_payment pay ON pay.move_id = pay_move.id\n                WHERE inv_move.move_type = \'out_invoice\'\n                  AND pay_move.move_type = \'entry\'\n                  AND inv_move.payment_state != \'not_paid\'\n                  AND inv_move.delivery_date IS NOT NULL\n            ),\n            cte_real_sales_current_month AS (\n                -- Doanh s\xe1\xbb\x91 th\xe1\xbb\xb1c trong th\xc3\xa1ng N: \xc4\x90\xc6\xa1n giao th\xc3\xa1ng N v\xc3\xa0 thu ti\xe1\xbb\x81n t\xe1\xbb\xab 1/N (ho\xe1\xba\xb7c tr\xc6\xb0\xe1\xbb\x9bc khi giao) \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT sale_id,\n                       DATE_TRUNC(\'month\', shipping_date) as pay_month,\n                       SUM(amount) AS company_total\n                FROM cte_real_sales_base\n                WHERE\n                    -- Thanh to\xc3\xa1n \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/n+1\n                    payment_date < DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                GROUP BY sale_id, DATE_TRUNC(\'month\', shipping_date)\n            ),\n            cte_real_sales_prev_month_transferred AS (\n                -- Doanh s\xe1\xbb\x91 th\xe1\xbb\xb1c th\xc3\xa1ng tr\xc6\xb0\xe1\xbb\x9bc chuy\xe1\xbb\x83n sang th\xc3\xa1ng N: \xc4\x90\xc6\xa1n giao th\xc3\xa1ng <N v\xc3\xa0 thu ti\xe1\xbb\x81n t\xe1\xbb\xab 7/N \xc4\x91\xe1\xba\xbfn h\xe1\xba\xbft 6/N+1\n                SELECT sale_id,\n                       CASE\n                           -- N\xe1\xba\xbfu thanh to\xc3\xa1n trong ng\xc3\xa0y <= 6 th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date -1\n                           WHEN EXTRACT(DAY FROM payment_date) <= 6\n                               THEN DATE_TRUNC(\'month\', payment_date) - INTERVAL \'1 month\'\n                           -- N\xe1\xba\xbfu thanh to\xc3\xa1n trong ng\xc3\xa0y >= 7, th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng payment_date\n                           WHEN EXTRACT(DAY FROM payment_date) >= 7\n                               THEN DATE_TRUNC(\'month\', payment_date)\n                           ELSE NULL\n                       END as pay_month,\n                       amount\n                FROM cte_real_sales_base\n                WHERE\n                    -- thanh to\xc3\xa1n sau 6/N+1\n                    payment_date >= DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n            ),\n            cte_real_sales_prev_month_transferred_grouped AS (\n                SELECT sale_id, pay_month, SUM(amount) AS company_total\n                FROM cte_real_sales_prev_month_transferred\n                WHERE pay_month IS NOT NULL\n                GROUP BY sale_id, pay_month\n            ),\n            cte_real_sales AS (\n                SELECT sale_id, \n                      pay_month::date, \n                      company_total, \'real_sales_current\' as real_sales_type\n                FROM cte_real_sales_current_month\n                UNION ALL\n                SELECT sale_id,\n                      pay_month::date, \n                      company_total, \'real_sales_prev_transferred\' as real_sales_type\n                FROM cte_real_sales_prev_month_transferred_grouped\n            ),\n            cte_tc AS (SELECT GREATEST(last_delivery, last_pay) as completed_date_local, sale_id, company_total\n                FROM cte_completion_base\n                WHERE amount_residual = 0\n                  AND first_delivery IS NOT NULL\n                  AND first_pay IS NOT NULL\n            ),\n            cte_cod_journal AS (\n                SELECT id FROM account_journal \n                WHERE code = \'COD\' \n                  AND active = true \n                LIMIT 1\n            ),\n            cte_cod_amount_base AS (\n                -- COD (Thu ti\xe1\xbb\x81n khi giao): C\xc3\xa1c ho\xc3\xa1 \xc4\x91\xc6\xa1n c\xc3\xb3 kho\xe1\xba\xa3n thu COD\n                -- \xc4\x90i\xe1\xbb\x81u ki\xe1\xbb\x87n: (1) \xc4\x90\xc3\xa3 v\xc3\xa0o s\xe1\xbb\x95 | (2) Ch\xc6\xb0a thanh to\xc3\xa1n lo\xe1\xba\xa1i COD | (3) Kh\xc3\xb4ng c\xc3\xb3 Credit Note\n                SELECT \n                    its.sale_id,\n                    am.id AS invoice_id,\n                    am.inverse_currency_rate * sp.cod_amount AS cod_amount,\n                    (am.delivery_date)::DATE AS delivery_date,\n                    (am.shipping_date_done AT TIME ZONE \'UTC\' AT TIME ZONE \'Europe/Brussels\')::DATE::DATE AS shipping_date_done\n                FROM cte_invoice_to_sale_distinct its\n                    JOIN account_move am ON its.move_id = am.id\n                    LEFT JOIN account_payment ap ON its.move_id = ap.move_id\n                    JOIN stock_picking sp ON am.origin_picking_id = sp.id\n                WHERE\n                    am.state = \'posted\'  -- (1) H\xc3\xb3a \xc4\x91\xc6\xa1n \xe1\xbb\x9f tr\xe1\xba\xa1ng th\xc3\xa1i "\xc4\x90\xc3\xa3 v\xc3\xa0o S\xe1\xbb\x95"\n                    AND am.shipping_date_done IS NOT NULL\n                    AND sp.cod_amount > 0 -- c\xc3\xb3 thu ti\xe1\xbb\x81n cod > 0\n                    AND NOT EXISTS (SELECT 1 FROM account_move m WHERE m.reversed_entry_id = its.move_id) \n                        -- (3) H\xc3\xb3a \xc4\x91\xc6\xa1n KH\xc3\x94NG c\xc3\xb3 Credit Note (H\xc3\xb3a \xc4\x91\xc6\xa1n \xc4\x91i\xe1\xbb\x81u ch\xe1\xbb\x89nh gi\xe1\xba\xa3m)\n                    AND NOT EXISTS (SELECT 1 FROM cte_real_sales_base r \n                        WHERE its.move_id = r.move_id \n                        AND r.journal_id = (SELECT id FROM cte_cod_journal)) \n                        -- (2) H\xc3\xb3a \xc4\x91\xc6\xa1n ch\xc6\xb0a c\xc3\xb3 b\xe1\xba\xa5t k\xe1\xbb\xb3 kho\xe1\xba\xa3n thanh to\xc3\xa1n thu\xe1\xbb\x99c lo\xe1\xba\xa1i "S\xe1\xbb\x95 COD"\n            ),\n            cte_cod_amount AS (\n                SELECT *,\n                    CASE \n                        WHEN shipping_date_done < DATE_TRUNC(\'month\', delivery_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                        THEN DATE_TRUNC(\'month\', delivery_date)\n                        WHEN shipping_date_done >= DATE_TRUNC(\'month\', delivery_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                        THEN\n                            CASE\n                                -- N\xe1\xba\xbfu ghtc trong ng\xc3\xa0y <= 6 th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng giao h\xc3\xa0ng -1\n                                WHEN EXTRACT(DAY FROM shipping_date_done) <= 6\n                                    THEN DATE_TRUNC(\'month\', shipping_date_done) - INTERVAL \'1 month\'\n                                -- N\xe1\xba\xbfu ghtc trong ng\xc3\xa0y >= 7, th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng giao h\xc3\xa0ng\n                                WHEN EXTRACT(DAY FROM shipping_date_done) >= 7\n                                    THEN DATE_TRUNC(\'month\', shipping_date_done)\n                                ELSE NULL\n                            END\n                    END AS shipping_month_done\n                FROM cte_cod_amount_base\n            ),\n            cte_cod_report AS (\n                SELECT sale_id, shipping_month_done::DATE, SUM(cod_amount) AS amount \n                FROM cte_cod_amount\n                GROUP BY sale_id, shipping_month_done::DATE\n            ),\n            cte_return_reason AS (\n                SELECT ar.order_id AS sale_id,\n                       STRING_AGG(sale_return_reason_id::text, \',\') AS sale_return_reason_id,\n                       BOOL_OR(rr.is_sale_fault) AS is_sale_fault\n                FROM approval_request ar\n                  JOIN sale_return_reason rr ON ar.sale_return_reason_id = rr.id\n                WHERE order_id IS NOT NULL\n                  AND ar.request_status = \'approved\'\n                GROUP BY ar.order_id\n            ),\n            cte_hoan_all_base AS (\n                -- revesed h\xc3\xb3a \xc4\x91\xc6\xa1n g\xe1\xbb\x91c\n                SELECT \n                    its.sale_id,\n                    its.refund_move_id,\n                    inv_move.inverse_amount_total as amount,\n                    (inv_move.delivery_date)::DATE AS shipping_date,\n                    (inv_move.invoice_date)::DATE AS refund_accounting_date\n                FROM cte_refund_invoice_to_sale_distinct its\n                    JOIN account_move inv_move ON its.refund_move_id = inv_move.id\n            ),\n            cte_hoan_all_cal as (\n                select \n                sale_id, amount, \n                case \n              when \n                refund_accounting_date < DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                then \n                    DATE_TRUNC(\'month\', shipping_date)\n            when \n                    refund_accounting_date >= DATE_TRUNC(\'month\', shipping_date) + INTERVAL \'1 month\' + INTERVAL \'6 days\'\n                THEN\n                  CASE\n                           -- N\xe1\xba\xbfu t\xe1\xba\xa1o credit trong ng\xc3\xa0y <= 6 th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng giao h\xc3\xa0ng -1\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) <= 6\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date) - INTERVAL \'1 month\'\n                           -- N\xe1\xba\xbfu t\xe1\xba\xa1o credit trong ng\xc3\xa0y >= 7, th\xc3\xac t\xc3\xadnh v\xc3\xa0o th\xc3\xa1ng giao h\xc3\xa0ng\n                           WHEN EXTRACT(DAY FROM refund_accounting_date) >= 7\n                               THEN DATE_TRUNC(\'month\', refund_accounting_date)\n                           ELSE NULL\n                   END\n               end as refund_month\n              from cte_hoan_all_base),\n            cte_hoan_all as ( \n                select \n                 sale_id, \n                 sum(amount) as company_total,  \n                 refund_month::date as refund_month\n                from cte_hoan_all_cal\n                WHERE refund_month IS NOT NULL\n                GROUP BY \n                 sale_id, \n                 refund_month::date\n            ),\n            combine AS (\n                SELECT date_order AS date, sale_id, company_total, \'confirmed\' AS type\n                FROM cte_chot\n                UNION ALL\n                SELECT cancel_date AS date, sale_id, company_total, \'cancelled\' AS type\n                FROM cte_huy\n                UNION ALL\n                SELECT shipping_date AS date, sale_id, company_total, \'shipped\' AS type\n                FROM cte_chuyen\n                UNION ALL\n                SELECT refund_month AS date, sale_id, company_total, \'returned_paid\' AS type\n                FROM cte_hoan_pay\n                UNION ALL\n                SELECT refund_month AS date, sale_id, company_total, \'returned\' AS type\n                FROM cte_hoan\n                UNION ALL\n                SELECT completed_date_local AS date, sale_id, company_total, \'completed\' AS type\n                FROM cte_tc\n                UNION ALL\n                SELECT pay_month AS date, sale_id, company_total, real_sales_type AS type\n                FROM cte_real_sales\n                UNION ALL\n                SELECT shipping_month_done AS date, sale_id, amount, \'cod\' AS type\n                FROM cte_cod_report\n                UNION ALL\n                SELECT refund_month AS date, sale_id, company_total, \'sum_returned\' AS type\n                FROM cte_hoan_all\n            )\n\n            SELECT combine.date AS utc_date,\n            combine.sale_id,\n            TRUNC(((combine.company_total - COALESCE(mc.company_amount, 0)) / 1000)::numeric, 0)       AS company_total\n            (combine.company_total - COALESCE(mc.company_amount, 0)) / 1000      AS net_revenue,\n            combine.type,\n            rc.currency_id,\n            rp.country_id,\n            so.company_id,\n            so.crm_group_id,\n            so.user_id,\n            so.team_id,\n            crm.crm_type,\n            crm.source_id,\n            crm.product_category_id,\n            so.user_marketing_id,\n            so.marketing_team_id,\n            so.old_sale_user_id,\n            so.old_sale_team_id,\n            pc.director_id                                                                  AS category_director_id,\n            CASE WHEN combine.company_total < 20000000.0 THEN \'retail\' ELSE \'wholesale\' END AS order_type,\n            rr.sale_return_reason_id,\n            rr.is_sale_fault,\n            so.hide_data_period\n            FROM combine\n            JOIN sale_order so ON so.id = combine.sale_id\n            JOIN res_partner rp ON rp.id = so.partner_id\n            JOIN res_company rc ON rc.id = so.company_id\n            LEFT JOIN market_cost mc ON mc.country_id = rp.country_id\n            AND so.date_order BETWEEN mc.start_date AND mc.end_date\n            LEFT JOIN crm_lead crm ON crm.id = so.opportunity_id\n            LEFT JOIN product_category pc ON pc.id = crm.product_category_id\n            LEFT join cte_return_reason rr on combine.sale_id = rr.sale_id\n            WHERE combine.company_total > 0\n        );\n            CREATE UNIQUE INDEX IF NOT EXISTS sale_report_data_unique ON sale_report_data (sale_id, type, utc_date);\n        '
2026-02-27 03:59:38,566 60 ERROR 07639-18-0-all odoo.modules.registry: Failed to load registry 
2026-02-27 03:59:38,566 60 CRITICAL 07639-18-0-all odoo.service.server: Failed to initialize database `07639-18-0-all`. 
2026-02-27 03:59:49 INFO runbot Getting stats from log file
2026-02-27 03:59:49 Step Install all finished in 29m
2026-02-27 03:59:49 Starting step Create post install from config Post install Only
2026-02-27 03:59:49 INFO subbuild Build # 7642 created with config Test Post Install
2026-02-27 03:59:49 INFO subbuild Build # 7643 created with config Test Post Install
2026-02-27 03:59:49 INFO subbuild Build # 7644 created with config Test Post Install
2026-02-27 03:59:49 INFO subbuild Build # 7645 created with config Test Post Install