Exemple #1
0
    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
        })
Exemple #2
0
    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,
        })
Exemple #3
0
    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,
        })
Exemple #4
0
    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,
        })
Exemple #5
0
 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]
Exemple #6
0
 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]
Exemple #7
0
 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]
Exemple #8
0
 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]