219 lines
8.5 KiB
Python
219 lines
8.5 KiB
Python
from datetime import datetime
|
|
from database import get_connection, is_postgres
|
|
|
|
class OrdersOut:
|
|
def __init__(self):
|
|
# Parameter placeholder per backend
|
|
self.ph = "%s" if is_postgres() else "?"
|
|
|
|
def order_to_dict(self, row):
|
|
return {
|
|
"id": row[0],
|
|
"order_number": row[1],
|
|
"user_id": row[2],
|
|
"client_id": row[3],
|
|
"transporter_id": row[4],
|
|
"products_description": row[5],
|
|
"ldb_quantity": row[6],
|
|
"kg_quantity": row[7],
|
|
"track_reg_number": row[8],
|
|
"trailer_reg_number": row[9],
|
|
"received_price": row[10],
|
|
"paid_price": row[11],
|
|
"created_at": row[12],
|
|
"status": row[13],
|
|
"order_in_number": row[14],
|
|
"currency_received":row[15],
|
|
"currency_paid": row[16]
|
|
}
|
|
|
|
def order_point_to_dict(self, row):
|
|
return {
|
|
"id": row[0],
|
|
"order_id": row[1],
|
|
"destination_id": row[2],
|
|
"informatins": row[3],
|
|
"point_data": row[4],
|
|
"point_hour": row[5],
|
|
'point_type': row[6],
|
|
}
|
|
|
|
def create_order(self, data):
|
|
created_at = datetime.now().isoformat()
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
returning = " RETURNING id" if is_postgres() else ""
|
|
cursor.execute(
|
|
f"""
|
|
INSERT INTO orders_out
|
|
(user_id, client_id, transporter_id, products_description, received_price, paid_price, order_number,
|
|
ldb_quantity, kg_quantity, track_reg_number, trailer_reg_number, created_at, order_in_number, currency_received, currency_paid)
|
|
VALUES ({self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}){returning}
|
|
""",
|
|
(
|
|
data["user_id"],
|
|
data["client_id"],
|
|
data["transporter_id"],
|
|
data['products_description'],
|
|
data["received_price"],
|
|
data["paid_price"],
|
|
data["order_number"],
|
|
data["ldb_quantity"],
|
|
data["kg_quantity"],
|
|
data["track_reg_number"],
|
|
data["trailer_reg_number"],
|
|
created_at,
|
|
data['order_in_number'],
|
|
data['currency_received'],
|
|
data['currency_paid'],
|
|
),
|
|
)
|
|
new_id = cursor.fetchone()[0] if is_postgres() else getattr(cursor, "lastrowid", None)
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
return new_id
|
|
|
|
def update_order(self, data):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
f"""
|
|
UPDATE orders_out SET client_id = {self.ph}, transporter_id = {self.ph}, products_description = {self.ph},
|
|
received_price = {self.ph}, paid_price = {self.ph}, order_number = {self.ph},
|
|
ldb_quantity = {self.ph}, kg_quantity = {self.ph}, track_reg_number = {self.ph},
|
|
trailer_reg_number = {self.ph}, order_in_number = {self.ph}, currency_received = {self.ph},
|
|
currency_paid = {self.ph}
|
|
WHERE id = {self.ph}
|
|
""",
|
|
(
|
|
data["client_id"],
|
|
data["transporter_id"],
|
|
data["products_description"],
|
|
data["received_price"],
|
|
data["paid_price"],
|
|
data["order_number"],
|
|
data["ldb_quantity"],
|
|
data["kg_quantity"],
|
|
data["track_reg_number"],
|
|
data["trailer_reg_number"],
|
|
data['order_in_number'],
|
|
data['currency_received'],
|
|
data['currency_paid'],
|
|
data["id"],
|
|
),
|
|
)
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def cancel_order(self, order_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
f"UPDATE orders_out SET order_status = {self.ph} WHERE id = {self.ph}",
|
|
('cancelled', order_id,),
|
|
)
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def delete_order(self, order_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"DELETE FROM orders_out WHERE id = {self.ph}", (order_id,))
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def get_order_by_id(self, order_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"SELECT * FROM orders_out WHERE id = {self.ph}", (order_id,))
|
|
row = cursor.fetchone()
|
|
return self.order_to_dict(row) if row else None
|
|
|
|
def get_orders_by_user(self, user_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
f"SELECT * FROM orders_out WHERE user_id = {self.ph} ORDER BY created_at DESC",
|
|
(user_id,),
|
|
)
|
|
rows = cursor.fetchall()
|
|
return [self.order_to_dict(row) for row in rows]
|
|
|
|
|
|
def create_order_point(self, data):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
returning = " RETURNING id" if is_postgres() else ""
|
|
cursor.execute(
|
|
f"""
|
|
INSERT INTO order_out_points
|
|
(order_id, destination_id, informatins, point_data, point_hour, point_type)
|
|
VALUES ({self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}, {self.ph}){returning}
|
|
""",
|
|
(
|
|
data["order_id"],
|
|
data["destination_id"],
|
|
data["informatins"],
|
|
data["point_data"],
|
|
data["point_hour"],
|
|
data['point_type']
|
|
),
|
|
)
|
|
# keep behavior similar: no return expected, but commit consistently
|
|
if is_postgres():
|
|
_ = cursor.fetchone() # consume RETURNING if present
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def update_order_point(self, data):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
f"""
|
|
UPDATE order_out_points SET
|
|
order_id = {self.ph}, destination_id = {self.ph}, informatins = {self.ph}, point_data = {self.ph}, point_hour = {self.ph}, point_type = {self.ph}
|
|
WHERE id = {self.ph}
|
|
""",
|
|
(
|
|
data["order_id"],
|
|
data["destination_id"],
|
|
data["informatins"],
|
|
data["point_data"],
|
|
data["point_hour"],
|
|
data['point_type'],
|
|
data["id"],
|
|
),
|
|
)
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def delete_order_point(self, point_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"DELETE FROM order_out_points WHERE id = {self.ph}", (point_id,))
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def delete_points_by_order_id(self, order_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"DELETE FROM order_out_points WHERE order_id = {self.ph}", (order_id,))
|
|
if hasattr(conn, "commit"):
|
|
conn.commit()
|
|
|
|
def get_order_point_by_id(self, point_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(f"SELECT * FROM order_out_points WHERE id = {self.ph}", (point_id,))
|
|
row = cursor.fetchone()
|
|
return self.order_point_to_dict(row) if row else None
|
|
|
|
def get_order_points_by_order(self, order_id):
|
|
with get_connection() as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute(
|
|
f"SELECT * FROM order_out_points WHERE order_id = {self.ph} ORDER BY id",
|
|
(order_id,),
|
|
)
|
|
rows = cursor.fetchall()
|
|
return [self.order_point_to_dict(row) for row in rows] |