def filter_by_program(self, stock_states): return stock_states.filter( product_id__in=product_ids_filtered_by_program( self.domain, self.program_id ) )
def filter_by_program(self, stock_states): return stock_states.filter( product_id__in=product_ids_filtered_by_program( self.domain, self.program_id ) )
def get_prod_data(self): sp_ids = get_relevant_supply_point_ids(self.domain, self.active_location) stock_states = StockState.include_archived.filter( case_id__in=sp_ids, last_modified_date__lte=self.datespan.enddate_utc, last_modified_date__gte=self.datespan.startdate_utc, section_id=STOCK_SECTION_TYPE ) if not self.archived_products: stock_states = stock_states.exclude( sql_product__is_archived=True ) stock_states = stock_states.order_by('product_id') if self.program_id: stock_states = stock_states.filter( product_id__in=product_ids_filtered_by_program( self.domain, self.program_id ) ) product_grouping = {} for state in stock_states: status = state.stock_category if state.product_id in product_grouping: product_grouping[state.product_id][status] += 1 product_grouping[state.product_id]['facility_count'] += 1 else: product_grouping[state.product_id] = { 'obj': Product.get(state.product_id), 'stockout': 0, 'understock': 0, 'overstock': 0, 'adequate': 0, 'nodata': 0, 'facility_count': 1 } product_grouping[state.product_id][status] = 1 for product in product_grouping.values(): yield [ product['obj'].name, product['facility_count'], 100.0 * product['stockout'] / product['facility_count'], 100.0 * product['understock'] / product['facility_count'], 100.0 * product['adequate'] / product['facility_count'], 100.0 * product['overstock'] / product['facility_count'], 100.0 * product['nodata'] / product['facility_count'], ]
def get_prod_data(self): sp_ids = get_relevant_supply_point_ids(self.domain, self.active_location) stock_states = StockState.include_archived.filter( case_id__in=sp_ids, last_modified_date__lte=self.datespan.enddate_utc, last_modified_date__gte=self.datespan.startdate_utc, section_id=STOCK_SECTION_TYPE) if not self.archived_products: stock_states = stock_states.exclude(sql_product__is_archived=True) stock_states = stock_states.order_by('product_id') if self.program_id: stock_states = stock_states.filter( product_id__in=product_ids_filtered_by_program( self.domain, self.program_id)) product_grouping = {} for state in stock_states: status = state.stock_category if state.product_id in product_grouping: product_grouping[state.product_id][status] += 1 product_grouping[state.product_id]['facility_count'] += 1 else: product_grouping[state.product_id] = { 'obj': Product.get(state.product_id), 'stockout': 0, 'understock': 0, 'overstock': 0, 'adequate': 0, 'nodata': 0, 'facility_count': 1 } product_grouping[state.product_id][status] = 1 for product in product_grouping.values(): yield [ product['obj'].name, product['facility_count'], 100.0 * product['stockout'] / product['facility_count'], 100.0 * product['understock'] / product['facility_count'], 100.0 * product['adequate'] / product['facility_count'], 100.0 * product['overstock'] / product['facility_count'], 100.0 * product['nodata'] / product['facility_count'], ]
def get_prod_data(self): sp_ids = get_relevant_supply_point_ids(self.domain, self.active_location) stock_states = StockState.objects.filter( case_id__in=sp_ids ).order_by('product_id') if self.program_id: stock_states = stock_states.filter( product_id__in=product_ids_filtered_by_program( self.domain, self.program_id ) ) product_grouping = {} for state in stock_states: status = state.stock_category if state.product_id in product_grouping: product_grouping[state.product_id][status] += 1 product_grouping[state.product_id]['facility_count'] += 1 else: product_grouping[state.product_id] = { 'obj': Product.get(state.product_id), 'stockout': 0, 'understock': 0, 'overstock': 0, 'adequate': 0, 'nodata': 0, 'facility_count': 1 } product_grouping[state.product_id][status] = 1 for product in product_grouping.values(): yield [ product['obj'].name, product['facility_count'], 100.0 * product['stockout'] / product['facility_count'], 100.0 * product['understock'] / product['facility_count'], 100.0 * product['adequate'] / product['facility_count'], 100.0 * product['overstock'] / product['facility_count'], 100.0 * product['nodata'] / product['facility_count'], ]