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, BaseAttributes, FavoritesMixin, FileMixin, GalleryMixin, HasTagsMixin,
IntermediateGalleryModelMixin, ProjectBaseMixin, TJSONField, TranslatedFieldsMixin, IntermediateGalleryModelMixin, ProjectBaseMixin, TJSONField, TranslatedFieldsMixin,
TypeDefaultImageMixin, URLImageMixin, default_menu_bool_array, PhoneModelMixin, TypeDefaultImageMixin, URLImageMixin, default_menu_bool_array, PhoneModelMixin,
AwardsModelMixin, CarouselMixin) AwardsModelMixin, CarouselMixin, UpdateByMixin)
# todo: establishment type&subtypes check # todo: establishment type&subtypes check
@ -554,7 +554,8 @@ class Establishment(GalleryMixin,
HasTagsMixin, HasTagsMixin,
FavoritesMixin, FavoritesMixin,
AwardsModelMixin, AwardsModelMixin,
CarouselMixin): CarouselMixin,
UpdateByMixin):
"""Establishment model.""" """Establishment model."""
ABANDONED = 0 ABANDONED = 0

View File

@ -1,3 +1,4 @@
from datetime import datetime
from functools import lru_cache from functools import lru_cache
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -9,6 +10,7 @@ from rest_framework import serializers
from slugify import slugify from slugify import slugify
from account import models as account_models from account import models as account_models
from account.models import Role
from account.serializers.common import UserShortSerializer from account.serializers.common import UserShortSerializer
from collection.models import Guide from collection.models import Guide
from establishment import models, serializers as model_serializers 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 import models as main_models
from main.models import Currency from main.models import Currency
from main.serializers import AwardSerializer from main.serializers import AwardSerializer
from review.serializers import ReviewBaseSerializer from review.serializers import ReviewBaseSerializer, User
from tag.serializers import TagBaseSerializer from tag.serializers import TagBaseSerializer
from utils.decorators import with_base_attributes from utils.decorators import with_base_attributes
from utils.methods import string_random 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) 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): class Meta(model_serializers.EstablishmentBaseSerializer.Meta):
fields = [ fields = [
@ -256,6 +258,8 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
'status_display', 'status_display',
'last_review', 'last_review',
'must_of_the_week', 'must_of_the_week',
'last_update_by_gm',
'last_update_by_manager',
] ]
def to_representation(self, instance): def to_representation(self, instance):
@ -263,7 +267,7 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
data['phones'] = data.pop('contact_phones', None) data['phones'] = data.pop('contact_phones', None)
return data return data
def update(self, instance, validated_data): def update(self, instance: models.Establishment, validated_data):
phones_list = [] phones_list = []
if 'contact_phones' in validated_data: if 'contact_phones' in validated_data:
phones_list = validated_data.pop('contact_phones') phones_list = validated_data.pop('contact_phones')
@ -272,9 +276,30 @@ class EstablishmentRUDSerializer(model_serializers.EstablishmentBaseSerializer):
if 'contact_emails' in validated_data: if 'contact_emails' in validated_data:
emails_list = validated_data.pop('contact_emails') 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) instance = super().update(instance, validated_data)
phones_handler(phones_list, instance) phones_handler(phones_list, instance)
emails_handler(emails_list, instance) emails_handler(emails_list, instance)
return instance return instance

View File

@ -557,3 +557,14 @@ class CarouselMixin:
return Carousel.objects.filter(**kwargs).exists() return Carousel.objects.filter(**kwargs).exists()
return False 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