60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
import re
|
|
|
|
from trytond.model import MatchMixin, ModelSQL, ModelView, fields
|
|
from trytond.pool import PoolMeta
|
|
|
|
|
|
class Carrier(metaclass=PoolMeta):
|
|
__name__ = 'carrier'
|
|
|
|
shopify_selections = fields.One2Many(
|
|
'carrier.selection.shopify', 'carrier', "Shopify Selections",
|
|
help="Define the criteria that will match this carrier "
|
|
"with the Shopify shipping methods.")
|
|
|
|
def shopify_match(self, shop, shipping_line, pattern=None):
|
|
pattern = pattern.copy() if pattern is not None else {}
|
|
pattern.setdefault('shop', shop.id)
|
|
pattern.setdefault('code', shipping_line.get('code'))
|
|
pattern.setdefault('title', shipping_line.get('title'))
|
|
for selection in self.shopify_selections:
|
|
if selection.match(pattern):
|
|
return True
|
|
return False
|
|
|
|
|
|
class SelectionShopify(MatchMixin, ModelSQL, ModelView):
|
|
__name__ = 'carrier.selection.shopify'
|
|
|
|
@classmethod
|
|
def __setup__(cls):
|
|
super().__setup__()
|
|
cls.__access__.add('carrier')
|
|
|
|
carrier = fields.Many2One(
|
|
'carrier', "Carrier", required=True, ondelete='CASCADE')
|
|
shop = fields.Many2One(
|
|
'web.shop', "Shop",
|
|
domain=[
|
|
('type', '=', 'shopify'),
|
|
])
|
|
code = fields.Char(
|
|
"Code",
|
|
help="The code of the shipping line.")
|
|
title = fields.Char(
|
|
"Title",
|
|
help="A regular expression to match the shipping line title.\n"
|
|
"Leave empty to allow any title.")
|
|
|
|
def match(self, pattern, match_none=False):
|
|
if 'title' in pattern:
|
|
pattern = pattern.copy()
|
|
title = pattern.pop('title') or ''
|
|
if (self.title is not None
|
|
and not re.search(self.title, title, flags=re.I)):
|
|
return False
|
|
return super().match(pattern, match_none=match_none)
|