* annotate_price_rub fixed

This commit is contained in:
Phil Zhitnikov 2023-11-11 09:48:32 +04:00
parent 520d9ebc0e
commit 65b27d49d7

View File

@ -14,7 +14,8 @@ from django.contrib.auth.models import AbstractUser, UserManager as _UserManager
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.validators import MinValueValidator, MaxValueValidator from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models from django.db import models
from django.db.models import F, Case, When, DecimalField, Prefetch from django.db.models import F, Case, When, DecimalField, Prefetch, Max, Q, ExpressionWrapper
from django.db.models.functions import Ceil
from django.db.models.lookups import GreaterThan from django.db.models.lookups import GreaterThan
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -91,6 +92,7 @@ class Category(MPTTModel):
@property @property
def commission_price(self): def commission_price(self):
""" Get commission from object or from its parent """
if not self.commission and self.parent_id: if not self.commission and self.parent_id:
return self.parent.commission_price return self.parent.commission_price
else: else:
@ -266,11 +268,13 @@ class ChecklistQuerySet(models.QuerySet):
return self.order_by(F('status_updated_at').desc(nulls_last=True)) return self.order_by(F('status_updated_at').desc(nulls_last=True))
def annotate_price_rub(self): def annotate_price_rub(self):
# FIXME: implement price_rub in DB query return self.annotate(
return self _yuan_rate=Case(
When(price_snapshot_id__isnull=False, then=F('price_snapshot__yuan_rate')),
yuan_rate = GlobalSettings.load().yuan_rate default=GlobalSettings.load().yuan_rate
return self.annotate(_price_rub=F('price_yuan') * yuan_rate) ),
_price_rub=Ceil(F('_yuan_rate') * F('price_yuan'))
)
def annotate_commission_rub(self): def annotate_commission_rub(self):
# FIXME: implement category commission in DB query # FIXME: implement category commission in DB query
@ -418,10 +422,9 @@ class Checklist(models.Model):
@property @property
def price_rub(self) -> int: def price_rub(self) -> int:
# FIXME: implement price_rub in DB query # Prefer annotated field for calculation
# # Prefer annotated field for calculation if hasattr(self, '_price_rub'):
# if hasattr(self, '_price_rub'): return self._price_rub
# return self._price_rub
# Get saved prices # Get saved prices
if self.price_snapshot_id: if self.price_snapshot_id: