61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
from django.db import models
|
|
|
|
|
|
class ExternalProject(models.Model):
|
|
source = models.ForeignKey("commerce.SourceSystem", on_delete=models.PROTECT)
|
|
external_id = models.CharField(max_length=255)
|
|
name = models.CharField(max_length=255)
|
|
code = models.CharField(max_length=255, blank=True)
|
|
description = models.TextField(blank=True)
|
|
archived = models.BooleanField(default=False)
|
|
synced_at = models.DateTimeField(null=True, blank=True)
|
|
|
|
class Meta:
|
|
ordering = ["name", "pk"]
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=["source", "external_id"], name="commerce_project_source_id"
|
|
)
|
|
]
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class ProjectPayment(models.Model):
|
|
"""Outgoing cash documents; never automatically deducted from sale profit."""
|
|
|
|
source = models.ForeignKey("commerce.SourceSystem", on_delete=models.PROTECT)
|
|
source_record = models.ForeignKey("commerce.SourceRecord", on_delete=models.PROTECT)
|
|
project = models.ForeignKey(
|
|
ExternalProject, null=True, blank=True, on_delete=models.PROTECT
|
|
)
|
|
external_id = models.CharField(max_length=255)
|
|
document_type = models.CharField(
|
|
max_length=16,
|
|
choices=[("paymentout", "Исходящий платёж"), ("cashout", "Расходный ордер")],
|
|
)
|
|
number = models.CharField(max_length=255, blank=True)
|
|
description = models.TextField(blank=True)
|
|
expense_category = models.CharField(max_length=255, blank=True)
|
|
payee = models.CharField(max_length=255, blank=True)
|
|
amount = models.DecimalField(max_digits=18, decimal_places=2)
|
|
currency = models.CharField(max_length=3)
|
|
occurred_at = models.DateTimeField(db_index=True)
|
|
applicable = models.BooleanField(default=False)
|
|
missing_from_source = models.BooleanField(default=False)
|
|
seen_at = models.DateTimeField()
|
|
|
|
class Meta:
|
|
ordering = ["-occurred_at", "-pk"]
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=["source", "document_type", "external_id"],
|
|
name="commerce_project_payment_id",
|
|
),
|
|
models.CheckConstraint(
|
|
condition=models.Q(amount__gte=0),
|
|
name="commerce_project_payment_amount",
|
|
),
|
|
]
|