recalculate toque number
This commit is contained in:
parent
a44081c2e7
commit
6d34e406db
|
|
@ -87,3 +87,8 @@ class MenuAdmin(BaseModelAdminMixin, admin.ModelAdmin):
|
|||
return obj.category_translated
|
||||
|
||||
category_translated.short_description = _('category')
|
||||
|
||||
|
||||
@admin.register(models.RatingStrategy)
|
||||
class RatingStrategyAdmin(BaseModelAdminMixin, admin.ModelAdmin):
|
||||
"""Admin conf for Rating Strategy model."""
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
"""Run recalculating toque number for establishments."""
|
||||
from django.core.management.base import BaseCommand
|
||||
from establishment.models import Establishment
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
||||
help = 'Recalculation toque number for all establishments.'
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
for establishment in Establishment.objects.select_related('address__city__country'):
|
||||
print(f'Recalculate for {establishment.name} ({establishment.id})')
|
||||
establishment.recalculate_toque_number()
|
||||
33
apps/establishment/migrations/0048_ratingstrategy.py
Normal file
33
apps/establishment/migrations/0048_ratingstrategy.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Generated by Django 2.2.4 on 2019-10-31 15:55
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('location', '0020_merge_20191030_1714'),
|
||||
('establishment', '0047_merge_20191030_1714'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RatingStrategy',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
|
||||
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
|
||||
('toque_number', models.IntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')])),
|
||||
('public_mark_min_value', models.IntegerField()),
|
||||
('public_mark_max_value', models.IntegerField()),
|
||||
('country', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='location.Country', verbose_name='Country')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Rating strategy',
|
||||
'verbose_name_plural': 'Rating strategy',
|
||||
'unique_together': {('country', 'toque_number')},
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -14,7 +14,6 @@ from django.db.models import When, Case, F, ExpressionWrapper, Subquery, Q
|
|||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from phonenumber_field.modelfields import PhoneNumberField
|
||||
from pytz import timezone as ptz
|
||||
from timezone_field import TimeZoneField
|
||||
|
||||
from collection.models import Collection
|
||||
|
|
@ -384,7 +383,14 @@ class Establishment(ProjectBaseMixin, URLImageMixin, TranslatedFieldsMixin):
|
|||
|
||||
# todo: recalculate toque_number
|
||||
def recalculate_toque_number(self):
|
||||
self.toque_number = 4
|
||||
import ipdb; ipdb.set_trace()
|
||||
toque_number = None
|
||||
if self.address and self.public_mark:
|
||||
toque_number = RatingStrategy.objects. \
|
||||
get_toque_number(country=self.address.city.country,
|
||||
public_mark=self.public_mark)
|
||||
self.toque_number = toque_number
|
||||
self.save()
|
||||
|
||||
def recalculate_price_level(self, low_price=None, high_price=None):
|
||||
if low_price is None or high_price is None:
|
||||
|
|
@ -669,3 +675,54 @@ class SocialNetwork(models.Model):
|
|||
def __str__(self):
|
||||
return self.title
|
||||
|
||||
|
||||
class RatingStrategyManager(models.Manager):
|
||||
"""Extended manager for RatingStrategy."""
|
||||
|
||||
def get_toque_number(self, country, public_mark):
|
||||
"""Get toque number for country and public_mark."""
|
||||
obj = self.model.objects.by_country(country). \
|
||||
for_public_mark(public_mark).first()
|
||||
if obj:
|
||||
return obj.toque_number
|
||||
return None
|
||||
|
||||
|
||||
class RatingStrategyQuerySet(models.QuerySet):
|
||||
"""Extended queryset for RatingStrategy."""
|
||||
|
||||
def by_country(self, country):
|
||||
"""Filter by country."""
|
||||
return self.filter(country=country)
|
||||
|
||||
def for_public_mark(self, public_mark):
|
||||
"""Filter for value."""
|
||||
return self.filter(public_mark_min_value__lte=public_mark,
|
||||
public_mark_max_value__gte=public_mark)
|
||||
|
||||
|
||||
class RatingStrategy(ProjectBaseMixin):
|
||||
"""Rating Strategy model."""
|
||||
|
||||
TOQUE_NUMBER_CHOICES = (
|
||||
(1, _('One')),
|
||||
(2, _('Two')),
|
||||
(3, _('Three')),
|
||||
(4, _('Four')),
|
||||
(5, _('Five')),
|
||||
)
|
||||
|
||||
country = models.ForeignKey('location.Country', on_delete=models.CASCADE,
|
||||
verbose_name=_('Country'))
|
||||
toque_number = models.IntegerField(choices=TOQUE_NUMBER_CHOICES)
|
||||
public_mark_min_value = models.IntegerField()
|
||||
public_mark_max_value = models.IntegerField()
|
||||
|
||||
objects = RatingStrategyManager.from_queryset(RatingStrategyQuerySet)()
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
||||
verbose_name = _('Rating strategy')
|
||||
verbose_name_plural = _('Rating strategy')
|
||||
unique_together = ('country', 'toque_number')
|
||||
Loading…
Reference in New Issue
Block a user