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

# -*- 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)