def clean(self): cleaned_data = super(BrokerUserForm, self).clean() street = cleaned_data['address1'] city = cleaned_data['city'] state = cleaned_data['state'] zip = cleaned_data['zip'] if(self.instance): def compare(form, model, field): return form.cleaned_data[field] == model.__getattribute__(field) if(all(compare(self, self.instance, field) for field in ('address1', 'city', 'state', 'zip'))): self.cleaned_data['lat'] = self.instance.lat self.cleaned_data['longit'] = self.instance.longit return cleaned_data if ((street and city and state)) or ((street and zip)): results = geocode2(street, city, state, zip) if results['lat'] == 0.0 and results['lng'] == 0.0: from MHLogin.utils.admin_utils import mail_admins self.non_field_warnings = MSG_GEO_ADDRESS_INVALID mail_admins('Geocode error in Broker form save', 'Geocode lookup ' 'problems saving Broker: %s.\n\nGeocode message:\n%s' % (self.instance.username, results['msg'])) else: self.non_field_warnings = None cleaned_data['lat'] = results['lat'] cleaned_data['longit'] = results['lng'] else: raise forms.ValidationError(MSG_GEO_EMPTY) return cleaned_data
def create_user(username, first_name, last_name, password, addr="", city="", state="", zipcode="", uklass=None): """ Helper to create a user but will not work for all user types. If this is useful to add to common area we can make more generic to support all users. """ mhu = MHLUser(username=username, first_name=first_name, last_name=last_name) mhu.address1, mhu.city, mhu.state, mhu.zip = addr, city, state, zipcode mhu.is_active = mhu.is_staff = mhu.tos_accepted = mhu.mobile_confirmed = True mhu.set_password(password) if uklass != None and uklass == Administrator: mhu.is_superuser = True try: result = geocode2(mhu.address1, mhu.city, mhu.state, mhu.zip) mhu.lat, mhu.longit = result['lat'], result['lng'] except Exception: # For unittests when geocode not avail for any reason set coords 0.0. If a # test depends on valid values make special case for that in those tests. mhu.lat, mhu.longit = 0.0, 0.0 mhu.save() if uklass != None: user = uklass(user=mhu) if hasattr(user, 'office_lat'): user.office_lat = 0.0 if hasattr(user, 'office_longit'): user.office_longit = 0.0 user.save() return user if uklass != None else mhu
def clean(self): cleaned_data = self.cleaned_data street = cleaned_data['practice_address1'] city = cleaned_data['practice_city'] state = cleaned_data['practice_state'] zip = cleaned_data['practice_zip'] if(self.instance): def compare(form, model, field): return form.cleaned_data[field] == model.__getattribute__(field) if(all(compare(self, self.instance, field) for field in ('practice_address1', 'practice_city', 'practice_state', 'practice_zip'))): self.cleaned_data['practice_lat'] = self.instance.practice_lat self.cleaned_data['practice_longit'] = self.instance.practice_longit return cleaned_data if ((street and city and state)) or ((street and zip)): results = geocode2(street, city, state, zip) if results['lat'] == 0.0 and results['lng'] == 0.0: from MHLogin.utils.admin_utils import mail_admins self.non_field_warnings = _('Warning: Your form has been saved but ' 'determining coordinates from the entered address was not successful. ' 'Please verify correctness, if this persists our staff will be notified. ' 'Our apologies, thanks for your patience - DoctorCom staff.') mail_admins('Geocode error in Practice form save', 'Geocode lookup ' 'problems saving PracticeLocation: %s.\n\nGeocode message:\n%s' % (self.instance.practice_name, results['msg'])) else: self.non_field_warnings = None cleaned_data['practice_lat'] = results['lat'] cleaned_data['practice_longit'] = results['lng'] else: raise ValidationError(_('At a minimum, please enter in either ' 'street, city and state or street and zip')) return cleaned_data
def get_clinical_clerks_by_zipcode(zip, miles=settings.PROXIMITY_RANGE): if (zip): geocode_data = geocode2(None, None, None, zip) lat = geocode_data['lat'] longit = geocode_data['lng'] return get_clinical_clerks_by_coords(lat, longit, miles) else: return get_all_clinical_clerks()
def get_community_providers_by_zipcode(zip, miles=settings.PROXIMITY_RANGE, licensure=None): if (zip): geocode_data = geocode2(None, None, None, zip) lat = geocode_data['lat'] longit = geocode_data['lng'] return get_community_providers_by_coords(lat, longit, miles, licensure) else: return get_all_community_providers(licensure)
def save_model(self, request, obj, form, change): if any(d in form.changed_data for d in ('address1', 'address2', 'city', 'state', 'zip')) or\ ((obj.lat == 0.0 and obj.longit == 0.0) or (obj.lat == None and obj.longit == None)): # attempt geocode only if not explicitly changing lat/longit or lat/long empty addr = "%s %s" % (obj.address1, obj.address2) if obj.address2 else obj.address1 result = geocode2(addr, obj.city, obj.state, obj.zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): obj.lat = result['lat'] obj.longit = result['lng'] super(MHLUserAdmin, self).save_model(request, obj, form, change)
def save_model(self, request, obj, form, change): if any(d in form.changed_data for d in ('practice_address1', 'practice_address2', 'practice_city', 'practice_state', 'practice_zip')) or \ ((obj.practice_lat == 0.0 and obj.practice_longit == 0.0) or (obj.practice_lat == None and obj.practice_longit == None)): # attempt geocode only if not explicitly changing lat/longit or lat/long empty addr = "%s %s" % (obj.practice_address1, obj.practice_address2) result = geocode2(addr, obj.practice_city, obj.practice_state, obj.practice_zip) obj.practice_lat = result['lat'] obj.practice_longit = result['lng'] super(PracticeLocationAdmin, self).save_model(request, obj, form, change)
def clean(self): #raise Exception('Entered SiteForm clean function.') cleaned_data = self.cleaned_data street = cleaned_data['address1'] city = cleaned_data['city'] state = cleaned_data['state'] zip = cleaned_data['zip'] if ((street and city and state)) or ((street and zip)): geocode_response = geocode2(street, city, state, zip) cleaned_data['lat'] = geocode_response['lat'] cleaned_data['longit'] = geocode_response['lng'] else: raise forms.ValidationError(_('At a minimum, please enter in either ' 'street, city and state or street and zip')) return cleaned_data
def save_model(self, request, obj, form, change): if any(d in form.changed_data for d in ('office_address1', 'office_address2', 'office_city', 'office_state', 'office_zip')) or \ ((obj.office_lat == 0.0 and obj.office_longit == 0.0) or \ (obj.office_lat == None and obj.office_longit == None)): # attempt geocode only if not explicitly changing lat/longit or lat/long empty addr = "%s %s" % (obj.office_address1, obj.office_address2) \ if obj.office_address2 else obj.office_address1 result = geocode2(addr, obj.office_city, obj.office_state, obj.office_zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): obj.office_lat = result['lat'] obj.office_longit = result['lng'] # Fix model, our 'unique' prov-mhuser reln: Provider is-a User and has-a User obj.user = obj if obj.user != obj else obj.user super(ProviderAdmin, self).save_model(request, obj, form, change)
def clean(self): cleaned_data = self.cleaned_data street = cleaned_data['address1'] city = cleaned_data['city'] state = cleaned_data['state'] zip = cleaned_data['zip'] #clean mobile phone - required for providers if(not 'mobile_phone' in cleaned_data or not cleaned_data['mobile_phone']): raise forms.ValidationError(MSG_MOBILE_PHONE_REQUIRED) email_confirmed = cleaned_data['email_confirmed'] mobile_confirmed = cleaned_data['mobile_confirmed'] pager_confirmed = cleaned_data['pager_confirmed'] if not email_confirmed: cleaned_data['email'] = cleaned_data['old_email'] cleaned_data['email_confirmed'] = cleaned_data['old_email_confirmed'] if settings.CALL_ENABLE and not mobile_confirmed: cleaned_data['mobile_phone'] = cleaned_data['old_mobile_phone'] cleaned_data['mobile_confirmed'] = cleaned_data['old_mobile_confirmed'] if settings.CALL_ENABLE and not pager_confirmed and cleaned_data['pager']: cleaned_data['pager'] = cleaned_data['old_pager'] cleaned_data['pager_confirmed'] = cleaned_data['old_pager_confirmed'] if(self.instance): def compare(form, model, field): return form.cleaned_data[field] == model.__getattribute__(field) if(all(compare(self, self.instance, field) for field in ('address1', 'city', 'state', 'zip'))): self.cleaned_data['lat'] = self.instance.lat self.cleaned_data['longit'] = self.instance.longit return cleaned_data if ((street and city and state)) or ((street and zip)): results = geocode2(street, city, state, zip) if results['lat'] == 0.0 and results['lng'] == 0.0: from MHLogin.utils.admin_utils import mail_admins self.non_field_warnings = MSG_GEO_ADDRESS_INVALID mail_admins('Geocode error in Provider form save', 'Geocode lookup ' 'problems saving Provider: %s.\n\nGeocode message:\n%s' % (self.instance.username, results['msg'])) else: self.non_field_warnings = None cleaned_data['lat'] = results['lat'] cleaned_data['longit'] = results['lng'] else: raise forms.ValidationError(MSG_GEO_EMPTY) return cleaned_data
def create_user(username, first_name, last_name, password, addr="", city="", state="", zipcode="", uklass=MHLUser): user = uklass(username=username, first_name=first_name, last_name=last_name) user.address1 = addr user.city = city user.state = state user.zip = zipcode user.is_active = user.is_staff = user.tos_accepted = user.mobile_confirmed = True user.set_password(password) user.mobile_phone = random.randint(9001000000, 9009999999) if uklass == Administrator: user.is_superuser = True result = geocode2(user.address1, user.city, user.state, user.zip) user.lat = result['lat'] user.longit = result['lng'] if uklass != MHLUser: user.office_lat = 0.0 user.office_longit = 0.0 user.save() mhluser = user if uklass != MHLUser: user.user = MHLUser.objects.get(username=username) mhluser = MHLUser.objects.get(username=username) user.user = mhluser user.save() create_default_keys(mhluser) if uklass == Provider: # Generating the user's voicemail box configuration config = VMBox_Config(pin='') config.owner = user config.save() return user
def geocode_try_recover_lost_users(lostusers): """ Given an arry of lost MHLUsers lookup their address :param users: array of MHLUsers :returns: none """ # verify lost users, this extra call is questionable lostusers = lostusers.filter(Q(lat=0.0, longit=0.0) | Q(lat=None, longit=None)) for u in lostusers: result = geocode2(u.address1, u.city, u.state, u.zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): u.lat = result['lat'] u.longit = result['lng'] try: u.save() except (ValidationError, Exception), ve: logger.warn("Error saving user with new coords: %s-%s" % (ve.__class__.__name__, str(ve)))
def geocode_try_recover_lost_users(lostusers): """ Given an arry of lost MHLUsers lookup their address :param users: array of MHLUsers :returns: none """ # verify lost users, this extra call is questionable lostusers = lostusers.filter( Q(lat=0.0, longit=0.0) | Q(lat=None, longit=None)) for u in lostusers: result = geocode2(u.address1, u.city, u.state, u.zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): u.lat = result['lat'] u.longit = result['lng'] try: u.save() except (ValidationError, Exception), ve: logger.warn("Error saving user with new coords: %s-%s" % (ve.__class__.__name__, str(ve)))
def getProviderList(condition_dict, current_user=None, exclude_clerk=True): q_condition = Q() limit = None if condition_dict: if 'name' in condition_dict and condition_dict['name']: name = condition_dict['name'] search_terms = unicode.split(name) if len(search_terms) == 1: first_name = search_terms[0] last_name2 = '' else: first_name = search_terms[0] last_name = search_terms[1:] last_name2 = ' '.join(last_name) if last_name2: q_condition.add(Q(Q(user__first_name__icontains=first_name) & Q(user__last_name__icontains=last_name2) | Q(user__first_name__icontains=last_name2) & Q(user__last_name__icontains=first_name)), Q.AND) else: q_condition.add(Q(Q(user__first_name__icontains=first_name) | Q(user__last_name__icontains=first_name)), Q.AND) if 'address' in condition_dict and condition_dict['address']: address = condition_dict['address'] q_condition.add(Q(Q(user__address1__icontains=address) | Q(user__address2__icontains=address)), Q.AND) if 'city' in condition_dict and condition_dict['city']: city = condition_dict['city'] q_condition.add(Q(user__city__icontains=city), Q.AND) if 'state' in condition_dict and condition_dict['state']: state = condition_dict['state'] q_condition.add(Q(user__state=state), Q.AND) if 'zip' in condition_dict and condition_dict['zip']: zip = condition_dict['zip'] result = geocode2('', '', '', zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): lat = result['lat'] longit = result['lng'] distance = settings.PROXIMITY_RANGE if 'distance' in condition_dict and condition_dict['distance']: distance = condition_dict['distance'] latmin, latmax, longitmin, longitmax = miles2latlong_range(lat, longit, distance) q_condition.add(Q(user__lat__range=(latmin, latmax), user__longit__range=(longitmin, longitmax)), Q.AND) if 'current_hospital' in condition_dict and condition_dict['current_hospital']: current_hospital = condition_dict['current_hospital'] q_condition.add(Q(current_site__name__icontains=current_hospital), Q.AND) if 'hospital' in condition_dict and condition_dict['hospital']: hospital = condition_dict['hospital'] q_condition.add(Q(sites__name__icontains=hospital), Q.AND) if 'current_practice' in condition_dict and condition_dict['current_practice']: current_practice = condition_dict['current_practice'] q_condition.add(Q(current_practice__practice_name__icontains=current_practice), Q.AND) if 'practice' in condition_dict and condition_dict['practice']: practice = condition_dict['practice'] q_condition.add(Q(practices__practice_name__icontains=practice), Q.AND) if 'specialty' in condition_dict and condition_dict['specialty']: specialty = condition_dict['specialty'] provider_ids = None if specialty != "NP/PA/Midwife": provider_ids = Physician.objects.filter(specialty__icontains=specialty).values_list('user') else: physician_ids = Physician.objects.filter(Q(specialty=None) | Q(specialty='')).values_list('user') physician_ids = [pid[0] for pid in physician_ids] nppa_ids = NP_PA.objects.values_list('user') nppa_ids = [pid[0] for pid in nppa_ids] provider_ids = physician_ids + nppa_ids if provider_ids: q_condition.add(Q(pk__in=provider_ids), Q.AND) if 'limit' in condition_dict and condition_dict['limit']: limit = condition_dict['limit'] query_rs = Provider.active_objects.filter(q_condition) if exclude_clerk: query_rs = query_rs.exclude(clinical_clerk='True') total_count = query_rs.count() if limit and query_rs.count() > limit: query_rs = query_rs[:limit] data = {} data['total_count'] = total_count data['results'] = setProviderResultList(query_rs, current_user) return data
def done(self, request, form_list): inviteForm = form_list[0] brokerForm = form_list[1] brokerInfo = form_list[2] invite = Invitation.objects.get(code=inviteForm.cleaned_data['code'], userType__in=(300,)) geocode_response = geocode2(brokerInfo.cleaned_data['address1'], \ brokerInfo.cleaned_data['city'], \ brokerInfo.cleaned_data['state'], \ brokerInfo.cleaned_data['zip']) lat = geocode_response['lat'] longit = geocode_response['lng'] mhuser = brokerForm.save(commit=False) mhuser.set_password(brokerForm.cleaned_data['password1']) # use mhluser's address1, address2, city, state, zip to store "address" information, mhuser.address1 = brokerInfo.cleaned_data['address1'] mhuser.address2 = brokerInfo.cleaned_data['address2'] mhuser.city = brokerInfo.cleaned_data['city'] mhuser.state = brokerInfo.cleaned_data['state'] mhuser.zip = brokerInfo.cleaned_data['zip'] mhuser.lat = lat mhuser.longit = longit if (invite.typeVerified): mhuser.status_verified = True mhuser.status_verifier = MHLUser.objects.get(id=invite.sender_id) mhuser.tos_accepted = True if invite.recipient == request.POST['email']: mhuser.email_confirmed = True mhuser.save() broker = Broker() broker.user = mhuser broker.save() # Generating the user's voicemail box configuration config = VMBox_Config(pin='') config.owner = broker config.save() # LocalNumberForm, area_code, pin, mdcom_phone, mdcom_phone_sid numberForm = form_list[3] mdcom_phone = numberForm.mdcom_phone mdcom_phone_sid = numberForm.mdcom_phone_sid pin = numberForm.cleaned_data['pin'] broker.mdcom_phone = mdcom_phone broker.mdcom_phone_sid = mdcom_phone_sid #add doctorcom number if settings.CALL_ENABLE: user_type = ContentType.objects.get_for_model(broker) config = VMBox_Config.objects.get(owner_type=user_type, owner_id=broker.id) #config.change_pin(request, new_pin=pin) config.set_pin(pin) config.save() twilio_ConfigureProviderLocalNumber(broker, broker.mdcom_phone) request.session['userId'] = mhuser.id request.session['pin'] = pin broker.save() # TESTING_KMS_INTEGRATION create_default_keys(mhuser, brokerForm.cleaned_data['password1']) # Remove the invitation. invite.delete() return HttpResponseRedirect(self.redirect_url)
def done(self, request, form_list): inviteForm = form_list[0] providerForm = form_list[1] providerInfo = form_list[2] extraSetupForm = form_list[3] invite = Invitation.objects.get(code=inviteForm.cleaned_data['code']) provider = providerForm.save(commit=False) provider.set_password(providerForm.cleaned_data['password1']) if (invite.typeVerified): provider.status_verified = True provider.status_verifier = MHLUser.objects.get(id=invite.sender_id) provider.save() provider.user = MHLUser.objects.get(id=provider.id) type = providerForm.cleaned_data['userType'] if type == '1': Physician(user=provider, specialty=extraSetupForm.cleaned_data['specialty'], accepting_new_patients=extraSetupForm.cleaned_data['accepting_new_patients'], staff_type=extraSetupForm.cleaned_data['staff_type'] ).save() if type == '10': Physician(user=provider, specialty=extraSetupForm.cleaned_data['specialty'], accepting_new_patients=extraSetupForm.cleaned_data['accepting_new_patients'], staff_type=extraSetupForm.cleaned_data['staff_type'] ).save() provider.clinical_clerk = True if type == '2': NP_PA(user=provider).save() lst = extraSetupForm.cleaned_data['sites'] lst2 = extraSetupForm.cleaned_data['licensed_states'] sitesList = lst.split(',') sitesList2 = lst2.split(',') slst = [] slst2 = [] for s in sitesList: if s: slst.append(int(s)) for s in sitesList2: if s: slst2.append(int(s)) if slst: provider.sites = Site.objects.filter(id__in=slst) if extraSetupForm.cleaned_data['current_site']: currentSites = Site.objects.filter(id=int(extraSetupForm.cleaned_data['current_site'])) if currentSites: cs = currentSites[0] provider.current_site = cs if slst2: provider.licensure_states = States.objects.filter(id__in=slst2) geocode_response = geocode2(providerInfo.cleaned_data['address1'], \ providerInfo.cleaned_data['city'], \ providerInfo.cleaned_data['state'], \ providerInfo.cleaned_data['zip']) lat = geocode_response['lat'] longit = geocode_response['lng'] # use mhluser's address1, address2, city, state, zip to store "address" information, provider.address1 = providerInfo.cleaned_data['address1'] provider.address2 = providerInfo.cleaned_data['address2'] provider.city = providerInfo.cleaned_data['city'] provider.state = providerInfo.cleaned_data['state'] provider.zip = providerInfo.cleaned_data['zip'] provider.lat = lat provider.longit = longit #add by xlin in 20120504 to add current practice if invite.assignPractice: prac = invite.assignPractice provider.current_practice = get_practice_org(prac) provider.tos_accepted = True if invite.recipient == request.POST['email']: provider.email_confirmed = True # Generating the user's voicemail box configuration config = VMBox_Config(pin='') config.owner = provider config.save() # LocalNumberForm, area_code, pin, mdcom_phone, mdcom_phone_sid numberForm = form_list[4] mdcom_phone = numberForm.mdcom_phone mdcom_phone_sid = numberForm.mdcom_phone_sid pin = numberForm.cleaned_data['pin'] provider.mdcom_phone = mdcom_phone provider.mdcom_phone_sid = mdcom_phone_sid #add doctorcom number if settings.CALL_ENABLE: user_type = ContentType.objects.get_for_model(provider) config = VMBox_Config.objects.get(owner_type=user_type, owner_id=provider.id) #config.change_pin(request, new_pin=pin) config.set_pin(pin) config.save() twilio_ConfigureProviderLocalNumber(provider, provider.mdcom_phone) request.session['userId'] = provider.id request.session['pin'] = pin provider.save() if invite.assignPractice: provider.practices.add(prac) #add by xlin in 20120504 add new provider in call group group = PracticeLocation.objects.get(pk=invite.assignPractice.id) #ONLY if practice set up before V2 of answering service if (prac.uses_original_answering_serice()): cm = CallGroupMember(call_group=group.call_group, member=provider, alt_provider=1) cm.save() # TESTING_KMS_INTEGRATION create_default_keys(provider.user, providerForm.cleaned_data['password1']) # Remove the invitation. invite.delete(createdUser=provider.user, send_notice=False) return HttpResponseRedirect(self.redirect_url)
def getProviderList(condition_dict, current_user=None, exclude_clerk=True): q_condition = Q() limit = None if condition_dict: if 'name' in condition_dict and condition_dict['name']: name = condition_dict['name'] search_terms = unicode.split(name) if len(search_terms) == 1: first_name = search_terms[0] last_name2 = '' else: first_name = search_terms[0] last_name = search_terms[1:] last_name2 = ' '.join(last_name) if last_name2: q_condition.add( Q( Q(user__first_name__icontains=first_name) & Q(user__last_name__icontains=last_name2) | Q(user__first_name__icontains=last_name2) & Q(user__last_name__icontains=first_name)), Q.AND) else: q_condition.add( Q( Q(user__first_name__icontains=first_name) | Q(user__last_name__icontains=first_name)), Q.AND) if 'address' in condition_dict and condition_dict['address']: address = condition_dict['address'] q_condition.add( Q( Q(user__address1__icontains=address) | Q(user__address2__icontains=address)), Q.AND) if 'city' in condition_dict and condition_dict['city']: city = condition_dict['city'] q_condition.add(Q(user__city__icontains=city), Q.AND) if 'state' in condition_dict and condition_dict['state']: state = condition_dict['state'] q_condition.add(Q(user__state=state), Q.AND) if 'zip' in condition_dict and condition_dict['zip']: zip = condition_dict['zip'] result = geocode2('', '', '', zip) if (result['lat'] != 0.0 and result['lng'] != 0.0): lat = result['lat'] longit = result['lng'] distance = settings.PROXIMITY_RANGE if 'distance' in condition_dict and condition_dict['distance']: distance = condition_dict['distance'] latmin, latmax, longitmin, longitmax = miles2latlong_range( lat, longit, distance) q_condition.add( Q(user__lat__range=(latmin, latmax), user__longit__range=(longitmin, longitmax)), Q.AND) if 'current_hospital' in condition_dict and condition_dict[ 'current_hospital']: current_hospital = condition_dict['current_hospital'] q_condition.add(Q(current_site__name__icontains=current_hospital), Q.AND) if 'hospital' in condition_dict and condition_dict['hospital']: hospital = condition_dict['hospital'] q_condition.add(Q(sites__name__icontains=hospital), Q.AND) if 'current_practice' in condition_dict and condition_dict[ 'current_practice']: current_practice = condition_dict['current_practice'] q_condition.add( Q(current_practice__practice_name__icontains=current_practice), Q.AND) if 'practice' in condition_dict and condition_dict['practice']: practice = condition_dict['practice'] q_condition.add(Q(practices__practice_name__icontains=practice), Q.AND) if 'specialty' in condition_dict and condition_dict['specialty']: specialty = condition_dict['specialty'] provider_ids = None if specialty != "NP/PA/Midwife": provider_ids = Physician.objects.filter( specialty__icontains=specialty).values_list('user') else: physician_ids = Physician.objects.filter( Q(specialty=None) | Q(specialty='')).values_list('user') physician_ids = [pid[0] for pid in physician_ids] nppa_ids = NP_PA.objects.values_list('user') nppa_ids = [pid[0] for pid in nppa_ids] provider_ids = physician_ids + nppa_ids if provider_ids: q_condition.add(Q(pk__in=provider_ids), Q.AND) if 'limit' in condition_dict and condition_dict['limit']: limit = condition_dict['limit'] query_rs = Provider.active_objects.filter(q_condition) if exclude_clerk: query_rs = query_rs.exclude(clinical_clerk='True') total_count = query_rs.count() if limit and query_rs.count() > limit: query_rs = query_rs[:limit] data = {} data['total_count'] = total_count data['results'] = setProviderResultList(query_rs, current_user) return data
def test_emptyaddress(self, geo): results = geocode2('', '', '', '', self.MockYahooGeo) self.assertTrue(results['lat'] == 0.0 and results['lng'] == 0.0)
def test_goodaddress(self, geo): results = geocode2('555 Bryant St', 'Palo Alto', 'CA', '', self.MockYahooGeo) self.assertTrue(results['lat'] != 0.0 and results['lng'] != 0.0) self.assertEquals(round(results['lat'], 2), 37.45, results['lat']) self.assertEquals(round(results['lng'], 2), -122.16, results['lng'])
def manage_sites(request): provider = user_is_provider(request.user) staffer = user_is_office_staff(request.user) if (not (provider or staffer)): return HttpResponseRedirect('/') try: if (provider): user = provider lat = float(user.lat) longit = float(user.longit) elif (staffer): user = staffer if user.current_practice: lat = float(user.current_practice.practice_lat) longit = float(user.current_practice.practice_longit) else: geocode_response = geocode2(user.office_address1, \ user.office_city, user.office_state, user.office_zip) lat = geocode_response['lat'] longit = geocode_response['lng'] except: lat, longit = (0, 0) context = get_context(request) # get the latitutde, longitude range to search for nearby sites if not lat and not longit: latmin, latmax, longitmin, longitmax = (0, 0, 0, 0) else: latmin, latmax, longitmin, longitmax = miles2latlong_range(lat, longit) sites = user.sites.all() if (request.method == "POST"): searchby = '' searchbyvalue = '' """ #raise Exception(request.POST) if ('submit_search_criteria' and 'searchby' and 'searchbyvalue' in request.POST): raise Exception(request.POST) searchby = request.POST['searchby'] searchbyvalue = request.POST['searchbyvalue'] #raise Exception(request.POST) if (searchby == 'proximity'): miles = float(searchbyvalue) del_lat, del_longit = miles2latlong(miles, lat, longit) latmin = lat - del_lat latmax = lat + del_lat longitmin = longit - del_longit longitmax = longit + del_longit #raise Exception(miles, latmin, latmax, longitmin, longitmax) """ context['site_form'] = CurrentSiteForm(sites, request.POST) site_list_ids = [site.id for site in sites] context['affiliation_form'] = SiteManagementForm( searchby, searchbyvalue, latmin, latmax, longitmin, longitmax, site_list_ids, request.POST) # context['affiliation_form'] = SiteManagementForm(request.POST) if (context['site_form'].is_valid()): new_site_id = int(context['site_form'].cleaned_data['current']) if (new_site_id == 0): new_site = None else: site_ids = [site.id for site in sites] if (not new_site_id in site_ids): raise Exception( _("User tried to select site id ") + str(new_site_id) + _(", but isn't affiliated with that site.")) # Check to see if the site exists new_site = Site.objects.filter(id=new_site_id).all() if (new_site.count() != 1): raise Exception( _("Incorrect number of sites found for id ") + str(new_site_id)) new_site = new_site[0] user.current_site = new_site user.save() return HttpResponseRedirect( reverse('MHLogin.MHLUsers.views.profile_view')) elif (context['affiliation_form'].is_valid()): new_sites = context['affiliation_form'].cleaned_data['site_list'] new_site_ids = [site.id for site in new_sites] # This ensures that providers can't remove their current site. The outer check # is just to make sure that an error doesn't occur when the provider doesn't have # a current site. site_match = True if (user.current_site != None): site_match = False for site in new_site_ids: if (user.current_site.id == site): site_match = True if (site_match): user.sites = new_sites user.save() return HttpResponseRedirect( reverse('MHLogin.MHLUsers.views.profile_view')) else: context['affiliation_form'].error_current_site_removal() else: if (user.sites): site_list_ids = [site.id for site in user.sites.all()] site_list = { 'site_list': site_list_ids, 'record_key': '1IFSWP3s8gjRpqzJyvhM', } context['affiliation_form'] = SiteManagementForm('proximity', 'none', latmin, latmax, longitmin, longitmax, site_list_ids, initial=site_list) # context['affiliation_form'] = SiteManagementForm(initial=site_list) else: site_list = dict() site_list = { 'record_key': '1IFSWP3s8gjRpqzJyvhM', } context['affiliation_form'] = SiteManagementForm('proximity', 'none', latmin, latmax, longitmin, longitmax, [], initial=site_list) # context['affiliation_form'] = SiteManagementForm(initial=site_list) if (user.current_site): current_site = { 'current': user.current_site.id, } context['site_form'] = CurrentSiteForm(sites, initial=current_site) else: context['site_form'] = CurrentSiteForm(sites) #context['new_affiliation_form'] = NewSiteManagementForm(initial=site_list) return render_to_response("Sites/sites_edit.html", context)
def done(self, request, form_list): inviteForm = form_list[0] brokerForm = form_list[1] brokerInfo = form_list[2] invite = Invitation.objects.get(code=inviteForm.cleaned_data['code'], userType__in=(300, )) geocode_response = geocode2(brokerInfo.cleaned_data['address1'], \ brokerInfo.cleaned_data['city'], \ brokerInfo.cleaned_data['state'], \ brokerInfo.cleaned_data['zip']) lat = geocode_response['lat'] longit = geocode_response['lng'] mhuser = brokerForm.save(commit=False) mhuser.set_password(brokerForm.cleaned_data['password1']) # use mhluser's address1, address2, city, state, zip to store "address" information, mhuser.address1 = brokerInfo.cleaned_data['address1'] mhuser.address2 = brokerInfo.cleaned_data['address2'] mhuser.city = brokerInfo.cleaned_data['city'] mhuser.state = brokerInfo.cleaned_data['state'] mhuser.zip = brokerInfo.cleaned_data['zip'] mhuser.lat = lat mhuser.longit = longit if (invite.typeVerified): mhuser.status_verified = True mhuser.status_verifier = MHLUser.objects.get(id=invite.sender_id) mhuser.tos_accepted = True if invite.recipient == request.POST['email']: mhuser.email_confirmed = True mhuser.save() broker = Broker() broker.user = mhuser broker.save() # Generating the user's voicemail box configuration config = VMBox_Config(pin='') config.owner = broker config.save() # LocalNumberForm, area_code, pin, mdcom_phone, mdcom_phone_sid numberForm = form_list[3] mdcom_phone = numberForm.mdcom_phone mdcom_phone_sid = numberForm.mdcom_phone_sid pin = numberForm.cleaned_data['pin'] broker.mdcom_phone = mdcom_phone broker.mdcom_phone_sid = mdcom_phone_sid #add doctorcom number if settings.CALL_ENABLE: user_type = ContentType.objects.get_for_model(broker) config = VMBox_Config.objects.get(owner_type=user_type, owner_id=broker.id) #config.change_pin(request, new_pin=pin) config.set_pin(pin) config.save() twilio_ConfigureProviderLocalNumber(broker, broker.mdcom_phone) request.session['userId'] = mhuser.id request.session['pin'] = pin broker.save() # TESTING_KMS_INTEGRATION create_default_keys(mhuser, brokerForm.cleaned_data['password1']) # Remove the invitation. invite.delete() return HttpResponseRedirect(self.redirect_url)
def manage_sites(request): provider = user_is_provider(request.user) staffer = user_is_office_staff(request.user) if (not (provider or staffer)): return HttpResponseRedirect('/') try: if (provider): user = provider lat = float(user.lat) longit = float(user.longit) elif (staffer): user = staffer if user.current_practice: lat = float(user.current_practice.practice_lat) longit = float(user.current_practice.practice_longit) else: geocode_response = geocode2(user.office_address1, \ user.office_city, user.office_state, user.office_zip) lat = geocode_response['lat'] longit = geocode_response['lng'] except: lat, longit = (0, 0) context = get_context(request) # get the latitutde, longitude range to search for nearby sites if not lat and not longit: latmin, latmax, longitmin, longitmax = (0, 0, 0, 0) else: latmin, latmax, longitmin, longitmax = miles2latlong_range(lat, longit) sites = user.sites.all() if (request.method == "POST"): searchby = '' searchbyvalue = '' """ #raise Exception(request.POST) if ('submit_search_criteria' and 'searchby' and 'searchbyvalue' in request.POST): raise Exception(request.POST) searchby = request.POST['searchby'] searchbyvalue = request.POST['searchbyvalue'] #raise Exception(request.POST) if (searchby == 'proximity'): miles = float(searchbyvalue) del_lat, del_longit = miles2latlong(miles, lat, longit) latmin = lat - del_lat latmax = lat + del_lat longitmin = longit - del_longit longitmax = longit + del_longit #raise Exception(miles, latmin, latmax, longitmin, longitmax) """ context['site_form'] = CurrentSiteForm(sites, request.POST) site_list_ids = [site.id for site in sites] context['affiliation_form'] = SiteManagementForm(searchby, searchbyvalue, latmin, latmax, longitmin, longitmax, site_list_ids, request.POST) # context['affiliation_form'] = SiteManagementForm(request.POST) if (context['site_form'].is_valid()): new_site_id = int(context['site_form'].cleaned_data['current']) if (new_site_id == 0): new_site = None else: site_ids = [site.id for site in sites] if (not new_site_id in site_ids): raise Exception(_("User tried to select site id ") + str(new_site_id) + _(", but isn't affiliated with that site.")) # Check to see if the site exists new_site = Site.objects.filter(id=new_site_id).all() if (new_site.count() != 1): raise Exception(_("Incorrect number of sites found for id ") + str(new_site_id)) new_site = new_site[0] user.current_site = new_site user.save() return HttpResponseRedirect(reverse('MHLogin.MHLUsers.views.profile_view')) elif (context['affiliation_form'].is_valid()): new_sites = context['affiliation_form'].cleaned_data['site_list'] new_site_ids = [site.id for site in new_sites] # This ensures that providers can't remove their current site. The outer check # is just to make sure that an error doesn't occur when the provider doesn't have # a current site. site_match = True if (user.current_site != None): site_match = False for site in new_site_ids: if (user.current_site.id == site): site_match = True if (site_match): user.sites = new_sites user.save() return HttpResponseRedirect(reverse('MHLogin.MHLUsers.views.profile_view')) else: context['affiliation_form'].error_current_site_removal() else: if (user.sites): site_list_ids = [site.id for site in user.sites.all()] site_list = { 'site_list': site_list_ids, 'record_key': '1IFSWP3s8gjRpqzJyvhM', } context['affiliation_form'] = SiteManagementForm('proximity', 'none', latmin, latmax, longitmin, longitmax, site_list_ids, initial=site_list) # context['affiliation_form'] = SiteManagementForm(initial=site_list) else: site_list = dict() site_list = { 'record_key': '1IFSWP3s8gjRpqzJyvhM', } context['affiliation_form'] = SiteManagementForm('proximity', 'none', latmin, latmax, longitmin, longitmax, [], initial=site_list) # context['affiliation_form'] = SiteManagementForm(initial=site_list) if (user.current_site): current_site = { 'current': user.current_site.id, } context['site_form'] = CurrentSiteForm(sites, initial=current_site) else: context['site_form'] = CurrentSiteForm(sites) #context['new_affiliation_form'] = NewSiteManagementForm(initial=site_list) return render_to_response("Sites/sites_edit.html", context)
def done(self, request, form_list): inviteForm = form_list[0] providerForm = form_list[1] providerInfo = form_list[2] extraSetupForm = form_list[3] invite = Invitation.objects.get(code=inviteForm.cleaned_data['code']) provider = providerForm.save(commit=False) provider.set_password(providerForm.cleaned_data['password1']) if (invite.typeVerified): provider.status_verified = True provider.status_verifier = MHLUser.objects.get(id=invite.sender_id) provider.save() provider.user = MHLUser.objects.get(id=provider.id) type = providerForm.cleaned_data['userType'] if type == '1': Physician( user=provider, specialty=extraSetupForm.cleaned_data['specialty'], accepting_new_patients=extraSetupForm. cleaned_data['accepting_new_patients'], staff_type=extraSetupForm.cleaned_data['staff_type']).save() if type == '10': Physician( user=provider, specialty=extraSetupForm.cleaned_data['specialty'], accepting_new_patients=extraSetupForm. cleaned_data['accepting_new_patients'], staff_type=extraSetupForm.cleaned_data['staff_type']).save() provider.clinical_clerk = True if type == '2': NP_PA(user=provider).save() lst = extraSetupForm.cleaned_data['sites'] lst2 = extraSetupForm.cleaned_data['licensed_states'] sitesList = lst.split(',') sitesList2 = lst2.split(',') slst = [] slst2 = [] for s in sitesList: if s: slst.append(int(s)) for s in sitesList2: if s: slst2.append(int(s)) if slst: provider.sites = Site.objects.filter(id__in=slst) if extraSetupForm.cleaned_data['current_site']: currentSites = Site.objects.filter( id=int(extraSetupForm.cleaned_data['current_site'])) if currentSites: cs = currentSites[0] provider.current_site = cs if slst2: provider.licensure_states = States.objects.filter(id__in=slst2) geocode_response = geocode2(providerInfo.cleaned_data['address1'], \ providerInfo.cleaned_data['city'], \ providerInfo.cleaned_data['state'], \ providerInfo.cleaned_data['zip']) lat = geocode_response['lat'] longit = geocode_response['lng'] # use mhluser's address1, address2, city, state, zip to store "address" information, provider.address1 = providerInfo.cleaned_data['address1'] provider.address2 = providerInfo.cleaned_data['address2'] provider.city = providerInfo.cleaned_data['city'] provider.state = providerInfo.cleaned_data['state'] provider.zip = providerInfo.cleaned_data['zip'] provider.lat = lat provider.longit = longit #add by xlin in 20120504 to add current practice if invite.assignPractice: prac = invite.assignPractice provider.current_practice = get_practice_org(prac) provider.tos_accepted = True if invite.recipient == request.POST['email']: provider.email_confirmed = True # Generating the user's voicemail box configuration config = VMBox_Config(pin='') config.owner = provider config.save() # LocalNumberForm, area_code, pin, mdcom_phone, mdcom_phone_sid numberForm = form_list[4] mdcom_phone = numberForm.mdcom_phone mdcom_phone_sid = numberForm.mdcom_phone_sid pin = numberForm.cleaned_data['pin'] provider.mdcom_phone = mdcom_phone provider.mdcom_phone_sid = mdcom_phone_sid #add doctorcom number if settings.CALL_ENABLE: user_type = ContentType.objects.get_for_model(provider) config = VMBox_Config.objects.get(owner_type=user_type, owner_id=provider.id) #config.change_pin(request, new_pin=pin) config.set_pin(pin) config.save() twilio_ConfigureProviderLocalNumber(provider, provider.mdcom_phone) request.session['userId'] = provider.id request.session['pin'] = pin provider.save() if invite.assignPractice: provider.practices.add(prac) #add by xlin in 20120504 add new provider in call group group = PracticeLocation.objects.get(pk=invite.assignPractice.id) #ONLY if practice set up before V2 of answering service if (prac.uses_original_answering_serice()): cm = CallGroupMember(call_group=group.call_group, member=provider, alt_provider=1) cm.save() # TESTING_KMS_INTEGRATION create_default_keys(provider.user, providerForm.cleaned_data['password1']) # Remove the invitation. invite.delete(createdUser=provider.user, send_notice=False) return HttpResponseRedirect(self.redirect_url)