İlk temizlik tamamlandı bir önceki projeden

This commit is contained in:
Ümit Tunç
2026-04-28 21:14:25 +03:00
commit f80443aec0
10000 changed files with 959965 additions and 0 deletions
@@ -0,0 +1,176 @@
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class WorkPermitHierarchyController extends Controller
{
/**
* Get Work Permit Hierarchy
*
* Returns a structured hiearchy of work permit projects, companies, and personnel.
*/
public function index(Request $request)
{
try {
// Get all column names from both tables for placeholders
$workPermitColumns = Schema::getColumnListing('work_permit_documents');
$subcontractorColumns = Schema::getColumnListing('subcontractors');
$query = DB::table("work_permit_documents")
->select([
'work_permit_documents.id',
'work_permit_documents.name_surname',
'work_permit_documents.company',
'work_permit_documents.certificates_number',
'work_permit_documents.duty',
'work_permit_documents.document_number',
'work_permit_documents.attorney',
'work_permit_documents.attorney_date',
'work_permit_documents.zone as project',
'work_permit_documents.sign_order as personnel_sign_order',
'subcontractors.company_name_ru',
'subcontractors.company_name_en',
'subcontractors.job_description',
'subcontractors.company_code',
'subcontractors.operation_type',
'subcontractors.city',
'subcontractors.address',
'subcontractors.logo',
'subcontractors.sign_order as company_sign_order'
])
->join("subcontractors", "work_permit_documents.company", "subcontractors.company_name_ru")
->orderBy('subcontractors.operation_type')
->orderBy('work_permit_documents.sign_order');
// Apply project filter if provided
if ($request->has('project') && !empty($request->project)) {
$query->where('work_permit_documents.zone', 'LIKE', '%' . $request->project . '%');
}
$workPermitUsers = $query->get();
$projectMapping = [];
// Parse comma-separated projects and organize
foreach ($workPermitUsers as $user) {
$projectParts = explode(',', $user->project);
foreach ($projectParts as $singleProject) {
$singleProject = trim($singleProject);
if (empty($singleProject)) continue;
if ($request->has('project') && !empty($request->project)) {
if (stripos($singleProject, $request->project) === false) {
continue;
}
}
if (!isset($projectMapping[$singleProject])) {
$projectMapping[$singleProject] = [];
}
// Avoid duplicates in mapping
$found = false;
foreach ($projectMapping[$singleProject] as $existingUser) {
if ($existingUser->name_surname === $user->name_surname &&
$existingUser->operation_type === $user->operation_type &&
$existingUser->personnel_sign_order === $user->personnel_sign_order) {
$found = true;
break;
}
}
if (!$found) {
// Enhance user object with placeholders
$user->placeholders = $this->generatePlaceholders($user, $workPermitColumns, $subcontractorColumns);
$projectMapping[$singleProject][] = $user;
}
}
}
// Group into hiearchy: Project -> Operation Type -> Companies -> Users
$response = [];
foreach ($projectMapping as $projectName => $users) {
$operationGroups = collect($users)->groupBy('operation_type');
$projectData = [
'project_name' => $projectName,
'operation_types' => []
];
foreach ($operationGroups as $operationType => $operationGroup) {
$companies = [];
$byCompany = collect($operationGroup)->groupBy('company_name_ru');
foreach ($byCompany as $companyName => $companyUsers) {
$companies[] = [
'company_name' => $companyName,
'company_sign_order' => $companyUsers->first()->company_sign_order,
'users' => $companyUsers->sortBy('personnel_sign_order')->values()->all()
];
}
$projectData['operation_types'][] = [
'type' => $operationType,
'companies' => $companies
];
}
$response[] = $projectData;
}
// Sort alphabetical by project name
usort($response, function($a, $b) {
return strcmp($a['project_name'], $b['project_name']);
});
return response()->json([
'status' => 'success',
'data' => $response
]);
} catch (\Exception $e) {
return response()->json([
'status' => 'error',
'message' => $e->getMessage()
], 500);
}
}
/**
* Generate placeholders for a user
*/
private function generatePlaceholders($user, $wpColumns, $sbColumns)
{
$job = $user->job_description ?? '';
$fso = $user->company_sign_order ?? '';
$pso = $user->personnel_sign_order ?? '';
$prefix = "{$job}{$fso}_{$pso}_";
$placeholders = [
'work_permit' => [],
'subcontractor' => [],
'common' => [
'name_surname' => "{" . $prefix . "name_surname}",
'company_name' => "{" . $prefix . "company_name}",
'certificate_no' => "{" . $prefix . "certificate_no}",
'duty' => "{" . $prefix . "duty}",
]
];
foreach ($wpColumns as $col) {
$placeholders['work_permit'][$col] = "{" . $prefix . $col . "}";
}
foreach ($sbColumns as $col) {
$placeholders['subcontractor'][$col] = "{" . $prefix . "sub_" . $col . "}";
}
return $placeholders;
}
}