def add_provider(request): if request.method == "POST": admin_form = UserCreationForm(request.POST) provider_form = ProviderForm(request.POST) location_form = LocationForm(request.POST) if admin_form.is_valid() and provider_form.is_valid() and location_form.is_valid(): admin = admin_form.save() provider = provider_form.save(commit=False) provider.admin = admin provider.save() location = location_form.save(commit=False) location.provider = provider location.save() location_form.save_m2m() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: admin_form = UserCreationForm() provider_form = ProviderForm() location_form = LocationForm() return render(request, "provider/new.html", { 'provider_form': provider_form, 'location_form': location_form, 'admin_form': admin_form, })
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) admin_user = provider.admin #TEMPORARY location = Location.objects.filter(provider__pk = provider_id)[0] if request.user == admin_user: # only the provider's registered user can edit page if request.method == 'POST': provider_form = ProviderForm(request.POST,instance=provider) location_form = LocationForm(request.POST,instance=location) if provider_form.is_valid() and location_form.is_valid(): provider = provider_form.save(commit=False) provider.admin = admin_user provider.save() location = location_form.save(commit=False) location.provider = provider location.save() location_form.save_m2m() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: provider_form = ProviderForm(instance=provider) location_form = LocationForm(instance=location) #todo: turn into formsets--right now this is creating a new loca return render(request, "provider/edit.html", { 'provider_form': provider_form, 'location_form': location_form }) else: return HttpResponseRedirect(reverse('index'))
def add_provider(request): if request.method == "POST": form = ProviderForm(request.POST) if form.is_valid(): provider = form.save(commit=False) # changed from save to save nested locations # timestamp? provider.save() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: # request.method == "GET" form = ProviderForm() return render(request, "provider/new.html", { 'form': form })
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) if request.method == 'POST': form = ProviderForm(request.POST, instance=provider) if form.is_valid(): provider = form.save(commit=False) # timestamp? provider.save() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: form = ProviderForm(instance=provider) return render(request, "provider/edit.html", { 'form': form })
def add_provider(request): # users should only be able to make one provider if request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) else: LocationFormset = modelformset_factory(Location, exclude=('provider', )) if request.method == "POST": admin_form = UserCreationForm(request.POST) provider_form = ProviderForm(request.POST) location_formset = LocationFormset(request.POST, request.FILES) if admin_form.is_valid() and provider_form.is_valid( ) and location_formset.is_valid(): u_name = admin_form.cleaned_data.get('username') u_pass = admin_form.cleaned_data.get('password2') admin = admin_form.save() provider = provider_form.save(commit=False) provider.admin = admin provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider location.save() location_form.save_m2m() location_formset.save() user = authenticate(username=u_name, password=u_pass) login(request, user) return HttpResponseRedirect( reverse('provider_detail', kwargs={'provider_id': provider.id})) else: admin_form = UserCreationForm() provider_form = ProviderForm() location_formset = LocationFormset( queryset=Location.objects.none()) return render( request, "provider/new.html", { 'provider_form': provider_form, 'location_formset': location_formset, 'admin_form': admin_form, })
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) admin_user = provider.admin if request.user == admin_user: # only the provider's registered user can edit page if request.method == 'POST': password_change_form = PasswordChangeForm(request.POST) provider_form = ProviderForm(request.POST, instance=provider) location_formset = LocationForm(request.POST, request.FILES) if password_change_form.is_valid() and provider_form.is_valid( ) and location_form.is_valid(): password_change_form.save() provider = provider_form.save(commit=False) provider.admin = admin_user provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider #location.save() location_form.save_m2m() location_formset.save() return HttpResponseRedirect( reverse('provider_detail', kwargs={'provider_id': provider.id})) else: password_change_form = PasswordChangeForm(user=admin_user) provider_form = ProviderForm(instance=provider) location_formset = LocationFormset( queryset=Location.objects.filter(provider__pk=provider_id)) return render( request, "provider/edit.html", { 'provider': provider, 'provider_form': provider_form, 'location_formset': location_formset, }) else: return HttpResponseRedirect(reverse('index'))
def add_provider(request): # users should only be able to make one provider if request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) else: LocationFormset = formset_factory(LocationForm) if request.method == "POST": admin_form = UserCreationForm(request.POST) provider_form = ProviderForm(request.POST) #location_form = LocationForm(request.POST) location_formset = LocationFormset(request.POST, request.FILES) if admin_form.is_valid() and provider_form.is_valid() and location_formset.is_valid(): u_name = admin_form.cleaned_data.get('username') u_pass = admin_form.cleaned_data.get('password2') admin = admin_form.save() provider = provider_form.save(commit=False) provider.admin = admin provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider location.save() location_form.save_m2m() user = authenticate(username=u_name, password=u_pass) login(request, user) return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: admin_form = UserCreationForm() provider_form = ProviderForm() #location_form = LocationForm() location_formset = LocationFormset() return render(request, "provider/new.html", { 'provider_form': provider_form, 'location_formset': location_formset, 'admin_form': admin_form, })
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) admin_user = provider.admin if request.user == admin_user: # only the provider's registered user can edit page if request.method == 'POST': password_change_form = PasswordChangeForm(request.POST) provider_form = ProviderForm(request.POST,instance=provider) location_formset = LocationForm(request.POST,request.FILES) if password_change_form.is_valid() and provider_form.is_valid() and location_form.is_valid(): password_change_form.save() provider = provider_form.save(commit=False) provider.admin = admin_user provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider #location.save() location_form.save_m2m() location_formset.save() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: password_change_form = PasswordChangeForm(user=admin_user) provider_form = ProviderForm(instance=provider) location_formset = LocationFormset(queryset=Location.objects.filter(provider__pk = provider_id)) return render(request, "provider/edit.html", { 'provider': provider, 'provider_form': provider_form, 'location_formset': location_formset, }) else: return HttpResponseRedirect(reverse('index'))
def edit_provider(request, provider_id): provider = get_object_or_404(Provider, id=provider_id) admin_user = provider.admin if request.user and request.user == admin_user: # only the provider's registered user can edit page if request.is_ajax(): if request.method == 'POST': #and request.is_ajax(): provider_form = ProviderForm(request.POST,instance=provider) if provider_form.is_valid(): provider = provider_form.save() template = 'provider/provider_profile.html' data = { 'provider_id': provider.id, } return HttpResponse(simplejson.dumps(data), content_type="application/json") else: errors_dict = {} if provider_form.errors: for error in provider_form.errors: e = provider_form.errors[error] errors_dict[error] = unicode(e) return HttpResponseBadRequest(simplejson.dumps(errors_dict)) else: template = 'provider/provider_edit.html' data = { 'provider_form': ProviderForm(instance=provider), 'provider_id': provider.id, } return render(request, template, data) else: if request.method == 'POST': provider_form = ProviderForm(request.POST,instance=provider) password_change_form = PasswordChangeForm(request.POST) location_formset = LocationForm(request.POST,request.FILES) if password_change_form.is_valid() and provider_form.is_valid() and location_form.is_valid(): password_change_form.save() provider = provider_form.save(commit=False) provider.admin = admin_user provider.save() for location_form in location_formset: location = location_form.save(commit=False) location.provider = provider location_formset.save() return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) else: password_change_form = PasswordChangeForm(user=admin_user) provider_form = ProviderForm(instance=provider) location_formset = LocationFormset(queryset=Location.objects.filter(provider__pk = provider_id)) return render(request, "provider/edit.html", { 'provider': provider, 'provider_form': provider_form, 'location_formset': location_formset, 'password_change_form': password_change_form, }) else: return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id}))
def add_provider(request): # Users should only be able to make one provider, so send the user back to the home page if they try to add a new provider. if request.user.is_authenticated(): return HttpResponseRedirect(reverse('index')) # If no user is logged in, let them register a new provider. else: # Load the fields for a location from the model - except the provider field, since the organization and its office are automatically linked when the form is submitted LocationFormset = modelformset_factory(Location, exclude=('provider',)) # When submit is clicked, post the data that's been entered into each field so it can be checked if request.method == "POST": admin_form = UserCreationForm(request.POST) provider_form = ProviderForm(request.POST) location_formset = LocationFormset(request.POST) # Check to make sure all of the form data is entered and valid if admin_form.is_valid() and provider_form.is_valid() and location_formset.is_valid(): u_name = admin_form.cleaned_data.get('username') u_pass = admin_form.cleaned_data.get('password2') admin = admin_form.save() # At this point we've committed a user, but the line below is going to have us save a provider object so we can use it to save a location, but not yet take the time to make a database commit provider = provider_form.save(commit=False) provider.admin = admin provider.save() resources_needed = [] resources_available = [] # Grab email set dependent on language value if request.LANGUAGE_CODE == 'es': from email_texts import spanish_version_emails as emails else: from email_texts import english_version_emails as emails # At this point we've saved a user and a provider, and have blank lists of resources ready to accept info about the location for location_form in location_formset: # The formset may have more than one form in it - more get added on the template via javascript. So we have to loop through and save data from each one here. location = location_form.save(commit=False) # The commit=false here lets us create a provider and a location, then connect them, THEN save everthing in the database. Saves time making database commits. location.provider = provider location.save() location_form.save_m2m() # We have to use the .save many-to-many function because we used commit=False earlier # If there are resources needed or available at any location, grab them from each location and combine them in a list that gets associated with the provider #needed so we can send them in the email #note that this messy loop is to prevent repeats AND to deal with translation #and is all around generally a pretty terrible hack try: #not a huge deal if this is wrong in the confirmation, but def don't want site to crash for r in location.resources_needed.all(): if r.name.lower() in emails['resource_translation']: translated_name = emails['resource_translation'][r.name.lower()] if translated_name not in resources_needed: resources_needed.append(translated_name) for r in location.resources_available.all(): if r.name.lower() in emails['resource_translation']: translated_name = emails['resource_translation'][r.name.lower()] if translated_name not in resources_needed: resources_available.append(translated_name) except: pass location_formset.save() # Now that we've added up resources, save the whole formset. # Transform resources lists into strings (or 'None' if none) for e-mail sending if len(resources_needed) > 0: resources_needed = ', '.join(resources_needed) else: resources_needed = 'None' if len(resources_available) > 0: resources_available = ', '.join(resources_available) else: resources_available = 'None' # Grab admin email list (if not already grabbed or stored somewhere else) admin_email_list = [admin_email_address] # Build confirmation email email = emails['provider_signup']['confirmation'] email['body'] = email['body'].format(provider_name = provider.name, org_username=provider.admin.username, resources_needed=resources_needed, resources_available=resources_available) confirmation_email = (email['subject'], email['body'], email['from'], [provider.admin.username]) # Build admin notification email email = emails['provider_signup']['admin'] email['body'] = email['body'].format(org_username=provider.admin.username) admin_email = (email['subject'], email['body'], email['from'], admin_email_list) # Send Them try: send_mass_mail((admin_email, confirmation_email), fail_silently=False) except: pass # Authenticate and log in the user user = authenticate(username=u_name, password=u_pass) login(request, user) return HttpResponseRedirect(reverse('provider_detail', kwargs={'provider_id': provider.id})) # If we've just arrived on the page, load the blank form(s) else: admin_form = UserCreationForm() # The piece of the new provider form that takes info on its primary staff person provider_form = ProviderForm() # The piece of the new provider form that takes info about the organization location_formset = LocationFormset(queryset=Location.objects.none()) # The piece of the new provider form that takes info about the organization's first office location, and assumes you have no locations loaded yet return render(request, "provider/new.html", { 'provider_form': provider_form, 'location_formset': location_formset, 'admin_form': admin_form, })