"""Model for Delivery History.""" from datetime import datetime from sqlalchemy import BigInteger from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import TIMESTAMP from ows_product_physical.connector import mysql from ows_product_physical.constant.delivery_order import ENCODER_ID from ows_product_physical.models.releases import Releases class DeliveryHistory(mysql.BaseModel): """DeliveryHistory model.""" __tablename__ = 'delivery_history' delivery_id = Column( Integer, primary_key=True, autoincrement=True, nullable=False) encoder_id = Column(Integer, nullable=False) upc = Column(BigInteger, nullable=False) customer_master_master_id = Column(Integer, nullable=False) date_delivered = Column(TIMESTAMP, nullable=False) package_size = Column(Integer, nullable=False) def to_dict(self): """Dictionary representation of DeliveryHistory.""" return { 'delivery_id': self.delivery_id, 'encoder_id': self.encoder_id, 'upc': self.upc, 'customer_master_master_id': self.customer_master_master_id, 'date_delivered': self.date_delivered, 'package_size': self.package_size } def save_delivery_history(products, delivery_store_id, session): """Given an order and db session, persist delivery history. Args: products (array dict): products to save delivery history for delivery_store_id (string): art_relations.customer_master_master id session (session): database session (for art_relations) Returns: None """ now = datetime.now() # Resolve product ids to UPCs product_ids = list(map(lambda product: product.product_id, products)) upcs = list(map( lambda result: result[0], session.query(Releases.upc).filter(Releases.release_id.in_( product_ids)).all() )) # Persist delivery history session.add_all(list(map( lambda upc: DeliveryHistory( encoder_id=ENCODER_ID, upc=upc, customer_master_master_id=delivery_store_id, date_delivered=now, package_size=0 ), upcs )))