Merge branch 'feature/MapScattering' into 'develop'

Feature/map scattering

See merge request witelgroup/rms_v2!65
This commit is contained in:
2025-02-11 08:38:05 +00:00
18 changed files with 363 additions and 106 deletions

View File

@@ -21,9 +21,10 @@ class CountryActivity implements FromView, WithEvents, ShouldAutoSize, WithDrawi
$activities = $this->activities;
return view('v3.Reports.RoadPatrols.CountryActivity', [
'activities' => $activities["activities"],
'fromDate' => $activities["fromDate"],
'toDate' => $activities["toDate"]
'activities' => $activities["activities"]['data'],
'provinces' => $activities["provinces"],
'fromDate' => $activities["activities"]["fromDate"],
'toDate' => $activities["activities"]["toDate"]
]);
}

View File

@@ -3,6 +3,7 @@
namespace App\Exports\V3\RoadPatrols;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithDrawings;
@@ -14,7 +15,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data){}
public function __construct(private Collection $data){}
public function view(): View
{
@@ -62,7 +63,7 @@ class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, Wi
$drawing2->setHeight(50);
$drawing2->setOffsetX(5);
$drawing2->setOffsetY(5);
$drawing2->setCoordinates('q1');
$drawing2->setCoordinates('i1');
return [$drawing, $drawing2];
}
}

View File

@@ -21,9 +21,10 @@ class ProvinceActivity implements FromView, WithEvents, ShouldAutoSize, WithDraw
$activities = $this->activities;
return view('v3.Reports.RoadPatrols.ProvinceActivity', [
'activities' => $activities["activities"],
'fromDate' => $activities["fromDate"],
'toDate' => $activities["toDate"]
'activities' => $activities["activities"]['data'],
'edarateShahri' => $activities["edarateShahri"],
'fromDate' => $activities["activities"]["fromDate"],
'toDate' => $activities["activities"]["toDate"]
]);
}

View File

@@ -3,6 +3,7 @@
namespace App\Exports\V3\RoadPatrols;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithDrawings;
@@ -14,7 +15,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data){}
public function __construct(private Collection $data){}
public function view(): View
{
@@ -62,7 +63,7 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize,
$drawing2->setHeight(50);
$drawing2->setOffsetX(5);
$drawing2->setOffsetY(5);
$drawing2->setCoordinates('q1');
$drawing2->setCoordinates('i1');
return [$drawing, $drawing2];
}
}

View File

