Exemple #1
0
	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
Exemple #2
0
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 
Exemple #3
0
	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
Exemple #4
0
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()
Exemple #5
0
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)
Exemple #6
0
	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)
Exemple #7
0
    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)
Exemple #8
0
	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)
Exemple #9
0
 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)
Exemple #10
0
	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
Exemple #11
0
	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)
Exemple #12
0
	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
Exemple #13
0
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
Exemple #14
0
 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)
Exemple #15
0
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)))
Exemple #16
0
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)))
Exemple #17
0
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
Exemple #18
0
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
Exemple #19
0
	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)
Exemple #20
0
	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)
Exemple #21
0
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
Exemple #22
0
	def test_emptyaddress(self, geo):
		results = geocode2('', '', '', '', self.MockYahooGeo)
		self.assertTrue(results['lat'] == 0.0 and results['lng'] == 0.0)
Exemple #23
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'])
Exemple #24
0
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)
Exemple #25
0
    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)
Exemple #26
0
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)
Exemple #27
0
    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)