Update customer order form and improve production logging visibility

Refine the customer order form schema validation and default values, and update the production log output to include more detailed database connection and application startup information.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 31f9bd88-0285-4787-81b3-31ceeea5a08b
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/31f9bd88-0285-4787-81b3-31ceeea5a08b/Ia7Sl2G
This commit is contained in:
michaelschal committed 2025-08-14 11:46:07 +00:00
1 parent c88a403d6d
commit c92807eb1f
3 files changed
+219 -6

No files matched your search

@@ -0,0 +1,201 @@
dbHost: 'logiflow-db'
}
🐳 PRODUCTION: Using standard PostgreSQL
✅ PostgreSQL connection test successful
🔗 Database initialization: {
NODE_ENV: 'production',
isProduction: true,
hasDbUrl: true,
dbHost: 'logiflow-db:5432'
}
✅ Using DatabaseStorage (production PostgreSQL)
⏰ Automatic backup scheduled for 2:00 AM daily (native timer)
🔍 Using development storage and authentication
🐳 PRODUCTION: Starting LogiFlow application
🐳 Environment: { NODE_ENV: 'production', DATABASE_URL: 'Present', PORT: '3000' }
🔧 Registering all production routes...
🔄 Running automatic production migrations...
🔄 MIGRATION: Starting SAV production migrations...
🔄 MIGRATION: Database URL configured: postgresql://logiflow_admin:Lo...
✅ MIGRATION: Connected to PostgreSQL database
🔄 MIGRATION: Checking if priority column exists...
🔄 MIGRATION: Priority column check result: 1
✅ MIGRATION: Priority column already exists, skipping migration
🔌 MIGRATION: Database connection closed
🔧 Using memory session store for development
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
✅ All routes registered successfully for production
🐳 Serving static files from: /app/dist/public
🐳 PRODUCTION: LogiFlow serving on port 3000
HEAD /api/health 200 in 4ms
📄 SPA: Serving index.html for /customer-orders
GET /api/user 401 in 1ms
📄 SPA: Serving index.html for /auth
GET /api/user 401 in 1ms
GET /api/user 401 in 1ms
GET /api/default-credentials-check 304 in 4ms
🔐 comparePasswords: {
supplied: 'HIDDEN',
stored: 'b23ec450a63faf3957a1...',
hasFormat: true
}
🔐 Password comparison result: true
POST /api/login 200 in 53ms
GET /api/user 304 in 4ms
GET /api/user 304 in 12ms
Deliveries API called with: {
startDate: undefined,
endDate: undefined,
storeId: undefined,
withBL: undefined,
userRole: 'employee'
}
Non-admin filtering deliveries with groupIds: [ 2 ]
Orders API called with: {
startDate: undefined,
endDate: undefined,
storeId: undefined,
userRole: 'employee'
}
Non-admin filtering with groupIds: [ 2 ]
GET /api/user 304 in 43ms
📊 Calcul statistiques mensuelles: {
year: 2025,
month: 8,
startDate: '2025-08-01',
endDate: '2025-09-01',
groupIds: [ 2 ]
}
GET /api/user 304 in 24ms
Tasks API called with: { groupIds: [ 2 ], userRole: 'employee' }
🔗 PRODUCTION: getOrders() récupéré 18 commandes avec relations
Orders returned: 18 items
GET /api/orders 304 in 221ms
Customer Orders API called with: { groupIds: [ 2 ], userRole: 'employee' }
GET /api/publicities 304 in 218ms
GET /api/dlc-products/stats 304 in 216ms
Customer Orders returned: 25 items
GET /api/customer-orders 304 in 228ms
Tasks returned: 9 items
GET /api/tasks 304 in 220ms
🔗 PRODUCTION: getDeliveries() récupéré 38 livraisons avec relations
Deliveries returned: 38 items
GET /api/deliveries 304 in 236ms
📊 Statistiques calculées: {
ordersCount: 8,
deliveriesCount: 21,
pendingOrdersCount: 4,
averageDeliveryTime: 0.17647058823529413,
totalPalettes: 57,
totalPackages: 17
}
GET /api/stats/monthly 304 in 246ms
GET /api/groups 304 in 4ms
GET /api/publicities 304 in 11ms
GET /api/user 304 in 5ms
GET /api/suppliers 304 in 8ms
GET /api/user 304 in 3ms
HEAD /api/health 200 in 1ms
Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

+18 -6
View File
@@ -25,9 +25,21 @@ import { Checkbox } from "@/components/ui/checkbox";
import { insertCustomerOrderFrontendSchema, type CustomerOrderWithRelations, type Group, type Supplier } from "@shared/schema";
import { useStore } from "@/components/Layout";
const customerOrderFormSchema = insertCustomerOrderFrontendSchema.extend({
groupId: z.coerce.number().int().positive().optional(),
createdBy: z.string().optional(),
const customerOrderFormSchema = z.object({
orderTaker: z.string().min(1, "Qui a pris la commande est requis"),
customerName: z.string().min(1, "Nom du client est requis"),
contactNumber: z.string().optional(),
productName: z.string().min(1, "Désignation du produit est requise"),
productReference: z.string().optional(),
gencode: z.string().optional(),
quantity: z.coerce.number().int().positive().default(1),
supplierId: z.coerce.number().int().positive().default(1),
groupId: z.coerce.number().int().positive(),
deposit: z.coerce.number().default(0),
isPromotionalPrice: z.boolean().default(false),
customerNotified: z.boolean().default(false),
notes: z.string().optional(),
customerEmail: z.string().optional(),
});
type CustomerOrderFormData = z.infer<typeof customerOrderFormSchema>;
@@ -96,12 +108,12 @@ export function CustomerOrderForm({
productReference: order?.productReference || "",
gencode: order?.gencode || "",
quantity: order?.quantity || 1,
supplierId: order?.supplierId || undefined,
supplierId: order?.supplierId || 1,
status: "En attente de Commande", // Statut fixe
deposit: order?.deposit || 0,
isPromotionalPrice: order?.isPromotionalPrice || false,
customerNotified: order?.customerNotified || false,
groupId: order?.groupId || getUserAssignedGroupId(),
groupId: order?.groupId || getUserAssignedGroupId() || 1,
},
});
@@ -223,7 +235,7 @@ export function CustomerOrderForm({
render={({ field }) => (
<FormItem>
<FormLabel>Fournisseur</FormLabel>
<Select onValueChange={field.onChange} value={field.value?.toString()}>
<Select onValueChange={field.onChange} value={field.value?.toString() || "1"}>
<FormControl>
<SelectTrigger>
<SelectValue placeholder="Sélectionner un fournisseur" />