From 7b085a87a1c2c09342b3ff49fa23ac676fde3f20 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Tue, 31 Mar 2026 20:10:08 -0400 Subject: [PATCH] feat: extend sale.order, stock.picking, account.move, res.partner with WooCommerce fields Co-Authored-By: Claude Opus 4.6 (1M context) --- .../fusion_woocommerce/models/__init__.py | 4 ++++ .../fusion_woocommerce/models/account_move.py | 12 ++++++++++++ .../fusion_woocommerce/models/res_partner.py | 13 +++++++++++++ .../fusion_woocommerce/models/sale_order.py | 12 ++++++++++++ .../fusion_woocommerce/models/stock_picking.py | 16 ++++++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 fusion-woo-odoo/fusion_woocommerce/models/account_move.py create mode 100644 fusion-woo-odoo/fusion_woocommerce/models/res_partner.py create mode 100644 fusion-woo-odoo/fusion_woocommerce/models/sale_order.py create mode 100644 fusion-woo-odoo/fusion_woocommerce/models/stock_picking.py diff --git a/fusion-woo-odoo/fusion_woocommerce/models/__init__.py b/fusion-woo-odoo/fusion_woocommerce/models/__init__.py index b6c1345b..0657c847 100644 --- a/fusion-woo-odoo/fusion_woocommerce/models/__init__.py +++ b/fusion-woo-odoo/fusion_woocommerce/models/__init__.py @@ -9,3 +9,7 @@ from . import woo_conflict from . import woo_tax_map from . import woo_pricelist_map from . import woo_return +from . import sale_order +from . import stock_picking +from . import account_move +from . import res_partner diff --git a/fusion-woo-odoo/fusion_woocommerce/models/account_move.py b/fusion-woo-odoo/fusion_woocommerce/models/account_move.py new file mode 100644 index 00000000..69b44a2b --- /dev/null +++ b/fusion-woo-odoo/fusion_woocommerce/models/account_move.py @@ -0,0 +1,12 @@ +from odoo import models, fields + + +class AccountMove(models.Model): + _inherit = 'account.move' + + woo_order_id = fields.Many2one('woo.order', string='WooCommerce Order') + is_woo_invoice = fields.Boolean(compute='_compute_is_woo_invoice', string='Is WC Invoice') + + def _compute_is_woo_invoice(self): + for move in self: + move.is_woo_invoice = bool(move.woo_order_id) diff --git a/fusion-woo-odoo/fusion_woocommerce/models/res_partner.py b/fusion-woo-odoo/fusion_woocommerce/models/res_partner.py new file mode 100644 index 00000000..56c39c0b --- /dev/null +++ b/fusion-woo-odoo/fusion_woocommerce/models/res_partner.py @@ -0,0 +1,13 @@ +from odoo import models, fields, api + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + woo_customer_ids = fields.One2many('woo.customer', 'partner_id', string='WooCommerce Links') + is_woo_customer = fields.Boolean(compute='_compute_is_woo_customer', string='Is WC Customer', store=True) + + @api.depends('woo_customer_ids') + def _compute_is_woo_customer(self): + for partner in self: + partner.is_woo_customer = bool(partner.woo_customer_ids) diff --git a/fusion-woo-odoo/fusion_woocommerce/models/sale_order.py b/fusion-woo-odoo/fusion_woocommerce/models/sale_order.py new file mode 100644 index 00000000..3ff3076b --- /dev/null +++ b/fusion-woo-odoo/fusion_woocommerce/models/sale_order.py @@ -0,0 +1,12 @@ +from odoo import models, fields + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + woo_bind_ids = fields.One2many('woo.order', 'sale_order_id', string='WooCommerce Orders') + woo_order_count = fields.Integer(compute='_compute_woo_order_count', string='WC Orders') + + def _compute_woo_order_count(self): + for order in self: + order.woo_order_count = len(order.woo_bind_ids) diff --git a/fusion-woo-odoo/fusion_woocommerce/models/stock_picking.py b/fusion-woo-odoo/fusion_woocommerce/models/stock_picking.py new file mode 100644 index 00000000..ea8fc901 --- /dev/null +++ b/fusion-woo-odoo/fusion_woocommerce/models/stock_picking.py @@ -0,0 +1,16 @@ +from odoo import models, fields + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + + woo_tracking_number = fields.Char(string='WC Tracking Number') + woo_carrier_id = fields.Many2one('woo.shipping.carrier', string='WC Shipping Carrier') + woo_shipment_ids = fields.One2many('woo.shipment', 'picking_id', string='WC Shipments') + is_woo_delivery = fields.Boolean(compute='_compute_is_woo_delivery', string='Is WC Delivery') + + def _compute_is_woo_delivery(self): + for picking in self: + picking.is_woo_delivery = bool(picking.woo_shipment_ids) or bool( + picking.sale_id and picking.sale_id.woo_bind_ids + )