feat: add all remaining models (product map, order, shipment, customer, sync log, conflict, tax/pricelist map, returns)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1 +1,11 @@
|
||||
# Models will be imported here
|
||||
from . import woo_shipping_carrier
|
||||
from . import woo_instance
|
||||
from . import woo_product_map
|
||||
from . import woo_order
|
||||
from . import woo_shipment
|
||||
from . import woo_customer
|
||||
from . import woo_sync_log
|
||||
from . import woo_conflict
|
||||
from . import woo_tax_map
|
||||
from . import woo_pricelist_map
|
||||
from . import woo_return
|
||||
|
||||
28
fusion-woo-odoo/fusion_woocommerce/models/woo_conflict.py
Normal file
28
fusion-woo-odoo/fusion_woocommerce/models/woo_conflict.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooConflict(models.Model):
|
||||
_name = 'woo.conflict'
|
||||
_description = 'WooCommerce Sync Conflict'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
conflict_type = fields.Selection([
|
||||
('product', 'Product'),
|
||||
('customer', 'Customer'),
|
||||
('order', 'Order'),
|
||||
])
|
||||
map_id = fields.Many2one('woo.product.map')
|
||||
customer_id = fields.Many2one('woo.customer')
|
||||
order_id = fields.Many2one('woo.order')
|
||||
field_name = fields.Char()
|
||||
odoo_value = fields.Char()
|
||||
woo_value = fields.Char()
|
||||
resolution = fields.Selection([
|
||||
('pending', 'Pending'),
|
||||
('use_odoo', 'Use Odoo'),
|
||||
('use_woo', 'Use WooCommerce'),
|
||||
], default='pending')
|
||||
resolved_by = fields.Many2one('res.users')
|
||||
company_id = fields.Many2one(
|
||||
'res.company', default=lambda self: self.env.company,
|
||||
)
|
||||
15
fusion-woo-odoo/fusion_woocommerce/models/woo_customer.py
Normal file
15
fusion-woo-odoo/fusion_woocommerce/models/woo_customer.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooCustomer(models.Model):
|
||||
_name = 'woo.customer'
|
||||
_description = 'WooCommerce Customer'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
partner_id = fields.Many2one('res.partner', required=True)
|
||||
woo_customer_id = fields.Integer(index=True)
|
||||
woo_email = fields.Char()
|
||||
last_synced = fields.Datetime()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
25
fusion-woo-odoo/fusion_woocommerce/models/woo_order.py
Normal file
25
fusion-woo-odoo/fusion_woocommerce/models/woo_order.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooOrder(models.Model):
|
||||
_name = 'woo.order'
|
||||
_description = 'WooCommerce Order'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
sale_order_id = fields.Many2one('sale.order')
|
||||
woo_order_id = fields.Integer(index=True)
|
||||
woo_order_number = fields.Char()
|
||||
woo_status = fields.Char()
|
||||
invoice_id = fields.Many2one('account.move')
|
||||
invoice_synced = fields.Boolean()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
state = fields.Selection([
|
||||
('new', 'New'),
|
||||
('confirmed', 'Confirmed'),
|
||||
('shipped', 'Shipped'),
|
||||
('completed', 'Completed'),
|
||||
('cancelled', 'Cancelled'),
|
||||
], default='new')
|
||||
shipment_ids = fields.One2many('woo.shipment', 'order_id')
|
||||
@@ -0,0 +1,14 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooPricelistMap(models.Model):
|
||||
_name = 'woo.pricelist.map'
|
||||
_description = 'WooCommerce Pricelist Mapping'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
pricelist_id = fields.Many2one('product.pricelist', required=True)
|
||||
woo_role = fields.Char(required=True)
|
||||
woo_role_name = fields.Char()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
34
fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py
Normal file
34
fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooProductMap(models.Model):
|
||||
_name = 'woo.product.map'
|
||||
_description = 'WooCommerce Product Mapping'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
product_id = fields.Many2one('product.product')
|
||||
woo_product_id = fields.Integer()
|
||||
woo_product_name = fields.Char()
|
||||
woo_sku = fields.Char()
|
||||
woo_product_type = fields.Selection([
|
||||
('simple', 'Simple'),
|
||||
('variable', 'Variable'),
|
||||
('grouped', 'Grouped'),
|
||||
('external', 'External'),
|
||||
])
|
||||
woo_parent_id = fields.Integer()
|
||||
is_variation = fields.Boolean()
|
||||
sync_price = fields.Boolean(default=True)
|
||||
sync_inventory = fields.Boolean(default=True)
|
||||
sync_images = fields.Boolean(default=True)
|
||||
woo_image_ids = fields.Char() # JSON
|
||||
last_synced = fields.Datetime()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
state = fields.Selection([
|
||||
('unmapped', 'Unmapped'),
|
||||
('mapped', 'Mapped'),
|
||||
('conflict', 'Conflict'),
|
||||
('error', 'Error'),
|
||||
], default='unmapped')
|
||||
41
fusion-woo-odoo/fusion_woocommerce/models/woo_return.py
Normal file
41
fusion-woo-odoo/fusion_woocommerce/models/woo_return.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooReturn(models.Model):
|
||||
_name = 'woo.return'
|
||||
_description = 'WooCommerce Return'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
order_id = fields.Many2one('woo.order', required=True)
|
||||
picking_id = fields.Many2one('stock.picking')
|
||||
reason = fields.Text()
|
||||
line_ids = fields.One2many('woo.return.line', 'return_id')
|
||||
state = fields.Selection([
|
||||
('requested', 'Requested'),
|
||||
('approved', 'Approved'),
|
||||
('received', 'Received'),
|
||||
('refunded', 'Refunded'),
|
||||
('rejected', 'Rejected'),
|
||||
], default='requested')
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
|
||||
|
||||
class WooReturnLine(models.Model):
|
||||
_name = 'woo.return.line'
|
||||
_description = 'WooCommerce Return Line'
|
||||
|
||||
return_id = fields.Many2one('woo.return', required=True, ondelete='cascade')
|
||||
product_id = fields.Many2one('product.product', required=True)
|
||||
quantity = fields.Float(default=1.0)
|
||||
reason = fields.Selection([
|
||||
('defective', 'Defective'),
|
||||
('wrong_item', 'Wrong Item'),
|
||||
('not_needed', 'Not Needed'),
|
||||
('damaged', 'Damaged'),
|
||||
('other', 'Other'),
|
||||
])
|
||||
company_id = fields.Many2one(
|
||||
'res.company', default=lambda self: self.env.company,
|
||||
)
|
||||
17
fusion-woo-odoo/fusion_woocommerce/models/woo_shipment.py
Normal file
17
fusion-woo-odoo/fusion_woocommerce/models/woo_shipment.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooShipment(models.Model):
|
||||
_name = 'woo.shipment'
|
||||
_description = 'WooCommerce Shipment'
|
||||
|
||||
order_id = fields.Many2one('woo.order', required=True, ondelete='cascade')
|
||||
picking_id = fields.Many2one('stock.picking')
|
||||
carrier_id = fields.Many2one('woo.shipping.carrier')
|
||||
tracking_number = fields.Char()
|
||||
shipped_date = fields.Datetime()
|
||||
is_backorder = fields.Boolean()
|
||||
synced_to_woo = fields.Boolean()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
30
fusion-woo-odoo/fusion_woocommerce/models/woo_sync_log.py
Normal file
30
fusion-woo-odoo/fusion_woocommerce/models/woo_sync_log.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooSyncLog(models.Model):
|
||||
_name = 'woo.sync.log'
|
||||
_description = 'WooCommerce Sync Log'
|
||||
_order = 'create_date desc'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', ondelete='cascade')
|
||||
sync_type = fields.Selection([
|
||||
('product', 'Product'),
|
||||
('order', 'Order'),
|
||||
('invoice', 'Invoice'),
|
||||
('inventory', 'Inventory'),
|
||||
('customer', 'Customer'),
|
||||
])
|
||||
direction = fields.Selection([
|
||||
('odoo_to_woo', 'Odoo \u2192 WooCommerce'),
|
||||
('woo_to_odoo', 'WooCommerce \u2192 Odoo'),
|
||||
])
|
||||
record_ref = fields.Char()
|
||||
state = fields.Selection([
|
||||
('success', 'Success'),
|
||||
('failed', 'Failed'),
|
||||
('conflict', 'Conflict'),
|
||||
])
|
||||
message = fields.Text()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', default=lambda self: self.env.company,
|
||||
)
|
||||
14
fusion-woo-odoo/fusion_woocommerce/models/woo_tax_map.py
Normal file
14
fusion-woo-odoo/fusion_woocommerce/models/woo_tax_map.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class WooTaxMap(models.Model):
|
||||
_name = 'woo.tax.map'
|
||||
_description = 'WooCommerce Tax Mapping'
|
||||
|
||||
instance_id = fields.Many2one('woo.instance', required=True, ondelete='cascade')
|
||||
tax_id = fields.Many2one('account.tax', required=True)
|
||||
woo_tax_class = fields.Char(required=True)
|
||||
woo_tax_class_name = fields.Char()
|
||||
company_id = fields.Many2one(
|
||||
'res.company', required=True, default=lambda self: self.env.company,
|
||||
)
|
||||
@@ -1 +1,25 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_woo_instance_user,woo.instance.user,model_woo_instance,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_instance_manager,woo.instance.manager,model_woo_instance,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_shipping_carrier_user,woo.shipping.carrier.user,model_woo_shipping_carrier,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_shipping_carrier_manager,woo.shipping.carrier.manager,model_woo_shipping_carrier,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_product_map_user,woo.product.map.user,model_woo_product_map,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_product_map_manager,woo.product.map.manager,model_woo_product_map,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_order_user,woo.order.user,model_woo_order,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_order_manager,woo.order.manager,model_woo_order,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_shipment_user,woo.shipment.user,model_woo_shipment,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_shipment_manager,woo.shipment.manager,model_woo_shipment,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_customer_user,woo.customer.user,model_woo_customer,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_customer_manager,woo.customer.manager,model_woo_customer,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_sync_log_user,woo.sync.log.user,model_woo_sync_log,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_sync_log_manager,woo.sync.log.manager,model_woo_sync_log,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_conflict_user,woo.conflict.user,model_woo_conflict,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_conflict_manager,woo.conflict.manager,model_woo_conflict,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_tax_map_user,woo.tax.map.user,model_woo_tax_map,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_tax_map_manager,woo.tax.map.manager,model_woo_tax_map,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_pricelist_map_user,woo.pricelist.map.user,model_woo_pricelist_map,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_pricelist_map_manager,woo.pricelist.map.manager,model_woo_pricelist_map,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_return_user,woo.return.user,model_woo_return,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_return_manager,woo.return.manager,model_woo_return,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
access_woo_return_line_user,woo.return.line.user,model_woo_return_line,fusion_woocommerce.group_woo_user,1,0,0,0
|
||||
access_woo_return_line_manager,woo.return.line.manager,model_woo_return_line,fusion_woocommerce.group_woo_manager,1,1,1,1
|
||||
|
||||
|
Reference in New Issue
Block a user