@@ -90,30 +90,6 @@ class RoadItemsReportController extends Controller
]);
}
public function map(Request $request): JsonResponse
{
$provinceId = $request->province_id;
$cityId = $request->city_id;
$subId = $request->sub_id;
$item = $request->item;
$dateFrom = $request->date_from ? $request->date_from . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString();
$data = RoadItemsProject::query()
->where('is_new', '=', 1)
->when($provinceId, fn($query) => $query->where('province_id', '=', $provinceId))
->when($cityId, fn($query) => $query->where('city_id', '=', $cityId))
->when($subId, fn($query) => $query->where('sub_items', 'like', '%' . $subId . '%'))
->when($item, fn($query) => $query->where('item', '=', $item))
->when(!is_null($request->status), fn($query) => $query->where('status', '=', $request->status))
->whereBetween('activity_date', [$dateFrom, $dateTo])
->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id')
->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status')
->get();
return $this->successResponse($data);
}
public function countryActivityExcelPerItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse
{
auth()->user()->addActivityComplete(1034);
@@ -169,4 +145,34 @@ class RoadItemsReportController extends Controller
'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']),
]), $name);
}
public function activitiesOnMap(Request $request): JsonResponse
{
$provinceId = $request->province_id;
$cityId = $request->city_id;
$subId = $request->sub_id;
$item = $request->item;
$status = $request->status;
$dateFrom = $request->date_from ? $request->date_from . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString();
$data = RoadItemsProject::query()
->where('is_new', '=', 1)
->when($provinceId, fn($query, $provinceId) => $query->where('road_items_projects.province_id', '=', $provinceId))
->when($cityId, fn($query, $cityId) => $query->where('road_items_projects.city_id', '=', $cityId))
->when($subId, fn($query, $subId) => $query->where('sub_items', 'like', '%' . $subId . '%'))
->when($item, fn($query, $item) => $query->where('item', '=', $item))
->when(!is_null($status), fn($query, $status) => $query->where('status', '=', $status))
->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id')
->whereBetween('road_items_projects.activity_date', [$dateFrom, $dateTo])
->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status')
->get();
return $this->successResponse($data);
}
public function showOnMap(RoadItemsProject $roadItemsProject): JsonResponse
{
return $this->successResponse($roadItemsProject->load(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
}

View File

@@ -21,10 +21,7 @@ class RoadPatrolReportController extends Controller
use ApiResponse;
public function countryPatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse
{
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$activities = $roadPatrolReportService->countryActivity($fromDate, $toDate);
$activities = $roadPatrolReportService->countryActivity($request);
$provinces = Province::all(['id', 'name_fa']);
@@ -37,13 +34,10 @@ class RoadPatrolReportController extends Controller
public function provincePatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse
{
$request->validate(["province_id" => "required",]);
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$provinceId = $request->province_id;
$activities = $roadPatrolReportService->provinceActivity($fromDate, $toDate, $provinceId);
$activities = $roadPatrolReportService->provinceActivity($request);
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']);
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']);
return $this->successResponse([
'activities' => $activities['data'],
@@ -53,40 +47,49 @@ class RoadPatrolReportController extends Controller
public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse
{
$activities = $roadPatrolReportService->countryActivity($request->from_date, $request->to_date);
$activities = $roadPatrolReportService->countryActivity($request);
$provinces = Province::all(['id', 'name_fa']);
$name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new CountryActivity($activities), $name);
return Excel::download(new CountryActivity([
'activities' => $activities,
'provinces' => $provinces,
]), $name);
}
public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse
{
$activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->to_date, $request->province_id);
$activities = $roadPatrolReportService->provinceActivity($request);
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']);
$name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new ProvinceActivity($activities), $name);
return Excel::download(new ProvinceActivity([
'activities' => $activities,
'edarateShahri' => $edarateShahri,
]), $name);
}
public function activitiesOnMap(Request $request): JsonResponse
{
$date_from = $request->date_from ? $request->date_from .' 00:00:00' : Date('Y-m-d') .' 00:00:00';
$date_to = $request->date_to ? $request->date_to.' 23:59:59' : (new \DateTime('tomorrow'))->format('Y-m-d').' 23:59:59';
$date_from = $request->from_date ? $request->from_date .' 00:00:00' : now()->startOfDay()->toDateTimeString();
$date_to = $request->date_to ? $request->date_to.' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString();
$provinceId = $request->province_id;
$edareId = $request->edare_id;
$data = RoadPatrol::query()->when($request->province_id, function ($query, $province) {
return $query->where('province_id', '=', $province);
})
->when($request->edare_id, function ($query, $edare_id) {
return $query->where('edare_id', '=', $edare_id);
})
->whereBetween('created_at', [
$date_from,
$date_to,
])
$data = RoadPatrol::query()
->when($provinceId, fn($query, $provinceId) => $query->where('province_id', '=', $provinceId))
->when($edareId, fn($query, $edareId) => $query->where('edare_id', '=', $edareId))
->whereBetween('created_at', [$date_from, $date_to])
->select('id', 'start_lat', 'start_lon')
->get();
return $this->successResponse($data);
}
public function showOnMap(RoadPatrol $roadPatrol): JsonResponse
{
return $this->successResponse($roadPatrol->load(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
}

View File

@@ -2,11 +2,8 @@
namespace App\Http\Controllers\V3\Dashboard;
use App\Exports\V2\RoadPatrol\OperatorCartableExport;
use App\Exports\V2\RoadPatrol\SupervisorCartableExport;
use App\Exports\V3\RoadPatrols\OperatorCartableReport;
use App\Exports\V3\RoadPatrols\SupervisorCartableReport;
use App\Facades\DataTable\DataTableFacade;
use App\Facades\Sms\Sms;
use App\Http\Controllers\Controller;
use App\Http\Requests\V3\RoadPatrolProject\DeleteRequest;
@@ -87,7 +84,7 @@ class RoadPatrolProjectController extends Controller
{
$name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadPatrolReportService->supervisorCartableReport($request);
return Excel::download(new SupervisorCartableReport($data), $name);
return Excel::download(new SupervisorCartableReport($data['data']), $name);
}
public function operatorIndex(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse
@@ -284,8 +281,8 @@ class RoadPatrolProjectController extends Controller
$status = $request->status;
$rms_status = $request->rms_status;
if ($request->date_from && $request->date_to) {
$date_from = $request->date_from.' 00:00:00';
if ($request->from_date && $request->date_to) {
$date_from = $request->from_date.' 00:00:00';
$date_to = $request->date_to.' 23:59:59';
} else {
$date_from = Date('Y-m-d');
@@ -324,6 +321,6 @@ class RoadPatrolProjectController extends Controller
{
$name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx';
$data = $roadPatrolReportService->operatorCartableReport($request);
return Excel::download(new OperatorCartableReport($data), $name);
return Excel::download(new OperatorCartableReport($data['data']), $name);
}
}

View File

@@ -71,8 +71,11 @@ class RoadPatrolReportService
return $data;
}
public function countryActivity(string $fromDate, string $toDate): array
public function countryActivity(Request $request): array
{
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$activities = DB::select('SELECT
"کشوری" as province_fa,
-1 as province_id,
@@ -124,8 +127,12 @@ class RoadPatrolReportService
];
}
public function provinceActivity(string $fromDate, string $toDate, int $provinceId): array
public function provinceActivity(Request $request): array
{
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$provinceId = $request->province_id;
$activities = DB::select(
'SELECT
province_fa,

View File

@@ -33,7 +33,7 @@
</tr>
<tr>
<th colspan="14"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;">
گزارش کارتابل عملیات فعالیت های روزانه و جاری
</th>
</tr>
@@ -97,7 +97,7 @@
<td style="border: 1px solid black;text-align: center;">
{{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }}
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">
{{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }}
@@ -107,7 +107,6 @@
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['status_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['supervisor_description'] ?? '-' }}</td>
</tr>

View File

@@ -33,7 +33,7 @@
</tr>
<tr>
<th colspan="14"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;">
گزارش کارتابل ارزیابی فعالیت های روزانه و جاری
</th>
</tr>
@@ -97,7 +97,7 @@
<td style="border: 1px solid black;text-align: center;">
{{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }}
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">
{{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }}
@@ -107,7 +107,6 @@
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['status_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['supervisor_description'] ?? '-' }}</td>
</tr>

View File

@@ -27,7 +27,7 @@
</tr>
<tr>
<th colspan="8"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;">
گزارش گشت راهداری و ترابری از تاریخ
{{ verta($fromDate)->format('Y/n/j') }}
تا
@@ -80,23 +80,52 @@
</thead>
<tbody>
@foreach ($activities as $activity)
@php
// محاسبه مجموع مقدار s برای کل کشور
$totalForCountry = collect($activities)->where('province_id', -1)->first();
@endphp
{{-- ردیف کل کشور --}}
<tr>
<td style="border:1px solid black;text-align: center;">{{ $activity->province_fa }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedade }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_adi }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_fori }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_ani }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_peygiri_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->masafat_tey_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_faliyat_sabt_shode }}</td>
<td style="border:1px solid black;text-align: center;">کل کشور</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedade }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedad_mavarede_moshede_shode_adi }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedad_mavarede_moshede_shode_fori }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedad_mavarede_moshede_shode_ani }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedad_mavarede_peygiri_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->masafat_tey_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForCountry->tedad_faliyat_sabt_shode }}</td>
</tr>
@foreach ($provinces as $province)
@php
$totalForProvince = collect($activities)->where('province_id', $province->id)->first();
@endphp
@if($totalForProvince)
<tr>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->province_fa }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedade }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_adi }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_fori }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_ani }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_peygiri_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->masafat_tey_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_faliyat_sabt_shode }}</td>
</tr>
@else
<tr>
<td style="border:1px solid black;text-align: center;">{{ $province->name_fa }}</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
</tr>
@endif
@endforeach
</tbody>
</table>
</body>
</html>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>گزارش گشت راهداری</title>
<style>
table,
th,
td {
border: 1px solid black;
}
</style>
</head>
<body dir="rtl" style="text-align: center;">
<table>
<thead>
<tr>
<th colspan="14"
style="background-color: #DAEEF3;text-align: center;border-right: 1px solid black;font-weight:bolder;">
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
</th>
</tr>
<tr>
<th colspan="14"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;">
</th>
</tr>
<tr>
<th colspan="14"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
گزارش کارتابل عملیات گشت راهداری
</th>
</tr>
<tr>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">کد
یکتا</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
استان</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
اداره</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
کد خودرو(ها)</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
کد راهدار(ها)</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ شروع</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ پایان</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ ثبت</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
توضیحات مامور</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
<tr>
<td style="border: 1px solid black;text-align: center;">{{ $item['id'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['province_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['edare_name'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['description'] ?? '-' }}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>

View File

@@ -27,7 +27,7 @@
</tr>
<tr>
<th colspan="8"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;">
گزارش گشت راهداری و ترابری از تاریخ
{{ verta($fromDate)->format('Y/n/j') }}
تا
@@ -80,17 +80,50 @@
</thead>
<tbody>
@foreach ($activities as $activity)
<tr>
<td style="border:1px solid black;text-align: center;">{{ $activity->edare_name }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedade }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_adi }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_fori }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_moshede_shode_ani }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_mavarede_peygiri_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->masafat_tey_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $activity->tedad_faliyat_sabt_shode }}</td>
</tr>
@php
// محاسبه مجموع مقدار s برای کل کشور
$totalForProvince = collect($activities)->where('edare_id', -1)->first();
@endphp
{{-- ردیف کل کشور --}}
<tr>
<td style="border:1px solid black;text-align: center;">کل استان</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedade ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_adi ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_fori ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_moshede_shode_ani ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_mavarede_peygiri_shode ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->masafat_tey_shode ?? 0 }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForProvince->tedad_faliyat_sabt_shode ?? 0 }}</td>
</tr>
@foreach ($edarateShahri as $edareShahri)
@php
$totalForEdare = collect($activities)->where('edare_id', $edareShahri->id)->first();
@endphp
@if($totalForEdare)
<tr>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->edare_name }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedade }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedad_mavarede_moshede_shode_adi }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedad_mavarede_moshede_shode_fori }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedad_mavarede_moshede_shode_ani }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedad_mavarede_peygiri_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->masafat_tey_shode }}</td>
<td style="border:1px solid black;text-align: center;">{{ $totalForEdare->tedad_faliyat_sabt_shode }}</td>
</tr>
@else
<tr>
<td style="border:1px solid black;text-align: center;">{{ $edareShahri->name_fa }}</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
<td style="border:1px solid black;text-align: center;">0</td>
</tr>
@endif
@endforeach
</tbody>
</table>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>گزارش گشت راهداری</title>
<style>
table,
th,
td {
border: 1px solid black;
}
</style>
</head>
<body dir="rtl" style="text-align: center;">
<table>
<thead>
<tr>
<th colspan="9"
style="background-color: #DAEEF3;text-align: center;border-right: 1px solid black;font-weight:bolder;">
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
</th>
</tr>
<tr>
<th colspan="9"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;">
</th>
</tr>
<tr>
<th colspan="9"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13;">
گزارش کارتابل ارزیابی گشت راهداری
</th>
</tr>
<tr>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">کد
یکتا</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
استان</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
اداره</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
کد خودرو(ها)</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
کد راهدار(ها)</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ شروع</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ پایان</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ ثبت</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
توضیحات مامور</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
<tr>
<td style="border: 1px solid black;text-align: center;">{{ $item['id'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['province_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['edare_name'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }}
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['description'] ?? '-' }}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>

View File

@@ -196,11 +196,12 @@ Route::prefix('road_item_reports')
Route::get('/province_activity_per_sub_item', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem');
Route::get('/country_activity_per_item', 'countryActivityPerItem')->name('countryActivityPerItem');
Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem');
Route::get('/map', 'map')->name('map');
Route::get('/country_activity_excel_per_item', 'countryActivityExcelPerItem')->name('countryActivityExcelPerItem');
Route::get('/province_activity_excel_per_item', 'provinceActivityExcelPerItem')->name('provinceActivityExcelPerItem');
Route::get('/country_activity_excel_per_sub_item', 'countryActivityExcelPerSubItem')->name('countryActivityExcelPerSubItem');
Route::get('/province_activity_excel_per_sub_item', 'provinceActivityExcelPerSubItem')->name('provinceActivityExcelPerSubItem');
Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap');
Route::get('/show_on_map/{roadItemsProject}', 'showOnMap')->name('showOnMap');
});
Route::prefix('road_patrol_reports')
@@ -212,4 +213,5 @@ Route::prefix('road_patrol_reports')
Route::get('/country_activity_excel', 'countryActivityExcel')->name('countryActivityExcel');
Route::get('/province_activity_excel', 'provinceActivityExcel')->name('provinceActivityExcel');
Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap');
Route::get('/show_on_map/{roadPatrol}', 'showOnMap')->name('showOnMap');
});

