示例#1
0
def get_orders(**kwargs):
    # NewOrder, DeliveryOnProgress, CancelledOrder, RedirectedOrders, OrdersReturned
    filters = (OrderModel.OrderSchema().dump(kwargs['filter']))
    these_order = OrderModel.Order.query
    for attr, value in filters.items():
        if value is not None:
            these_order = these_order.filter(
                getattr(OrderModel.Order, attr) == value)
    these_order = these_order.all()
    these_order = OrderModel.OrderSchema().dump(these_order, many=True)
    return these_order, 200
示例#2
0
def get_address(**kwargs):
    # NewOrder, DeliveryOnProgress, CancelledOrder, RedirectedOrders, OrdersReturned
    filters = (OrderModel.OrderSchema().dump(kwargs['filter']))
    these_order = OrderModel.Order.query
    for attr, value in filters.items():
        if value is not None:
            these_order = these_order.filter(
                getattr(OrderModel.Order, attr) == value)
    these_order = these_order.first()
    these_order = OrderModel.OrderSchema().dump(these_order)
    return {
        'name': these_order['receiver_name'],
        'address': these_order['delivery_address'],
        'special_code': these_order['special_code'],
    }, 200
示例#3
0
 def post(self):
     params = request.json
     if not params:
         return {'message': 'No input data provided'}, 400
     try:
         this_order = (OrderModel.OrderSchema().load(params))
     except ValidationError as err:
         # TODO parse the err in our format
         return {'error': err.messages, 'message': 'Input not in expected format'}, 422
     return OrderUtils.add_order(order=this_order)
示例#4
0
def update_orders(**kwargs):
    this_order = OrderModel.Order.query.filter_by(
        order_id=kwargs['update'].order_id).first()
    updates = (OrderModel.OrderSchema().dump(kwargs['update']))
    for attr, value in updates.items():
        if value is not None:
            this_order.attr = value
    if updates['current_status'] == 'CancelledOrder':
        similar_order = OrderModel.Order.query \
            .with_entities(OrderModel.Order.order_id, OrderModel.Order.delivery_latitude, OrderModel.Order.delivery_longitude)\
            .filter(OrderModel.Order.product_id == this_order.product_id,
                    OrderModel.Order.current_status == 'NewOrder',
                    OrderModel.Order.order_id != this_order.order_id)\
            .all()
        origin = "28.704060,77.102493"
        similar_order_data = []
        min_distance = sys.maxsize
        min_duration = sys.maxsize
        redirection_order = -1
        for order in similar_order:
            destination = str(order[1]) + ',' + str(order[2])
            now = datetime.now()
            directions_result = gmaps.directions(origin,
                                                 destination,
                                                 mode="transit",
                                                 departure_time=now)
            if directions_result[0]['legs'][0]['distance']['value'] < min_distance\
                and directions_result[0]['legs'][0]['duration']['value'] < min_duration:
                min_distance = directions_result[0]['legs'][0]['distance'][
                    'value']
                min_duration = directions_result[0]['legs'][0]['duration'][
                    'value']
                redirection_order = order[0]
        destination = str(this_order.delivery_start_latitude) + ',' + str(
            this_order.delivery_start_longitude)
        directions_result = gmaps.directions(origin,
                                             destination,
                                             mode="transit",
                                             departure_time=now)
        if directions_result[0]['legs'][0]['distance']['value'] < min_distance \
                and directions_result[0]['legs'][0]['duration']['value'] < min_duration:
            this_order.current_status = 'OrdersReturned'
        else:
            this_order.current_status = 'RedirectedOrders'
            redirected_order = OrderModel.Order.query.filter_by(
                order_id=redirection_order).first()
            this_order.delivery_address = redirected_order.delivery_address
            redirected_order.current_status = 'DeliveryOnProgress'
    db.session.commit()
    return {'message': 'updated!'}, 200
示例#5
0
 def get(self):
     params = request.args.to_dict()
     filters = (OrderModel.OrderSchema().load(params))
     return OrderUtils.get_address(filter=filters)
示例#6
0
 def put(self):
     params = request.args.to_dict()
     updates = (OrderModel.OrderSchema().load(params))
     return OrderUtils.update_orders(update=updates)