Lastable naive realization
This commit is contained in:
parent
53db4462f8
commit
3da57b72fc
|
|
@ -19,7 +19,7 @@ class Booking(ProjectBaseMixin):
|
||||||
(GUESTONLINE, 'GuestOnline')
|
(GUESTONLINE, 'GuestOnline')
|
||||||
)
|
)
|
||||||
type = models.CharField(max_length=2, choices=AVAILABLE_SERVICES, verbose_name=_('Guestonline or Lastable'))
|
type = models.CharField(max_length=2, choices=AVAILABLE_SERVICES, verbose_name=_('Guestonline or Lastable'))
|
||||||
restaurant_id = models.PositiveIntegerField(verbose_name=_('booking service establishment id'), default=None)
|
restaurant_id = models.TextField(verbose_name=_('booking service establishment id'), default=None)
|
||||||
booking_user_locale = models.CharField(verbose_name=_('booking locale'), default='en', max_length=10)
|
booking_user_locale = models.CharField(verbose_name=_('booking locale'), default='en', max_length=10)
|
||||||
pending_booking_id = models.TextField(verbose_name=_('external service pending booking'), default=None)
|
pending_booking_id = models.TextField(verbose_name=_('external service pending booking'), default=None)
|
||||||
booking_id = models.TextField(verbose_name=_('external service booking id'), default=None, null=True,
|
booking_id = models.TextField(verbose_name=_('external service booking id'), default=None, null=True,
|
||||||
|
|
|
||||||
|
|
@ -40,12 +40,12 @@ class AbstractBookingService(ABC):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def create_pending_booking(self, payload):
|
def create_booking(self, payload):
|
||||||
""" returns pending booking id if created. otherwise False """
|
""" returns pending booking id if created. otherwise False """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def update_pending_booking(self, payload):
|
def update_booking(self, payload):
|
||||||
""" updates pending booking with contacts """
|
""" updates pending booking with contacts """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -87,7 +87,7 @@ class GuestonlineService(AbstractBookingService):
|
||||||
raise serializers.ValidationError(detail='Booking already committed.')
|
raise serializers.ValidationError(detail='Booking already committed.')
|
||||||
return status.is_success(r.status_code)
|
return status.is_success(r.status_code)
|
||||||
|
|
||||||
def update_pending_booking(self, payload):
|
def update_booking(self, payload):
|
||||||
booking_id = payload.pop('pending_booking_id')
|
booking_id = payload.pop('pending_booking_id')
|
||||||
url = f'{self.url}v1/pending_bookings/{booking_id}'
|
url = f'{self.url}v1/pending_bookings/{booking_id}'
|
||||||
payload['lastname'] = payload.pop('last_name')
|
payload['lastname'] = payload.pop('last_name')
|
||||||
|
|
@ -97,8 +97,8 @@ class GuestonlineService(AbstractBookingService):
|
||||||
r = requests.put(url, headers=headers, data=json.dumps({'contact_info': payload}))
|
r = requests.put(url, headers=headers, data=json.dumps({'contact_info': payload}))
|
||||||
return status.is_success(r.status_code)
|
return status.is_success(r.status_code)
|
||||||
|
|
||||||
def create_pending_booking(self, payload):
|
def create_booking(self, payload):
|
||||||
url = self.url + 'v1/pending_bookings'
|
url = f'{self.url}v1/pending_bookings'
|
||||||
payload['hour'] = payload.pop('booking_time')
|
payload['hour'] = payload.pop('booking_time')
|
||||||
payload['persons'] = payload.pop('booked_persons_number')
|
payload['persons'] = payload.pop('booked_persons_number')
|
||||||
payload['date'] = payload.pop('booking_date')
|
payload['date'] = payload.pop('booking_date')
|
||||||
|
|
@ -124,11 +124,14 @@ class LastableService(AbstractBookingService):
|
||||||
'https': settings.LASTABLE_PROXY,
|
'https': settings.LASTABLE_PROXY,
|
||||||
}
|
}
|
||||||
|
|
||||||
def create_pending_booking(self, payload):
|
def create_booking(self, payload):
|
||||||
return False
|
url = f'{self.url}v1/partner/orders'
|
||||||
# url = f'{self.url}v1/restaurant/5d951f0e2dc6a50017588065/offers'
|
payload['places'] = payload.pop('booked_persons_number')
|
||||||
# r = requests.post(url, headers=self.get_common_headers(), proxies=self.proxies)
|
payload['hour'] = payload.pop('booking_time')
|
||||||
# return json.loads(r.content)['id'] if status.is_success(r.status_code) else False
|
payload['firstName'] = payload.pop('first_name')
|
||||||
|
payload['lastName'] = payload.pop('last_name')
|
||||||
|
r = requests.post(url, headers=self.get_common_headers(), proxies=self.proxies, data=json.dumps(payload))
|
||||||
|
return json.loads(r.content)['data']['_id'] if status.is_success(r.status_code) else False
|
||||||
|
|
||||||
def get_common_headers(self):
|
def get_common_headers(self):
|
||||||
return {'Authorization': f'Bearer {self.token}', 'Content-type': 'application/json',
|
return {'Authorization': f'Bearer {self.token}', 'Content-type': 'application/json',
|
||||||
|
|
@ -145,13 +148,19 @@ class LastableService(AbstractBookingService):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def commit_booking(self, payload):
|
def commit_booking(self, payload):
|
||||||
|
""" Lastable service has no pending booking to commit """
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def update_pending_booking(self, payload):
|
def update_booking(self, payload):
|
||||||
|
""" Lastable service has no pending booking to update """
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def cancel_booking(self, payload):
|
def cancel_booking(self, payload):
|
||||||
return False
|
url = f'{self.url}v1/partner/orders/{payload}'
|
||||||
|
r = requests.delete(url, headers=self.get_common_headers(), proxies=self.proxies)
|
||||||
|
return status.is_success(r.status_code)
|
||||||
|
|
||||||
def get_booking_details(self, payload):
|
def get_booking_details(self, payload):
|
||||||
return {}
|
url = f'{self.url}v1/partner/orders/{payload}'
|
||||||
|
r = requests.get(url, headers=self.get_common_headers(), proxies=self.proxies)
|
||||||
|
return json.loads(r.content)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@ class CheckBookingSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class PendingBookingSerializer(serializers.ModelSerializer):
|
class PendingBookingSerializer(serializers.ModelSerializer):
|
||||||
restaurant_id = serializers.IntegerField(read_only=True)
|
restaurant_id = serializers.CharField()
|
||||||
|
booking_id = serializers.CharField(allow_null=True, allow_blank=True)
|
||||||
id = serializers.ReadOnlyField()
|
id = serializers.ReadOnlyField()
|
||||||
user = serializers.ReadOnlyField()
|
user = serializers.ReadOnlyField()
|
||||||
|
|
||||||
|
|
@ -36,6 +37,7 @@ class PendingBookingSerializer(serializers.ModelSerializer):
|
||||||
'id',
|
'id',
|
||||||
'type',
|
'type',
|
||||||
'restaurant_id',
|
'restaurant_id',
|
||||||
|
'booking_id',
|
||||||
'pending_booking_id',
|
'pending_booking_id',
|
||||||
'user',
|
'user',
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from rest_framework import generics, permissions, status
|
from rest_framework import generics, permissions, status, serializers
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
|
|
@ -48,18 +48,22 @@ class CreatePendingBooking(generics.CreateAPIView):
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
data = request.data.copy()
|
data = request.data.copy()
|
||||||
|
if data.get('type') == Booking.LASTABLE and data.get("offer_id") is None:
|
||||||
|
raise serializers.ValidationError(detail='Offer_id is required field for Lastable service')
|
||||||
establishment = get_object_or_404(Establishment, pk=kwargs['establishment_id'])
|
establishment = get_object_or_404(Establishment, pk=kwargs['establishment_id'])
|
||||||
data['restaurant_id'] = Booking.get_booking_id_by_type(establishment, data.get('type'))
|
data['restaurant_id'] = Booking.get_booking_id_by_type(establishment, data.get('type'))
|
||||||
service = Booking.get_service_by_type(request.data.get('type'))
|
service = Booking.get_service_by_type(request.data.get('type'))
|
||||||
data['user'] = request.user.pk if request.user else None
|
data['user'] = request.user.pk if request.user else None
|
||||||
data['pending_booking_id'] = service.create_pending_booking(service.get_certain_keys(data, {
|
service_to_keys = {
|
||||||
'restaurant_id',
|
Booking.GUESTONLINE: {'restaurant_id', 'booking_time', 'booking_date', 'booked_persons_number', },
|
||||||
'booking_time',
|
Booking.LASTABLE: {'booking_time', 'booked_persons_number', 'offer_id', 'email', 'phone',
|
||||||
'booking_date',
|
'first_name', 'last_name', },
|
||||||
'booked_persons_number',
|
}
|
||||||
}))
|
data['pending_booking_id'] = service.create_booking(
|
||||||
|
service.get_certain_keys(data.copy(), service_to_keys[data.get('type')]))
|
||||||
if not data['pending_booking_id']:
|
if not data['pending_booking_id']:
|
||||||
return Response(status=status.HTTP_403_FORBIDDEN, data='Unable to create booking')
|
return Response(status=status.HTTP_403_FORBIDDEN, data='Unable to create booking')
|
||||||
|
data['booking_id'] = data['pending_booking_id'] if data.get('type') == Booking.LASTABLE else None
|
||||||
serializer = self.get_serializer(data=data)
|
serializer = self.get_serializer(data=data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
|
@ -77,7 +81,7 @@ class UpdatePendingBooking(generics.UpdateAPIView):
|
||||||
data = request.data.copy()
|
data = request.data.copy()
|
||||||
service = Booking.get_service_by_type(instance.type)
|
service = Booking.get_service_by_type(instance.type)
|
||||||
data['pending_booking_id'] = instance.pending_booking_id
|
data['pending_booking_id'] = instance.pending_booking_id
|
||||||
service.update_pending_booking(service.get_certain_keys(data, {
|
service.update_booking(service.get_certain_keys(data, {
|
||||||
'email', 'phone', 'last_name', 'first_name', 'country_code', 'pending_booking_id',
|
'email', 'phone', 'last_name', 'first_name', 'country_code', 'pending_booking_id',
|
||||||
}))
|
}))
|
||||||
service.commit_booking(data['pending_booking_id'])
|
service.commit_booking(data['pending_booking_id'])
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user