email; $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 ]); } }