"""Model for the USPhysicalRetailerView.""" from collections import OrderedDict from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from reporting.models.persister import get_all, get_filter from reporting.utils.physical_reporting import RetailerSharedFieldsMixin BaseModel = declarative_base() class USPhysicalRetailerView(RetailerSharedFieldsMixin, BaseModel): """US Retailer View model.""" __tablename__ = 'US_PHYSICAL_RETAIL_VIEW' article_no = Column( String(18), name='ARTICLE_NO', primary_key=True, nullable=False ) product_code = Column(String(18), nullable=True, name='Product Code') is_generic_product = Column( Integer, nullable=True, name='COOP_GENERIC_PRODUCT_IN' ) filter_data = [ {'column': 'Sub Label', 'alias': 'sub_label'}, {'column': 'Product Type', 'alias': 'product_type'}, {'column': 'Product Name', 'alias': 'product_name'}, {'column': 'Artist', 'alias': 'artist'}, {'column': 'Retailer', 'alias': 'retailer'}, {'column': 'UPC/EAN', 'alias': 'upc_ean'}, {'column': 'Product Code', 'alias': 'product_code'}, ] @classmethod def all(cls, params): """Get all data rows.""" filters = [ 'artist', 'retailer', 'product_type', 'product_name', 'sub_label', 'release_date', 'vendor_id', 'subacct_id', 'product_code', 'upc_ean', 'is_generic_product', ] return get_all(cls, params, filters) @classmethod def filter(cls, vendor_id, subaccount_id): """Get filter values.""" return get_filter( cls.__tablename__, vendor_id, subaccount_id, cls.filter_data ) @classmethod def headers(cls): """Get all headers.""" return [x for x in cls().to_dict().keys()] def to_dict(self): """Convert Retailer View to a dict.""" data = OrderedDict() data['Retailer'] = self.retailer data['Retailer Code'] = self.retailer_code data['Product Name'] = self.product_name data['Artist'] = self.artist data['Label Name'] = self.label_name data['Sub Label'] = self.sub_label data['Product Code'] = self.product_code data['UPC/EAN'] = self.upc_ean try: data['Release Date'] = self.release_date.isoformat() except AttributeError: data['Release Date'] = '' data['Product Type'] = self.product_type data['Format'] = self.product_format data['Units Per Set'] = self.units_per_set data['Display Configuration'] = self.display_configuration data['Exclusive'] = self.exclusive data['Open Orders'] = self.open_orders data['Backorders'] = self.backorders data['First4WeekS#'] = self.first_4_week_s data['5DayS#'] = self.five_day_s data['5DayR#'] = self.five_day_r data['Last4WkS#'] = self.last_4_week_s data['Last4WkR#'] = self.last_4_week_r data['MTDS#'] = self.mtds data['MTDR#'] = self.mtdr data['CYTDS#'] = self.cytds data['CYTDR#'] = self.cytdr data['CumTDS#'] = self.cumtds data['CumTDR#'] = self.cumtdr return data