raise ValidationError(message) else: return district_value def parse_location_value(value): location_value = find_closest_match(value, Location.objects.exclude(type='district')) if not location_value: message = _(getattr(settings, 'UNRECOGNIZED_LOCATION_RESPONSE_TEXT', '')) raise ValidationError(message) else: return location_value Poll.register_poll_type('district', _('District Response'), parse_district_value, db_type=Attribute.TYPE_OBJECT, \ view_template='polls/response_location_view.html', edit_template='polls/response_location_edit.html', report_columns=((('Text', 'text', True, 'message__text', SimpleSorter()), ( 'Location', 'location', True, 'eav_values__generic_value_id', SimpleSorter()), ( 'Categories', 'categories', True, 'categories__category__name', SimpleSorter()))), edit_form=LocationResponseForm) Poll.register_poll_type('l', _('Location-based'), parse_location_value, db_type=Attribute.TYPE_OBJECT, \ view_template='polls/response_location_view.html', edit_template='polls/response_location_edit.html', report_columns=((('Text', 'text', True, 'message__text', SimpleSorter()), ( 'Location', 'location', True, 'eav_values__generic_value_id', SimpleSorter()), ( 'Categories', 'categories', True, 'categories__category__name', SimpleSorter()))), edit_form=LocationResponseForm) class PolymorphicManager(models.Manager): def get_query_set(self):
for poll in polls: resp_dict[poll.name] = [] all_responses.extend( poll.responses.exclude(contact__emisreporter__schools=None).filter(date__lte = now).\ select_related().values_list('poll__name', 'contact__emisreporter__schools__pk', 'date')) # populate the res_dict with school_pk and sent_at values as a list of lists for poll_name, school_pk, sent_at in all_responses: resp_dict[poll_name].append([school_pk, sent_at]) for poll_name in resp_dict.keys(): try: poll = Poll.objects.get(name = poll_name) other_responses = resp_dict[poll_name] for school_pk, sent_at in other_responses: school = School.objects.select_related().get(pk = school_pk) model.objects.create( poll = poll, school = school, sent_at = sent_at) except ObjectDoesNotExist: pass return Poll.register_poll_type('date', 'Date Response', parse_date_value, db_type=Attribute.TYPE_OBJECT) script_progress_was_completed.connect(edtrac_autoreg, weak=False) script_progress_was_completed.connect(edtrac_reschedule_script, weak=False) script_progress.connect(edtrac_autoreg_transition, weak=False) script_progress.connect(edtrac_attendance_script_transition, weak=False)
location_template = STARTSWITH_PATTERN_TEMPLATE % '[a-zA-Z]*' regex = re.compile(location_template) toret = find_closest_match(value, Location.objects.filter(type__name='district')) if not toret: raise ValidationError( "We didn't recognize your district. Please carefully type the name of your district and re-send." ) else: return toret Poll.register_poll_type('district', 'District Response', parse_district_value, db_type=Attribute.TYPE_OBJECT, \ view_template='polls/response_location_view.html', edit_template='polls/response_location_edit.html', report_columns=((('Text', 'text', True, 'message__text', SimpleSorter()), ( 'Location', 'location', True, 'eav_values__generic_value_id', SimpleSorter()), ( 'Categories', 'categories', True, 'categories__category__name', SimpleSorter()))), edit_form=LocationResponseForm) GROUP_BY_WEEK = 1 GROUP_BY_MONTH = 2 GROUP_BY_DAY = 16 GROUP_BY_QUARTER = 32 months = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
XFormField.register_field_type('cvstdelt', 'Time Delta', parse_timedelta, db_type=XFormField.TYPE_INT, xforms_type='integer') XFormField.register_field_type('cvsmuacr', 'Muac Reading', parse_muacreading, db_type=XFormField.TYPE_TEXT, xforms_type='string') XFormField.register_field_type('cvsodema', 'Oedema Occurrence', parse_oedema, db_type=XFormField.TYPE_TEXT, xforms_type='string') XFormField.register_field_type('facility', 'Facility Code', parse_facility, db_type=XFormField.TYPE_OBJECT, xforms_type='string') XFormField.register_field_type('fuzzynum', 'Fuzzy Numbers (o/0)', parse_fuzzy_number, db_type=XFormField.TYPE_INT, xforms_type='integer') Poll.register_poll_type('facility', 'Facility Code Response', parse_facility_value, db_type=Attribute.TYPE_OBJECT, view_template='cvs/partials/response_facility_view.html', edit_template='cvs/partials/response_facility_edit.html', report_columns=(('Original Text', 'text'), ('Health Facility', 'custom',),), edit_form='cvs.forms.FacilityResponseForm') def split_name(patient_name): names = patient_name.split(' ') first_name = names[0] last_name = '' middle_name = '' if len(names) > 1: last_name = names[len(names) - 1] if len(names) > 2: middle_name = ' '.join(names[1:-1]) return (first_name, middle_name, last_name) def get_or_create_patient(health_provider, patient_name, birthdate=None, deathdate=None, gender=None): for p in Patient.objects.filter(health_worker=health_provider): if dl_distance(p.full_name(), patient_name) <= 1:
try: return (now - datetime.datetime.strptime(lvalue, '%m/%d/%Y')).days except ValueError: rx = re.compile('[0-9]*') m = rx.match(lvalue) number = lvalue[m.start():m.end()].strip() unit = lvalue[m.end():].strip() if number: number = int(number) unit_amounts = { 'd':1, 'w':7, 'm':30, 'y':365, } unit_dict = { 'd':('day', 'days', 'dys', 'ds'), 'w':('wk', 'wks', 'weeks', 'week'), 'm':('mo', 'months', 'month', 'mnths', 'mos', 'ms', 'mns', 'mnth'), 'y':('year', 'years', 'yr', 'yrs'), } for key, words in unit_dict.iteritems(): if unit == key: return number * unit_amounts[key] for word in words: if dl_distance(word, unit) <= 1: return number * unit_amounts[key] # raise ValidationError Poll.register_poll_type('timedelt', 'Time Length', parse_timedelta, db_type=Attribute.TYPE_FLOAT)
poll.responses.exclude(contact__emisreporter__schools=None).filter(date__lte = now).\ select_related().values_list('poll__name', 'contact__emisreporter__schools__pk', 'date')) # populate the res_dict with school_pk and sent_at values as a list of lists for poll_name, school_pk, sent_at in all_responses: resp_dict[poll_name].append([school_pk, sent_at]) for poll_name in resp_dict.keys(): try: poll = Poll.objects.get(name=poll_name) other_responses = resp_dict[poll_name] for school_pk, sent_at in other_responses: school = School.objects.select_related().get(pk=school_pk) model.objects.create(poll=poll, school=school, sent_at=sent_at) except ObjectDoesNotExist: pass return Poll.register_poll_type('date', 'Date Response', parse_date_value, db_type=Attribute.TYPE_OBJECT) script_progress_was_completed.connect(edtrac_autoreg, weak=False) script_progress_was_completed.connect(edtrac_reschedule_script, weak=False) script_progress.connect(edtrac_autoreg_transition, weak=False) script_progress.connect(edtrac_attendance_script_transition, weak=False)