Files
Odoo-Modules/fusion-woo-odoo/fusion_woocommerce/models/woo_customer.py
gsinghpal 3022b8ed59 CHANGES
2026-04-02 10:45:07 -04:00

93 lines
3.0 KiB
Python

import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
class WooCustomer(models.Model):
_name = 'woo.customer'
_description = 'WooCommerce Customer'
_rec_name = 'woo_email'
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,
)
# ------------------------------------------------------------------
# Helpers (Task 25)
# ------------------------------------------------------------------
@api.model
def _find_or_create(self, instance, email, wc_data=None):
"""Find or create a woo.customer + res.partner for the given email.
Args:
instance: woo.instance record
email: customer email address
wc_data: optional dict with full WC customer payload
Returns:
woo.customer record
"""
email = (email or '').strip().lower()
if not email:
return self.browse()
wc_customer_id = (wc_data or {}).get('id', 0)
# Check existing link
if wc_customer_id:
existing = self.search([
('instance_id', '=', instance.id),
('woo_customer_id', '=', wc_customer_id),
], limit=1)
if existing:
return existing
# Check by email
existing = self.search([
('instance_id', '=', instance.id),
('woo_email', '=ilike', email),
], limit=1)
if existing:
if wc_customer_id and not existing.woo_customer_id:
existing.woo_customer_id = wc_customer_id
return existing
# Find or create partner
partner = self.env['res.partner'].search([
('email', '=ilike', email),
'|', ('company_id', '=', instance.company_id.id), ('company_id', '=', False),
], limit=1)
if not partner:
billing = (wc_data or {}).get('billing', {})
partner_vals = instance._prepare_partner_vals(billing) if billing else {
'name': email.split('@')[0].title(),
'email': email,
'company_id': instance.company_id.id,
}
partner = self.env['res.partner'].create(partner_vals)
# Create woo.customer link
woo_cust = self.create({
'instance_id': instance.id,
'partner_id': partner.id,
'woo_customer_id': wc_customer_id,
'woo_email': email,
'last_synced': fields.Datetime.now(),
'company_id': instance.company_id.id,
})
instance._log_sync(
'customer', 'woo_to_odoo', partner.display_name,
'success', f'Customer created from WC (email: {email})',
)
return woo_cust