def type_sheet(self, location_types): headers = LOCATION_TYPE_SHEET_HEADERS def foreign_code(lt, attr): val = getattr(lt, attr, None) if val: return val.code else: return None rows = [] for lt in location_types: type_row = { headers['code']: lt.code, headers['name']: lt.name, headers['parent_code']: foreign_code(lt, 'parent_type'), headers['do_delete']: '', headers['shares_cases']: lt.shares_cases, headers['view_descendants']: lt.view_descendants, headers['expand_from']: foreign_code(lt, 'expand_from'), headers['expand_to']: foreign_code(lt, 'expand_to'), } rows.append(dict(flatten_json(type_row))) return ('types', { 'headers': [ headers[header] for header in [ 'code', 'name', 'parent_code', 'do_delete', 'shares_cases', 'view_descendants', 'expand_from', 'expand_to' ] ], 'rows': rows })
def _loc_type_dict(self, loc_type): uncategorized_keys = set() tab_rows = [] for loc in Location.filter_by_type(self.domain, loc_type.name): model_data, uncategorized_data = \ self.data_model.get_model_and_uncategorized(loc.metadata) uncategorized_keys.update(uncategorized_data.keys()) loc_dict = { 'location_id': loc.location_id, 'site_code': loc.site_code, 'name': loc.name, 'parent_site_code': loc.parent.site_code if loc.parent else '', 'latitude': loc.latitude or '', 'longitude': loc.longitude or '', 'data': model_data, 'uncategorized_data': uncategorized_data, 'consumption': self.get_consumption(loc), } if self.new_bulk_management_enabled: loc_dict.update({ LOCATION_SHEET_HEADERS['external_id']: loc.external_id, LOCATION_SHEET_HEADERS['do_delete']: '' }) tab_rows.append(dict(flatten_json(loc_dict))) tab_headers = ['site_code', 'name', 'parent_site_code', 'latitude', 'longitude'] if self.include_ids: tab_headers = ['location_id'] + tab_headers if self.new_bulk_management_enabled: tab_headers = ['location_id', 'site_code', 'name', 'parent_code', 'latitude', 'longitude', 'external_id', 'do_delete'] tab_headers = [LOCATION_SHEET_HEADERS[h] for h in tab_headers] def _extend_headers(prefix, headers): tab_headers.extend(json_to_headers( {prefix: {header: None for header in headers}} )) _extend_headers('data', (f.slug for f in self.data_model.fields)) _extend_headers('uncategorized_data', uncategorized_keys) if self.include_consumption_flag and loc_type.name not in self.administrative_types: _extend_headers('consumption', self.product_codes) if self.new_bulk_management_enabled: sheet_title = loc_type.code else: sheet_title = loc_type.name return (sheet_title, { 'headers': tab_headers, 'rows': tab_rows, })
def _loc_type_dict(self, loc_type): uncategorized_keys = set() tab_rows = [] for loc in Location.filter_by_type(self.domain, loc_type): model_data, uncategorized_data = \ self.data_model.get_model_and_uncategorized(loc.metadata) uncategorized_keys.update(uncategorized_data.keys()) loc_dict = { 'location_id': loc.location_id, 'site_code': loc.site_code, 'name': loc.name, 'parent_site_code': loc.parent.site_code if loc.parent else '', 'latitude': loc.latitude or '', 'longitude': loc.longitude or '', 'data': model_data, 'uncategorized_data': uncategorized_data, 'consumption': self.get_consumption(loc), } tab_rows.append(dict(flatten_json(loc_dict))) tab_headers = [ 'site_code', 'name', 'parent_site_code', 'latitude', 'longitude' ] if self.include_ids: tab_headers = ['location_id'] + tab_headers def _extend_headers(prefix, headers): tab_headers.extend( json_to_headers({prefix: {header: None for header in headers}})) _extend_headers('data', (f.slug for f in self.data_model.fields)) _extend_headers('uncategorized_data', uncategorized_keys) if self.include_consumption_flag and loc_type not in self.administrative_types: _extend_headers('consumption', self.product_codes) return (loc_type, { 'headers': tab_headers, 'rows': tab_rows, })
def _loc_type_dict(self, loc_type): uncategorized_keys = set() tab_rows = [] for loc in Location.filter_by_type(self.domain, loc_type): model_data, uncategorized_data = \ self.data_model.get_model_and_uncategorized(loc.metadata) uncategorized_keys.update(uncategorized_data.keys()) loc_dict = { 'location_id': loc.location_id, 'site_code': loc.site_code, 'name': loc.name, 'parent_site_code': loc.parent.site_code if loc.parent else '', 'latitude': loc.latitude or '', 'longitude': loc.longitude or '', 'data': model_data, 'uncategorized_data': uncategorized_data, 'consumption': self.get_consumption(loc), } tab_rows.append(dict(flatten_json(loc_dict))) tab_headers = ['site_code', 'name', 'parent_site_code', 'latitude', 'longitude'] if self.include_ids: tab_headers = ['location_id'] + tab_headers def _extend_headers(prefix, headers): tab_headers.extend(json_to_headers( {prefix: {header: None for header in headers}} )) _extend_headers('data', (f.slug for f in self.data_model.fields)) _extend_headers('uncategorized_data', uncategorized_keys) if self.include_consumption_flag and loc_type not in self.administrative_types: _extend_headers('consumption', self.product_codes) return (loc_type, { 'headers': tab_headers, 'rows': tab_rows, })
def _get_group_rows(): for group_dict in group_dicts: row = dict(flatten_json(group_dict)) yield [row.get(header) or '' for header in group_headers]
def _user_rows(): for user_dict in user_dicts: row = dict(flatten_json(user_dict)) yield [row.get(header) or '' for header in user_headers]