ispt4.0_laravel/app/Http/Controllers/WorkstationsJobsController1.php
2023-10-04 16:03:20 +01:00

225 lines
9.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class WorkstationsJobsController extends Controller
{
public function index()
{
$userEmail = Auth::user()->email;
dd($userEmail);
$equipmentsTodo = DB::table('ordered_equipment_tasks AS oet')
->distinct()
->select('oet.equipment_id', 'eq.equipment_tag')
->join('equipments AS eq', 'oet.equipment_id', '=', 'eq.equipment_id')
->join('workstations_association_tasks AS wat', 'oet.elemental_tasks_id', '=', 'wat.elemental_tasks_id')
->whereIn('eq.company_projects_id', function ($query) use ($userEmail) {
$query->select('cw.company_projects_id')
->from('construction_workstations AS cw')
->join('users AS u', 'cw.name_workstations', '=', 'u.user_name')
->where('u.email', $userEmail);
})
->whereIn('wat.id_workstations', function ($query) use ($userEmail) {
$query->select('cw.id_workstations')
->from('construction_workstations AS cw')
->join('users AS u', 'cw.name_workstations', '=', 'u.user_name')
->where('u.email', $userEmail);
})
->where('oet.execution_order', '=', function ($query) {
$query->selectRaw('IFNULL(MIN(ot.execution_order), 1)')
->from('ordered_equipment_tasks AS ot')
->whereColumn('ot.equipment_id', 'oet.equipment_id')
->whereNotIn('ot.elemental_tasks_id', function ($query) {
$query->select('cew.elemental_tasks_id')
->from('control_equipment_workstation AS cew')
->whereColumn('ot.equipment_id', 'cew.equipment_id');
});
})
->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('control_equipment_workstation AS cew')
->whereColumn('oet.equipment_id', 'cew.equipment_id');
})
->get();
$equipmentsDone = DB::select("
WITH username AS (
SELECT
user_name
FROM
users
WHERE
email = :email
),
workstations AS (
SELECT
id_workstations,
company_projects_id
FROM
construction_workstations
WHERE
name_workstations = (SELECT user_name FROM username)
),
watet AS (
SELECT
elemental_tasks_id
FROM
workstations_association_tasks
WHERE
id_workstations = (SELECT id_workstations FROM workstations)
),
jobs AS (
SELECT
ordered_equipment_tasks.equipment_id,
equipments.equipment_tag,
ordered_equipment_tasks.execution_order,
ordered_equipment_tasks.elemental_tasks_id,
workstations.id_workstations
FROM
ordered_equipment_tasks
INNER JOIN
equipments
ON
ordered_equipment_tasks.equipment_id = equipments.equipment_id
INNER JOIN
workstations
ON
equipments.company_projects_id = workstations.company_projects_id
WHERE
ordered_equipment_tasks.elemental_tasks_id IN (SELECT elemental_tasks_id FROM watet)
),
valid_jobs AS (
SELECT
jobs.equipment_id,
jobs.equipment_tag
FROM
jobs
WHERE
NOT EXISTS (
SELECT
1
FROM
jobs AS j2
WHERE
j2.equipment_id = jobs.equipment_id
AND NOT EXISTS (
SELECT
1
FROM
control_equipment_workstation
WHERE
control_equipment_workstation.equipment_id = j2.equipment_id
AND control_equipment_workstation.elemental_tasks_id = j2.elemental_tasks_id
AND control_equipment_workstation.elemental_tasks_id IS NOT NULL
)
)
AND EXISTS (
SELECT
1
FROM
control_equipment_workstation
WHERE
control_equipment_workstation.equipment_id = jobs.equipment_id
AND jobs.id_workstations = control_equipment_workstation.id_workstations
AND control_equipment_workstation.id_workstations IS NOT NULL
AND control_equipment_workstation.entry_date IS NOT NULL
AND control_equipment_workstation.departure_date IS NOT NULL
)
)
SELECT DISTINCT
valid_jobs.equipment_id,
valid_jobs.equipment_tag
FROM
valid_jobs;
", ['email' => $userEmail]);
$equipmentsReturned = DB::select("
SELECT DISTINCT
jobs.equipment_id,
jobs.equipment_tag
FROM (
SELECT
oet.equipment_id,
e.equipment_tag,
oet.execution_order,
oet.elemental_tasks_id,
cw.id_workstations
FROM
ordered_equipment_tasks AS oet
JOIN
equipments AS e ON oet.equipment_id = e.equipment_id
JOIN
(
SELECT
cw.id_workstations,
cw.company_projects_id,
wat.elemental_tasks_id
FROM
construction_workstations AS cw
JOIN
users AS u ON cw.name_workstations = u.user_name
JOIN
(
SELECT
wat.id_workstations,
wat.elemental_tasks_id
FROM
workstations_association_tasks AS wat
) AS wat ON wat.id_workstations = cw.id_workstations
WHERE
u.email = :email
) AS cw ON e.company_projects_id = cw.company_projects_id
WHERE
oet.elemental_tasks_id = cw.elemental_tasks_id
) AS jobs
INNER JOIN (
SELECT cew.*
FROM control_equipment_workstation cew
INNER JOIN (
SELECT equipment_id, elemental_tasks_id
FROM control_equipment_workstation
GROUP BY equipment_id, elemental_tasks_id
HAVING COUNT(*) > 1
) AS subquery
ON cew.equipment_id = subquery.equipment_id
AND cew.elemental_tasks_id = subquery.elemental_tasks_id
WHERE cew.id_workstations IS NULL
AND cew.entry_date IS NULL
) AS repeated ON jobs.equipment_id = repeated.equipment_id
AND jobs.elemental_tasks_id = repeated.elemental_tasks_id
", ['email' => $userEmail]);
$workstationNameQuery = DB::select("
SELECT construction_workstations.nomenclature_workstation
FROM construction_workstations
JOIN users
WHERE construction_workstations.name_workstations = users.user_name
AND users.email = :email;
", ['email' => $userEmail]);
$workstationName = $workstationNameQuery[0]->nomenclature_workstation;
//Counting of equipments
$equipmentsTodoCount = count($equipmentsTodo);
$equipmentsDoneCount = count($equipmentsDone);
$equipmentsReturnedCount = count($equipmentsReturned);
//Returning values of the queries to workstations layout
return view('workstations.index', [
'equipmentsTodo' => $equipmentsTodo, 'equipmentsTodoCount' => $equipmentsTodoCount,
'equipmentsDone' => $equipmentsDone, 'equipmentsDoneCount' => $equipmentsDoneCount,
'equipmentsReturned' => $equipmentsReturned, 'equipmentsReturnedCount' => $equipmentsReturnedCount,
'workstationName' => $workstationName
]);
}
}