Merge branch 'feature/ActivityReport' into 'develop'

Feature/activity report

See merge request witelgroup/rms_v2!57
This commit is contained in:
2025-01-12 07:43:04 +00:00
11 changed files with 269 additions and 113 deletions

View File

@@ -1,9 +1,11 @@
<?php
namespace App\Http\Controllers\V3\Azmayesh;
namespace App\Http\Controllers\V3\Dashboard\Azmayesh;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Controllers\Controller;
use App\Http\Requests\V3\Azmayesh\StoreRequest;
use App\Http\Requests\V3\Azmayesh\UpdateRequest;
use App\Http\Traits\ApiResponse;
use App\Models\Azmayesh;
use App\Models\AzmayeshType;
@@ -11,8 +13,6 @@ use App\Models\Province;
use Illuminate\Database\QueryException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Requests\V3\Azmayesh\StoreRequest;
use App\Http\Requests\V3\Azmayesh\UpdateRequest;
class AzmayeshController extends Controller
{

View File

@@ -1,18 +1,16 @@
<?php
namespace App\Http\Controllers\V3\Azmayesh;
namespace App\Http\Controllers\V3\Dashboard\Azmayesh;
use App\Http\Controllers\Controller;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Traits\ApiResponse;
use App\Models\Azmayesh;
use App\Models\AzmayeshType;
use App\Models\AzmayeshSample;
use App\Models\Province;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\V3\AzmayeshSample\StoreRequest;
use App\Http\Requests\V3\AzmayeshSample\UpdateRequest;
use App\Http\Traits\ApiResponse;
use App\Models\Azmayesh;
use App\Models\AzmayeshSample;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AzmayeshSampleController extends Controller
{

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\V3\Azmayesh;
namespace App\Http\Controllers\V3\Dashboard\Azmayesh;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Controllers\Controller;

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\V3;
namespace App\Http\Controllers\V3\Dashboard;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Controllers\Controller;

View File

@@ -1,16 +1,18 @@
<?php
namespace App\Http\Controllers\V3\Reports;
namespace App\Http\Controllers\V3\Dashboard\Reports;
use App\Exports\Activities\One\AllSheets as OneSheet;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\EdarateShahri;
use App\Models\InfoItem;
use App\Models\Province;
use App\Models\RoadItemsProject;
use App\Models\RoadPatrol;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class RoadItemsReportController extends Controller
{
@@ -54,18 +56,17 @@ class RoadItemsReportController extends Controller
->groupBy('sub_item')
->get();
$infoItems = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item');
$provinceRoadItemsPerSubItem->each(function ($value) use ($infoItems) {
if (isset($infoItems[$value->t])) {
$value->u = $infoItems[$value->t]->sub_item_unit;
}
});
$activities = $provinceRoadItemsPerSubItem->push(...$countryRoadItemsPerSubItem);
$provinces = Province::all(['id', 'name_fa']);
$subItems = InfoItem::query()
->where('item', $item)
->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']);
return $this->successResponse([
'provincesData' => $provinceRoadItemsPerSubItem,
'countryData' => $countryRoadItemsPerSubItem,
'items' => $infoItems
'activities' => $activities,
'sub_items' => $subItems,
'provinces' => $provinces,
]);
}
@@ -90,17 +91,31 @@ class RoadItemsReportController extends Controller
->groupBy('edarat_id', 'sub_item')
->get();
$items = InfoItem::query()->where('item', $item)->get()->keyBy('sub_item');
$provinceRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw('
sub_item AS t,
COUNT(*) AS c,
CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s,
province_id AS p,
-1 AS ci
')
->where('item', '=', $item)
->where('province_id', '=', $province)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('status', '=', 1)
->groupBy('sub_item')
->get();
$cityRoadItemsPerSubItem->each(function ($value) use ($items) {
if (isset($items[$value->t])) {
$value->u = $items[$value->t]->sub_item_unit;
}
});
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $province)->get(['id', 'name_fa']);
$activities = $cityRoadItemsPerSubItem->push(...$provinceRoadItemsPerSubItem);
$subItems = InfoItem::query()
->where('item', $item)
->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']);
return $this->successResponse([
'citiesData' => $cityRoadItemsPerSubItem,
'items' => $items
'activities' => $activities,
'edarateShahri' => $edarateShahri,
'sub_items' => $subItems,
]);
}
@@ -113,10 +128,11 @@ class RoadItemsReportController extends Controller
$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();
$user = auth()->user();
$isSpecialUser = in_array($user->username, ['witel', 'drdanesh']);
// $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']);
$isSpecialUser = $user->hasPermissionTo("show-road-item-supervise-cartable");
$provinceId = $isSpecialUser ? null : $user->province_id;
$roadItemsProjectsQuery = RoadItemsProject::query()
$provinceActivity = RoadItemsProject::query()
->selectRaw('COUNT(*) AS s, province_id AS p, item AS i')
->where('status', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
@@ -125,7 +141,7 @@ class RoadItemsReportController extends Controller
})
->groupBy('province_id', 'item');
$roadItemsProjectsSummaryQuery = RoadItemsProject::query()
$countryActivity = RoadItemsProject::query()
->selectRaw('COUNT(*) AS s, -1 AS p, item AS i')
->where('status', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
@@ -134,14 +150,14 @@ class RoadItemsReportController extends Controller
})
->groupBy('item');
$data = $roadItemsProjectsQuery
->unionAll($roadItemsProjectsSummaryQuery)
$activities = $provinceActivity
->unionAll($countryActivity)
->get();
$provinces = Province::all(['id', 'name_fa']);
return $this->successResponse([
'activities' => $data,
'activities' => $activities,
'provinces' => $provinces,
]);
}
@@ -152,7 +168,7 @@ class RoadItemsReportController extends Controller
$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();
$roadItemsProjectsQuery = RoadItemsProject::query()
$edarehActivity = RoadItemsProject::query()
->selectRaw('
COUNT(*) AS s,
edarat_id AS c,
@@ -162,7 +178,7 @@ class RoadItemsReportController extends Controller
->where('province_id', $provinceId)
->groupBy('item', 'edarat_id');
$roadItemsProjectsSummaryQuery = RoadItemsProject::query()
$cityActivity = RoadItemsProject::query()
->selectRaw('
COUNT(*) AS s,
-1 AS c,
@@ -172,15 +188,15 @@ class RoadItemsReportController extends Controller
->where('province_id', $provinceId)
->groupBy('item');
$data = $roadItemsProjectsQuery
->unionAll($roadItemsProjectsSummaryQuery)
$activities = $edarehActivity
->unionAll($cityActivity)
->get();
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name']);
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']);
return $this->successResponse([
'activities' => $data,
'edaratShahri' => $edarateShahri,
'activities' => $activities,
'edarateShahri' => $edarateShahri,
]);
}
@@ -207,4 +223,39 @@ class RoadItemsReportController extends Controller
return $this->successResponse($data);
}
public function activityExcelPerItem(Request $request): BinaryFileResponse
{
auth()->user()->addActivityComplete(1034);
$name = 'گزارش از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new OneSheet($request->fromDate, $request->toDate, $request->province), $name);
}
public function activityExcelPerSubItem(Request $request)
{
$url_correction = $request->province ? "&province={$request->province}" : "";
return match ($request->type) {
1 => redirect("/reports/two/maremat?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
2 => redirect("/reports/two/paksazi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
3 => redirect("/reports/two/alaem?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
4 => redirect("/reports/two/hefaz?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
5 => redirect("/reports/two/roshanaei?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
6 => redirect("/reports/two/khatkeshi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
7 => redirect("/reports/two/rangamizi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
8 => redirect("/reports/two/shosteshoo?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
9 => redirect("/reports/two/imensazi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
10 => redirect("/reports/two/harim?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
11 => redirect("/reports/two/pol?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
12 => redirect("/reports/two/toonel?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
13 => redirect("/reports/two/zemestani?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
14 => redirect("/reports/two/mashinalat?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
15 => redirect("/reports/two/rahdar?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
16 => redirect("/reports/two/ezterari?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
20 => redirect("/reports/two/bazrasi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction),
default => response()->json([
'error' => '404'
], 404),
};
}
}

View File

@@ -0,0 +1,154 @@
<?php
namespace App\Http\Controllers\V3\Dashboard\Reports;
use App\Exports\V2\RoadPatrol\RoadPatrolTable\AllSheets as RoadPatrolTable;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\EdarateShahri;
use App\Models\Province;
use App\Models\RoadPatrolProject;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class RoadPatrolReportController extends Controller
{
use ApiResponse;
public function provincePatrolActivity(Request $request): JsonResponse
{
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$activities = DB::select('SELECT
"کشوری" as province_fa,
-1 as province_id,
COUNT(*) tedade,
SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi,
SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori,
SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani,
SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode,
SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode,
ROUND(SUM(distance)) as masafat_tey_shode
FROM (SELECT
province_id,
province_fa,
distance,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode
FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp
union
SELECT
province_fa,
province_id,
COUNT(*) tedade,
SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi,
SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori,
SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani,
SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode,
SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode,
ROUND(SUM(distance)) as masafat_tey_shode
FROM (SELECT
province_id,
province_fa,
distance,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode
FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp
GROUP BY province_id'
);
$provinces = Province::all(['id', 'name_fa']);
return $this->successResponse([
'activities' => $activities,
'provinces' => $provinces
]);
}
public function cityPatrolActivity(Request $request): JsonResponse
{
$request->validate(["province_id" => "required",]);
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$provinceId = $request->province_id;
$activities = DB::select(
'SELECT
province_fa,
province_id,
-1 AS edare_id,
"استانی" AS edare_name,
COUNT(*) tedade,
SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi,
SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori,
SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani,
SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode,
SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode,
ROUND(SUM(distance)) as masafat_tey_shode
FROM (SELECT
province_id,
province_fa,
edare_id,
edare_name,
distance,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode
FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp
UNION
SELECT
province_fa,
province_id,
edare_id,
edare_name,
COUNT(*) tedade,
SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi,
SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori,
SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani,
SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode,
SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode,
ROUND(SUM(distance)) as masafat_tey_shode
FROM (SELECT
province_id,
province_fa,
edare_id,
edare_name,
distance,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori,
(SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode,
(SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode
FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp
GROUP BY edare_id
'
);
$edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']);
return $this->successResponse([
'activities' => $activities,
'edarateShahri' => $edarateShahri,
]);
}
public function excel(Request $request): BinaryFileResponse
{
$name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(
new RoadPatrolTable($request->from_date, $request->date_to), $name
);
}
}

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\V3;
namespace App\Http\Controllers\V3\Dashboard;
use App\Exports\V2\RoadItems\OperatorCartableExport;
use App\Exports\V2\RoadItems\SupervisorCartableExport;
@@ -10,18 +10,14 @@ use App\Http\Requests\V3\RoadItemsProject\StoreRequest;
use App\Http\Requests\V3\RoadItemsProject\UpdateRequest;
use App\Http\Requests\V3\RoadItemsProject\VerifyBySupervisorRequest;
use App\Http\Traits\ApiResponse;
use App\Models\CMMSMachine;
use App\Models\EdarateShahri;
use App\Models\InfoItem;
use App\Models\Rahdaran;
use App\Models\RoadItemsProject;
use App\Services\NominatimService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
@@ -36,7 +32,7 @@ class RoadItemsProjectController extends Controller
{
$columns = array(
'id', 'user_id', 'start_lat', 'start_lng', 'end_lat',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item',
'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa',
'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time',
'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code'
@@ -143,7 +139,7 @@ class RoadItemsProjectController extends Controller
{
$columns = array(
'id', 'user_id', 'start_lat', 'start_lng', 'end_lat',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa',
'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item',
'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa',
'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time',
'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code'

View File

@@ -1,6 +1,6 @@
<?php
namespace App\Http\Controllers\V3;
namespace App\Http\Controllers\V3\Dashboard;
use App\Exports\V2\RoadPatrol\OperatorCartableExport;
use App\Exports\V2\RoadPatrol\SupervisorCartableExport;

View File

@@ -30,6 +30,7 @@ class ProfileController extends Controller
'major' => $user->major,
'degree' => $user->degree,
'mobile' => $user->mobile,
'province_id' => $user->province_id,
'avatar' => $user->avatarUrl()
]);
}

View File

@@ -1,44 +0,0 @@
<?php
namespace App\Http\Controllers\V3\Reports;
use App\Exports\V2\RoadPatrol\RoadPatrolTable\AllSheets as RoadPatrolTable;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\RoadPatrolProject;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class RoadPatrolReportController extends Controller
{
use ApiResponse;
public function provincePatrolData(Request $request): JsonResponse
{
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$data = RoadPatrolProject::provincePatrolData($fromDate, $dateTo);
return $this->successResponse($data);
}
public function edarehPatrolData(Request $request): JsonResponse
{
$request->validate(["province_id" => "required",]);
$fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString();
$dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString();
$data = RoadPatrolProject::edarehPatrolData($fromDate, $dateTo, $request->province_id);
return $this->successResponse($data);
}
public function roadPatrolsReportTable(Request $request): BinaryFileResponse
{
$name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(
new RoadPatrolTable($request->from_date, $request->date_to), $name
);
}
}

View File

@@ -1,19 +1,19 @@
<?php
use App\Http\Controllers\V3\Auth\LogoutController;
use App\Http\Controllers\V3\Azmayesh\AzmayeshController;
use App\Http\Controllers\V3\Azmayesh\AzmayeshSampleController;
use App\Http\Controllers\V3\Azmayesh\AzmayeshTypeController;
use App\Http\Controllers\V3\CMMSMachinesController;
use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshController;
use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshSampleController;
use App\Http\Controllers\V3\Dashboard\Azmayesh\AzmayeshTypeController;
use App\Http\Controllers\V3\Dashboard\ObservedItemController;
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\RoadPatrolProjectController;
use App\Http\Controllers\V3\FMSVehicleManagementController;
use App\Http\Controllers\V3\Harim\DivarkeshiController;
use App\Http\Controllers\V3\ObservedItemController;
use App\Http\Controllers\V3\ProfileController;
use App\Http\Controllers\V3\RahdaranController;
use App\Http\Controllers\V3\Reports\RoadItemsReportController;
use App\Http\Controllers\V3\Reports\RoadPatrolReportController;
use App\Http\Controllers\V3\RoadItemsProjectController;
use App\Http\Controllers\V3\RoadPatrolProjectController;
use Illuminate\Support\Facades\Route;
Route::prefix('harim')->name('harim')->group(function () {
@@ -195,10 +195,10 @@ Route::prefix('road_item_reports')
->controller(RoadItemsReportController::class)
->group(function () {
Route::get('/get_sub_items', 'getSubItems')->name('getSubItems');
Route::get('/get_items', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem');
Route::get('/get_items_city', 'cityActivityPerSubItem')->name('cityActivityPerSubItem');
Route::get('/province_statistics', 'provinceActivityPerItem')->name('provinceActivityPerItem');
Route::get('/city_statistics', 'cityActivityPerItem')->name('cityActivityPerItem');
Route::get('/province_activity_per_sub_item', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem');
Route::get('/city_activity_per_sub_item', 'cityActivityPerSubItem')->name('cityActivityPerSubItem');
Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem');
Route::get('/city_activity_per_item', 'cityActivityPerItem')->name('cityActivityPerItem');
Route::get('/map', 'map')->name('map');
});
@@ -206,7 +206,7 @@ Route::prefix('road_patrol_reports')
->name('roadPatrolReports.')
->controller(RoadPatrolReportController::class)
->group(function () {
Route::get('/province_data', 'provincePatrolData')->name('provincePatrolData');
Route::get('/edareh_data', 'edarehPatrolData')->name('edarehPatrolData');
Route::get('/report_excel', 'roadPatrolsReportTable')->name('roadPatrolsReportTable');
Route::get('/province_activity', 'provincePatrolActivity')->name('provincePatrolActivity');
Route::get('/city_activity', 'cityPatrolActivity')->name('cityPatrolActivity');
Route::get('/excel', 'excel')->name('excel');
});