create receipt report logic

This commit is contained in:
2025-02-22 15:31:12 +03:30
parent aded4f876c
commit e6930f2dfe
15 changed files with 565 additions and 86 deletions

View File

@@ -0,0 +1,106 @@
<?php
namespace App\Services\Cartables;
use App\Facades\DataTable\DataTableFacade;
use App\Http\Traits\ApiResponse;
use App\Models\Accident;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AccidentReceiptTableService
{
use ApiResponse;
public function dataTable(Request $request)
{
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-receipt')) {
$query = Accident::query();
}
else {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = Accident::query()->where('province_id', '=', $user->province_id);
}
return DataTableFacade::run(
$query,
$request,
allowedFilters: ['*'],
allowedSortings: ['*']
);
}
public function provinceReport(Request $request): array
{
$data = DB::select(
'SELECT
"کشوری" as province_fa,
-1 as province_id,
COUNT(id) AS tedade,
COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah,
COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht,
SUM(`sum`) AS kol_sabt_shode,
SUM(CASE WHEN STATUS > 3 THEN `sum` END) AS vasel_shode,
SUM(CASE WHEN STATUS > 3 THEN `deposit_insurance_amount` END) AS vasel_shode_bimeh,
SUM(CASE WHEN STATUS > 3 THEN `deposit_daghi_amount` END) AS vasel_shode_daghi,
SUM(CASE WHEN STATUS > 3 THEN `final_amount` END) AS vasel_shode_final
FROM `accidents`
where created_at BETWEEN "'.$request->from_date.'" AND "'.$request->date_to.'"
union
SELECT
province_fa,
province_id,
COUNT(id) AS tedade,
COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah,
COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht,
SUM(`sum`) AS kol_sabt_shode,
SUM(CASE WHEN STATUS > 3 THEN `sum` END) AS vasel_shode,
SUM(CASE WHEN STATUS > 3 THEN `deposit_insurance_amount` END) AS vasel_shode_bimeh,
SUM(CASE WHEN STATUS > 3 THEN `deposit_daghi_amount` END) AS vasel_shode_daghi,
SUM(CASE WHEN STATUS > 3 THEN `final_amount` END) AS vasel_shode_final
FROM `accidents`
where created_at BETWEEN "'.$request->from_date.'" AND "'.$request->date_to.'"
GROUP BY province_id
'
);
return [
'data' => collect($data),
'fromDate' => $request->from_date,
'toDate' => $request->date_to,
];
}
public function cityReport(Request $request): array
{
$data = DB::select(
'SELECT
city_fa,
city_id,
COUNT(id) AS tedade,
COUNT(CASE WHEN report_base = 0 THEN 1 END) AS police_rah,
COUNT(CASE WHEN report_base = 1 THEN 1 END) AS gozaresh_gasht,
SUM(`sum`) AS kol_sabt_shode,
SUM(CASE WHEN STATUS > 3 THEN `sum` END) AS vasel_shode,
SUM(CASE WHEN STATUS > 3 THEN `deposit_insurance_amount` END) AS vasel_shode_bimeh,
SUM(CASE WHEN STATUS > 3 THEN `deposit_daghi_amount` END) AS vasel_shode_daghi,
SUM(CASE WHEN STATUS > 3 THEN `final_amount` END) AS vasel_shode_final
FROM `accidents`
where created_at BETWEEN "'.$request->from_date.'" AND "'.$request->date_to.'" AND province_id ='.$request->province_id.'
GROUP BY city_id
'
);
return [
'data' => collect($data),
'fromDate' => $request->from_date,
'toDate' => $request->date_to,
];
}
}

View File

