ispt4.0_laravel/app/Http/Controllers/WorkstationsJobsController.php

734 lines
29 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;
// // $equipmentsTodo= DB::select("
// // WITH equipments_multiple_rows AS (
// // SELECT
// // e.equipment_id,
// // e.equipment_tag,
// // COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
// // FROM
// // users u
// // JOIN
// // construction_workstations cw ON u.user_name = cw.name_workstations
// // JOIN
// // workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// // JOIN
// // equipments e ON wat.company_projects_id = e.company_projects_id
// // JOIN
// // ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
// // WHERE
// // u.email = :email
// // AND
// // oet.execution_order = 1
// // GROUP BY
// // e.equipment_id,
// // e.equipment_tag
// // ),
// // workstations_multiple_rows AS (
// // SELECT
// // cw.id_workstations,
// // cw.name_workstations,
// // COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
// // FROM
// // users u
// // JOIN
// // construction_workstations cw ON u.user_name = cw.name_workstations
// // JOIN
// // workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// // WHERE
// // u.email = :email
// // ),
// // workstations_control_all_tasks AS (
// // SELECT
// // cew.control_equipment_workstation_id,
// // cew.equipment_id,
// // CASE
// // WHEN cew.id_workstations IS NULL THEN NULL
// // WHEN cew.id_workstations IN (
// // SELECT wat.id_workstations
// // FROM workstations_association_tasks wat
// // JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// // JOIN users u ON u.user_name = cw.name_workstations
// // WHERE u.email = :email
// // ) THEN cew.id_workstations
// // ELSE NULL
// // END AS control_id_workstations,
// // COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
// // cew.equipment_comments_id,
// // cew.entry_date,
// // cew.departure_date
// // FROM
// // control_equipment_workstation cew
// // WHERE
// // cew.id_workstations IS NULL
// // OR cew.id_workstations IN (
// // SELECT wat.id_workstations
// // FROM workstations_association_tasks wat
// // JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// // JOIN users u ON u.user_name = cw.name_workstations
// // WHERE u.email = :email
// // )
// // )
// // SELECT
// // emr.equipment_id,
// // emr.equipment_tag
// // FROM
// // equipments_multiple_rows emr
// // WHERE
// // (
// // emr.equipment_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
// // AND NOT EXISTS (
// // SELECT 1
// // FROM workstations_control_all_tasks wc
// // WHERE wc.equipment_id = emr.equipment_id
// // AND wc.control_id_workstations IN (SELECT id_workstations FROM workstations_multiple_rows)
// // )
// // )
// // OR
// // (
// // emr.equipment_id IN (
// // SELECT equipment_id
// // FROM workstations_control_all_tasks
// // WHERE control_id_workstations IS NULL
// // AND entry_date IS NULL
// // AND departure_date IS NULL
// // AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
// // )
// // AND NOT EXISTS (
// // SELECT 1
// // FROM workstations_control_all_tasks wc
// // WHERE wc.equipment_id = emr.equipment_id
// // AND wc.control_id_workstations IS NOT NULL
// // GROUP BY wc.equipment_id
// // HAVING COUNT(DISTINCT wc.control_id_workstations) > 1
// // )
// // )
// // GROUP BY
// // emr.equipment_id,
// // emr.equipment_tag
// // ORDER BY
// // emr.equipment_id ASC;
// // ", ['email' => $userEmail]);
// $equipmentsDone = DB::select("
// WITH equipments_multiple_rows AS (
// SELECT
// e.equipment_id,
// e.equipment_tag,
// COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
// FROM
// users u
// JOIN
// construction_workstations cw ON u.user_name = cw.name_workstations
// JOIN
// workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// JOIN
// equipments e ON wat.company_projects_id = e.company_projects_id
// JOIN
// ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
// WHERE
// u.email = :email
// AND
// oet.execution_order = 1
// GROUP BY
// e.equipment_id,
// e.equipment_tag
// ),
// workstations_multiple_rows AS (
// SELECT
// cw.id_workstations,
// cw.name_workstations,
// COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
// FROM
// users u
// JOIN
// construction_workstations cw ON u.user_name = cw.name_workstations
// JOIN
// workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// WHERE
// u.email = :email
// ),
// workstations_control_all_tasks AS (
// SELECT
// cew.control_equipment_workstation_id,
// cew.equipment_id,
// CASE
// WHEN cew.id_workstations IS NULL THEN NULL
// WHEN cew.id_workstations IN (
// SELECT wat.id_workstations
// FROM workstations_association_tasks wat
// JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// JOIN users u ON u.user_name = cw.name_workstations
// WHERE u.email = :email
// ) THEN cew.id_workstations
// ELSE NULL
// END AS control_id_workstations,
// COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
// cew.equipment_comments_id,
// cew.entry_date,
// cew.departure_date
// FROM
// control_equipment_workstation cew
// WHERE
// cew.id_workstations IS NULL
// OR cew.id_workstations IN (
// SELECT wat.id_workstations
// FROM workstations_association_tasks wat
// JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// JOIN users u ON u.user_name = cw.name_workstations
// WHERE u.email = :email
// )
// )
// SELECT
// emr.equipment_id,
// emr.equipment_tag
// FROM
// equipments_multiple_rows emr
// WHERE
// EXISTS (
// SELECT 1
// FROM workstations_control_all_tasks wc
// JOIN workstations_multiple_rows wmr ON wc.control_id_workstations = wmr.id_workstations
// WHERE wc.equipment_id = emr.equipment_id
// AND wc.control_workstation_all_tasks = wmr.all_tasks
// AND wc.entry_date IS NOT NULL
// AND wc.departure_date IS NOT NULL
// AND wc.control_id_workstations IS NOT NULL
// )
// AND NOT EXISTS (
// SELECT 1
// FROM workstations_control_all_tasks wc
// WHERE wc.equipment_id = emr.equipment_id
// AND wc.control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
// AND wc.control_id_workstations IS NULL
// )
// GROUP BY
// emr.equipment_id,
// emr.equipment_tag
// ORDER BY
// emr.equipment_id ASC;
// ", ['email' => $userEmail]);
// $equipmentsReturned = DB::select("
// WITH equipments_multiple_rows AS (
// SELECT
// e.equipment_id,
// e.equipment_tag,
// COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
// FROM
// users u
// JOIN
// construction_workstations cw ON u.user_name = cw.name_workstations
// JOIN
// workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// JOIN
// equipments e ON wat.company_projects_id = e.company_projects_id
// JOIN
// ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
// WHERE
// u.email = :email
// AND
// oet.execution_order = 1
// GROUP BY
// e.equipment_id,
// e.equipment_tag
// ),
// workstations_multiple_rows AS (
// SELECT
// cw.id_workstations,
// cw.name_workstations,
// COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
// FROM
// users u
// JOIN
// construction_workstations cw ON u.user_name = cw.name_workstations
// JOIN
// workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
// WHERE
// u.email = :email
// ),
// workstations_control_all_tasks AS (
// SELECT
// cew.control_equipment_workstation_id,
// cew.equipment_id,
// CASE
// WHEN cew.id_workstations IS NULL THEN NULL
// WHEN cew.id_workstations IN (
// SELECT wat.id_workstations
// FROM workstations_association_tasks wat
// JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// JOIN users u ON u.user_name = cw.name_workstations
// WHERE u.email = :email
// ) THEN cew.id_workstations
// ELSE NULL
// END AS control_id_workstations,
// COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
// cew.equipment_comments_id,
// cew.entry_date,
// cew.departure_date
// FROM
// control_equipment_workstation cew
// WHERE
// cew.id_workstations IS NULL
// OR cew.id_workstations IN (
// SELECT wat.id_workstations
// FROM workstations_association_tasks wat
// JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
// JOIN users u ON u.user_name = cw.name_workstations
// WHERE u.email = :email
// )
// )
// SELECT
// emr.equipment_id,
// emr.equipment_tag
// FROM
// equipments_multiple_rows emr
// WHERE
// emr.equipment_id IN (
// SELECT equipment_id
// FROM workstations_control_all_tasks
// WHERE control_id_workstations IS NULL
// AND entry_date IS NULL
// AND departure_date IS NULL
// AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
// AND EXISTS (
// SELECT 1
// FROM workstations_control_all_tasks wc
// WHERE wc.equipment_id = emr.equipment_id
// AND wc.control_id_workstations IS NOT NULL
// GROUP BY wc.equipment_id
// HAVING COUNT(DISTINCT wc.control_id_workstations) >= 2
// )
// )
// GROUP BY
// emr.equipment_id,
// emr.equipment_tag
// ORDER BY
// emr.equipment_id ASC;
// ", ['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
// ]);
// }
// }
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;
$equipmentsTodo = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
(
emr.equipment_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IN (SELECT id_workstations FROM workstations_multiple_rows)
)
)
OR
(
emr.equipment_id IN (
SELECT equipment_id
FROM workstations_control_all_tasks
WHERE control_id_workstations IS NULL
AND entry_date IS NULL
AND departure_date IS NULL
AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IS NOT NULL
GROUP BY wc.equipment_id
HAVING COUNT(DISTINCT wc.control_id_workstations) > 1
)
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $userEmail
]);
$equipmentsReturned = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
emr.equipment_id IN (
SELECT equipment_id
FROM workstations_control_all_tasks
WHERE control_id_workstations IS NULL
AND entry_date IS NULL
AND departure_date IS NULL
AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IS NOT NULL
GROUP BY wc.equipment_id
HAVING COUNT(DISTINCT wc.control_id_workstations) >= 2
)
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $userEmail
]);
$equipmentsDone = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
JOIN workstations_multiple_rows wmr ON wc.control_id_workstations = wmr.id_workstations
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_workstation_all_tasks = wmr.all_tasks
AND wc.entry_date IS NOT NULL
AND wc.departure_date IS NOT NULL
AND wc.control_id_workstations IS NOT NULL
)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND wc.control_id_workstations IS NULL
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $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.start', [
'equipmentsTodo' => $equipmentsTodo, 'equipmentsTodoCount' => $equipmentsTodoCount,
'equipmentsDone' => $equipmentsDone, 'equipmentsDoneCount' => $equipmentsDoneCount,
'equipmentsReturned' => $equipmentsReturned, 'equipmentsReturnedCount' => $equipmentsReturnedCount,
'workstationName' => $workstationName
]);
}
}