def sign_in():
    user_req = request.get_json(force=True)
    user = User.parse(user_req, "create")
    if "errors" in user :
        return jsonify(errors=user["errors"]), 400

        #check user exist
    cond = {
        "email" : user_req["user"]["email"],
        "type" : user_req["user"]["type"]
    }
    user = db.select(table="users", conditions=cond, multiple=False)

    if user is None :
        return jsonify(info="Bad Credentials"),400

    if check_password_hash(user["password"],user_req["user"]["password"]):

        session["user"] = {
                    "id" : user["id"],
                    "email":  user["email"],
                    "name" : user["name"],
                    "type": user["type"],
                    "company_id": user["company_id"],
        }
        session.permanent = True
        return jsonify(session=session["user"], info="Your are currently logged in"), 200
    else:
        return jsonify(info="Bad Credentials"),400
def update(id: int):
    d = db.select(table="deliveries", conditions={"id": id}, multiple=False)
    if d is None:
        return jsonify(info="Delivery not found"), 404

    args = request.get_json(force=True)
    delivery = Delivery.parse(args, "update")
    if "errors" in delivery:
        return jsonify(errors=delivery["errors"]), 400
    delivery = delivery["delivery"]

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

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

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

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

    if "date_due" in delivery and d["driver_id"] is not None:
        db.delete(table="delivery_orders", conditions={"delivery_id": id})  # delete old date
        insert_at_last_order(id, delivery["date_due"], d["driver_id"])

    db.update(table="deliveries", params=delivery, conditions={"id": id})

    return jsonify(info="Delivery updated successfully"), 200
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 get(id: int):
    conditions = {"id": id, "company_id": session["user"]["company_id"]}

    if session["user"]["type"] == "driver":
        conditions["driver_id"] = session["user"]["id"]

    delivery = db.select(table="deliveries", conditions=conditions, multiple=False)

    if delivery is None:
        return jsonify(info="Delivery not found"), 404

    d = Delivery(delivery).to_dict()
    return jsonify(delivery=d), 200
Example #5
0
class FlicketSubscription(Base):
    __tablename__ = 'flicket_ticket_subscription'

    id = db.Column(db.Integer, primary_key=True)

    ticket_id = db.Column(db.Integer, db.ForeignKey(FlicketTicket.id))
    ticket = db.relationship(FlicketTicket)

    user_id = db.Column(db.Integer, db.ForeignKey(FlicketUser.id))
    user = db.relationship(FlicketUser)

    user_def = db.deferred(db.select([FlicketUser.name]).where(FlicketUser.id == user_id))

    def __repr__(self):
        return '<Class FlicketSubscription: ticket_id={}, user_id={}>'.format(self.ticket_id, self.user_id)
def get(id:int):
    company_id = session["user"]["company_id"]
    customer_raw = db.select(table="customers", conditions={"id": id, "company_id": company_id}, multiple=False)
    if customer_raw is None:
        return jsonify(info="Customer not found"),404

    customer = {
        "id": customer_raw["id"],
        "name" : customer_raw["name"],
        "phone" : customer_raw["phone"],
        "address" : customer_raw["address"],
        "location": {
            "lat": customer_raw["location_lat"],
            "lng": customer_raw["location_lng"],
        }
    }
    return jsonify(customer=customer),200
Example #7
0
class FlicketSubscription(PaginatedAPIMixin, Base):
    __tablename__ = 'flicket_ticket_subscription'

    id = db.Column(db.Integer, primary_key=True)

    ticket_id = db.Column(db.Integer, db.ForeignKey(FlicketTicket.id))
    ticket = db.relationship(FlicketTicket)

    user_id = db.Column(db.Integer, db.ForeignKey(FlicketUser.id))
    user = db.relationship(FlicketUser)

    user_def = db.deferred(
        db.select([FlicketUser.name]).where(FlicketUser.id == user_id))

    def to_dict(self):
        """

        :return: dict()
        """

        data = {
            'id': self.id,
            'ticket_id': self.ticket_id,
            'user_id': self.user_id,
            'user_def': self.user_def,
            'links': {
                'self':
                app.config['base_url'] +
                url_for('bp_api.get_subscription', id=self.id),
                'subscriptions':
                app.config['base_url'] + url_for('bp_api.get_subscriptions'),
                'ticket':
                app.config['base_url'] +
                url_for('bp_api.get_ticket', id=self.ticket_id),
                'user':
                app.config['base_url'] +
                url_for('bp_api.get_user', id=self.user_id),
            }
        }

        return data

    def __repr__(self):
        return '<Class FlicketSubscription: ticket_id={}, user_id={}>'.format(
            self.ticket_id, self.user_id)
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 get(id: int):
    company_id = session["user"]["company_id"]
    v = db.select(table="vehicles", conditions={"id": id, "company_id": company_id}, multiple=False)

    if v is None:
        return jsonify(info="Vehicle not found"), 404

    vehicle = {
        "id": v["id"],
        "registration": v["registration"],
        "type": v["type"],
        "weight": v["weight"],
        "max_weight": v["max_weight"],
        "area": v["area"],
        "max_area": v["max_area"],
    }

    return jsonify(vehicle=vehicle), 200
