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.
89 lines
3.4 KiB
89 lines
3.4 KiB
# -*- coding: utf-8 -*-
|
|
from django.db import models
|
|
|
|
from customer.models import Client
|
|
from docs.models.base_models import BaseInvoiceModel, BaseItemInvoiceModel
|
|
from docs.models.refs import Currency
|
|
from docs.models.mixins import SignedStatusFieldMixin, InvoiceFieldMixin
|
|
from docs.models.linked_docs_mixin import LinkedDocsMixin
|
|
|
|
|
|
class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, LinkedDocsMixin):
|
|
"""Счёт-фактура"""
|
|
doc_reason = models.CharField('Основание', max_length=256, blank=True, default='')
|
|
fixes = models.BooleanField('Изменения', default=False)
|
|
avance = models.BooleanField('аванс', default=False)
|
|
currency = models.ForeignKey(Currency, verbose_name='валюта', null=True)
|
|
user_is_sender = models.BooleanField('пользователь - отправитель', default=False)
|
|
sender = models.ForeignKey(
|
|
Client,
|
|
related_name='sender_fakturas',
|
|
blank=True,
|
|
null=True,
|
|
verbose_name='Отправитель'
|
|
)
|
|
receiver = models.ForeignKey(
|
|
Client,
|
|
related_name='receiver_fakturas',
|
|
blank=True,
|
|
null=True,
|
|
verbose_name='Получатель'
|
|
)
|
|
plat_doc_num = models.CharField(
|
|
'Номер платёжного документа',
|
|
max_length=30,
|
|
blank=True,
|
|
default=''
|
|
)
|
|
plat_doc_date = models.DateField('Дата платёжного документа', blank=True, null=True)
|
|
fix_doc_num = models.PositiveIntegerField('Номер исправления', null=True, blank=True)
|
|
fix_doc_date = models.DateField('Дата исправления', blank=True, null=True)
|
|
|
|
def get_consignor_and_address(self):
|
|
"""Отправитель и адрес
|
|
"""
|
|
|
|
if self.user_is_sender:
|
|
return f'{self.user.profile.get_company_name()}, {self.user.profile.address}'
|
|
elif self.sender:
|
|
return f'{self.sender.name}, {self.sender.address}'
|
|
else:
|
|
return ''
|
|
|
|
def get_receiver_and_address(self):
|
|
"""Получатель и адрес
|
|
"""
|
|
if self.receiver:
|
|
return f'{self.receiver.name}, {self.receiver.address}'
|
|
else:
|
|
return ''
|
|
|
|
class Meta(BaseInvoiceModel.Meta):
|
|
verbose_name = 'Счёт-фактура'
|
|
verbose_name_plural = 'Счета-фактуры'
|
|
app_label = "docs"
|
|
|
|
|
|
class FakturaItem(BaseItemInvoiceModel):
|
|
"""Табличная часть фактуры"""
|
|
units_kod = models.CharField(
|
|
'Код единицы измерения',
|
|
max_length=10,
|
|
blank=True,
|
|
default='-'
|
|
)
|
|
parent = models.ForeignKey(Faktura, related_name='faktura_items')
|
|
country_code = models.CharField('Код страны', max_length=10, blank=True, default='-')
|
|
country_name = models.CharField('Название страны', max_length=256)
|
|
gtd = models.CharField('Основание', max_length=256, blank=True, default='')
|
|
ntd = models.CharField(
|
|
'Номер транспортной декларации',
|
|
max_length=256,
|
|
blank=True,
|
|
default=''
|
|
)
|
|
|
|
class Meta(BaseItemInvoiceModel.Meta):
|
|
verbose_name = 'Табл. часть фактуры'
|
|
verbose_name_plural = 'Табл. части фактур'
|
|
app_label = "docs"
|
|
|