View File

@@ -518,6 +518,6 @@ INSERT INTO edarate_shahri (name_fa,province_id,created_at,updated_at) VALUES
('اداره آق قلا',27,'2023-03-13 14:12:25','2023-03-13 14:12:25');
INSERT INTO edarate_shahri (name_fa,province_id,created_at,updated_at) VALUES
('اداره خمام',28,'2023-06-17 08:43:14','2023-06-17 08:43:14'),
('اداره اصلاندوز',3,'2023-08-15 09:33:55','2023-08-15 09:33:55');
('اداره گالیکش',27,'2024-11-16 14:33:55','2024-11-16 14:33:55');
('اداره اصلاندوز',3,'2023-08-15 09:33:55','2023-08-15 09:33:55'),
('اداره گالیکش',27,'2024-11-16 14:33:55','2024-11-16 14:33:55'),
('آزادراه ساوه-تهران',32,'2025-01-06 14:33:55','2025-01-06 14:33:55');

View File

@@ -160,4 +160,4 @@ INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES
('حذف نوع آزمایش','1164','action',0),
('ثبت نمونه آزمایش','1165','action',0),
('ویرایش نمونه آزمایش','1166','action',0),
('حذف نمونه آزمایش','1167','action',0),
('حذف نمونه آزمایش','1167','action',0);

