last update by for establishment

This commit is contained in:
a.gorbunov 2020-02-07 11:41:49 +00:00
parent 5b6db0f974
commit f854cd6ba5
3 changed files with 42 additions and 5 deletions

View File

@ -33,7 +33,7 @@ from utils.models import (
BaseAttributes, FavoritesMixin, FileMixin, GalleryMixin, HasTagsMixin,
IntermediateGalleryModelMixin, ProjectBaseMixin, TJSONField, TranslatedFieldsMixin,
TypeDefaultImageMixin, URLImageMixin, default_menu_bool_array, PhoneModelMixin,
AwardsModelMixin, CarouselMixin)
AwardsModelMixin, CarouselMixin, UpdateByMixin)
# todo: establishment type&subtypes check
@ -554,7 +554,8 @@ class Establishment(GalleryMixin,
HasTagsMixin,
FavoritesMixin,
AwardsModelMixin,
CarouselMixin):
CarouselMixin,
UpdateByMixin):
"""Establishment model."""
ABANDONED = 0

View File

@ -1,3 +1,4 @@
from datetime import datetime
from functools import lru_cache
from django.contrib.contenttypes.models import ContentType
@ -9,6 +10,7 @@ from rest_framework import serializers
from slugify import slugify
from account import models as account_models
from account.models import Role
from account.serializers.common import UserShortSerializer
from collection.models import Guide
from establishment import models, serializers as model_serializers
@ -20,7 +22,7 @@ from location.serializers import AddressDetailSerializer, TranslatedField, Addre
from main import models as main_models
from main.models import Currency
from main.serializers import AwardSerializer
from review.serializers import ReviewBaseSerializer
from review.serializers import ReviewBaseSerializer, User
from tag.serializers import TagBaseSerializer
from utils.decorators import with_base_attributes
from utils.methods import string_random
@ -224,7 +226,7 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
contact_phones = ContactPhonesSerializer(source='phones', read_only=True, many=True)
last_review = ReviewBaseSerializer()
last_review = ReviewBaseSerializer(read_only=True)
class Meta(model_serializers.EstablishmentBaseSerializer.Meta):
fields = [
@ -256,6 +258,8 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
'status_display',
'last_review',
'must_of_the_week',
'last_update_by_gm',
'last_update_by_manager',
]
def to_representation(self, instance):
@ -263,7 +267,7 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
data['phones'] = data.pop('contact_phones', None)
return data
def update(self, instance, validated_data):
def update(self, instance: models.Establishment, validated_data):
phones_list = []
if 'contact_phones' in validated_data:
phones_list = validated_data.pop('contact_phones')
@ -272,9 +276,30 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
if 'contact_emails' in validated_data:
emails_list = validated_data.pop('contact_emails')
request = self.context.get('request')
if request and hasattr(request, 'user'):
user = request.user
if isinstance(user, User):
is_by_manager = user.userrole_set.filter(
pk=user.pk,
role__in=(
Role.ESTABLISHMENT_MANAGER,
Role.ESTABLISHMENT_ADMINISTRATOR,
Role.COUNTRY_ADMIN
)
).exists()
if is_by_manager:
instance.last_update_by_manager = datetime.now()
else:
''' by gm. '''
instance.last_update_by_gm = datetime.now()
instance = super().update(instance, validated_data)
phones_handler(phones_list, instance)
emails_handler(emails_list, instance)
return instance

View File

@ -557,3 +557,14 @@ class CarouselMixin:
return Carousel.objects.filter(**kwargs).exists()
return False
class UpdateByMixin(models.Model):
"""Modify by mixin"""
last_update_by_manager = models.DateTimeField(null=True)
last_update_by_gm = models.DateTimeField(null=True)
class Meta:
"""Meta class."""
abstract = True