예제 #1
0
파일: loader.py 프로젝트: dimagi/bhoma
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()
예제 #2
0
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
예제 #3
0
파일: models.py 프로젝트: dimagi/bhoma
 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