dashboard in better style
This commit is contained in:
@@ -358,6 +358,146 @@ class ProductController extends SuperController
|
||||
return response()->json(true);
|
||||
}
|
||||
|
||||
private const ACTIVATION_SNAPSHOT_KEY = 'products_activation_snapshot';
|
||||
|
||||
public function activationSnapshotStatus()
|
||||
{
|
||||
$row = Cnt::where('key', self::ACTIVATION_SNAPSHOT_KEY)->first();
|
||||
$items = $row?->value_json['items'] ?? [];
|
||||
|
||||
return response()->json([
|
||||
'has_snapshot' => ! empty($items),
|
||||
'saved_at' => $row?->value_json['saved_at'] ?? null,
|
||||
'count' => count($items),
|
||||
]);
|
||||
}
|
||||
|
||||
public function deactivateAllProducts()
|
||||
{
|
||||
$products = Product::query()
|
||||
->where(function ($query) {
|
||||
$query->where('active', 1)
|
||||
->orWhere('open_buy', 1)
|
||||
->orWhere('open_sell', 1);
|
||||
})
|
||||
->get(['id', 'active', 'show', 'open_buy', 'open_sell']);
|
||||
|
||||
$items = $products->map(static fn (Product $product) => [
|
||||
'id' => $product->id,
|
||||
'active' => (bool) $product->active,
|
||||
'show' => (bool) $product->show,
|
||||
'open_buy' => (bool) $product->open_buy,
|
||||
'open_sell' => (bool) $product->open_sell,
|
||||
])->values()->all();
|
||||
|
||||
Cnt::updateOrCreate(
|
||||
['key' => self::ACTIVATION_SNAPSHOT_KEY],
|
||||
[
|
||||
'title_fa' => 'ذخیره وضعیت محصولات',
|
||||
'value_json' => [
|
||||
'saved_at' => now()->timezone('Asia/Tehran')->format('Y-m-d H:i:s'),
|
||||
'items' => $items,
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
$affected = Product::query()->update([
|
||||
'active' => 0,
|
||||
'show' => 0,
|
||||
'open_buy' => 0,
|
||||
'open_sell' => 0,
|
||||
]);
|
||||
|
||||
$this->broadcastPricesAfterResponse();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'همه محصولات بسته شد.',
|
||||
'snapshot_count' => count($items),
|
||||
'affected' => $affected,
|
||||
'has_snapshot' => ! empty($items),
|
||||
]);
|
||||
}
|
||||
|
||||
public function restoreActivationSnapshot()
|
||||
{
|
||||
$row = Cnt::where('key', self::ACTIVATION_SNAPSHOT_KEY)->first();
|
||||
$items = $row?->value_json['items'] ?? [];
|
||||
|
||||
if (empty($items)) {
|
||||
return response()->json(['error' => 'اسنAPSHOTی برای بازگردانی وجود ندارد.'], 422);
|
||||
}
|
||||
|
||||
$restored = 0;
|
||||
foreach ($items as $item) {
|
||||
$updated = Product::where('id', $item['id'] ?? 0)->update([
|
||||
'active' => ! empty($item['active']) ? 1 : 0,
|
||||
'show' => ! empty($item['show']) ? 1 : 0,
|
||||
'open_buy' => ! empty($item['open_buy']) ? 1 : 0,
|
||||
'open_sell' => ! empty($item['open_sell']) ? 1 : 0,
|
||||
]);
|
||||
|
||||
if ($updated) {
|
||||
$restored++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->auto_close_open();
|
||||
$this->broadcastPricesAfterResponse();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'وضعیت قبلی محصولات بازگردانی شد.',
|
||||
'restored' => $restored,
|
||||
'has_snapshot' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
public function closeAllBuy()
|
||||
{
|
||||
Product::query()->update(['open_buy' => 0]);
|
||||
$inactive = Product::where('open_buy', 0)->where('open_sell', 0)->update([
|
||||
'active' => 0,
|
||||
'show' => 0,
|
||||
]);
|
||||
|
||||
$this->broadcastPricesAfterResponse();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'خرید همه محصولات بسته شد.',
|
||||
'inactive' => $inactive,
|
||||
]);
|
||||
}
|
||||
|
||||
public function closeAllSell()
|
||||
{
|
||||
Product::query()->update(['open_sell' => 0]);
|
||||
$inactive = Product::where('open_buy', 0)->where('open_sell', 0)->update([
|
||||
'active' => 0,
|
||||
'show' => 0,
|
||||
]);
|
||||
|
||||
$this->broadcastPricesAfterResponse();
|
||||
|
||||
return response()->json([
|
||||
'message' => 'فروش همه محصولات بسته شد.',
|
||||
'inactive' => $inactive,
|
||||
]);
|
||||
}
|
||||
|
||||
public function syncProductShow()
|
||||
{
|
||||
$this->auto_close_open();
|
||||
$this->broadcastPricesAfterResponse();
|
||||
|
||||
return response()->json(['message' => 'نمایش محصولات طبق ساعات بهروز شد.']);
|
||||
}
|
||||
|
||||
private function broadcastPricesAfterResponse(): void
|
||||
{
|
||||
dispatch(function () {
|
||||
app(PriceBroadcastService::class)->broadcastAfterPriceUpdate();
|
||||
})->afterResponse();
|
||||
}
|
||||
|
||||
public function updatePrice(Request $request){
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user