def load_clinic_zones(file_path, purge=False, log_to_console=True): if purge: if log_to_console: print "Purging existing clinic zones!" zones = ClinicZone.view("zones/by_clinic", include_docs=True).all() get_db().bulk_delete([zone.to_json() for zone in zones]) if log_to_console: print "loading static clinic zones from %s" % file_path if not os.path.exists(file_path): raise LoaderException("Invalid file path: %s." % file_path) csv_file = open(file_path, 'r') try: count = failed = 0 updated_zones = [] for line in csv_file: #leave out first line if "of households" in line.lower(): continue district_name, facility_name, facility_code, zone_number, hhs = line.split(",") try: clinic = Location.objects.get(slug=facility_code) except: print "Clinic with code %s not found (%s)!" % (facility_code, facility_name) failed += 1 continue zone = ClinicZone.view("zones/by_clinic", key=[clinic.slug, int(zone_number)], include_docs=True).one() if not zone: zone = ClinicZone() zone.clinic_id = clinic.slug zone.zone = int(zone_number) zone.households = int(hhs) updated_zones.append(zone.to_json()) count += 1 ClinicZone.get_db().bulk_save(updated_zones) if log_to_console: print "Successfully processed %s zones." % count if log_to_console and failed: print "%s zones failed." % failed finally: csv_file.close()
def context_clinic(): """ Sets the clinic id in the request object """ try: clinic = get_current_site() def get_prefix(self): """For clinic codes, convert 5020180 to 502180""" # with proper, 13-digit IDs, we don't need to manipulate the clinic prefix anymore #if len(self.slug) == 7: # return "%s%s" % (self.slug[:3], self.slug[4:7]) return self.slug Location.prefix = property(get_prefix) def get_referral_prefix(self): """Get prefix for CHW referral codes""" if len(self.slug) > 6: return self.slug[2] + self.slug[4:6] return "" Location.ref_prefix = property(get_referral_prefix) clinic.num_chw_zones = len(ClinicZone.view("zones/by_clinic", startkey=[clinic.slug], endkey=[clinic.slug, {}]).all()) clinic.is_clinic = clinic.type.slug == const.LOCATION_TYPE_CLINIC clinic.is_central = clinic.type.slug == const.LOCATION_TYPE_PROVINCE or \ clinic.type.slug == const.LOCATION_TYPE_NATIONAL clinic.is_district = clinic.type.slug == const.LOCATION_TYPE_DISTRICT try: clinic.density = settings.CLINIC_POPULATION_DENSITY except AttributeError: clinic.density = 'rural' return clinic except Location.DoesNotExist: return None
def get_zone(self): if not self._zone_checked: self._zone = ClinicZone.view("zones/by_clinic", key=[self.current_clinic_id, self.current_clinic_zone], include_docs=True).one() self._zone_checked = True return self._zone