Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
lib-py-b2b / order_change / order_refresh.py
Size: Mime:
# 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}")