"""Logic layer for legacy delivery history.""" from deliveryhistory.models import delivery_report from deliveryhistory.models import delivery_xml def get_delivered_stores_count(upcs): """Get delivery report with count of stores for a list of upcs. Args: upcs (list): a list of upcs to get the delivery history for Returns: list: list of dicts with store count per UPC """ result = delivery_report.get_delivered_stores_count(upcs) return [dict(row) for row in result] def get_delivered_stores_details(upc, store_id=None, delivery_info=False): """Get store delivery history report for a UPC. Args: upc (str): a UPC to get the delivery history for store_id (str, optional): a store id to filter the results by delivery_info (bool): when True, include delivery_type and delivery_status fields Returns: list: list of dicts with delivery history per store """ result = delivery_report.get_delivered_stores_details(upc, store_id=store_id) items = [dict(row) for row in result] if delivery_info: jobs = delivery_report.get_delivery_jobs(upc, store_id=store_id) job_by_store = {job['store_id']: job for job in jobs} for item in items: job = job_by_store.get(item['store_id']) delivery_type = delivery_xml.get_delivery_type( job['job_id'] if job else None) if delivery_type is None and job is not None: delivery_type = ( delivery_xml.DELIVERY_TYPE_METADATA_UPDATE if job['meta_update'] == 'Y' else delivery_xml.DELIVERY_TYPE_DELIVERY ) item['delivery_type'] = delivery_type item['delivery_status'] = job['delivery_status'] if job else None return items