create orders enpoints fixed
This commit is contained in:
82
scratch/check_db.js
Normal file
82
scratch/check_db.js
Normal file
@@ -0,0 +1,82 @@
|
||||
const { Client } = require('pg');
|
||||
|
||||
const client = new Client({
|
||||
host: '66.116.207.225',
|
||||
port: 5433,
|
||||
database: 'nearledb',
|
||||
user: 'admin',
|
||||
password: 'Package@123#',
|
||||
ssl: false,
|
||||
});
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
await client.connect();
|
||||
console.log('Connected to PostgreSQL successfully!');
|
||||
|
||||
// Let's execute a transaction test to insert the tenant and see the DB error
|
||||
await client.query('BEGIN');
|
||||
try {
|
||||
const query = `
|
||||
INSERT INTO tenants (
|
||||
tenantid, tenantname, configid, partnerid, moduleid, tenanttype,
|
||||
registrationno, tenanttoken, companyname, devicetype, deviceid,
|
||||
firstname, primaryemail, primarycontact, categoryid, subcategoryid,
|
||||
address, suburb, city, state, postcode, latitude, longitude,
|
||||
tenantimage, tenantinfo, paymode1, paymode2, promotion, minorder,
|
||||
applocationid, approved, status, partneruserid
|
||||
) VALUES (
|
||||
$1, $2, $3, $4, $5, $6,
|
||||
$7, $8, $9, $10, $11,
|
||||
$12, $13, $14, $15, $16,
|
||||
$17, $18, $19, $20, $21, $22, $23,
|
||||
$24, $25, $26, $27, $28, $29,
|
||||
$30, $31, $32, $33
|
||||
)
|
||||
`;
|
||||
const values = [
|
||||
273, "Suriya Store", 1, 1, 2, "Retail",
|
||||
"REG-SURIYA-273", "fcm_token_suriya_273", "Suriya Enterprises", "Android", "device-uuid-9876543210",
|
||||
"Suriya", "suriya@example.com", "9876543212", 1, 2,
|
||||
"12, DB Road, RS Puram", "RS Puram", "Coimbatore", "Tamil Nadu", "641002", "11.0118", "76.9456",
|
||||
"https://example.com/suriya_store.jpg", "Groceries and essentials in RS Puram, Coimbatore", 1, 1, 0, 10,
|
||||
1, 0, "Active", 0
|
||||
];
|
||||
|
||||
await client.query(query, values);
|
||||
console.log('Tenant insert succeeded!');
|
||||
|
||||
// Let's also try to insert the tenantlocation
|
||||
const locQuery = `
|
||||
INSERT INTO tenantlocations (
|
||||
tenantid, applocationid, moduleid, locationname, email, contactno,
|
||||
latitude, longitude, address, suburb, city, state, postcode,
|
||||
opentime, closetime, partnerid, deliveryradius, deliverymins, cancelsecs, status
|
||||
) VALUES (
|
||||
$1, $2, $3, $4, $5, $6,
|
||||
$7, $8, $9, $10, $11, $12, $13,
|
||||
$14, $15, $16, $17, $18, $19, $20
|
||||
)
|
||||
`;
|
||||
const locValues = [
|
||||
273, 1, 2, "Suriya Store RS Puram", "rspuram@suriya.com", "9876543210",
|
||||
"11.0118", "76.9456", "12, DB Road, RS Puram", "RS Puram", "Coimbatore", "Tamil Nadu", "641002",
|
||||
"08:00", "22:00", 1, 5, 30, 120, "Active"
|
||||
];
|
||||
await client.query(locQuery, locValues);
|
||||
console.log('Location insert succeeded!');
|
||||
|
||||
} catch (e) {
|
||||
console.error('SQL Error during insert:', e.message, e.detail || '');
|
||||
} finally {
|
||||
await client.query('ROLLBACK');
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.error('Error connecting:', err);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
36
scratch/check_rider_orders.js
Normal file
36
scratch/check_rider_orders.js
Normal file
@@ -0,0 +1,36 @@
|
||||
const { Client } = require('pg');
|
||||
|
||||
const client = new Client({
|
||||
host: '66.116.207.225',
|
||||
port: 5433,
|
||||
database: 'nearledb',
|
||||
user: 'admin',
|
||||
password: 'Package@123#',
|
||||
ssl: false,
|
||||
});
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
await client.connect();
|
||||
console.log('Connected successfully!');
|
||||
|
||||
console.log('\n--- Updating orders 140533 and 140534 to "created" status ---');
|
||||
const updateRes = await client.query(
|
||||
"UPDATE orders SET orderstatus = 'created', pending = '' WHERE orderheaderid IN (140533, 140534)"
|
||||
);
|
||||
console.log(`Updated ${updateRes.rowCount} orders.`);
|
||||
|
||||
console.log('\n--- Verification ---');
|
||||
const verifyRes = await client.query(
|
||||
"SELECT orderheaderid, orderid, orderstatus, pending, processing, ready, delivered, cancelled FROM orders WHERE orderheaderid IN (140533, 140534)"
|
||||
);
|
||||
console.table(verifyRes.rows);
|
||||
|
||||
} catch (err) {
|
||||
console.error('Error executing update:', err);
|
||||
} finally {
|
||||
await client.end();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
504
scratch/create_tables.py
Normal file
504
scratch/create_tables.py
Normal file
@@ -0,0 +1,504 @@
|
||||
import psycopg2
|
||||
from psycopg2 import sql
|
||||
|
||||
# Database connection parameters (hardcoded as requested)
|
||||
DB_PARAMS = {
|
||||
"host": "31.97.228.132",
|
||||
"port": 5433,
|
||||
"database": "logistics",
|
||||
"user": "admin",
|
||||
"password": "Package@321#"
|
||||
}
|
||||
|
||||
# SQL Statements for creating all 20 tables in topological order (with constraints)
|
||||
TABLES = {
|
||||
# 1. Partner info
|
||||
"partnerinfo": """
|
||||
CREATE TABLE IF NOT EXISTS partnerinfo (
|
||||
partnerid SERIAL PRIMARY KEY,
|
||||
partnername VARCHAR(255) NOT NULL,
|
||||
partnertypeid INT,
|
||||
contactno VARCHAR(50),
|
||||
status VARCHAR(50) DEFAULT 'Active',
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 2. Hubs
|
||||
"hubs": """
|
||||
CREATE TABLE IF NOT EXISTS hubs (
|
||||
hubid SERIAL PRIMARY KEY,
|
||||
hubname VARCHAR(255) NOT NULL,
|
||||
hubtype VARCHAR(50) NOT NULL CHECK (hubtype IN ('sorting_center', 'delivery_hub')),
|
||||
applocationid INT,
|
||||
address VARCHAR(500),
|
||||
latitude DECIMAL(10, 7),
|
||||
longitude DECIMAL(10, 7),
|
||||
pincode VARCHAR(10),
|
||||
status VARCHAR(50) DEFAULT 'Active' CHECK (status IN ('Active', 'InActive')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 3. Vehicles
|
||||
"vehicles": """
|
||||
CREATE TABLE IF NOT EXISTS vehicles (
|
||||
vehicleid SERIAL PRIMARY KEY,
|
||||
vehicleno VARCHAR(50) UNIQUE NOT NULL,
|
||||
vehicletype VARCHAR(50) NOT NULL,
|
||||
maxweight NUMERIC(10, 2) NOT NULL,
|
||||
maxvolume NUMERIC(10, 2) NOT NULL,
|
||||
partnerid INT REFERENCES partnerinfo(partnerid) ON DELETE SET NULL,
|
||||
batterypercentage INT,
|
||||
status VARCHAR(50) DEFAULT 'Available' CHECK (status IN ('Available', 'In_Transit', 'Maintenance', 'InActive')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 4. App Users
|
||||
"appusers": """
|
||||
CREATE TABLE IF NOT EXISTS appusers (
|
||||
userid SERIAL PRIMARY KEY,
|
||||
authname VARCHAR(150) NOT NULL,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
contactno VARCHAR(50) NOT NULL,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
roleid INT NOT NULL,
|
||||
hubid INT REFERENCES hubs(hubid) ON DELETE SET NULL,
|
||||
applocationid INT,
|
||||
partnerid INT REFERENCES partnerinfo(partnerid) ON DELETE SET NULL,
|
||||
tenantid INT,
|
||||
onduty INT DEFAULT 0,
|
||||
status VARCHAR(50) DEFAULT 'Active',
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 5. Miler Profiles
|
||||
"milerprofiles": """
|
||||
CREATE TABLE IF NOT EXISTS milerprofiles (
|
||||
milerprofileid SERIAL PRIMARY KEY,
|
||||
userid INT UNIQUE NOT NULL REFERENCES appusers(userid) ON DELETE CASCADE,
|
||||
displayname VARCHAR(150) NOT NULL,
|
||||
phone VARCHAR(20) NOT NULL,
|
||||
profilephotourl VARCHAR(500),
|
||||
vehicleid INT REFERENCES vehicles(vehicleid) ON DELETE SET NULL,
|
||||
defaultvehicletype VARCHAR(50),
|
||||
currentlatitude DECIMAL(10, 7),
|
||||
currentlongitude DECIMAL(10, 7),
|
||||
currentpincode VARCHAR(10),
|
||||
availabilitystatus VARCHAR(50) DEFAULT 'Offline' CHECK (availabilitystatus IN ('Offline', 'Available', 'Assigned', 'On_Pickup', 'At_Customer', 'Picked_Up', 'On_Delivery', 'Break', 'Blocked')),
|
||||
rating NUMERIC(3, 2) DEFAULT 5.00,
|
||||
totalcompletedpickups INT DEFAULT 0,
|
||||
totalcancelledpickups INT DEFAULT 0,
|
||||
lastlocationupdatedat TIMESTAMP,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 6. App Customers
|
||||
"appcustomers": """
|
||||
CREATE TABLE IF NOT EXISTS appcustomers (
|
||||
appcustomerid SERIAL PRIMARY KEY,
|
||||
firstname VARCHAR(100) NOT NULL,
|
||||
lastname VARCHAR(100),
|
||||
phone VARCHAR(20) UNIQUE NOT NULL,
|
||||
email VARCHAR(150),
|
||||
loginpinhash VARCHAR(255),
|
||||
defaultlatitude DECIMAL(10, 7),
|
||||
defaultlongitude DECIMAL(10, 7),
|
||||
defaultpincode VARCHAR(10),
|
||||
status VARCHAR(50) DEFAULT 'Active' CHECK (status IN ('Active', 'Blocked', 'Deleted')),
|
||||
lastloginat TIMESTAMP,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 7. App Customer Locations
|
||||
"appcustomerlocations": """
|
||||
CREATE TABLE IF NOT EXISTS appcustomerlocations (
|
||||
appcustomerlocationid SERIAL PRIMARY KEY,
|
||||
appcustomerid INT REFERENCES appcustomers(appcustomerid) ON DELETE CASCADE,
|
||||
label VARCHAR(50) DEFAULT 'Home',
|
||||
receivername VARCHAR(150),
|
||||
receiverphone VARCHAR(20),
|
||||
address VARCHAR(500) NOT NULL,
|
||||
landmark VARCHAR(255),
|
||||
city VARCHAR(100),
|
||||
state VARCHAR(100),
|
||||
pincode VARCHAR(10) NOT NULL,
|
||||
latitude DECIMAL(10, 7) NOT NULL,
|
||||
longitude DECIMAL(10, 7) NOT NULL,
|
||||
isdefault BOOLEAN DEFAULT FALSE,
|
||||
status VARCHAR(50) DEFAULT 'Active',
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 8. Consignments (Base for dispatch, created in order ahead of trip sheet links)
|
||||
"consignments": """
|
||||
CREATE TABLE IF NOT EXISTS consignments (
|
||||
consignmentid SERIAL PRIMARY KEY,
|
||||
trackingno VARCHAR(100) UNIQUE NOT NULL,
|
||||
orderheaderid INT,
|
||||
tenantid INT,
|
||||
senderid INT,
|
||||
receiverid INT,
|
||||
pickuplocationid INT,
|
||||
deliverylocationid INT,
|
||||
originhubid INT REFERENCES hubs(hubid),
|
||||
currenthubid INT REFERENCES hubs(hubid),
|
||||
destinationhubid INT REFERENCES hubs(hubid),
|
||||
pickuppincode VARCHAR(10),
|
||||
deliverypincode VARCHAR(10),
|
||||
pickuplatitude DECIMAL(10, 7),
|
||||
pickuplongitude DECIMAL(10, 7),
|
||||
deliverylatitude DECIMAL(10, 7),
|
||||
deliverylongitude DECIMAL(10, 7),
|
||||
length NUMERIC(8, 2),
|
||||
width NUMERIC(8, 2),
|
||||
height NUMERIC(8, 2),
|
||||
deadweight NUMERIC(10, 2) NOT NULL,
|
||||
volumetricweight NUMERIC(10, 2),
|
||||
chargeableweight NUMERIC(10, 2) NOT NULL,
|
||||
codamount NUMERIC(10, 2) DEFAULT 0.00,
|
||||
codcollected NUMERIC(10, 2) DEFAULT 0.00,
|
||||
paymentmode VARCHAR(50) CHECK (paymentmode IN ('Prepaid', 'COD', 'To_Pay')),
|
||||
billingstatus VARCHAR(50) DEFAULT 'Unbilled' CHECK (billingstatus IN ('Unbilled', 'Billed', 'Paid', 'Settled')),
|
||||
status VARCHAR(50) DEFAULT 'Created' CHECK (status IN ('Created', 'Inwarded_at_Hub', 'Tripsheet_Loaded', 'In_Transit', 'Out_for_Delivery', 'Delivered', 'RTO_Initiated', 'Returned_to_Sender', 'Missing', 'Damaged')),
|
||||
attemptcount INT DEFAULT 0,
|
||||
estimateddeliveryat TIMESTAMP,
|
||||
sladueat TIMESTAMP,
|
||||
returnreason VARCHAR(255),
|
||||
returninitiatedat TIMESTAMP,
|
||||
returndeliveredat TIMESTAMP,
|
||||
parentconsignmentid INT REFERENCES consignments(consignmentid) ON DELETE SET NULL,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 9. Pickup Bookings (Links to appcustomers, milers, and consignments)
|
||||
"pickupbookings": """
|
||||
CREATE TABLE IF NOT EXISTS pickupbookings (
|
||||
bookingid SERIAL PRIMARY KEY,
|
||||
bookingno VARCHAR(100) UNIQUE NOT NULL,
|
||||
appcustomerid INT REFERENCES appcustomers(appcustomerid) ON DELETE CASCADE,
|
||||
pickuplocationid INT REFERENCES appcustomerlocations(appcustomerlocationid),
|
||||
pickupaddress VARCHAR(500) NOT NULL,
|
||||
pickuppincode VARCHAR(10) NOT NULL,
|
||||
pickuplatitude DECIMAL(10, 7) NOT NULL,
|
||||
pickuplongitude DECIMAL(10, 7) NOT NULL,
|
||||
deliveryaddress VARCHAR(500) NOT NULL,
|
||||
deliverypincode VARCHAR(10) NOT NULL,
|
||||
deliverylatitude DECIMAL(10, 7) NOT NULL,
|
||||
deliverylongitude DECIMAL(10, 7) NOT NULL,
|
||||
nearesthubid INT REFERENCES hubs(hubid) ON DELETE SET NULL,
|
||||
bookingsource VARCHAR(50) DEFAULT 'Customer_App',
|
||||
status VARCHAR(50) DEFAULT 'Created' CHECK (status IN ('Created', 'Miler_Assigned', 'Pickup_Scheduled', 'Picked_Up', 'Converted_To_Consignment', 'Cancelled')),
|
||||
preferredpickupfrom TIMESTAMP,
|
||||
preferredpickupto TIMESTAMP,
|
||||
assignedmileruserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
consignmentid INT REFERENCES consignments(consignmentid) ON DELETE SET NULL,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 10. Booking Parcels
|
||||
"bookingparcels": """
|
||||
CREATE TABLE IF NOT EXISTS bookingparcels (
|
||||
bookingparcelid SERIAL PRIMARY KEY,
|
||||
bookingid INT REFERENCES pickupbookings(bookingid) ON DELETE CASCADE,
|
||||
itemcategory VARCHAR(100),
|
||||
itemdescription VARCHAR(255),
|
||||
declaredvalue NUMERIC(10, 2),
|
||||
weight NUMERIC(10, 2),
|
||||
length NUMERIC(8, 2),
|
||||
width NUMERIC(8, 2),
|
||||
height NUMERIC(8, 2),
|
||||
isfragile BOOLEAN DEFAULT FALSE,
|
||||
needsinsurance BOOLEAN DEFAULT FALSE,
|
||||
insuranceamount NUMERIC(10, 2) DEFAULT 0.00,
|
||||
requireslargevehicle BOOLEAN DEFAULT FALSE,
|
||||
suggestedvehicletype VARCHAR(50),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 11. Booking Service Options
|
||||
"bookingserviceoptions": """
|
||||
CREATE TABLE IF NOT EXISTS bookingserviceoptions (
|
||||
bookingserviceid SERIAL PRIMARY KEY,
|
||||
bookingid INT REFERENCES pickupbookings(bookingid) ON DELETE CASCADE,
|
||||
servicetype VARCHAR(50) CHECK (servicetype IN ('Normal', 'Fast', 'Superfast')),
|
||||
estimatedprice NUMERIC(10, 2),
|
||||
estimateddeliveryat TIMESTAMP,
|
||||
sladueat TIMESTAMP,
|
||||
pricingid INT,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 12. Booking Payments
|
||||
"bookingpayments": """
|
||||
CREATE TABLE IF NOT EXISTS bookingpayments (
|
||||
bookingpaymentid SERIAL PRIMARY KEY,
|
||||
bookingid INT REFERENCES pickupbookings(bookingid) ON DELETE CASCADE,
|
||||
amount NUMERIC(10, 2) NOT NULL,
|
||||
paymentmode VARCHAR(50) CHECK (paymentmode IN ('Cash', 'UPI', 'Card', 'Wallet')),
|
||||
paymentstatus VARCHAR(50) DEFAULT 'Pending' CHECK (paymentstatus IN ('Pending', 'Paid', 'Failed', 'Refunded')),
|
||||
collectedbyuserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
transactionref VARCHAR(150),
|
||||
paidat TIMESTAMP,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 13. Booking Assignments
|
||||
"bookingassignments": """
|
||||
CREATE TABLE IF NOT EXISTS bookingassignments (
|
||||
bookingassignmentid SERIAL PRIMARY KEY,
|
||||
bookingid INT REFERENCES pickupbookings(bookingid) ON DELETE CASCADE,
|
||||
mileruserid INT REFERENCES appusers(userid) ON DELETE CASCADE,
|
||||
assignedbyuserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
assignmentstatus VARCHAR(50) DEFAULT 'Assigned' CHECK (assignmentstatus IN ('Assigned', 'Accepted', 'Rejected', 'Reassigned', 'Completed', 'Cancelled')),
|
||||
assignedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
acceptedat TIMESTAMP,
|
||||
completedat TIMESTAMP,
|
||||
remarks VARCHAR(500)
|
||||
);
|
||||
""",
|
||||
|
||||
# 14. Booking Vehicle Requirements
|
||||
"bookingvehiclerequirements": """
|
||||
CREATE TABLE IF NOT EXISTS bookingvehiclerequirements (
|
||||
requirementid SERIAL PRIMARY KEY,
|
||||
bookingid INT REFERENCES pickupbookings(bookingid) ON DELETE CASCADE,
|
||||
requiredvehicletype VARCHAR(50) NOT NULL,
|
||||
reason VARCHAR(255),
|
||||
nearesthubid INT REFERENCES hubs(hubid) ON DELETE SET NULL,
|
||||
scheduledpickupfrom TIMESTAMP,
|
||||
scheduledpickupto TIMESTAMP,
|
||||
assignedvehicleid INT REFERENCES vehicles(vehicleid) ON DELETE SET NULL,
|
||||
assigneddriveruserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
status VARCHAR(50) DEFAULT 'Required' CHECK (status IN ('Required', 'Scheduled', 'Assigned', 'Arrived', 'Picked_Up', 'Cancelled')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 15. Trip Sheets
|
||||
"tripsheets": """
|
||||
CREATE TABLE IF NOT EXISTS tripsheets (
|
||||
tripsheetid SERIAL PRIMARY KEY,
|
||||
tripsheetno VARCHAR(100) UNIQUE NOT NULL,
|
||||
sourcehubid INT REFERENCES hubs(hubid) ON DELETE RESTRICT,
|
||||
destinationhubid INT REFERENCES hubs(hubid) ON DELETE RESTRICT,
|
||||
vehicleid INT REFERENCES vehicles(vehicleid) ON DELETE SET NULL,
|
||||
driveruserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
dispatchtime TIMESTAMP,
|
||||
arrivaltime TIMESTAMP,
|
||||
status VARCHAR(50) DEFAULT 'Draft' CHECK (status IN ('Draft', 'Dispatched', 'Arrived', 'Cancelled')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 16. Trip Sheet Items
|
||||
"tripsheetitems": """
|
||||
CREATE TABLE IF NOT EXISTS tripsheetitems (
|
||||
tripsheetitemid SERIAL PRIMARY KEY,
|
||||
tripsheetid INT REFERENCES tripsheets(tripsheetid) ON DELETE CASCADE,
|
||||
consignmentid INT REFERENCES consignments(consignmentid) ON DELETE CASCADE,
|
||||
scanstatus VARCHAR(50) DEFAULT 'Pending' CHECK (scanstatus IN ('Pending', 'Loaded', 'Unloaded', 'Discrepancy')),
|
||||
scannedat TIMESTAMP,
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP,
|
||||
UNIQUE(tripsheetid, consignmentid)
|
||||
);
|
||||
""",
|
||||
|
||||
# 17. Delivery Proofs (POD)
|
||||
"deliveryproofs": """
|
||||
CREATE TABLE IF NOT EXISTS deliveryproofs (
|
||||
proofid SERIAL PRIMARY KEY,
|
||||
consignmentid INT UNIQUE NOT NULL REFERENCES consignments(consignmentid) ON DELETE CASCADE,
|
||||
tripsheetid INT REFERENCES tripsheets(tripsheetid) ON DELETE SET NULL,
|
||||
deliveredat TIMESTAMP NOT NULL,
|
||||
deliveredtoname VARCHAR(255) NOT NULL,
|
||||
receiversignatureurl VARCHAR(500),
|
||||
photourl VARCHAR(500),
|
||||
otpverified BOOLEAN DEFAULT FALSE,
|
||||
geolatitude DECIMAL(10, 7),
|
||||
geolongitude DECIMAL(10, 7),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT
|
||||
);
|
||||
""",
|
||||
|
||||
# 18. Pricing
|
||||
"pricing": """
|
||||
CREATE TABLE IF NOT EXISTS pricing (
|
||||
pricingid SERIAL PRIMARY KEY,
|
||||
tenantid INT,
|
||||
applocationid INT,
|
||||
vehicletype VARCHAR(50),
|
||||
baseprice NUMERIC(10, 2) NOT NULL,
|
||||
baseweight NUMERIC(10, 2) NOT NULL,
|
||||
priceperkg NUMERIC(10, 2) NOT NULL,
|
||||
basedistance NUMERIC(10, 2) NOT NULL,
|
||||
priceperkm NUMERIC(10, 2) NOT NULL,
|
||||
handlingcharges NUMERIC(10, 2) DEFAULT 0.00,
|
||||
effectivefrom TIMESTAMP NOT NULL,
|
||||
effectiveto TIMESTAMP NOT NULL,
|
||||
currency VARCHAR(10) DEFAULT 'INR',
|
||||
priority INT DEFAULT 0,
|
||||
status VARCHAR(50) DEFAULT 'Active' CHECK (status IN ('Active', 'InActive')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 19. Consignment History
|
||||
"consignmenthistory": """
|
||||
CREATE TABLE IF NOT EXISTS consignmenthistory (
|
||||
historyid SERIAL PRIMARY KEY,
|
||||
consignmentid INT REFERENCES consignments(consignmentid) ON DELETE CASCADE,
|
||||
tripsheetid INT REFERENCES tripsheets(tripsheetid) ON DELETE SET NULL,
|
||||
hubid INT REFERENCES hubs(hubid) ON DELETE SET NULL,
|
||||
userid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
eventstatus VARCHAR(50) NOT NULL,
|
||||
remarks VARCHAR(500),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 20. Consignment Exceptions
|
||||
"consignmentexceptions": """
|
||||
CREATE TABLE IF NOT EXISTS consignmentexceptions (
|
||||
exceptionid SERIAL PRIMARY KEY,
|
||||
consignmentid INT REFERENCES consignments(consignmentid) ON DELETE CASCADE,
|
||||
tripsheetid INT REFERENCES tripsheets(tripsheetid) ON DELETE SET NULL,
|
||||
hubid INT REFERENCES hubs(hubid) ON DELETE SET NULL,
|
||||
reportedbyuserid INT REFERENCES appusers(userid) ON DELETE SET NULL,
|
||||
exceptiontype VARCHAR(50) NOT NULL CHECK (exceptiontype IN ('Lost', 'Damaged', 'Misrouted', 'Receiver_Refused', 'Missing_Contents', 'Undeliverable')),
|
||||
severity VARCHAR(50) DEFAULT 'Medium' CHECK (severity IN ('Low', 'Medium', 'High', 'Critical')),
|
||||
description TEXT,
|
||||
resolution VARCHAR(255),
|
||||
status VARCHAR(50) DEFAULT 'Open' CHECK (status IN ('Open', 'Under_Investigation', 'Resolved', 'Closed')),
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
createdby INT,
|
||||
updatedby INT,
|
||||
deletedat TIMESTAMP
|
||||
);
|
||||
""",
|
||||
|
||||
# 21. Tenant Locations (Physical storefronts)
|
||||
"tenantlocations": """
|
||||
CREATE TABLE IF NOT EXISTS tenantlocations (
|
||||
tenantlocationid SERIAL PRIMARY KEY,
|
||||
tenantid INT NOT NULL,
|
||||
address VARCHAR(500) NOT NULL,
|
||||
city VARCHAR(100) NOT NULL,
|
||||
state VARCHAR(100) NOT NULL,
|
||||
pincode VARCHAR(10) NOT NULL,
|
||||
latitude DECIMAL(10, 7) NOT NULL,
|
||||
longitude DECIMAL(10, 7) NOT NULL,
|
||||
isprimary BOOLEAN DEFAULT FALSE,
|
||||
status VARCHAR(50) DEFAULT 'Active',
|
||||
createdat TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updatedat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
"""
|
||||
}
|
||||
|
||||
# Index creation statements
|
||||
INDEXES = [
|
||||
# Consignment Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignments_trackingno ON consignments (trackingno);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignments_status ON consignments (status);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignments_tenantid ON consignments (tenantid);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignments_currenthubid ON consignments (currenthubid);",
|
||||
|
||||
# Tripsheet Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_tripsheets_vehicleid ON tripsheets (vehicleid);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_tripsheets_driveruserid ON tripsheets (driveruserid);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_tripsheets_lookup ON tripsheets (status, dispatchtime);",
|
||||
|
||||
# Tripsheet Items Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_tripsheetitems_tripsheetid ON tripsheetitems (tripsheetid);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_tripsheetitems_consignmentid ON tripsheetitems (consignmentid);",
|
||||
|
||||
# Delivery Proofs Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_deliveryproofs_consignmentid ON deliveryproofs (consignmentid);",
|
||||
|
||||
# Miler Profile Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_milerprofiles_userid ON milerprofiles (userid);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_milerprofiles_availabilitystatus ON milerprofiles (availabilitystatus);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_milerprofiles_currentpincode ON milerprofiles (currentpincode);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_milerprofiles_geo ON milerprofiles (currentlatitude, currentlongitude);",
|
||||
|
||||
# History & Exceptions Audit Lookup Indexes
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignmenthistory_lookup ON consignmenthistory (consignmentid, createdat);",
|
||||
"CREATE INDEX IF NOT EXISTS idx_consignmentexceptions_lookup ON consignmentexceptions (status, createdat);"
|
||||
]
|
||||
|
||||
def create_schema():
|
||||
conn = None
|
||||
try:
|
||||
print("Connecting to the PostgreSQL database...")
|
||||
conn = psycopg2.connect(**DB_PARAMS)
|
||||
cur = conn.cursor()
|
||||
|
||||
# 1. Create Tables
|
||||
for table_name, create_sql in TABLES.items():
|
||||
print(f"Creating table '{table_name}'...")
|
||||
cur.execute(create_sql)
|
||||
|
||||
# 2. Create Indexes
|
||||
for idx_sql in INDEXES:
|
||||
print("Executing index script...")
|
||||
cur.execute(idx_sql)
|
||||
|
||||
conn.commit()
|
||||
print("✅ Database schema created successfully under database: 'logistics'!")
|
||||
cur.close()
|
||||
except Exception as error:
|
||||
print(f"❌ Error during database schema initialization: {error}")
|
||||
if conn:
|
||||
conn.rollback()
|
||||
finally:
|
||||
if conn:
|
||||
conn.close()
|
||||
print("Database connection closed.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_schema()
|
||||
Reference in New Issue
Block a user