Lastable naive realization
This commit is contained in:
parent
53db4462f8
commit
3da57b72fc
|
|
@ -19,7 +19,7 @@ class Booking(ProjectBaseMixin):
|
|||
(GUESTONLINE, 'GuestOnline')
|
||||
)
|
||||
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)
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -40,12 +40,12 @@ class AbstractBookingService(ABC):
|
|||
pass
|
||||
|
||||
@abstractmethod
|
||||
def create_pending_booking(self, payload):
|
||||
def create_booking(self, payload):
|
||||
""" returns pending booking id if created. otherwise False """
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def update_pending_booking(self, payload):
|
||||
def update_booking(self, payload):
|
||||
""" updates pending booking with contacts """
|
||||
pass
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ class GuestonlineService(AbstractBookingService):
|
|||
raise serializers.ValidationError(detail='Booking already committed.')
|
||||
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')
|
||||
url = f'{self.url}v1/pending_bookings/{booking_id}'
|
||||
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}))
|
||||
return status.is_success(r.status_code)
|
||||
|
||||
def create_pending_booking(self, payload):
|
||||
url = self.url + 'v1/pending_bookings'
|
||||
def create_booking(self, payload):
|
||||
url = f'{self.url}v1/pending_bookings'
|
||||
payload['hour'] = payload.pop('booking_time')
|
||||
payload['persons'] = payload.pop('booked_persons_number')
|
||||
payload['date'] = payload.pop('booking_date')
|
||||
|
|
@ -124,11 +124,14 @@ class LastableService(AbstractBookingService):
|
|||
'https': settings.LASTABLE_PROXY,
|
||||
}
|
||||
|
||||
def create_pending_booking(self, payload):
|
||||
return False
|
||||
# url = f'{self.url}v1/restaurant/5d951f0e2dc6a50017588065/offers'
|
||||
# r = requests.post(url, headers=self.get_common_headers(), proxies=self.proxies)
|
||||
# return json.loads(r.content)['id'] if status.is_success(r.status_code) else False
|
||||
def create_booking(self, payload):
|
||||
url = f'{self.url}v1/partner/orders'
|
||||
payload['places'] = payload.pop('booked_persons_number')
|
||||
payload['hour'] = payload.pop('booking_time')
|
||||
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):
|
||||
return {'Authorization': f'Bearer {self.token}', 'Content-type': 'application/json',
|
||||
|
|
@ -145,13 +148,19 @@ class LastableService(AbstractBookingService):
|
|||
return True
|
||||
|
||||
def commit_booking(self, payload):
|
||||
""" Lastable service has no pending booking to commit """
|
||||
return False
|
||||
|
||||
def update_pending_booking(self, payload):
|
||||
def update_booking(self, payload):
|
||||
""" Lastable service has no pending booking to update """
|
||||
return False
|
||||
|
||||
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):
|
||||
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):
|
||||
restaurant_id = serializers.IntegerField(read_only=True)
|
||||
restaurant_id = serializers.CharField()
|
||||
booking_id = serializers.CharField(allow_null=True, allow_blank=True)
|
||||
id = serializers.ReadOnlyField()
|
||||
user = serializers.ReadOnlyField()
|
||||
|
||||
|
|
@ -36,6 +37,7 @@ class PendingBookingSerializer(serializers.ModelSerializer):
|
|||
'id',
|
||||
'type',
|
||||
'restaurant_id',
|
||||
'booking_id',
|
||||
'pending_booking_id',
|
||||
'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 establishment.models import Establishment
|
||||
|
|
@ -48,18 +48,22 @@ class CreatePendingBooking(generics.CreateAPIView):
|
|||
|
||||
def post(self, request, *args, **kwargs):
|
||||
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'])
|
||||
data['restaurant_id'] = Booking.get_booking_id_by_type(establishment, data.get('type'))
|
||||
service = Booking.get_service_by_type(request.data.get('type'))
|
||||
data['user'] = request.user.pk if request.user else None
|
||||
data['pending_booking_id'] = service.create_pending_booking(service.get_certain_keys(data, {
|
||||
'restaurant_id',
|
||||
'booking_time',
|
||||
'booking_date',
|
||||
'booked_persons_number',
|
||||
}))
|
||||
service_to_keys = {
|
||||
Booking.GUESTONLINE: {'restaurant_id', 'booking_time', 'booking_date', 'booked_persons_number', },
|
||||
Booking.LASTABLE: {'booking_time', 'booked_persons_number', 'offer_id', 'email', 'phone',
|
||||
'first_name', 'last_name', },
|
||||
}
|
||||
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']:
|
||||
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.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
|
@ -77,7 +81,7 @@ class UpdatePendingBooking(generics.UpdateAPIView):
|
|||
data = request.data.copy()
|
||||
service = Booking.get_service_by_type(instance.type)
|
||||
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',
|
||||
}))
|
||||
service.commit_booking(data['pending_booking_id'])
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user