def import_measures(filename): for rec in _records(filename): measure_type, measure_type_created = MeasureType.objects.get_or_create( code=rec['matcode'], ) unit, unit_created = Unit.objects.get_or_create( code=rec['mateenh'], ) # vvv Decided from examination of screenshots from KRW portal initiator = Organization.objects.get(description=rec['uitvoerder']) datetime_in_source = datetime.datetime.strptime( rec['datum'], '%Y-%m-%d %H:%M:%S.%f', ) import_raw_json = simplejson.dumps( rec, indent=4, ) if rec['tijdvak'] == 'onbekend': period = None else: period = MeasurePeriod.objects.get(description=rec['tijdvak']) measure_kwargs = { # KRW matident => Measure.ident 'ident': rec['matident'], 'is_KRW_measure': True, 'geometry': None, 'measure_type': measure_type, 'title': rec['matnaam'], 'period': period, 'import_source': Measure.SOURCE_KRW_PORTAAL, 'datetime_in_source': datetime_in_source, 'import_raw': import_raw_json, 'aggregation_type': Measure.AGGREGATION_TYPE_MIN, 'description': rec['toelichting'], 'value': rec['matomv'], 'investment_costs': rec['investkosten'], 'exploitation_costs': rec['exploitkosten'], 'executive': None, 'initiator': initiator, 'valid': True, 'in_sgbp': rec['par_sgbp'], 'is_indicator': True, } measure = Measure(**measure_kwargs) measure.save() # Add waterbodies # They can be None, or single, or comma separated if rec['locatie'] is None: locations = [] else: locations = rec['locatie'].split(', ') for area_ident in locations: if area_ident.startswith('NL'): corrected_area_ident = area_ident else: corrected_area_ident = 'NL' + area_ident waterbody = WaterBody.objects.get( area_ident=corrected_area_ident, ) waterbody.save() measure.waterbodies.add(waterbody) data_set_set = set([w.area.data_set for w in measure.waterbodies.all()]) if None in data_set_set: data_set_set.remove(None) if len(data_set_set) == 1: # If dataset is unambiguously defined by the associated area's, # Use it for the measure, too. measure.data_set = data_set_set.pop() measure.save() # Add some categories krw_category, created = MeasureCategory.objects.get_or_create( name='KRW', ) measure.categories.add(krw_category) boolean_categories = [ 'wb21', 'n2000', 'gwb', ] for c in boolean_categories: if rec[c] == '1': category, category_created = _get_or_create( model=MeasureCategory, get_kwargs={'name': c}, ) measure.categories.add(category) if rec['thema'] is not None: category, category_created = _get_or_create( model=MeasureCategory, get_kwargs={'name': rec['thema']}, ) measure.categories.add(category) # Add a measurestatusmoment for the status at import measure_status = MeasureStatus.objects.get( name=rec['maatregelstatus'], ) measure_status_date = datetime.date(year=2010, month=1, day=1) measure_status_moment = MeasureStatusMoment( measure=measure, status=measure_status, planning_date=measure_status_date, description=MSM_DESCRIPTION_IMPORT, ) measure_status_moment.save() # Add fundingorganizations for n in ['1', '2', '3']: if rec['kostenpercent' + n] == '0': continue cost_carrier = rec['kostendrager' + n] cost_percentage = _to_float_or_none(rec['kostenpercent' + n]) organization = Organization.objects.get(description=cost_carrier) funding_organization = FundingOrganization( percentage=cost_percentage, organization=organization, measure=measure, ) funding_organization.save()