Example #10
0
class FlicketSubscription(PaginatedAPIMixin, Base):
    __tablename__ = "flicket_ticket_subscription"

    id = db.Column(db.Integer, primary_key=True)

    ticket_id = db.Column(db.Integer, db.ForeignKey(FlicketTicket.id))
    ticket = db.relationship(FlicketTicket)

    user_id = db.Column(db.Integer, db.ForeignKey(FlicketUser.id))
    user = db.relationship(FlicketUser)

    user_def = db.deferred(
        db.select([FlicketUser.name]).where(FlicketUser.id == user_id)
    )

    def to_dict(self):
        """

        :return: dict()
        """

        data = {
            "id": self.id,
            "ticket_id": self.ticket_id,
            "user_id": self.user_id,
            "user_def": self.user_def,
            "links": {
                "self": app.config["base_url"]
                + url_for("bp_api.get_subscription", id=self.id),
                "subscriptions": app.config["base_url"]
                + url_for("bp_api.get_subscriptions"),
                "ticket": app.config["base_url"]
                + url_for("bp_api.get_ticket", id=self.ticket_id),
                "user": app.config["base_url"]
                + url_for("bp_api.get_user", id=self.user_id),
            },
        }

        return data

    def __repr__(self):
        return "<Class FlicketSubscription: ticket_id={}, user_id={}>".format(
            self.ticket_id, self.user_id
        )
def get(id:int):

    company_id = session["user"]["company_id"]
    d = db.select(table="users", conditions={"id":id, "type":"driver", "company_id": company_id}, multiple=False)

    if d is None:
        return jsonify(info="Driver not found"), 404

    driver = {
        "id": d["id"],
        "name": d["name"],
        "email": d["email"],
        "phone": d["phone"],
        "location": {
            "lat": d["location_lat"],
            "lng": d["location_lng"]
        },
        "vehicle_id_1":d["vehicle_id_1"],
        "vehicle_id_2":d["vehicle_id_2"]
    }
    return jsonify(driver=driver),200
def get_all_drivers(company_id:int, return_obj=False, vehicles=False):
    _sql = """
            select users.id,
            users.name,
            users.location_lat,
            users.location_lng,
            users.vehicle_id_1,
            users.vehicle_id_2,
         v1.max_area AS v1_max_area,
         v1.max_weight AS v1_max_weight,
         v1.area AS v1_area,
         v1.weight AS v1_weight,
         v2.max_area AS v2_max_area,
         v2.max_weight AS v2_max_weight,
         v2.area AS v2_area,
         v2.weight AS v2_weight
         from users
        INNER JOIN vehicles AS v1
        ON users.vehicle_id_1 = v1.id
        LEFT JOIN vehicles AS v2
        ON users.vehicle_id_2 = v2.id
        WHERE users.type='driver' and users.company_id = %(company_id)s ;
        """

    if vehicles is True:
        drivers_raw = db.query(_sql, {"company_id" : company_id}, multiple=True)
    else :
        drivers_raw= db.select(table="users", conditions={"type":"driver", "company_id": company_id}, multiple=True)

    drivers = []
    if return_obj:
        for driver in drivers_raw:
            drivers.append(Driver(driver))

    else :
        for driver in drivers_raw:
            d = {"driver": Driver(driver).__dict__}
            drivers.append(d)

    return drivers
def getAll():
    company_id = session["user"]["company_id"]
    customers_raw = db.select(table="customers",conditions={"company_id": company_id})
    if len(customers_raw) <1:
        return jsonify(customers=customers_raw), 200

    customers = []
    for customer in customers_raw:
        c = {
            "customer": {
                "id": customer["id"],
                "name": customer["name"],
                "phone": customer["phone"],
                "address" : customer["address"],
                "location": {
                    "lat": customer["location_lat"],
                    "lng": customer["location_lng"],
                }
            }
        }
        customers.append(c)

    return jsonify(customers=customers),200
def getAll():
    company_id = session["user"]["company_id"]
    vs = db.select(table="vehicles", conditions={"company_id": company_id})

    if len(vs) < 1:
        return jsonify(vehicles=[]), 200

    vehicles = []

    for v in vs:
        vehicle = {
            "vehicle": {
                "id": v["id"],
                "registration": v["registration"],
                "type": v["type"],
                "weight": v["weight"],
                "max_weight": v["max_weight"],
                "area": v["area"],
                "max_area": v["max_area"],
            }
        }
        vehicles.append(vehicle)

    return jsonify(vehicles=vehicles), 200
Example #15
0
 def deactivated_badges(cls):
     return db.select([
                 db.func.count(Badges.id),
                 Badges.status == 'Deactivated'
             ]).as_scalar()
Example #16
0
 def active_badges(cls):
     return db.select([
                 db.func.count(Badges.id),
                 Badges.status == 'Active'
             ]).as_scalar()