just for go enother work i donot no work or not

This commit is contained in:
2025-07-30 14:23:52 +03:30
parent ab059cfe52
commit a9067950d7
16 changed files with 652 additions and 412 deletions

View File

@@ -0,0 +1,83 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Country;
use App\Models\EdarateShahri;
use App\Models\Province;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class AccessRoadReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data){}
public function view(): View
{
$data = $this->data;
$existedProvinces = array_keys($data);
foreach (Province::all() as $value) {
$provinceId = $value->id;
if (!array_key_exists($provinceId, $existedProvinces)) {
$data[] = (object) [
'province_id' => $provinceId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Country.AccessRoadReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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,84 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Country;
use App\Models\EdarateShahri;
use App\Models\Province;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class ConstructionReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data){}
public function view(): View
{
$data = $this->data;
$existedProvinces = array_keys($data);
foreach (Province::all() as $value) {
$provinceId = $value->id;
if (!array_key_exists($provinceId, $existedProvinces)) {
$data[] = (object) [
'province_id' => $provinceId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Country.ConstructionReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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,84 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Country;
use App\Models\EdarateShahri;
use App\Models\Province;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class UtilityPassingReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data){}
public function view(): View
{
$data = $this->data;
$existedProvinces = array_keys($data);
foreach (Province::all() as $value) {
$provinceId = $value->id;
if (!array_key_exists($provinceId, $existedProvinces)) {
$data[] = (object) [
'province_id' => $provinceId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Country.UtilityPassingReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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,83 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Province;
use App\Models\EdarateShahri;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class AccessRoadReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data, public Request $request){}
public function view(): View
{
$data = $this->data;
$existedCities = array_keys($data);
$edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']);
foreach ($edarat as $value) {
$edareId = $value->id;
if (!array_key_exists($edareId, $existedCities)) {
$data[] = (object) [
'edare_shahri_id' => $edareId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Province.AccessRoadReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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,83 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Province;
use App\Models\EdarateShahri;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class ConstructionReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data, public Request $request){}
public function view(): View
{
$data = $this->data;
$existedCities = array_keys($data);
$edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']);
foreach ($edarat as $value) {
$edareId = $value->id;
if (!array_key_exists($edareId, $existedCities)) {
$data[] = (object) [
'edare_shahri_id' => $edareId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Province.ConstructionReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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,83 @@
<?php
namespace App\Exports\V3\SafetyAndPrivacy\Province;
use App\Models\EdarateShahri;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
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\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class UtilityPassingReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
{
public function __construct(private array $data, public Request $request){}
public function view(): View
{
$data = $this->data;
$existedCities = array_keys($data);
$edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']);
foreach ($edarat as $value) {
$edareId = $value->id;
if (!array_key_exists($edareId, $existedCities)) {
$data[] = (object) [
'edare_shahri_id' => $edareId,
'name_fa' => $value->name_fa,
'sum' => 0,
'axis_data' => [
'آزادراه' => ['1' => 0, '2' => 0, '3' => 0],
'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0],
'اصلی' => ['1' => 0, '2' => 0, '3' => 0],
'فرعی' => ['1' => 0, '2' => 0, '3' => 0],
'روستایی' => ['1' => 0, '2' => 0, '3' => 0],
],
];
}
}
return view('v3.Reports.SafetyAndPrivacy.Province.UtilityPassingReport', [
'data' => $data,
]);
}
public function registerEvents(): array
{
return [
AfterSheet::class => function (AfterSheet $event) {
$event->sheet->getDelegate()->setRightToLeft(true);
},
];
}
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

@@ -51,16 +51,6 @@ class OperatorController extends Controller
*/
public function store(StoreRequest $request, NominatimService $nominatimService): JsonResponse
{
$activityDateTime = Carbon::parse($request->activity_date . ' ' . $request->activity_time);
$mission = Mission::findOrFail($request->mission_id);
if ($activityDateTime->lt($mission->start_date) || $activityDateTime->gt($mission->end_date)) {
throw ValidationException::withMessages([
'activity_date_time' => __('زمان گزارش باید بین :start تا :end (بازه مأموریت) باشد.', [
'start' => verta($mission->start_date)->format('Y/m/d H:i'),
'end' => verta($mission->end_date)->format('Y/m/d H:i'),
]),
]);
}
$info_item = InfoItem::query()->where('item', $request->item_id)
->where('sub_item', $request->sub_item_id)

View File

@@ -1,9 +1,9 @@
<?php
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy;
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport;
use App\Exports\V3\SafetyAndPrivacy\CountryActivityReport;
use App\Exports\V3\SafetyAndPrivacy\ProvinceActivityReport;
use App\Exports\V3\SafetyAndPrivacy\Country\AccessRoadReport as ExcelReport;
use App\Exports\V3\SafetyAndPrivacy\Province\AccessRoadReport;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\EdarateShahri;
@@ -44,14 +44,14 @@ class AccessRoadActivityController extends Controller
{
$data = $operatorService->countryActivity($request);
$name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new CountryActivityReport($data), $name);
return Excel::download(new ExcelReport($data), $name);
}
public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
{
$data = $operatorService->provinceActivity($request);
$name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new ProvinceActivityReport($data, $request), $name);
return Excel::download(new AccessRoadReport($data, $request), $name);
}
}

View File

@@ -1,9 +1,9 @@
<?php
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy;
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport;
use App\Exports\V3\SafetyAndPrivacy\CountryActivityReport;
use App\Exports\V3\SafetyAndPrivacy\ProvinceActivityReport;
use App\Exports\V3\SafetyAndPrivacy\Country\ConstructionReport as ExcelReport;
use App\Exports\V3\SafetyAndPrivacy\Province\ConstructionReport;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\EdarateShahri;
@@ -43,14 +43,14 @@ class ConstructionActivityController extends Controller
{
$data = $operatorService->countryActivity($request);
$name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new CountryActivityReport($data), $name);
return Excel::download(new ExcelReport($data), $name);
}
public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
{
$data = $operatorService->provinceActivity($request);
$name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new ProvinceActivityReport($data, $request), $name);
return Excel::download(new ConstructionReport($data, $request), $name);
}

View File

@@ -1,9 +1,9 @@
<?php
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy;
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport;
use App\Exports\V3\SafetyAndPrivacy\CountryActivityReport;
use App\Exports\V3\SafetyAndPrivacy\ProvinceActivityReport;
use App\Exports\V3\SafetyAndPrivacy\Country\UtilityPassingReport as ExcelReport;
use App\Exports\V3\SafetyAndPrivacy\Province\UtilityPassingReport;
use App\Http\Controllers\Controller;
use App\Models\EdarateShahri;
use App\Models\Province;
@@ -41,14 +41,14 @@ class UtilityPassingActivityController extends Controller
{
$data = $operatorService->countryActivity($request);
$name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new CountryActivityReport($data), $name);
return Excel::download(new ExcelReport($data), $name);
}
public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
{
$data = $operatorService->provinceActivity($request);
$name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new ProvinceActivityReport($data, $request), $name);
return Excel::download(new UtilityPassingReport($data, $request), $name);
}
}

View File

@@ -1,53 +0,0 @@
<?php
namespace App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy;
use App\Exports\V3\SafetyAndPrivacy\CountryActivityReport;
use App\Exports\V3\SafetyAndPrivacy\ProvinceActivityReport;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\EdarateShahri;
use App\Models\Province;
use App\Services\Cartables\SafetyAndPrivacy\OperatorService;
use App\Services\Cartables\SafetyAndPrivacyTableService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class OperatorReportController extends Controller
{
use ApiResponse;
public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse
{
$data = $operatorService->countryActivity($request);
return $this->successResponse([
'activities' => $data,
'provinces' => Province::all(['id', 'name_fa'])
]);
}
public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse
{
$data = $operatorService->provinceActivity($request);
return $this->successResponse([
'activities' => $data,
'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']),
]);
}
public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
{
$data = $operatorService->countryActivity($request);
$name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new CountryActivityReport($data), $name);
}
public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
{
$data = $operatorService->provinceActivity($request);
$name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
return Excel::download(new ProvinceActivityReport($data, $request), $name);
}
}

View File

@@ -2,9 +2,13 @@
namespace App\Http\Requests\V3\RoadItem\Operator;
use App\Models\Mission;
use Carbon\Carbon;
use Illuminate\Contracts\Validation\ValidationRule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Illuminate\Validation\Validator;
class StoreRequest extends FormRequest
{
@@ -48,4 +52,18 @@ class StoreRequest extends FormRequest
'activity_time' => 'ساعت فعالیت',
];
}
public function after(): array
{
return [
function (Validator $validator) {
$activityTime = Carbon::parse("{$this->activity_date} {$this->activity_time}");
if ($activityTime->lt($this->mission->start_date) || $activityTime->gt($this->mission->end_date)) {
$validator->errors()->add('activity_time', 'زمان گزارش باید بین بازه مأموریت باشد.');
}
}
];
}
}

View File

@@ -4,9 +4,9 @@ namespace App\Services\Cartables\SafetyAndPrivacy;
use App\Exceptions\ProhibitedAction;
use App\Facades\DataTable\DataTableFacade;
use App\Models\EdarateShahri;
use App\Models\SafetyAndPrivacy;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class OperatorService
{
@@ -33,126 +33,95 @@ class OperatorService
);
}
public function countryActivity(Request $request): array
public function countryActivity(int $info_id): array
{
$activities = [];
$countryQuery = SafetyAndPrivacy::query()->selectRaw('COUNT(*) as qty,axis_type_id, step');
$country = DataTableFacade::run(
$countryQuery,
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedGroupBy: ['axis_type_id', 'step']
);
$countryTotalSum = 0;
$countryData = [
'name_fa' => 'کشوری',
'province_id' => -1,
'sum' => 0,
'1' => ['1' => 0, '2' => 0, '3' => 0,],
'2' => ['1' => 0, '2' => 0, '3' => 0,],
'3' => ['1' => 0, '2' => 0, '3' => 0,],
'4' => ['1' => 0, '2' => 0, '3' => 0,],
'5' => ['1' => 0, '2' => 0, '3' => 0,],
];
foreach ($country['data'] as $key => $value) {
$countryTotalSum += $value->qty;
$countryData[$value->info_id][$value->step] = $value->qty;
$countryData["sum"] = $countryTotalSum;
}
$activities[] = (object) $countryData;
$provinceQuery = SafetyAndPrivacy::query()->selectRaw('province_id, province_fa, COUNT(*) as qty,axis_type_id, step');
$provinces = DataTableFacade::run(
$provinceQuery,
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedGroupBy: ['axis_type_id', 'step', 'province_id', 'province_fa']
);
foreach ($provinces['data'] as $value)
{
$provinceId = $value->province_id;
if (!isset($activities[$provinceId])) {
$activities[$provinceId] = (object) [
'province_id' => $provinceId,
'name_fa' => $value->province_fa,
'sum' => 0,
'1' => ['1' => 0, '2' => 0, '3' => 0,],
'2' => ['1' => 0, '2' => 0, '3' => 0,],
'3' => ['1' => 0, '2' => 0, '3' => 0,],
'4' => ['1' => 0, '2' => 0, '3' => 0,],
'5' => ['1' => 0, '2' => 0, '3' => 0,],
];
}
$activities[$provinceId]->{$value->info_id}[$value->step] = $value->qty;
$activities[$provinceId]->sum += $value->qty;
}
return array_values($activities);
return DB::select("
WITH combinations AS (
SELECT
axis_type_id,
step
FROM (
SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) a
CROSS JOIN (
SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3
) s
),
provinces AS (
SELECT DISTINCT province_fa FROM safety_and_privacy WHERE info_id = ?
),
data AS (
SELECT
p.province_fa,
c.axis_type_id,
c.step,
COUNT(sp.id) AS total
FROM combinations c
CROSS JOIN provinces p
LEFT JOIN safety_and_privacy sp
ON sp.axis_type_id = c.axis_type_id
AND sp.step = c.step
AND sp.province_fa = p.province_fa
AND sp.info_id = ?
GROUP BY p.province_fa, c.axis_type_id, c.step
)
SELECT
province_fa,
axis_type_id,
step,
total,
SUM(total) OVER (PARTITION BY province_fa) AS total_sum
FROM data
ORDER BY province_fa, axis_type_id, step
", [$info_id, $info_id]);
}
public function provinceActivity(Request $request): array
public function provinceActivity(int $info_id, int $province_id): array
{
$activities = [];
$provinceQuery = SafetyAndPrivacy::query()->selectRaw('COUNT(*) as qty,axis_type_id, step');
$province = DataTableFacade::run(
$provinceQuery,
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedGroupBy: ['axis_type_id', 'step']
);
$provinceTotalSum = 0;
$provinceData = [
'name_fa' => 'استانی',
'edare_shahri_id' => -1,
'sum' => 0,
'1' => ['1' => 0, '2' => 0, '3' => 0,],
'2' => ['1' => 0, '2' => 0, '3' => 0,],
'3' => ['1' => 0, '2' => 0, '3' => 0,],
'4' => ['1' => 0, '2' => 0, '3' => 0,],
'5' => ['1' => 0, '2' => 0, '3' => 0,],
];
foreach ($province['data'] as $key => $value) {
$provinceTotalSum += $value->qty;
$provinceData["sum"] = $provinceTotalSum;
$provinceData[$value->info_id][$value->step] = $value->qty;
}
$activities[] = (object) $provinceData;
$citiesQuery = SafetyAndPrivacy::query()->selectRaw('edare_shahri_id, COUNT(*) as qty,axis_type_id, step');
$cities = DataTableFacade::run(
$citiesQuery,
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedGroupBy: ['axis_type_id', 'step', 'edare_shahri_id']
);
foreach ($cities['data'] as $value)
{
$cityId = $value->edare_shahri_id;
if (!isset($activities[$cityId])) {
$activities[$cityId] = (object) [
'edare_shahri_id' => $cityId,
'name_fa' => EdarateShahri::query()->find($cityId)->name_fa,
'sum' => 0,
'1' => ['1' => 0, '2' => 0, '3' => 0,],
'2' => ['1' => 0, '2' => 0, '3' => 0,],
'3' => ['1' => 0, '2' => 0, '3' => 0,],
'4' => ['1' => 0, '2' => 0, '3' => 0,],
'5' => ['1' => 0, '2' => 0, '3' => 0,],
];
}
$activities[$cityId]->{$value->info_id}[$value->step] = $value->qty;
$activities[$cityId]->sum += $value->qty;
}
return array_values($activities);
return DB::select("
WITH combinations AS (
SELECT axis_type_id, step
FROM (
SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5
) a
CROSS JOIN (
SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3
) s
),
edarat AS (
SELECT id AS edare_id, name_fa
FROM edarate_shahri
WHERE province_id = :provinceId
),
data AS (
SELECT
e.edare_id,
c.axis_type_id,
c.step,
COUNT(sp.id) AS total
FROM combinations c
CROSS JOIN edarat e
LEFT JOIN safety_and_privacy sp
ON sp.axis_type_id = c.axis_type_id
AND sp.step = c.step
AND sp.city_id = e.edare_id
AND sp.info_id = :infoId
GROUP BY e.edare_id, c.axis_type_id, c.step
)
SELECT
e.edare_id,
e.name_fa AS edare_name,
d.axis_type_id,
d.step,
d.total,
SUM(d.total) OVER (PARTITION BY e.edare_id) AS total_sum
FROM data d
JOIN edarat e ON e.edare_id = d.edare_id
ORDER BY e.edare_id, d.axis_type_id, d.step
",[
'provinceId' => $province_id,
'infoId' => $info_id,
]);
}
}