Repository URL to install this package:
|
Version:
0.4.184 ▾
|
# from lib_b2b.erp import ERP
# from lib_b2b.policy import Policy
# from lib_b2b.errors import OrderNotFoundError, PolicyViolation
# from lib_b2b.order_status import OrderStatus, SimpleOrderStatus
# from lib_b2b.change import ChangeRecord, ChangeDataProvider
# from lib_b2b.order_change import OrderChangeRequest, SimpleOrderPredicate
# from lib_b2b.order import Order
# from lib_b2b.address import Address
# from datetime import datetime
# import logging
# from os import environ
# import abc
#
# log_level = logging.getLevelName(environ['LOG_LEVEL']) if 'LOG_LEVEL' in environ else logging.INFO
# logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
# datefmt='%d-%m-%Y:%H:%M:%S',
# level=log_level)
# logger = logging.getLogger('lib-b2b-order-change')
#
#
# class OrderRefreshChangeDataProvider(ChangeDataProvider, metaclass=abc.ABCMeta):
# @property
# @abc.abstractmethod
# def updated_order(self) -> dict:
# raise NotImplementedError
#
#
# class OrderRefreshChangeRequest(OrderChangeRequest):
# # TODO: - Move these policies to be data driven
# _policy = Policy(
# name='order_refresh_change_policy',
# subject=Policy.SUBJECT_ALL,
# predicates=[
# SimpleOrderPredicate(
# lambda o: o.status < OrderStatus.ACCEPTED,
# 'Until ACCEPTED')
# ]
# )
#
# def __init__(self, on_behalf_of: str, change_data_provider: OrderRefreshChangeDataProvider):
# super().__init__(on_behalf_of, OrderRefreshChangeRequest._policy)
# self.change_data_provider = change_data_provider
#
# def will_change(self, order: Order) -> bool:
# return order.ship_to != self.change_data_provider.new_address
#
# def apply(self, order: Order):
# if not super().permitted(order):
# raise PolicyViolation("Unable to change address due to policy violation.")
# else:
# self.changeable_object = order
# if self.will_change(order):
# erp = ERP.for_(order.customer_edi_id)
# erp_customer = erp.fetch_customer(order.customer_edi_id)
# tax_loc = erp.find_tax_location_code(customer_edi_id=order.customer_edi_id, ship_to=order.ship_to)
# order.record(ChangeRecord(
# before=self.changeable_object.ship_to.as_dict(),
# after=self.change_data_provider.new_address.as_dict(),
# description="Ship to address was updated",
# when=datetime.now(),
# who=self.on_behalf_of)
# )
# order.ship_to = self.change_data_provider.new_address
# if order.status is OrderStatus.ACCEPTED:
# # if it's accepted, we can't restart the order flow, so, we need to
# # make sure it is not entered and modify the adapter tables
# try:
# order.update_erp_reference()
# except OrderNotFoundError:
# # in this case let's reset the order in the adapter tables
# erp.add(order)
# elif order.status < OrderStatus.ACCEPTED:
# # Force the order to go back through validation,
# # this will restart the order flow and modify the glovia order
# # setting it to NONE first ensures that the listener picks it up as a change
# order.status = OrderStatus.NONE
# order.status = OrderStatus.RECEIVED
# elif order.status < OrderStatus.SHIPPED:
# erp.update_address(ccn=erp_customer.ccn,
# sales_order=self.changeable_object['glovia_sales_order'],
# new_ship_address=self.change_data_provider.new_address,
# tax_loc=tax_loc)
# else:
# logger.info(f"Order Address Change handler does not need to modify Glovia for "
# f"order {order.order_id} with status {order.status.value}")