create excel files
This commit is contained in:
77
app/Enums/InfoItem.php
Normal file
77
app/Enums/InfoItem.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum InfoItem: int
|
||||
{
|
||||
case MAREMAT= 1;
|
||||
case PAKSAZI = 2;
|
||||
case ALAEM = 3;
|
||||
case HEFAZ = 4;
|
||||
case ROSHANAEI = 5;
|
||||
case KHATKESHI = 6;
|
||||
case RANGAMIZI = 7;
|
||||
case SHOSTESHOO = 8;
|
||||
case IMENSAZI = 9;
|
||||
case HARIM_1 = 10;
|
||||
case HARIM_2 = 17;
|
||||
case POL= 11;
|
||||
case TOONEL= 12;
|
||||
case ZEMESTANI= 13;
|
||||
case MASHINALAT= 14;
|
||||
case RAHDARKHANE= 15;
|
||||
case EZTERARI= 16;
|
||||
case BAZRESI= 20;
|
||||
|
||||
public static function subItems(int $item): array
|
||||
{
|
||||
$subitems = [
|
||||
1 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
2 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
3 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
4 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
5 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
6 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
7 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
8 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
9 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
10 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
11 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
12 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
13 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
14 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
15 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
16 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
17 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
20 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
|
||||
];
|
||||
|
||||
return $subitems[$item];
|
||||
}
|
||||
|
||||
public static function persianName(int $item): string
|
||||
{
|
||||
$persianName = [
|
||||
1 => '',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => '',
|
||||
5 => '',
|
||||
6 => '',
|
||||
7 => '',
|
||||
8 => '',
|
||||
9 => '',
|
||||
10 => '',
|
||||
11 => '',
|
||||
12 => '',
|
||||
13 => '',
|
||||
14 => '',
|
||||
15 => '',
|
||||
16 => '',
|
||||
17 => '',
|
||||
20 => '',
|
||||
];
|
||||
|
||||
return $persianName[$item];
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ use App\Models\Province;
|
||||
use App\Models\RoadItemsProject;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||
@@ -17,65 +18,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
|
||||
|
||||
class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
|
||||
{
|
||||
public function __construct(private ?string $fromDate, private ?string $toDate){}
|
||||
public function __construct(private Collection $activities){}
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$fromDate = $this->fromDate ?? '2021-03-21';
|
||||
$toDate = $this->toDate ?? Carbon::now();
|
||||
|
||||
$query = "SELECT
|
||||
COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount,
|
||||
SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount,
|
||||
SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount,
|
||||
SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount,
|
||||
SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount,
|
||||
SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount,
|
||||
SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount,
|
||||
SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount,
|
||||
SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount,
|
||||
SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount,
|
||||
SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount,
|
||||
SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount,
|
||||
SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum,
|
||||
|
||||
province_id,
|
||||
province_fa
|
||||
|
||||
FROM road_items_projects
|
||||
WHERE item = 1 and status = 1
|
||||
AND activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59'
|
||||
GROUP BY province_id, province_fa
|
||||
ORDER BY province_id ASC;";
|
||||
|
||||
$countryActivities = DB::select($query);
|
||||
$activities = $this->activities;
|
||||
|
||||
return view('', [
|
||||
'activities' => $countryActivities,
|
||||
'fromDate' => $fromDate,
|
||||
'toDate' => $toDate
|
||||
'activities' => $activities->data,
|
||||
'fromDate' => $activities->fromDate,
|
||||
'toDate' => $activities->toDate
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Models\Province;
|
||||
use App\Models\RoadItemsProject;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Maatwebsite\Excel\Concerns\FromView;
|
||||
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||
@@ -17,63 +18,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
|
||||
|
||||
class ProvinceActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings
|
||||
{
|
||||
public function __construct(private ?string $fromDate, private ?string $toDate, private string $provinceId,){}
|
||||
public function __construct(private Collection $activities){}
|
||||
|
||||
public function view(): View
|
||||
{
|
||||
$fromDate = $this->fromDate ?? '2021-03-21';
|
||||
$toDate = $this->toDate ?? Carbon::now();
|
||||
|
||||
$query = "SELECT
|
||||
COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount,
|
||||
SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount,
|
||||
SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount,
|
||||
SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount,
|
||||
SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount,
|
||||
SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount,
|
||||
SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount,
|
||||
SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount,
|
||||
SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount,
|
||||
SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount,
|
||||
SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount,
|
||||
SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum,
|
||||
|
||||
COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount,
|
||||
SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum,
|
||||
|
||||
province_id, province_fa, city_id, user_name as city_fa
|
||||
|
||||
FROM road_items_projects
|
||||
WHERE item =1 AND status = 1
|
||||
AND province_id = {$this->provinceId}
|
||||
AND activity_date_time BETWEEN '{$fromDate}' AND '{$toDate}' GROUP BY city_id ORDER BY province_id ASC;";
|
||||
|
||||
$provinceActivities = DB::select($query);
|
||||
$activities = $this->activities;
|
||||
|
||||
return view('', [
|
||||
'activities' => $provinceActivities,
|
||||
'fromDate' => $fromDate,
|
||||
'toDate' => $toDate
|
||||
'activities' => $activities->data,
|
||||
'fromDate' => $activities->fromDate,
|
||||
'toDate' => $activities->toDate
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,17 @@
|
||||
|
||||
namespace App\Http\Controllers\V3\Dashboard\Reports;
|
||||
|
||||
use App\Exports\Activities\One\AllSheets as OneSheet;
|
||||
use App\Exports\V3\RoadItemsProjects\CountryActivityPerItemReport;
|
||||
use App\Exports\V3\RoadItemsProjects\CountryActivityPerSubItemReport;
|
||||
use App\Exports\V3\RoadItemsProjects\ProvinceActivityPerItemReport;
|
||||
use App\Exports\V3\RoadItemsProjects\ProvinceActivityPerSubItemReport;
|
||||
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\Services\Reports\RoadItemReportService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
@@ -224,38 +228,48 @@ class RoadItemsReportController extends Controller
|
||||
return $this->successResponse($data);
|
||||
}
|
||||
|
||||
public function activityExcelPerItem(Request $request): BinaryFileResponse
|
||||
public function countryActivityExcelPerItem(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);
|
||||
$name = 'گزارش کشوری از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
|
||||
return Excel::download(new CountryActivityPerItemReport($request->fromDate, $request->toDate), $name);
|
||||
}
|
||||
|
||||
public function activityExcelPerSubItem(Request $request)
|
||||
public function provinceActivityExcelPerItem(Request $request): BinaryFileResponse
|
||||
{
|
||||
$url_correction = $request->province ? "&province={$request->province}" : "";
|
||||
auth()->user()->addActivityComplete(1034);
|
||||
$name = 'گزارش استانی از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx';
|
||||
return Excel::download(new ProvinceActivityPerItemReport($request->fromDate, $request->toDate, $request->province), $name);
|
||||
}
|
||||
|
||||
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),
|
||||
};
|
||||
public function countryActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse
|
||||
{
|
||||
auth()->user()->addActivityComplete(1034);
|
||||
|
||||
$activities = $roadItemReportService->countryActivityPerSubItem(
|
||||
$request->item,
|
||||
$request->fromDate,
|
||||
$request->toDate,
|
||||
);
|
||||
|
||||
$name = "گزارش کشوری از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx';
|
||||
|
||||
return Excel::download(new CountryActivityPerSubItemReport($activities), $name);
|
||||
}
|
||||
|
||||
public function provinceActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse
|
||||
{
|
||||
auth()->user()->addActivityComplete(1034);
|
||||
|
||||
$activities = $roadItemReportService->provinceActivityPerSubItem(
|
||||
$request->item,
|
||||
$request->fromDate,
|
||||
$request->toDate,
|
||||
$request->province_id
|
||||
);
|
||||
|
||||
$name = "گزارش استانی از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx';
|
||||
|
||||
return Excel::download(new ProvinceActivityPerSubItemReport($activities), $name);
|
||||
}
|
||||
}
|
||||
|
||||
70
app/Services/Reports/RoadItemReportService.php
Normal file
70
app/Services/Reports/RoadItemReportService.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Reports;
|
||||
|
||||
use App\Enums\InfoItem;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RoadItemReportService
|
||||
{
|
||||
public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): Collection
|
||||
{
|
||||
$subItems = InfoItem::subItems($item);
|
||||
|
||||
$query = DB::table('road_items_projects')
|
||||
->selectRaw('province_id, province_fa');
|
||||
|
||||
foreach ($subItems as $key => $name) {
|
||||
$query->selectRaw("
|
||||
COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count,
|
||||
SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum
|
||||
");
|
||||
}
|
||||
|
||||
$query->where('item', '=', $item)
|
||||
->where('status', '=', 1)
|
||||
->whereBetween('activity_date_time', [$fromDate, $toDate])
|
||||
->groupBy('province_id', 'province_fa')
|
||||
->orderBy('province_id');
|
||||
|
||||
$activities = $query->get();
|
||||
|
||||
return collect([
|
||||
'data' => $activities,
|
||||
'fromDate' => $fromDate,
|
||||
'toDate' => $toDate,
|
||||
]);
|
||||
}
|
||||
|
||||
public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection
|
||||
{
|
||||
$subItems = InfoItem::subItems($item);
|
||||
|
||||
$query = DB::table('road_items_projects')
|
||||
->selectRaw('province_id, province_fa, user_name as city_fa, city_id');
|
||||
|
||||
foreach ($subItems as $key => $name) {
|
||||
$query->selectRaw("
|
||||
COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count,
|
||||
SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum
|
||||
");
|
||||
}
|
||||
|
||||
$query->where('item', '=', $item)
|
||||
->where('status', '=', 1)
|
||||
->where('province_id', '=', $provinceId)
|
||||
->whereBetween('activity_date_time', [$fromDate, $toDate])
|
||||
->groupBy('city_id')
|
||||
->orderBy('province_id');
|
||||
|
||||
$activities = $query->get();
|
||||
|
||||
return collect([
|
||||
'data' => $activities,
|
||||
'fromDate' => $fromDate,
|
||||
'toDate' => $toDate,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -200,6 +200,10 @@ Route::prefix('road_item_reports')
|
||||
Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem');
|
||||
Route::get('/city_activity_per_item', 'cityActivityPerItem')->name('cityActivityPerItem');
|
||||
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::prefix('road_patrol_reports')
|
||||
|
||||
Reference in New Issue
Block a user