const mongoose = require('mongoose'); const { Schema } = mongoose; const address = new Schema({ company_name: { type: String }, street_address1: { type: String }, street_address2: { type: String }, city: { type: String }, state: { type: String }, country: { type: String }, zipcode: { type: String }, landmark: { type: String }, lat: { type: String }, lng: { type: String }, }); const pointSchema = new Schema({ type: { type: String, enum: ['Point'], required: true }, coordinates: { type: [Number], required: true } }); const schema = new Schema({ shipment_code: { type: String }, company: { type: Schema.Types.ObjectId, ref: 'companies', required: true }, //shipper carrier: { type: Schema.Types.ObjectId, ref: 'companies' }, // carrier vehicle: { type: Schema.Types.ObjectId, ref: 'vehicles' }, driver: { type: Schema.Types.ObjectId, ref: 'users' }, posted_by: { type: Schema.Types.ObjectId, ref: 'users' }, // shipper posted_by_name: { type: String }, // search purpose bidder: { type: Schema.Types.ObjectId, ref: 'users' }, origin: address, origin_geo: { type: pointSchema, }, destination: address, destination_geo: { type: pointSchema, }, categories: [{ type: Schema.Types.ObjectId, ref: 'product-categories' }], product: { type: Schema.Types.ObjectId, ref: 'products' }, truck_type: { type: String }, tyre_type: { type: String }, weight: { type: Number }, estimated_cost: { type: Number }, distance: { type: Number }, actual_cost: { type: Number }, // 1. Posted Shipments (Posted) // 2. Shipments Loading (Loading) // 3. Enroute Shipments (In Transit) // 4. Shipments in Unloading (Unloading) // 5. Shipments pending finding truck status: { type: String, default: 'Draft', enum: ['Draft', 'Published', 'Completed', 'Closed'] }, load_status: { type: String, enum: ['Published', 'Loading', 'Transit', 'Downloading', 'Delivered'] }, contract_start_date: { type: Date }, contract_end_date: { type: Date }, est_loading_date: { type: Date }, est_unloading_date: { type: Date }, published_date: { type: Date }, loaded_date: { type: Date }, transit_date: { type: Date }, delivered_date: { type: Date }, load_status_updated: { type: Date, default: Date.now() }, notes: { type: String }, payment_term: { type: String }, terms_and_conditions: { type: String }, }); module.exports = mongoose.model( "loads", schema );