@@ -0,0 +1,228 @@
<?php
namespace App\Services\Cartables;
use App\Facades\DataTable\DataTableFacade;
use App\Models\InfoItem;
use App\Models\RoadItemsProject;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
class RoadItemTableService
{
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-road-item-supervise-cartable')) {
$query = RoadItemsProject::query()
->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = RoadItemsProject::query()
->select(['id', 'province_fa', 'edarat_name', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->where('province_id', auth()->user()->province_id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
$data = DataTableFacade::run(
$query,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings);
return $data;
}
public function operatorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$query = RoadItemsProject::query()
->select(['id', 'supervisor_description', 'item_fa', 'sub_item_fa', 'sub_item_data', 'unit_fa', 'start_lat', 'start_lng',
'end_lat', 'end_lng', 'activity_date_time', 'created_at', 'status_fa', 'status'])
->where('is_new', 1)
->where('user_id', auth()->user()->id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));;
$data = DataTableFacade::run(
$query,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings);
return $data;
}
public function countryActivityPerSubItem(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();
$item = $request->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')
->where('item', '=', $item)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('status', '=', 1)
->groupBy('province_id', 'sub_item')
->get();
$countryRoadItemsPerSubItem = 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,
-1 AS p')
->where('item', '=', $item)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('status', '=', 1)
->groupBy('sub_item')
->get();
$activities = $provinceRoadItemsPerSubItem->push(...$countryRoadItemsPerSubItem);
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
public function provinceActivityPerSubItem(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();
$item = $request->item;
$province = $request->province_id;
$cityRoadItemsPerSubItem = 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,
edarat_id AS ci
')
->where('item', '=', $item)
->where('province_id', '=', $province)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('status', '=', 1)
->groupBy('edarat_id', 'sub_item')
->get();
$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();
$activities = $cityRoadItemsPerSubItem->push(...$provinceRoadItemsPerSubItem);
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
public function countryActivityPerItem(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();
$user = auth()->user();
// $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']);
$isSpecialUser = $user->hasPermissionTo("show-road-item-supervise-cartable");
$provinceId = $isSpecialUser ? null : $user->province_id;
$provinceActivity = RoadItemsProject::query()
->selectRaw('COUNT(*) AS s, province_id AS p, item AS i')
->where('status', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->when(!$isSpecialUser, function ($query) use ($provinceId) {
$query->where('province_id', $provinceId);
})
->groupBy('province_id', 'item');
$countryActivity = RoadItemsProject::query()
->selectRaw('COUNT(*) AS s, -1 AS p, item AS i')
->where('status', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->when(!$isSpecialUser, function ($query) use ($provinceId) {
$query->where('province_id', $provinceId);
})
->groupBy('item');
$activities = $provinceActivity
->unionAll($countryActivity)
->get();
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
public function provinceActivityPerItem(Request $request): array
{
$provinceId = $request->province_id;
$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();
$edarehActivity = RoadItemsProject::query()
->selectRaw('
COUNT(*) AS s,
edarat_id AS c,
item AS i')
->where('status', '=', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('province_id', $provinceId)
->groupBy('item', 'edarat_id');
$cityActivity = RoadItemsProject::query()
->selectRaw('
COUNT(*) AS s,
-1 AS c,
item AS i')
->where('status', '=', 1)
->whereBetween('activity_date_time', [$fromDate, $toDate])
->where('province_id', $provinceId)
->groupBy('item');
$activities = $edarehActivity
->unionAll($cityActivity)
->get();
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate,
];
}
}

View File

@@ -0,0 +1,185 @@
<?php
namespace App\Services\Cartables;
use App\Facades\DataTable\DataTableFacade;
use App\Models\RoadPatrol;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class RoadPatrolTableService
{
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->user();
$query = null;
if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) {
$query = RoadPatrol::query()
->select([])
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) {
if (is_null($user->province_id)) {
return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!');
}
$query = RoadPatrol::query()
->select([])
->where('province_id', '=', $user->province_id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
}
$data = DataTableFacade::run(
$query,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings);
return $data;
}
public function operatorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$query = RoadPatrol::query()
->select([])
->where('operator_id', '=', auth()->user()->id)
->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']));
$data = DataTableFacade::run(
$query,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings);
return $data;
}
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,
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 "'.$toDate.'") 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 "'.$toDate.'") temp
GROUP BY province_id'
);
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate
];
}
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,
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 "'.$toDate.'") 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 "'.$toDate.'") temp
GROUP BY edare_id
'
);
return [
'data' => $activities,
'fromDate' => $fromDate,
'toDate' => $toDate
];
}
}