def insert_at_last_order(delivery_id, date, driver_id):
    last = db.select(
        table="delivery_orders",
        selected_columns=("MAX(num_order)",),
        conditions={"date": date, "driver_id": driver_id},
        multiple=False,
    )
    last = last["MAX(num_order)"] + 1 if isinstance(last["MAX(num_order)"], int) else 1
    db.insert(
        table="delivery_orders",
        params={"num_order": last, "date": date, "delivery_id": delivery_id, "driver_id": driver_id},
    )
def create():
    company_id = session["user"]["company_id"]
    driver = request.get_json(force=True)
    driver = Driver.parse(driver, "create")
    
    if "errors" in driver:
        return jsonify(errors=driver["errors"]),400
    driver = driver["driver"]

    if db.is_existing(table="users",
                      conditions={"name": driver["name"], "type":"driver", "company_id":company_id}):
        return jsonify(info="Driver with the same name already exist"),400

    if db.is_existing(table="users",
                      conditions={"email": driver["email"], "type":"driver", "company_id": company_id}):
            return jsonify(info="Driver with the same email already exist"),400

    pwd = Generator.password()

    driver_data={
        "name" : driver["name"],
        "email" : driver["email"],
        "password" : generate_password_hash(pwd),
        "company_id" : company_id,
        "phone" : driver["phone"],
        "type":"driver"
    }
    driverId = db.insert(table="users", params=driver_data)
    return jsonify(info="Driver created successfully", driverId=driverId, password=pwd),200
def generate_random():

    req = request.get_json(force=True)
    company_id = session["user"]["company_id"]

    list_content = ["fish", "glass", "vegetables", "fragile", "frozen", "wood", "letter", "material", "electronic"]

    random_weight = lambda : round(random.uniform(0.10, 2000.00),2)
    random_area = lambda : round(random.uniform(0.10, 34.00), 2)

    customer_ids = db.select(table="customers", selected_columns=("id",), conditions={"company_id" : company_id}, multiple=True)

    random_receiver  = lambda id : random.choice([v["id"] for v in customer_ids if v["id"]!=id ])

    for x in range(0, 5):
        delivery = {
            "customer_id" : random.choice(customer_ids)["id"],
            "sender_id" : random.choice(customer_ids)["id"],
            "date_due" : req["date_due"],
            "date_created" : req["date_due"],
            "content" : random.choice(list_content),
            "area" : random_area(),
            "weight" : random_weight(),
            "company_id" : company_id
        }

        delivery["receiver_id"] = random_receiver(delivery["sender_id"])
        er = 3
        delivery_id = db.insert(table="deliveries", params=delivery)
        assign_driver(delivery_id, 3)

        # if x <3 :
        #     db.update(table="deliveries",params={"state" : "taken"}, conditions={"id": delivery_id, "company_id": company_id})
        #
        # if x>=3 and x<5:
        #     db.update(table="deliveries",params={"state" : "on way"}, conditions={"id": delivery_id, "company_id": company_id})
        #
        # if x==7 :
        #     db.update(table="deliveries",params={"state" : "picked up"}, conditions={"id": delivery_id, "company_id": company_id})
        #
        # if x==8 :
        #     db.update(table="deliveries",params={"state" : "delivered"}, conditions={"id": delivery_id, "company_id": company_id})


    return jsonify(info="done"), 200
def create():
    company_id = session["user"]["company_id"]
    rq = request.get_json(force=True)
    vehicle = Vehicle.parse(rq, "create")
    if "errors" in vehicle:
        return jsonify(errors=vehicle["errors"]), 400
    vehicle = vehicle["vehicle"]

    if db.is_existing(table="vehicles", conditions={"registration": vehicle["registration"], "company_id": company_id}):
        return jsonify(info="Vehicle with the same registration already exist"), 400

    vehicle_data = {
        "registration": vehicle["registration"],
        "type": vehicle["type"],
        "max_weight": vehicle["max_weight"],
        "max_area": vehicle["max_area"],
        "company_id": company_id,
    }

    vehicle_id = db.insert(table="vehicles", params=vehicle_data)
    return jsonify(info="Vehicle created successfully", vehicleId=vehicle_id)
def create():
    args = request.get_json(force=True)
    delivery = Delivery.parse(args, "create")
    if "errors" in delivery:
        return jsonify(errors=delivery["errors"]), 400

    delivery = delivery["delivery"]
    delivery["company_id"] = session["user"]["company_id"]

    if not db.is_existing(table="customers", conditions={"id": delivery["customer_id"]}):
        return jsonify(info="Customer not found"), 404

    # check existing customer
    if not db.is_existing(table="customers", conditions={"id": delivery["sender_id"]}):
        return jsonify(info="Sender not found"), 404

    # check existing customer
    if not db.is_existing(table="customers", conditions={"id": delivery["receiver_id"]}):
        return jsonify(info="Receiver not found"), 404

    delivery_id = db.insert(table="deliveries", params=delivery)

    return jsonify(info="Delivery created successfully", deliveryId=delivery_id), 200
def create():
    req = request.get_json(force=True)
    customer = Customer.parse(req, "create")
    if "errors" in customer:
        return jsonify(errors=customer["errors"]),400
    customer = customer["customer"]

    ### check customer name duplication
    company_id = session["user"]["company_id"]
    if db.is_existing(table="customers",
                      conditions={"name":customer["name"], "company_id":company_id}):
        return jsonify(info="Customer with the same name already exist"),400

    # record customer
    data = {
        "name" : customer["name"],
        "address" : customer["address"],
        "location_lat" : customer["location"]["lat"],
        "location_lng" : customer["location"]["lng"],
        "phone" : customer["phone"],
        "company_id" : company_id
    }
    customerId= db.insert(table="customers", params=data)
    return jsonify(info="Customer created successfully", customerId=customerId),200