示例#1
0
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

    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},
                               context_instance=RequestContext(request))
示例#2
0
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))
示例#3
0
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))
示例#4
0
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))
示例#5
0
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))
示例#6
0
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),
    )