View File

@@ -132,6 +132,6 @@ INSERT INTO permissions (name,guard_name,name_fa,description,created_at,updated_
('delete-safety-and-privacy','web','حذف نگهداری و حریم','کاربر امکان حذف یک فعالیت نگهداری حریم راه را دارد',NULL,NULL,NULL,NULL,'safety-and-privacy','نگهداری حریم راه',0,0),
('show-receipt','web','نمایش خسارت (کشوری)','نمایش خسارات کشوری',NULL,NULL,NULL,NULL,'receipt','خسارات وارد بر ابنیه فنی راه',0,0),
('show-receipt-province','web','نمایش خسارت (استانی)','نمایش خسارات استانی',NULL,NULL,NULL,NULL,'receipt','خسارات وارد بر ابنیه فنی راه',1,0),
('supervise-road-item-by-edareostani','web','نظارت بر ثبت فعالیت روزانه و جاری(ادارات استانی)',NULL,'2023-07-09 09:48:35','2023-07-09 09:48:37',NULL,NULL,'road-item','فعالیت روزانه',0,0);
('azmayesh-management','web','مدیریت آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0);
('supervise-road-item-by-edareostani','web','نظارت بر ثبت فعالیت روزانه و جاری(ادارات استانی)',NULL,'2023-07-09 09:48:35','2023-07-09 09:48:37',NULL,NULL,'road-item','فعالیت روزانه',0,0),
('azmayesh-management','web','مدیریت آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0),
('azmayesh-type-management','web','مدیریت نوع آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0);