コード例 #1
0
def suppose_assignment():
    # import all not taken deliveries
    now = datetime.datetime.now()

    cond = {
        "conditions" :  {
            # "start" : datetime.datetime(now.year,now.month,now.day,0,0,0).strftime("%Y-%m-%d %H:%M:%S"),
            # "end" : (datetime.datetime(now.year,now.month,now.day,0,0,0) + datetime.timedelta(days=1, seconds=-1)).strftime("%Y-%m-%d %H:%M:%S"),
            "state" : "not assigned"
        }
    }

    deliveries = get_all_deliveries(company_id=session["user"]["company_id"], conditions=cond , return_obj=True, get_locations=True)

    # import drivers
    drivers = get_all_drivers(session["user"]["company_id"], return_obj=True, vehicles=True)


    suggestions = []
    no_registered = []

    for delivery in deliveries:
        best_distance = None
        best_driver = None

        for driver in drivers:
            if is_assignable(driver, delivery):
                distance = Location.getDistance(delivery.getSenderLocation(), driver.getLocation())
                if best_distance is not None:
                    if distance["distance"]["value"]< best_distance["distance"]["value"] :
                        best_distance = distance
                        best_driver = driver
                else:
                    best_distance = distance
                    best_driver = driver


        if best_distance is None or best_driver is None:
            no_registered.append(delivery)

        else :
            best = {"delivery" : delivery, "distance": best_distance["distance"], "duration" : best_distance["duration"]}
            append_suggestion(suggestions, best_driver, best)

            #update driver position
            best_driver.update_location(**delivery.getSenderLocation())


    return jsonify(suggestions=suggestions),200
コード例 #2
0
    def test_get_all_with_success_obj_location(self, client, mocker):
        with client.session_transaction() as sess:
            sess["user"]= {
                "id" : 3,
                "type": "driver",
                "company_id": 2
        }
        delivery_sql = [{
            "id" : 2,
            "customer_id" : 34,
            "driver_id" : 5,
            "date_pickup" : datetime.datetime.strptime('2015-11-30 17:23:09', "%Y-%m-%d %H:%M:%S"),
            "date_delivery" : datetime.datetime.strptime('2015-11-30 17:23:10', "%Y-%m-%d %H:%M:%S"),
            "date_created" : datetime.datetime.strptime('2015-10-30 19:23:10', "%Y-%m-%d %H:%M:%S"),
            "date_due" : datetime.datetime.strptime('2015-11-30 16:23:10', "%Y-%m-%d %H:%M:%S"),
            "weight": 12,
            "area": 10.1,
            "content": "fish",
            "sender_id": 2,
            "receiver_id": 3,
            "info": "",
            "canceled" : 0,
            "state" : "not taken",
            "customer_name": "my_customer",
            "sender_lat": 45.34,
            "sender_lng": 102.21,
            "receiver_lat": -12.21,
            "receiver_lng": -135.78
        }]

        expected_delivery = {
                        "id": 2,
                        "customer_id": 34,
                        "driver_id": 5,
                        "date_pickup": '2015-11-30 17:23:09',
                        "date_delivery": '2015-11-30 17:23:10',
                        "date_created": '2015-10-30 19:23:10',
                        "date_due": '2015-11-30 16:23:10',
                        "weight": 12,
                        "area": 10.1,
                        "content": "fish",
                        "sender_id": 2,
                        "receiver_id": 3,
                        "info": "",
                        "canceled": False,
                        "state": "not taken",
                        "customer_name": "my_customer",
                        "sender_lat": 45.34,
                        "sender_lng": 102.21,
                        "receiver_lat": -12.21,
                        "receiver_lng": -135.78
        }

        expected_obj = Delivery(expected_delivery)

        cond= {
            "conditions" : {
                "start" : "2016-04-02 00:00:00",
                "end" : "2016-04-04 00:00:00",
                "state" : "not taken"
                }
        }

        mocker.patch.object(DBHandler, "query", return_value=delivery_sql)
        res = get_all_deliveries(company_id=2, conditions=cond, return_obj=True, get_locations=True, driver_id=3)
        assert isinstance(res, list)
        assert len(res) == 1
        assert isinstance(res[0], Delivery)
        assert res[0] == expected_obj
        mocker.stopall()