You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.5 KiB
39 lines
1.5 KiB
# -*- coding: utf-8 -*-
|
|
from django.shortcuts import get_object_or_404
|
|
from django.utils.decorators import method_decorator
|
|
from django.views.decorators.csrf import csrf_protect
|
|
from django.forms.models import model_to_dict
|
|
|
|
from ..models import Invoice, InvoiceItem
|
|
from ..forms import InvoiceForm, InvoiceItemForm
|
|
|
|
|
|
class AddByInvoiceMethodMixin(object):
|
|
"""Mixin: добавляет метод add_by_invoice."""
|
|
|
|
@method_decorator(csrf_protect)
|
|
def add_by_invoice(self, *args, **kwargs):
|
|
"""Добавить документ по Счёту."""
|
|
invoice_id = (kwargs['invoice_id'])
|
|
invoice = get_object_or_404(Invoice, pk=invoice_id, user=self.request.user)
|
|
invoice_items = InvoiceItem.objects.filter(parent=invoice).select_related()
|
|
|
|
kwargs['initial'] = model_to_dict(
|
|
invoice,
|
|
fields=getattr(InvoiceForm.Meta, 'fields', None),
|
|
exclude=getattr(InvoiceItemForm.Meta, 'exclude', None)
|
|
)
|
|
kwargs['initial'].update(self.init_form())
|
|
kwargs['initial']['invoice'] = invoice
|
|
|
|
if invoice_items:
|
|
kwargs['initial_items'] = []
|
|
for item in invoice_items:
|
|
kwargs['initial_items'].append(
|
|
model_to_dict(
|
|
item,
|
|
fields=getattr(InvoiceItemForm.Meta, 'fields', None),
|
|
exclude=getattr(InvoiceItemForm.Meta, 'exclude', None)
|
|
))
|
|
|
|
return self.add(self.request, *args, **kwargs)
|
|
|