"""Supply Chain Defaults Model.""" from oto import response from sqlalchemy import Column from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import Enum from sqlalchemy import TIMESTAMP from sqlalchemy.dialects.mysql import TINYINT from sqlalchemy.exc import SQLAlchemyError from product_configuration.connectors import mysql from product_configuration.connectors.mysql import db_session from product_configuration.connectors.sentry import sentry_client from product_configuration.models.customer_master_master \ import CustomerMasterMaster from product_configuration.models.distribution_format_media \ import DistributionFormatMedia class SupplyChainDefaults(mysql.BaseModel): """Supply Chain Defaults model.""" __tablename__ = 'supply_chain_defaults' supply_chain_default_id = Column( Integer, primary_key=True, autoincrement=True, nullable=False) is_returnable = Column(TINYINT) return_disposition = Column(Enum('Keep', 'Scrap')) date_added = Column(TIMESTAMP) date_updated = Column(TIMESTAMP) FK_supply_chain_id1 = \ 'customer_master_master.customer_master_master_id' FK_distribution_format_media_id1 = \ 'distribution_format_media.distribution_format_media_id' supply_chain_id = Column( Integer, ForeignKey(FK_supply_chain_id1), nullable=False) distribution_format_media_id = Column( Integer, ForeignKey(FK_distribution_format_media_id1), nullable=False) @mysql.wrap_db_errors def get_all_defaults(): """Get all supply chain defaults. Returns: response.Response: containing list of supply chain defaults. """ with db_session() as session: try: results = session.query( SupplyChainDefaults.supply_chain_default_id, SupplyChainDefaults.is_returnable, SupplyChainDefaults.return_disposition, SupplyChainDefaults.date_added, SupplyChainDefaults.date_updated, CustomerMasterMaster.customer_master_master_id, DistributionFormatMedia.distribution_format_media_id) \ .join(CustomerMasterMaster, isouter=True) \ .join(DistributionFormatMedia, isouter=True) return _map_results_to_dict(results) except SQLAlchemyError as e: sentry_client.capture_exception(e) return response.create_fatal_response('A database error occurred.') def _map_results_to_dict(results): """Map results from `supply chain defaults` query to a dictionary.""" return [{ 'supply_chain_default_id': supply_chain_default_id, 'is_returnable': is_returnable, 'return_disposition': return_disposition, 'date_added': date_added.strftime('%Y-%m-%d %H:%M'), 'date_updated': date_updated.strftime('%Y-%m-%d %H:%M'), 'customer_master_master_id': customer_master_master_id, 'distribution_format_media_id': distribution_format_media_id, } for supply_chain_default_id, is_returnable, return_disposition, date_added, date_updated, customer_master_master_id, distribution_format_media_id in results]