update versionv2-v3for road observation

This commit is contained in:
2025-02-23 15:33:18 +03:30
parent eb68ed266a
commit 080f0e2212
5 changed files with 190 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
<?php
namespace App\Exports\V3\RoadObservation;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithDrawings;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private ?Collection $data){}
public function view(): View
{
return view ("test", [
'data' => $this->data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
$event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial');
$event->sheet->getDelegate()->getStyle('A:U')
->getAlignment()
->setHorizontal(Alignment::HORIZONTAL_CENTER);
$event->sheet->getDelegate()->getStyle('A:U')
->getAlignment()
->setVertical(Alignment::VERTICAL_CENTER);
}
];
}
public function drawings(): array
{
$drawing = new Drawing();
$drawing->setName('Logo');
$drawing->setDescription('This is my logo');
$drawing->setPath(public_path('/dist/logo.png'));
$drawing->setWidth(50);
$drawing->setHeight(50);
$drawing->setOffsetX(5);
$drawing->setOffsetY(5);
$drawing->setCoordinates('A1');
$drawing2 = new Drawing();
$drawing2->setName('Logo');
$drawing2->setDescription('This is my logo');
$drawing2->setPath(public_path('/dist/141icon.png'));
$drawing2->setWidth(50);
$drawing2->setHeight(50);
$drawing2->setOffsetX(5);
$drawing2->setOffsetY(5);
$drawing2->setCoordinates('q1');
return [$drawing, $drawing2];
}
}

View File

@@ -0,0 +1,56 @@
<?php
namespace App\Http\Controllers\V3\Dashboard;
use App\Exports\V3\RoadObservation\SupervisorCartableReport;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Controllers\Controller;
use App\Models\RoadObserved;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Services\Cartables\RoadObservationTableservice;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Gate;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class RoadObservationController extends Controller
{
public function supervisorIndex (Request $request,RoadObservationTableservice $roadObservationTableservice ): JsonResponse
{
$data = $roadObservationTableservice-> supervisorCartableIndex($request);
foreach ($data['data'] as &$roadItem) {
$roadItem['can_supervise'] = Gate::allows('gate-supervise-road-item', $roadItem) ? 1 : 0;
}
return response()->json($data);
}
public function verifyBySupervisor(VerifyBySupervisorRequest $request, RoadObserved $roadObserved): JsonResponse
{
$statusFa = $request->verify == 1 ? 'تایید شده' : 'عدم تایید';
$roadObserved->update([
'status' => $request->verify,
'status_fa' => $statusFa,
'supervisor_id' => Auth::id(),
'supervisor_name' => Auth::user()->name,
'supervisor_description' => $request->description,
'supervising_time' => now(),
]);
Auth::user()->addActivityComplete(1138);
return response()->json(['status' => 'succeed']);
}
public function supervisorCartableReport (Request $request, RoadObservationTableService $roadObservationTableService): BinaryFileResponse
{
$name = 'گزارش از کارتابل ارزیابی واکنش سریع '. verta()->now()->format('Y-m-d') . '.xlsx';
$data = $roadObservationTableService->supervisorCartableIndex($request, true);
return Excel::download(new SupervisorCartableReport($data['data']), $name);
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\V3\RoadObservation;
use Illuminate\Foundation\Http\FormRequest;
class VerifyBySupervisorRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{return [
'verify' => ['required', 'in:1,2'],
'description' => ['nullable', 'string'],
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Services\Cartables;
use App\Facades\DataTable\DataTableFacade;
use App\Models\RoadObserved;
use Illuminate\Http\Request;
class RoadObservationTableService
{
public function supervisorCartableIndex(Request $request, $loadRelations = false)
{
$user = auth()->user();
if ($user->hasPermissionTo('supervise-fast-react')) {
$query = RoadObserved::query();
}
elseif ($user->hasPermissionTo('supervise-fast-react-province') && $user->province_id) {
$query = RoadObserved::where('province_id', $user->province_id);
}
return DataTableFacade::run(
$query,
$request,
allowedFilters: ['*'],
allowedSortings: ['*']);
}
}

View File

@@ -12,6 +12,7 @@ use App\Http\Controllers\V3\Dashboard\AccidentReceiptController;
use App\Http\Controllers\V3\Dashboard\Reports\RoadItemsReportController;
use App\Http\Controllers\V3\Dashboard\Reports\RoadPatrolReportController;
use App\Http\Controllers\V3\Dashboard\RoadItemsProjectController;
use App\Http\Controllers\V3\Dashboard\RoadObservationController;
use App\Http\Controllers\V3\Dashboard\RoadPatrolProjectController;
use App\Http\Controllers\V3\FMSVehicleManagementController;
use App\Http\Controllers\V3\Harim\DivarkeshiController;
@@ -265,3 +266,13 @@ Route::prefix('receipt_reports')
Route::get('/province_excel_report', 'provinceExcelReport')->name('provinceExcelReport');
Route::get('/city_excel_report', 'cityExcelReport')->name('cityExcelReport');
});
Route::prefix('road_observations')
->name('roadObservations.')
->middleware('permission:manage-road-observation')
->controller(RoadObservationController::class)
->group(function () {
Route::get('/', 'supervisorIndex')->name('index');
Route::post('/verify/{road_observed}', 'verifyBySupervisor')->name('verifyBySupervisor');
Route::get('/report', 'supervisorReport')->name('report');
});