225 lines
9.3 KiB
PHP
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
|
|
]);
|
|
}
|
|
}
|