def create(self, request, *args, **kwargs): data = request.data table = Table.objects.get(number=data["table"]) has_active_order = Order.objects.filter(status="IN_PROGRESS", table_id=getattr(table, "id"), is_deleted=0) if has_active_order.exists(): return Response("There is already order on that table!", status=status.HTTP_400_BAD_REQUEST) user = User.objects.first() new_order = Order.objects.create(table=table, status=data["status"], user=user, is_deleted=data["is_deleted"]) new_order.save() for product in data["products"]: product_obj = Product.objects.get(name=product["product_name"]) OrderProduct.objects.create( product_price_currency=getattr(product_obj, "price_currency"), product_price=getattr(product_obj, "price"), product_quantity=product["product_quantity"], order_id=getattr(new_order, "id"), product_id=getattr(product_obj, "id")) serializer = OrderModelSerializer(new_order) return Response(serializer.data, status=status.HTTP_200_OK)
def make_order(self, request, *args, **kwargs): order = get_object_or_404( Order, id=kwargs['id'], user=self.user.id, store=self.store.id ) # Assign Rider query_riders = Rider.objects.filter(is_active=True).filter(is_available=True) rider_available = query_riders.first() rider_id = rider_available.id rider_instance = Rider.objects.get(id=rider_id) # import pdb; pdb.set_trace() # Order: add Rider & ordered=True order.rider = rider_instance order.ordered = True # Rider stats rider_instance.orders_active += 1 # Rider status if rider_instance.orders_active == 2: rider_instance.is_available = False # Saving instance in DB order.save() rider_instance.save() data = OrderModelSerializer(order).data return Response(data, status=status.HTTP_200_OK)
class ContactSummarySerializer(serializers.ModelSerializer): contact_persons = ContactPersonModelSerializer(read_only=True, many=True) orders = OrderModelSerializer(read_only=True, many=True) offers = OfferModelSerializer(read_only=True, many=True) deliveries = DeliveryModelSerializer(read_only=True, many=True) invoices = InvoiceModelSerializer(read_only=True, many=True) class Meta: model = Contact fields = '__all__'
def orders(self, request, *args, **kwargs): '''Show orders assign to the Rider.''' # import pdb; pdb.set_trace() store = get_object_or_404(Store, store_slugname=kwargs['store_slugname']) orders_assigned = (store.order_set.all().filter( picked_up=False).filter(deliveried=False)) n = len(orders_assigned) for i in range(n): data = OrderModelSerializer(orders_assigned[i]).data return Response(data, status=status.HTTP_200_OK)
def orders(self, request, *args, **kwargs): '''Show orders assign to the Rider.''' rider = get_object_or_404(Rider, id=kwargs['slugname']) # Don't know why appears slugnmame in kwargs. There's no slugname in models even orders_assigned = ( rider.order_set.all() .filter(picked_up=False) .filter(deliveried=False) ) # import pdb; pdb.set_trace() n = len(orders_assigned) for i in range(n): data = OrderModelSerializer(orders_assigned[i]).data return Response(data, status=status.HTTP_200_OK)
class ContactShortSummarySerializer(serializers.ModelSerializer): contact_persons = serializers.StringRelatedField(many=True) delivery = DeliveryModelSerializer(many=True) invoices = InvoiceModelSerializer(many=True) offers = OfferModelSerializer(many=True) orders = OrderModelSerializer(many=True) class Meta: model = Contact fields = [ 'application_id', 'name_1', 'address', 'post_code', 'contact_persons', 'delivery', 'invoices', 'offers', 'orders', 'longitude', 'latitude' ]
def get_active_order_by_table_id(self, request, *args, **kwargs): table_id = int(kwargs['table_id']) try: table = Table.objects.get(id=table_id) except Table.DoesNotExist: return Response("Table not found", status=status.HTTP_404_NOT_FOUND) order = table.orders.filter(is_deleted=0, status="IN_PROGRESS").first() if not order: return Response("There is no order for that table", status=status.HTTP_404_NOT_FOUND) serializer = OrderModelSerializer(order) return Response(serializer.data)
def update(self, request, *args, **kwargs): instance = self.get_object() if getattr(instance, 'status').lower() == 'completed': return Response("Can't update completed order", status=status.HTTP_400_BAD_REQUEST) data = request.data table = Table.objects.get(number=data["table"]) has_active_order = Order.objects.filter( status="IN_PROGRESS", table_id=getattr(table, "id"), is_deleted=0, ).exclude(id=getattr(instance, 'id')) if has_active_order.exists(): return Response("There is already order on that table!", status=status.HTTP_400_BAD_REQUEST) user = User.objects.first() instance.table = table instance.status = data["status"] instance.user = user instance.is_deleted = data["is_deleted"] instance.save() OrderProduct.objects.filter(order_id=getattr(instance, 'id')).delete() for product in data["products"]: product_obj = Product.objects.get(name=product["product_name"]) OrderProduct.objects.create( product_price_currency=getattr(product_obj, "price_currency"), product_price=getattr(product_obj, "price"), product_quantity=product["product_quantity"], order_id=getattr(instance, "id"), product_id=getattr(product_obj, "id")) serializer = OrderModelSerializer(instance) return Response(serializer.data)
def create(self, request, *args, **kwargs): '''Create an order.''' request.data['user'] = self.user.id request.data['customer'] = self.user.customer.id request.data['store'] = self.store.id serializer = OrderModelSerializer( data=request.data ) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED)