gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
This commit is contained in:
85
core/apps/eggs/models/party.py
Normal file
85
core/apps/eggs/models/party.py
Normal file
@@ -0,0 +1,85 @@
|
||||
"""
|
||||
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"
|
||||
Reference in New Issue
Block a user