def settings_edit(request): user = request.user profile = user.get_profile() old_image = profile.logo_file address = profile.address if request.method == 'POST': userform = UserForm(request.POST, prefix="user", instance=user) profileform = UserProfileForm(request.POST, request.FILES, prefix="profile", instance=profile) if request.POST.get('profile-register'): profileform.fields['registration_city'].required = True if request.POST.get('profile-registration_city'): profileform.fields['register'].required = True addressform = AddressForm(request.POST, prefix="address", instance=address) if userform.is_valid() and profileform.is_valid( ) and addressform.is_valid(): if request.FILES: try: if old_image: if os.path.exists(old_image.path): os.remove(old_image.path) except: pass userform.save() profile = profileform.save() address = addressform.save(commit=False) address.save(user=user) messages.success(request, _('Your settings have been updated successfully')) if profile.creation_date > datetime.date.today(): messages.warning( request, _("Creation date is in the future, is this normal ?")) return redirect(reverse('settings_edit')) else: messages.error(request, _('Data provided are invalid')) else: userform = UserForm(prefix="user", instance=user) profileform = UserProfileForm(prefix="profile", instance=profile) addressform = AddressForm(prefix="address", instance=address) return render_to_response('core/settings_edit.html', { 'active': 'account', 'title': _('Settings'), 'userform': userform, 'profileform': profileform, 'addressform': addressform, 'logo': user.get_profile().logo_file }, context_instance=RequestContext(request))
def invoice_create_or_edit(request, id=None, customer_id=None, proposal_id=None): if id: title = _('Edit an invoice') invoice = get_object_or_404(Invoice, pk=id, owner=request.user) customer = invoice.customer else: title = _('Draw up an invoice') invoice = None """ in case of invoice creation, if a customer_id is not provided by url we look for it in the autocomplete field (case of direct invoice draw up without proposal) """ if request.method == 'POST': autocompleted_customer_id = request.POST.get('contact-customer_id') if not customer_id: customer_id = autocompleted_customer_id if customer_id: customer = get_object_or_404(Contact, pk=customer_id, owner=request.user) else: customer = None address = None original_customer_name = None if customer: address = customer.address original_customer_name = customer.name proposal = None if proposal_id: proposal = get_object_or_404(Proposal, pk=proposal_id, project__customer=customer, owner=request.user, state__in=[PROPOSAL_STATE_ACCEPTED]) InvoiceRowFormSet = inlineformset_factory(Invoice, InvoiceRow, form=InvoiceRowForm, fk_name="invoice", extra=1) proposals = Proposal.objects.get_proposals_for_invoice( customer, request.user, invoice) if request.method == 'POST': contactForm = ContactQuickCreateForm(request.POST, instance=customer, prefix="contact") if customer: contactForm.setToEditMode() addressForm = AddressForm(request.POST, instance=address, prefix="address") invoiceForm = InvoiceForm(request.POST, instance=invoice, prefix="invoice") invoicerowformset = InvoiceRowFormSet(request.POST, instance=invoice) for invoicerowform in invoicerowformset.forms: invoicerowform.fields['proposal'].queryset = proposals if contactForm.is_valid() and addressForm.is_valid() and \ invoiceForm.is_valid() and invoicerowformset.is_valid(): try: user = request.user address = addressForm.save(commit=False) address.save(user=user) customer = contactForm.save(commit=False) if not customer.contact_type: customer.contact_type = CONTACT_TYPE_COMPANY # restore original name since it shouldn't be changed in invoice if original_customer_name: customer.name = original_customer_name customer.address_id = address.id customer.save(user=user) invoice = invoiceForm.save(commit=False) invoice.customer = customer if invoice.paid_date: invoice.state = INVOICE_STATE_PAID invoice.save(user=user) invoiceForm.save_m2m() for invoicerowform in invoicerowformset.forms: if invoicerowform not in invoicerowformset.deleted_forms and invoicerowform.cleaned_data: invoicerow = invoicerowform.save(commit=False) invoicerow.invoice = invoice invoicerow.save(user=user) if invoicerow.proposal and invoicerow.balance_payments and invoice.paid_date: invoicerow.proposal.state = PROPOSAL_STATE_BALANCED invoicerow.proposal.save() for deleted_invoicerowform in invoicerowformset.deleted_forms: deleted_invoicerowform.instance.delete() invoice.check_amounts() messages.success(request, _('The invoice has been saved successfully')) if invoice.paid_date and invoice.paid_date > datetime.date.today( ): messages.warning( request, _("Paid date is in the future, is this normal ?")) if invoice.execution_begin_date and invoice.execution_end_date and invoice.execution_begin_date > invoice.execution_end_date: messages.warning( request, _("Execution begin date is greater than execution end date, is this normal ?" )) if invoice.penalty_date and invoice.penalty_date < invoice.payment_date: messages.warning( request, _("Payment date is greater than penalty date, is this normal ?" )) return redirect( reverse('invoice_detail', kwargs={'id': invoice.id})) except InvoiceRowAmountError: transaction.rollback() messages.error( request, _("Amounts invoiced can't be greater than proposals remaining amounts" )) except InvoiceIdNotUniqueError: transaction.rollback() invoiceForm._errors["invoice_id"] = invoiceForm.error_class( [_("Invoice id must be unique")]) else: messages.error(request, _('Data provided are invalid')) else: next_invoice_id = Invoice.objects.get_next_invoice_id(request.user) initial_data = None if not invoice: initial_data = { 'invoice_id': next_invoice_id, 'edition_date': datetime.datetime.now() } if proposal: initial_data['execution_begin_date'] = proposal.begin_date initial_data['execution_end_date'] = proposal.end_date contactForm = ContactQuickCreateForm(instance=customer, prefix="contact") if customer: contactForm.setToEditMode() addressForm = AddressForm(instance=address, prefix="address") invoiceForm = InvoiceForm(instance=invoice, prefix="invoice", initial=initial_data) initial_row_data = None if proposal: initial_row_data = [] for proposal_row in proposal.proposal_rows.all(): initial_row_data.append({ 'label': proposal_row.label, 'proposal': proposal, 'balance_payments': True, 'category': proposal_row.category, 'quantity': proposal_row.quantity, 'detail': proposal_row.detail, 'unit_price': proposal_row.unit_price }) InvoiceRowFormSet.extra = len(initial_row_data) + 1 invoicerowformset = InvoiceRowFormSet(instance=invoice) i = 0 for invoicerowform in invoicerowformset.forms: invoicerowform.fields['proposal'].queryset = proposals # for all rows except last if i < InvoiceRowFormSet.extra - 1: invoicerowform.initial = initial_row_data[i] i = i + 1 return render_to_response('invoice/edit.html', { 'active': 'accounts', 'title': title, 'from_proposal': proposal, 'contactForm': contactForm, 'addressForm': addressForm, 'invoiceForm': invoiceForm, 'invoicerowformset': invoicerowformset }, context_instance=RequestContext(request))
def contact_create_or_edit(request, id=None): if id: title = _('Edit a contact') contact = get_object_or_404(Contact, pk=id, owner=request.user) address = contact.address else: title = _('Add a contact') contact = None address = None company_search_engine = CompanySearchEngine.objects.get_current() PhoneNumberFormSet = inlineformset_factory(Contact, PhoneNumber, form=PhoneNumberForm, fk_name="contact", extra=1) contacts = Contact.objects.filter(owner=request.user) if contact: contacts = contacts.exclude(pk=contact.id) if request.method == 'POST': contactForm = ContactForm(request.POST, instance=contact, prefix="contact") contactForm.fields['contacts'].queryset = contacts addressForm = AddressForm(request.POST, instance=address, prefix="address") phonenumberformset = PhoneNumberFormSet(request.POST, instance=contact) if contactForm.is_valid() and addressForm.is_valid() and phonenumberformset.is_valid(): user = request.user address = addressForm.save(commit=False) address.save(user=user) contact = contactForm.save(commit=False) contact.address = address contact.save(user=user) contactForm.save_m2m() for phonenumberform in phonenumberformset.forms: phonenumber = phonenumberform.save(commit=False) if phonenumber.type: phonenumber.contact = contact phonenumber.save(user=user) for deleted_phonenumberrowform in phonenumberformset.deleted_forms: deleted_phonenumberrowform.cleaned_data['ownedobject_ptr'].delete() messages.success(request, _('The contact has been saved successfully')) return redirect(reverse('contact_detail', kwargs={'id': contact.id})) else: messages.error(request, _('Data provided are invalid')) else: contactForm = ContactForm(instance=contact, prefix="contact") contactForm.fields['contacts'].queryset = contacts addressForm = AddressForm(instance=address, prefix="address") phonenumberformset = PhoneNumberFormSet(instance=contact) return render_to_response('contact/edit.html', {'active': 'contact', 'title': title, 'contactForm': contactForm, 'addressForm': addressForm, 'phonenumberformset': phonenumberformset, 'search_engine': company_search_engine}, context_instance=RequestContext(request))