Edit File: ProviderController.php
<?php namespace App\Http\Controllers\Admin; use App\Enums\NotificationTypeEnum; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\Notification\SendRequest; use App\Http\Requests\Admin\Provider\UpdateRequest; use App\Http\Requests\Admin\Wallet\UpdateBalanceRequest; use App\Models\Category; use App\Models\Provider; use App\Models\ProviderUpdate; use App\Notifications\NotifyUser; use App\Services\CategoryService; use App\Services\CityService; use App\Services\NeighborhoodService; use App\Services\NotificationService; use App\Services\ProfileService; use App\Services\Provider\ProviderService; use App\Traits\ReportTrait; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Notification; class ProviderController extends Controller { private $profileService; protected $providerService; protected $categoryService; protected $cityService; protected $neighborhoodService; public function __construct(ProviderService $providerService) { $this->providerService = $providerService; $this->profileService = new ProfileService(Provider::class); $this->categoryService = new CategoryService(); $this->cityService = new CityService(); $this->neighborhoodService = new NeighborhoodService(); } public function index() { if (request()->ajax()) { $rows = $this->providerService->all(paginateNum: 30); $html = view('admin.providers.table', compact('rows'))->render(); return response()->json(['html' => $html]); } return view('admin.providers.index'); } public function joiningRequests() { if (request()->ajax()) { $rows = $this->providerService->joiningRequests(paginateNum: 30); $html = view('admin.providersJoiningRequests.table', compact('rows'))->render(); return response()->json(['html' => $html]); } return view('admin.providersJoiningRequests.index'); } public function edit($id) { $row = $this->providerService->find($id); $cities = $this->cityService->allWithoutPagination(); $neighborhoods = $this->neighborhoodService->allWhereColumn('city_id', $row->city_id); $categories = $this->categoryService->getAllParentCategoriesHasChilds(); $sub_categories = $this->categoryService->getListOfSubCategoriesWithOutPagination($row->category_id); return view('admin.providers.edit', compact('row', 'cities', 'neighborhoods', 'categories', 'sub_categories')); } public function update(UpdateRequest $request, $id) { $user = $this->providerService->find($id); $this->providerService->edit(request: $request->validated(), id: $id); $this->profileService ->updateManyToManyRelation(relationName: 'subCategories', user: $user, request: $request['sub_categories']); $this->profileService ->createHasOneRelation( relationName: 'bankAccount', user: $user, request: $request->validated(), conditions: ['bankable_type' => Provider::class, 'bankable_id' => $user->id] ); ReportTrait::addToLog(' تعديل مستخدم'); return response()->json(['url' => route('admin.providers.index')]); } public function block(Request $request) { $data = $this->providerService->block($request->id); return response()->json(['message' => $data['msg']]); } public function notify(SendRequest $request, NotificationService $notificationService) { $notificationService->send($request); return response()->json(); } public function updateBalance(UpdateBalanceRequest $request, $id) { $data = $this->providerService->updateBalance(request: $request, id: $id); return response()->json(['msg' => $data['msg'], 'balance' => $data['balance'] . ' ' . __('site.currency')]); } public function show($id) { $row = $this->providerService->find($id); if (request()->ajax()) { $data = $this->providerService->details(user: $row); return response()->json(['html' => $data['html']]); } return view('admin.providers.show', ['row' => $row]); } public function changeStatus(Request $request) { $provider = $this->providerService->isApprovedToggle($request->id); return response()->json(['message' => $provider->refresh()->is_approved == 1 ? __('admin.active') : __('admin.dis_activate')]); } public function showNewDataRequested($id) { $row = ProviderUpdate::with('provider') ->whereHas('provider', function ($query) use ($id) { $query->where('id', $id); })->first(); if (!$row) { return redirect()->route('admin.providers.index'); } $subCategories = Category::whereIn('id', $row->sub_categories)->pluck('name')->toArray(); return view('admin.providers.show_update_request', compact('row', 'subCategories')); } public function approveNewDataRequested($id) { $row = ProviderUpdate::with('provider') ->whereHas('provider', function ($query) use ($id) { $query->where('id', $id); })->first(); try { DB::beginTransaction(); DB::table('providers')->where('id', $id)->update([ 'name' => $row->name ?? $row->provider->name, 'image' => $row->getRawOriginal('image') ?? $row->provider->getRawOriginal('image'), 'store_name' => $row->getRawOriginal('store_name') ?? $row->provider->getRawOriginal('store_description'), 'store_description' => $row->getRawOriginal('store_description') ?? $row->provider->getRawOriginal('store_description'), 'logo' => $row->getRawOriginal('logo') ?? $row->provider->getRawOriginal('logo'), 'tax_number' => $row->tax_number ?? $row->provider->tax_number, 'civil_registration_number' => $row->civil_registration_number ?? $row->provider->civil_registration_number, 'whatsapp_country_code' => $row->whatsapp_country_code ?? $row->provider->whatsapp_country_code, 'whatsapp_phone' => $row->whatsapp_phone ?? $row->provider->whatsapp_phone, 'preparing_time' => $row->preparing_time ?? $row->provider->preparing_time, 'minimum_order' => $row->minimum_order ?? $row->provider->minimum_order, 'category_id' => $row->category_id ?? $row->provider->category_id, 'city_id' => $row->city_id ?? $row->provider->city_id, 'neighborhood_id' => $row->neighborhood_id ?? $row->provider->neighborhood_id, 'lat' => $row->lat ?? $row->provider->lat, 'lng' => $row->lng ?? $row->provider->lng, 'map_desc' => $row->map_desc ?? $row->provider->map_desc, 'delivery_method' => $row->delivery_method ?? $row->provider->delivery_method, ]); $row->provider?->subCategories()->sync($row->sub_categories); $row->provider?->bankAccount()->update([ 'account_name' => $row->account_name, 'account_number' => $row->account_number, 'bank_name' => $row->bank_name, 'iban' => $row->iban, 'bank_account_image' => $row->getRawOriginal('bank_account_image') ?? $row->provider?->bankAccount?->getRawOriginal('bank_account_image') ?? null, ]); $this->sendNotification($row->provider, NotificationTypeEnum::Admin_Accept_Request_For_Edit->value); $row->delete(); DB::commit(); return redirect(route('admin.providers.index'))->with('success', 'تم قبول التعديل بنجاح'); } catch (\Exception $exception) { dd($exception); DB::rollBack(); // return redirect(route('admin.providers.index'))->with('error', 'حدث خطأ ما'); } } public function refuseNewDataRequested($id) { $row = ProviderUpdate::with('provider') ->whereHas('provider', function ($query) use ($id) { $query->where('id', $id); })->first(); $this->sendNotification($row->provider, NotificationTypeEnum::Admin_Decline_Request_For_Edit->value); $row->delete(); return redirect(route('admin.providers.index'))->with('success', 'تم رفض التعديل بنجاح'); } protected function sendNotification($user, $type): void { $title = 'title_' . $type; $body = 'body_' . $type; $data = [ 'body_ar' => __(key: "notification.$body", locale: 'ar'), 'body_en' => __(key: "notification.$body", locale: 'en'), 'body_ur' => __(key: "notification.$body", locale: 'ur'), 'title_ar' => __(key: "notification.$title", locale: 'ar'), 'title_en' => __(key: "notification.$title", locale: 'en'), 'title_ur' => __(key: "notification.$title", locale: 'ur'), ]; Notification::send($user, new NotifyUser($data, $type)); } }
Back to File Manager