partners remastered (moved fields to binding table)
This commit is contained in:
parent
f05fab8329
commit
632233d930
|
|
@ -1,7 +1,7 @@
|
||||||
"""Partner app filters."""
|
"""Partner app filters."""
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
|
|
||||||
from partner.models import Partner
|
from partner.models import Partner, PartnerToEstablishment
|
||||||
from django.core.validators import EMPTY_VALUES
|
from django.core.validators import EMPTY_VALUES
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -31,4 +31,20 @@ class PartnerFilterSet(filters.FilterSet):
|
||||||
if 'date_bind' in value:
|
if 'date_bind' in value:
|
||||||
value = value.replace('date_bind', 'partnertoestablishment__partner_bind_date')
|
value = value.replace('date_bind', 'partnertoestablishment__partner_bind_date')
|
||||||
queryset = queryset.order_by(value)
|
queryset = queryset.order_by(value)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
class PartnerToEstablishmentFilterSet(filters.FilterSet):
|
||||||
|
"""Partner to establishment filter set."""
|
||||||
|
|
||||||
|
type = filters.ChoiceFilter(
|
||||||
|
field_name='partner__type',
|
||||||
|
choices=Partner.MODEL_TYPES,
|
||||||
|
help_text=f'Allows to filter partner list by partner type. '
|
||||||
|
f'Enum: {dict(Partner.MODEL_TYPES)}')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = PartnerToEstablishment
|
||||||
|
fields = (
|
||||||
|
'type',
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,6 @@ class Partner(ProjectBaseMixin):
|
||||||
through='PartnerToEstablishment',
|
through='PartnerToEstablishment',
|
||||||
verbose_name=_('Establishments'))
|
verbose_name=_('Establishments'))
|
||||||
type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER)
|
type = models.PositiveSmallIntegerField(choices=MODEL_TYPES, default=PARTNER)
|
||||||
starting_date = models.DateField(_('starting date'), blank=True, null=True)
|
|
||||||
expiry_date = models.DateField(_('expiry date'), blank=True, null=True)
|
|
||||||
price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True)
|
|
||||||
country = models.ForeignKey('location.Country', null=True, default=None, on_delete=models.SET_NULL)
|
country = models.ForeignKey('location.Country', null=True, default=None, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
objects = PartnerQueryset.as_manager()
|
objects = PartnerQueryset.as_manager()
|
||||||
|
|
@ -61,6 +58,9 @@ class Partner(ProjectBaseMixin):
|
||||||
class PartnerToEstablishment(models.Model):
|
class PartnerToEstablishment(models.Model):
|
||||||
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
|
partner_bind_date = models.DateTimeField(default=timezone.now, editable=False,
|
||||||
verbose_name=_('Date partner binded'))
|
verbose_name=_('Date partner binded'))
|
||||||
|
starting_date = models.DateField(_('starting date'), blank=True, null=True)
|
||||||
|
expiry_date = models.DateField(_('expiry date'), blank=True, null=True)
|
||||||
|
price_per_month = models.DecimalField(_('price per month'), max_digits=10, decimal_places=2, blank=True, null=True)
|
||||||
url = models.URLField(verbose_name=_('Establishment to Partner URL'), null=True, blank=True, default=None)
|
url = models.URLField(verbose_name=_('Establishment to Partner URL'), null=True, blank=True, default=None)
|
||||||
image = models.URLField(verbose_name=_('Partner image URL'), null=True)
|
image = models.URLField(verbose_name=_('Partner image URL'), null=True)
|
||||||
partner = models.ForeignKey(Partner, on_delete=models.CASCADE, null=True)
|
partner = models.ForeignKey(Partner, on_delete=models.CASCADE, null=True)
|
||||||
|
|
|
||||||
|
|
@ -23,13 +23,11 @@ class BackPartnerSerializer(serializers.ModelSerializer):
|
||||||
model = Partner
|
model = Partner
|
||||||
fields = (
|
fields = (
|
||||||
'id',
|
'id',
|
||||||
|
'bind_id',
|
||||||
'name',
|
'name',
|
||||||
'images',
|
'images',
|
||||||
'type',
|
'type',
|
||||||
'type_display',
|
'type_display',
|
||||||
'starting_date',
|
|
||||||
'expiry_date',
|
|
||||||
'price_per_month',
|
|
||||||
'country',
|
'country',
|
||||||
'country_id',
|
'country_id',
|
||||||
# 'establishments',
|
# 'establishments',
|
||||||
|
|
@ -41,25 +39,23 @@ class BackPartnerSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class PartnersForEstablishmentSerializer(serializers.ModelSerializer):
|
class PartnersForEstablishmentSerializer(serializers.ModelSerializer):
|
||||||
id = serializers.IntegerField(source='partner.pk', read_only=True)
|
id = serializers.IntegerField(source='partner.pk', read_only=True)
|
||||||
|
bind_id = serializers.IntegerField(source='id', read_only=True)
|
||||||
name = serializers.CharField(source='partner.name', read_only=True)
|
name = serializers.CharField(source='partner.name', read_only=True)
|
||||||
type = serializers.IntegerField(source='partner.type', read_only=True)
|
type = serializers.IntegerField(source='partner.type', read_only=True)
|
||||||
type_display = serializers.CharField(source='partner.type_display', read_only=True)
|
type_display = serializers.CharField(source='partner.type_display', read_only=True)
|
||||||
starting_date = serializers.DateField(source='partner.starting_date', read_only=True)
|
|
||||||
expiry_date = serializers.DateField(source='partner.expiry_date', read_only=True)
|
|
||||||
price_per_month = serializers.DecimalField(source='partner.price_per_month', max_digits=10, decimal_places=2,
|
|
||||||
read_only=True)
|
|
||||||
country = CountrySimpleSerializer(read_only=True, source='partner.country')
|
country = CountrySimpleSerializer(read_only=True, source='partner.country')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PartnerToEstablishment
|
model = PartnerToEstablishment
|
||||||
fields = (
|
fields = (
|
||||||
'id',
|
'id',
|
||||||
|
'bind_id',
|
||||||
'name',
|
'name',
|
||||||
'type',
|
'type',
|
||||||
'type_display',
|
'type_display',
|
||||||
'starting_date',
|
'starting_date', # own field
|
||||||
'expiry_date',
|
'expiry_date', # own field
|
||||||
'price_per_month',
|
'price_per_month', # own field
|
||||||
'country',
|
'country',
|
||||||
'url', # own field
|
'url', # own field
|
||||||
'image', # own field
|
'image', # own field
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,6 @@ urlpatterns = [
|
||||||
path('pictures/<int:id>/', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'),
|
path('pictures/<int:id>/', views.PartnerPicturesListView.as_view(), name='partner-pictures-get'),
|
||||||
path('bind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
|
path('bind/<int:partner_id>/<int:establishment_id>/', views.BindPartnerToEstablishmentView.as_view(),
|
||||||
name='bind-partner-to-establishment'),
|
name='bind-partner-to-establishment'),
|
||||||
path('unbind/<int:partner_id>/<int:establishment_id>/', views.UnbindPartnerFromEstablishmentView.as_view(),
|
path('unbind/<int:bind_id>/', views.UnbindPartnerFromEstablishmentView.as_view(),
|
||||||
name='unbind-partner-from-establishment'),
|
name='unbind-partner-from-establishment'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ class EstablishmentPartners(generics.ListAPIView):
|
||||||
queryset = PartnerToEstablishment.objects.prefetch_related('partner', 'partner__country')
|
queryset = PartnerToEstablishment.objects.prefetch_related('partner', 'partner__country')
|
||||||
serializer_class = serializers.PartnersForEstablishmentSerializer
|
serializer_class = serializers.PartnersForEstablishmentSerializer
|
||||||
pagination_class = None
|
pagination_class = None
|
||||||
|
# filter_class = filters.PartnerToEstablishmentFilterSet
|
||||||
filter_backends = (OrderingFilter, DjangoFilterBackend)
|
filter_backends = (OrderingFilter, DjangoFilterBackend)
|
||||||
ordering_fields = '__all__'
|
ordering_fields = '__all__'
|
||||||
ordering = '-partner_bind_date'
|
ordering = '-partner_bind_date'
|
||||||
|
|
@ -77,5 +78,4 @@ class UnbindPartnerFromEstablishmentView(generics.DestroyAPIView):
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
return get_object_or_404(PartnerToEstablishment, establishment_id=self.kwargs['establishment_id'],
|
return get_object_or_404(PartnerToEstablishment, pk=self.kwargs['bind_id'])
|
||||||
partner_id=self.kwargs['partner_id'])
|
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,10 @@ class PartnerSerializer(serializers.Serializer):
|
||||||
old_id = validated_data.pop('old_id')
|
old_id = validated_data.pop('old_id')
|
||||||
created = validated_data.pop('created')
|
created = validated_data.pop('created')
|
||||||
|
|
||||||
|
expiry_date = validated_data.pop('expiry_date')
|
||||||
|
price_per_month = validated_data.pop('price_per_month')
|
||||||
|
starting_date = validated_data.pop('starting_date')
|
||||||
|
|
||||||
obj, is_created = Partner.objects.update_or_create(
|
obj, is_created = Partner.objects.update_or_create(
|
||||||
# old_id=validated_data['old_id'],
|
# old_id=validated_data['old_id'],
|
||||||
**validated_data
|
**validated_data
|
||||||
|
|
@ -68,6 +72,9 @@ class PartnerSerializer(serializers.Serializer):
|
||||||
p_t_e = PartnerToEstablishment.objects.filter(establishment=establishment, partner=obj).first()
|
p_t_e = PartnerToEstablishment.objects.filter(establishment=establishment, partner=obj).first()
|
||||||
p_t_e.url = url
|
p_t_e.url = url
|
||||||
p_t_e.image = image
|
p_t_e.image = image
|
||||||
|
p_t_e.expiry_date = expiry_date
|
||||||
|
p_t_e.price_per_month = price_per_month
|
||||||
|
p_t_e.starting_date = starting_date
|
||||||
p_t_e.save()
|
p_t_e.save()
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user