|
|
@@ -5,11 +5,14 @@ namespace App\Http\Controllers;
|
|
|
use App\Http\Requests\Order\StoreOrderRequest;
|
|
|
use App\Models\Dictionary\Area;
|
|
|
use App\Models\Dictionary\District;
|
|
|
+use App\Models\MafOrder;
|
|
|
use App\Models\ObjectType;
|
|
|
use App\Models\Order;
|
|
|
use App\Models\OrderStatus;
|
|
|
+use App\Models\ProductSKU;
|
|
|
use App\Models\Role;
|
|
|
use App\Models\User;
|
|
|
+use Illuminate\Http\RedirectResponse;
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
class OrderController extends Controller
|
|
|
@@ -34,6 +37,7 @@ class OrderController extends Controller
|
|
|
'tg_group_name' => 'Имя группы в ТГ',
|
|
|
'tg_group_link' => 'Ссылка на группу в ТГ',
|
|
|
'products-common_name' => 'МАФы',
|
|
|
+ 'ready_to_mount' => 'Готов к монтажу',
|
|
|
],
|
|
|
'searchFields' => [
|
|
|
'comment',
|
|
|
@@ -62,7 +66,7 @@ class OrderController extends Controller
|
|
|
{
|
|
|
$model = new Order;
|
|
|
// fill filters
|
|
|
- $this->createFilters($model, 'user_id', 'district_id', 'area_id', 'object_type_id', 'brigadier_id', 'order_status_id');
|
|
|
+ $this->createFilters($model, 'user_id', 'district_id', 'area_id', 'object_type_id', 'brigadier_id', 'order_status_id', 'ready_to_mount');
|
|
|
$this->createDateFilters($model, 'contract_date', 'installation_date');
|
|
|
$this->data['ranges'] = [];
|
|
|
|
|
|
@@ -75,6 +79,10 @@ class OrderController extends Controller
|
|
|
$q->orderBy($this->data['sortBy'], $this->data['orderBy']);
|
|
|
$this->data['orders'] = $q->paginate()->withQueryString();
|
|
|
|
|
|
+ foreach ($this->data['orders'] as $order) {
|
|
|
+ $order->recalculateReadyToMount();
|
|
|
+ }
|
|
|
+
|
|
|
return view('orders.index', $this->data);
|
|
|
}
|
|
|
|
|
|
@@ -94,6 +102,7 @@ class OrderController extends Controller
|
|
|
$data = $request->validated();
|
|
|
|
|
|
$products = $request->validated('products');
|
|
|
+ $products_sku = $request->validated('products_sku');
|
|
|
$quantities = $request->validated('quantity');
|
|
|
|
|
|
unset($data['products']);
|
|
|
@@ -103,14 +112,22 @@ class OrderController extends Controller
|
|
|
$order->update($data);
|
|
|
$order->refresh();
|
|
|
} else {
|
|
|
+ $data['order_status_id'] = Order::STATUS_NEW;
|
|
|
$order = Order::query()->create($data);
|
|
|
}
|
|
|
|
|
|
- if($products && $quantities) {
|
|
|
- $order->products()->detach();
|
|
|
+ // меняем список товаров заказа только если статус новый
|
|
|
+ if($products && $quantities && ($order->order_status_id == 1)) {
|
|
|
+ // remove from products_sku
|
|
|
+ ProductSKU::query()->where('order_id', $order->id)->delete();
|
|
|
foreach ($products as $key => $product) {
|
|
|
- if($quantities[$key] == 0) continue;
|
|
|
- $order->products()->attach($product, ['quantity' => $quantities[$key]]);
|
|
|
+ for($i = 0; $i < $quantities[$key]; $i++) {
|
|
|
+ ProductSKU::query()->create([
|
|
|
+ 'order_id' => $order->id,
|
|
|
+ 'product_id' => $product,
|
|
|
+ 'status' => 'требуется'
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -136,18 +153,23 @@ class OrderController extends Controller
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Update the specified resource in storage.
|
|
|
+ * Привязка товаров к заказу
|
|
|
+ * @param Order $order
|
|
|
+ * @return RedirectResponse
|
|
|
*/
|
|
|
- public function update(Request $request, string $id)
|
|
|
+ public function getMafToOrder(Order $order)
|
|
|
{
|
|
|
- //
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Remove the specified resource from storage.
|
|
|
- */
|
|
|
- public function destroy(string $id)
|
|
|
- {
|
|
|
- //
|
|
|
+ foreach ($order->products_sku as $product_sku) {
|
|
|
+ $mafOrder = MafOrder::query()
|
|
|
+ ->where('product_id', $product_sku->product_id)
|
|
|
+ ->where('in_stock', '>' , 0)
|
|
|
+ ->orderBy('created_at')
|
|
|
+ ->first();
|
|
|
+ $product_sku->update(['maf_order_id' => $mafOrder->id, 'status' => 'отгружен']);
|
|
|
+ $mafOrder->decrement('in_stock');
|
|
|
+ unset($mafOrder, $product_sku);
|
|
|
+ }
|
|
|
+ $order->update(['order_status_id' => Order::STATUS_READY_TO_MOUNT]);
|
|
|
+ return redirect()->route('order.show', $order);
|
|
|
}
|
|
|
}
|