Compare commits

...

1 Commits

Author SHA1 Message Date
Jon Leopard
2dea336c58 fix: create FulfillmentWorkOrders and PickingTickets for in_progress/accepted orders
Orders with status 'accepted' or 'in_progress' were being seeded without
corresponding FulfillmentWorkOrders and PickingTickets. This caused them
to be deadlocked - there was no way to progress them through the workflow.

Changes:
- Added FulfillmentWorkOrder creation for orders 2, 3, 4
- Added PickingTicket generation via new helper method
- Order 3 (in_progress) has partially picked items (60%)
- Order 2 and 4 have pending picking tickets

The helper method `generatePickingTicketsForWorkOrder` emulates what
happens when a seller clicks "Start Order" in the UI.
2025-11-21 15:48:09 -07:00

View File

@@ -1408,6 +1408,13 @@ class DevSeeder extends Seeder
]
);
// Create FulfillmentWorkOrder and PickingTickets for Order 2 (accepted - awaiting picking)
$workOrder2 = \App\Models\FulfillmentWorkOrder::updateOrCreate(
['order_id' => $order2->id],
['status' => 'pending', 'priority' => 0]
);
$this->generatePickingTicketsForWorkOrder($workOrder2);
// Order 3: IN_PROGRESS (partially picked) - Brand 3 (Peak Extracts)
$order3 = \App\Models\Order::firstOrCreate(
['picking_ticket_number' => 'PT-D3E4F'],
@@ -1445,6 +1452,13 @@ class DevSeeder extends Seeder
]
);
// Create FulfillmentWorkOrder and PickingTickets for Order 3 (in_progress - partially picked)
$workOrder3 = \App\Models\FulfillmentWorkOrder::updateOrCreate(
['order_id' => $order3->id],
['status' => 'in_progress', 'priority' => 0, 'started_at' => now()->subHours(1)]
);
$this->generatePickingTicketsForWorkOrder($workOrder3, partiallyPicked: true);
// Order 4: READY_FOR_DELIVERY (fully picked, ready to deliver) - Brand 2 (Sunset Valley Edibles)
$order4 = \App\Models\Order::firstOrCreate(
['picking_ticket_number' => 'PT-G5H6J'],
@@ -1483,6 +1497,13 @@ class DevSeeder extends Seeder
]
);
// Create FulfillmentWorkOrder and PickingTickets for Order 4 (in_progress - awaiting picking)
$workOrder4 = \App\Models\FulfillmentWorkOrder::updateOrCreate(
['order_id' => $order4->id],
['status' => 'in_progress', 'priority' => 0, 'started_at' => now()->subHours(2)]
);
$this->generatePickingTicketsForWorkOrder($workOrder4);
// Order 5: BUYER_APPROVED (completed order from last week, buyer approved and invoice created) - Brand 1 (Desert Bloom Premium)
$order5 = \App\Models\Order::firstOrCreate(
['picking_ticket_number' => 'PT-K7L8M'],
@@ -1758,4 +1779,54 @@ class DevSeeder extends Seeder
$this->command->info('');
$this->command->info('✨ Full e-commerce workflow ready to test!');
}
/**
* Generate picking tickets for a fulfillment work order.
* This emulates what happens when a seller clicks "Start Order" in the UI.
*/
private function generatePickingTicketsForWorkOrder(
\App\Models\FulfillmentWorkOrder $workOrder,
bool $partiallyPicked = false
): void {
$order = $workOrder->order;
// Group order items by department
$itemsByDepartment = $order->items()
->with('product.department')
->get()
->groupBy(fn ($item) => $item->product->department_id);
foreach ($itemsByDepartment as $departmentId => $items) {
// Skip items without department assignment
if (empty($departmentId)) {
continue;
}
$ticket = \App\Models\PickingTicket::updateOrCreate(
[
'fulfillment_work_order_id' => $workOrder->id,
'department_id' => $departmentId,
],
[
'status' => $partiallyPicked ? 'in_progress' : 'pending',
]
);
// Create picking ticket items
foreach ($items as $orderItem) {
$pickedQty = $partiallyPicked ? (int) ($orderItem->quantity * 0.6) : 0;
\App\Models\PickingTicketItem::updateOrCreate(
[
'picking_ticket_id' => $ticket->id,
'order_item_id' => $orderItem->id,
],
[
'quantity' => $orderItem->quantity,
'picked_quantity' => $pickedQty,
]
);
}
}
}
}