"""Product Configuration Logic.""" from oto import response from product_configuration.models import distribution_format from product_configuration.models import distribution_format_media from product_configuration.models import distribution_format_media_format from product_configuration.models import supply_chain from product_configuration.models import supply_chain_defaults def _add_pagination(data): """Structure data in pagination format. Args: data (list): list of data Returns: paginated_data (object): object with data items and pagination info. """ return { 'items': data, 'pagination': { 'type': 'standard', 'offset': 0, 'limit': len(data), 'total_records': len(data) } } def get_distribution_format_media_types(): """Get distribution format media types. Returns: response.Response: list of distribution_format_media objects. """ media_types = distribution_format_media.get_all_media_types() if not media_types: return media_types return response.Response( status=200, message=_add_pagination(media_types.message)) def get_distribution_format_media_formats(): """Get distribution format media formats. Returns: response.Response: list of distribution_format_media_format objects. """ media_formats = distribution_format_media_format.get_all_media_formats() if not media_formats: return media_formats return response.Response( status=200, message=_add_pagination(media_formats.message)) def get_distribution_formats(): """Get mapped list of distribution formats. Returns: response.Response: list of distribution_format objects. """ distribution_formats = distribution_format.get_all_formats() if not distribution_formats: return distribution_formats return response.Response( status=200, message=_add_pagination(distribution_formats.message)) def get_supply_chain_configuration_schemas(): """Get supply chain configuration schemas. Returns: response.Response: list of supply chain configuration schemas. """ return supply_chain.get_configuration_schemas() def get_supply_chain_configurations(supply_chain_id): """Get list of configurations for a supply chain. Args: supply_chain_id (int): id of the supply chain. Returns: response.Response: list of supply chain configurations or error. """ valid_id = supply_chain.is_supply_chain_id_valid(supply_chain_id) if not valid_id: return response.create_not_found_response( 'No supply chain exists for provided ID.') return supply_chain.get_configurations(supply_chain_id) def get_supply_chain_configuration( supply_chain_id, distribution_format_id): """Get a single configuration for the supply chain. Args: supply_chain_id (int): id of the supply chain. distribution_format_id (int): id of the distribution format configuration to retrieve. Returns: response.Response: a single configuration or error. """ valid_id = supply_chain.is_supply_chain_id_valid(supply_chain_id) if not valid_id: return response.create_not_found_response( 'No supply chain exists for provided ID.') configuration = supply_chain.get_configuration_by_distribution_format( supply_chain_id, distribution_format_id) if not configuration: return response.create_not_found_response( 'No configuration exists for provided distribution format ID.') return response.Response(status=200, message=configuration.message) def get_supply_chain_defaults(): """Get supply chain defaults. Returns: response.Response: list of supply chain defaults storewise. """ supply_chain_default_values = supply_chain_defaults.get_all_defaults() if not supply_chain_default_values: return supply_chain_default_values else: store_defaults = {} for row in supply_chain_default_values: new_store_defaults = { 'distribution_format_media_id': row['distribution_format_media_id'], 'is_returnable': row['is_returnable'], 'return_disposition': row['return_disposition'] } if row['customer_master_master_id'] not in store_defaults.keys(): store_defaults[ row['customer_master_master_id']] = [new_store_defaults] else: store_defaults[ row['customer_master_master_id']].append( new_store_defaults) return response.Response(status=200, message=store_defaults) def get_distribution_format_by_distribution_format_id(distribution_format_id): """Get a distribution format record based on the distribution format id. Args: distribution_format_id (int): id of the distribution format configuration to retrieve. Returns: response.Response: a single configuration or error. """ distribution_format_result = distribution_format. \ get_distribution_format_by_distribution_format_id( distribution_format_id) if not distribution_format_result: return response.create_not_found_response( 'No distribution format data exists for distribution format ID.') return response.Response( status=200, message=distribution_format_result[0])