Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
"""
|
|
Party model
|
|
"""
|
|
|
|
from django.db import models
|
|
from django.db.models import Sum
|
|
|
|
from core.http.models import base
|
|
from core.http.models.user import User
|
|
|
|
|
|
class Party(base.AbstractBaseModel):
|
|
user_id = models.ForeignKey(
|
|
to=User, on_delete=models.CASCADE, related_name="parties"
|
|
)
|
|
# umumiy soni
|
|
count = models.IntegerField(default=0, null=True, blank=True)
|
|
# sotilgan soni
|
|
sold_count = models.IntegerField(default=0, null=True, blank=True)
|
|
# qolgan soni
|
|
remaining_count = models.IntegerField(default=0, null=True, blank=True)
|
|
# tushum
|
|
benefit = models.DecimalField(
|
|
max_digits=30, decimal_places=2, default=0, null=True, blank=True
|
|
)
|
|
# foyda
|
|
profit = models.DecimalField(
|
|
max_digits=30, decimal_places=2, default=0, null=True, blank=True
|
|
)
|
|
# partiya narxi
|
|
cost = models.DecimalField(
|
|
max_digits=30, decimal_places=2, default=0, null=True, blank=True
|
|
)
|
|
# umumiy narxi
|
|
total_cost = models.DecimalField(
|
|
max_digits=30, decimal_places=2, default=0, null=True, blank=True
|
|
)
|
|
broken_eggs = models.IntegerField(default=0, null=True, blank=True)
|
|
courier_eggs = models.IntegerField(default=0, null=True, blank=True)
|
|
|
|
@staticmethod
|
|
def get_total_benefit():
|
|
return Party.objects.aggregate(
|
|
total_count=Sum("count"), # umumiy mahsulot soni
|
|
total_sold_count=Sum(
|
|
"sold_count"
|
|
), # umumiy sotilgan mahsulot soni
|
|
total_remaining_count=Sum(
|
|
"remaining_count"
|
|
), # umumiy qolgan mahsulot soni
|
|
total_broken_eggs=Sum("broken_eggs"), # umumiy singan soni
|
|
total_courier_eggs=Sum(
|
|
"courier_eggs"
|
|
), # umumiy kuryerlar tomonidan olingan soni
|
|
)
|
|
|
|
def clean(self):
|
|
if self.count < 0:
|
|
raise ValueError("Count can't be negative")
|
|
if self.sold_count < 0:
|
|
raise ValueError("Sold count can't be negative")
|
|
if self.remaining_count < 0:
|
|
raise ValueError("Remaining count can't be negative")
|
|
if self.benefit < 0:
|
|
raise ValueError("Benefit can't be negative")
|
|
if self.cost < 0:
|
|
raise ValueError("Cost can't be negative")
|
|
if self.total_cost < 0:
|
|
raise ValueError("Total cost can't be negative")
|
|
|
|
def update_total_cost(self):
|
|
total_invoice_price = (
|
|
self.invoices.aggregate(Sum("price"))["price__sum"] or 0
|
|
)
|
|
self.total_cost = self.cost + total_invoice_price
|
|
self.profit -= total_invoice_price
|
|
self.save()
|
|
|
|
def __str__(self):
|
|
return f"User - {self.user_id}, price - {self.benefit}"
|
|
|
|
class Meta:
|
|
verbose_name = "Party"
|
|
verbose_name_plural = "Parties"
|
|
db_table = "party"
|