59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
# cyberapps.commerce.order
|
|
|
|
""" Order and order item classes.
|
|
"""
|
|
|
|
from zope.app.intid.interfaces import IIntIds
|
|
from zope.cachedescriptors.property import Lazy
|
|
from zope import component
|
|
from zope.component import adapts
|
|
from zope.interface import implementer, Interface
|
|
|
|
from cyberapps.commerce.interfaces import IOrder
|
|
from cybertools.commerce.order import Order as BaseOrder
|
|
from cybertools.commerce.order import OrderItem as BaseOrderItem
|
|
from cybertools.commerce.order import OrderItems as BaseOrderItems
|
|
from loops.common import AdapterBase, ParentRelation
|
|
from loops.interfaces import ILoopsObject
|
|
from loops import util
|
|
from loops.type import TypeInterfaceSourceList
|
|
|
|
|
|
TypeInterfaceSourceList.typeInterfaces += (IOrder,)
|
|
|
|
|
|
@implementer(IOrder)
|
|
class Order(AdapterBase, BaseOrder):
|
|
|
|
_adapterAttributes = ('context', '__parent__', 'customer')
|
|
_contextAttributes = list(IOrder)
|
|
|
|
#shop = ParentRelation('shop.order') # implemented as context attribute
|
|
customer = ParentRelation('customer.order')
|
|
|
|
|
|
class OrderItem(BaseOrderItem):
|
|
|
|
def getObject(self, ref):
|
|
if isinstance(ref, int):
|
|
return util.getObjectForUid(ref)
|
|
if isinstance(ref, str):
|
|
if ref.isdigit:
|
|
return util.getObjectForUid(ref)
|
|
if ':' in ref:
|
|
tp, id = ref.split(':', 1)
|
|
return (tp, id)
|
|
return ref
|
|
|
|
|
|
class OrderItems(BaseOrderItems):
|
|
|
|
# utility methods
|
|
|
|
def getUid(self, obj):
|
|
if ILoopsObject.providedBy(obj):
|
|
return util.getUidForObject(obj, self.intIds)
|
|
elif isinstance(obj, AdapterBase):
|
|
return util.getUidForObject(obj.context, self.intIds)
|
|
return obj
|
|
|