diff --git a/app/Http/Controllers/CharacteristicsController.php b/app/Http/Controllers/CharacteristicsController.php index f0c4161..9f9e606 100644 --- a/app/Http/Controllers/CharacteristicsController.php +++ b/app/Http/Controllers/CharacteristicsController.php @@ -6,13 +6,16 @@ use App\Models\CharacteristicApproverMaster; use App\Models\CharacteristicValue; use App\Models\ClassCharacteristic; use App\Models\Item; +use App\Models\ItemCharacteristic; use App\Models\Line; use App\Models\Machine; use App\Models\Plant; use App\Models\ProductCharacteristicsMaster; +use App\Models\ProductionTemp; use App\Models\RequestCharacteristic; use App\Models\StickerMaster; use App\Models\TempClassCharacteristic; +use App\Models\TempStopCharacteristic; use App\Models\User; use App\Models\WindedSerialValidationError; use App\Models\WorkGroupMaster; @@ -257,6 +260,7 @@ class CharacteristicsController extends Controller } $userName = $request->header('user-name'); + $stopAlert = $request->header('alert'); if (! $userName || $userName == null || $userName == '') { return response()->json([ @@ -267,9 +271,12 @@ class CharacteristicsController extends Controller $userName = 'Admin'; } + $stopAlert = ($stopAlert == '1') ? true : false; + $data = $request->all(); $plantCode = $data['plant_code'] ?? ''; + $charField = $data['characteristic_field'] ?? ''; $workCenter = $data['work_center'] ?? ''; $jobNo = $data['aufnr'] ?? ''; $serialNumber = $data['gernr'] ?? ''; @@ -277,6 +284,7 @@ class CharacteristicsController extends Controller $modelType = $data['model_type'] ?? ''; $expectedTime = $data['expected_time'] ?? 0; $markedStatus = (Str::contains($data['marked_status'], 'marked', ignoreCase: true)) ? 'Marked' : 'Stopped'; + $requestType = ($markedStatus == 'Stopped') ? 'Stop' : ''; $characteristics = $data['characteristics']; if ($plantCode == null || $plantCode == '' || ! $plantCode) { @@ -330,6 +338,10 @@ class CharacteristicsController extends Controller ], 404); } + if ($charField == null || $charField == '' || $charField == 'nil') { + $charField = 'NIL'; + } + if ($expectedTime == null || $expectedTime == '' || $expectedTime == '0' || ! $expectedTime) { return response()->json([ 'status_code' => 'ERROR', @@ -743,6 +755,140 @@ class CharacteristicsController extends Controller $modelTyp = strtolower($modelType); $isAuto = false; + $machineName = null; + if ($stopAlert && $markedStatus == 'Stopped') { + foreach ($data['characteristics'] as $char) { + if ($modelType == 'MOTOR') { // empty($char['motor_machine_name']) + $machineName = $char['motor_machine_name']; + } elseif ($modelType == 'PUMP') { + $machineName = $char['pump_machine_name']; + } elseif ($modelType == 'NAME_PLATE') { + $machineName = $char['name_plate_machine_name']; + } + } + + $pCode = CharacteristicApproverMaster::where('plant_id', $plantId)->first(); + if (! $pCode) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code '{$plantCode}' not found in approver master!", + ], 404); + } + + $wCenter = CharacteristicApproverMaster::where('machine_id', $machineId)->first(); + if (! $wCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found in approver master!", + ], 404); + } + + $wCenterAgaPlant = CharacteristicApproverMaster::where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $wCenterAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $mName = CharacteristicApproverMaster::where('machine_name', $machineName)->first(); + if (! $mName) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' not found in approver master!", + ], 404); + } + + $mNameAgaPlant = CharacteristicApproverMaster::where('machine_name', $machineName)->where('plant_id', $plantId)->first(); + if (! $mNameAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cField = CharacteristicApproverMaster::where('characteristic_field', $charField)->first(); + if (! $cField) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found in approver master!", + ], 404); + } + + // Master characteristic field value 'NIL' not found in approver master! + $cFieldAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('plant_id', $plantId)->first(); + if (! $cFieldAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $mNameAndWorkCenter = CharacteristicApproverMaster::where('machine_name', $machineName)->where('machine_id', $machineId)->first(); + if (! $mNameAndWorkCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' and work center '{$workCenter}' not found in approver master!", + ], 404); + } + + $mNameAndWorkCenterAgaPlant = CharacteristicApproverMaster::where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $mNameAndWorkCenterAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' and work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndWorkCent = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_id', $machineId)->first(); + if (! $cFieldAndWorkCent) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the work center '{$workCenter}' in approver master!", + ], 404); + } + + $cFieldAndWorkCentAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $cFieldAndWorkCentAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' and work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndMach = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->first(); + if (! $cFieldAndMach) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the machine name '{$machineName}' in approver master!", + ], 404); + } + + $cFieldAndMachAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->where('plant_id', $plantId)->first(); + if (! $cFieldAndMachAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' and machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndWorkCentAndMachAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $cFieldAndWorkCentAndMachAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}', work center '{$workCenter}', and machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $appTypExist = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('approver_type', $requestType)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $appTypExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}', work center '{$workCenter}', machine name '{$machineName}', and plant code '{$plantCode}' not found for the approver type 'Stop' in approver master!", + ], 404); + } + } + foreach ($data['characteristics'] as $char) { $curMarkStat = $curStat->mark_status ?? null; $curMotorMarkStat = $curStat->motor_marked_status ?? null; @@ -832,9 +978,9 @@ class CharacteristicsController extends Controller 'motor_machine_name' => $curMMach, 'pump_machine_name' => $curPMach, 'name_plate_machine_name' => $curNpMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -925,9 +1071,9 @@ class CharacteristicsController extends Controller 'name_plate_marked_by' => $curNamePlateMarkBy, 'motor_pump_pumpset_status' => '3', 'name_plate_machine_name' => $curNpMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -986,9 +1132,9 @@ class CharacteristicsController extends Controller 'pump_marked_by' => $curPumpMarkBy, 'motor_pump_pumpset_status' => '3', 'pump_machine_name' => $curPMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -1053,9 +1199,9 @@ class CharacteristicsController extends Controller 'motor_marked_by' => $curMotorMarkBy, 'motor_pump_pumpset_status' => '3', 'motor_machine_name' => $curMMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -1134,9 +1280,9 @@ class CharacteristicsController extends Controller 'motor_machine_name' => $curMMach, 'pump_machine_name' => $curPMach, 'name_plate_machine_name' => $curNpMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -1237,9 +1383,9 @@ class CharacteristicsController extends Controller 'motor_machine_name' => $curMMach, 'pump_machine_name' => $curPMach, 'name_plate_machine_name' => $curNpMach, - 'stopped_datetime' => now(), - 'is_stopped' => '2', - 'stopped_by' => $userName ?? null, + // 'stopped_datetime' => now(), + // 'is_stopped' => '2', + // 'stopped_by' => $userName ?? null, 'updated_by' => $userName ?? null, ]; } else { @@ -2066,7 +2212,7 @@ class CharacteristicsController extends Controller } } - $availFields = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_grwt_cable', 'zmm_grwt_pf', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_newt_cable', 'zmm_newt_pf', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force', 'zmm_codeclass', 'zmm_colour', 'zmm_grade', 'zmm_isivalve', 'zmm_isi_wc', 'zmm_length', 'zmm_license_cml_no', 'zmm_mfgmonyr', 'zmm_motoridentification', 'zmm_packtype', 'zmm_panel', 'zmm_pumpidentification', 'zmm_psettype', 'zmm_size', 'zmm_type', 'zmm_usp', 'marked_datetime', 'marked_by', 'motor_pump_pumpset_status', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'pending_released_status', 'has_work_flow_id']; // 'mark_status','marked_physical_count', 'marked_expected_time', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_datetime', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_datetime', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_datetime', 'name_plate_marked_by', 'winded_serial_number', 'winded_rework_status', 'part_validation_1', 'part_validation_2', 'samlight_logged_name' + $availFields = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_grwt_cable', 'zmm_grwt_pf', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_newt_cable', 'zmm_newt_pf', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force', 'zmm_codeclass', 'zmm_colour', 'zmm_grade', 'zmm_isivalve', 'zmm_isi_wc', 'zmm_length', 'zmm_license_cml_no', 'zmm_mfgmonyr', 'zmm_motoridentification', 'zmm_packtype', 'zmm_panel', 'zmm_pumpidentification', 'zmm_psettype', 'zmm_size', 'zmm_type', 'zmm_usp', 'marked_datetime', 'marked_by', 'motor_pump_pumpset_status', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'pending_released_status', 'has_work_flow_id', 'motor_stop_flow_id', 'pump_stop_flow_id', 'name_plate_stop_flow_id']; // 'mark_status','marked_physical_count', 'marked_expected_time', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_datetime', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_datetime', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_datetime', 'name_plate_marked_by', 'winded_serial_number', 'winded_rework_status', 'part_validation_1', 'part_validation_2', 'samlight_logged_name' if ($itemCode != '' && $itemCode != null && $itemCode && Str::length($itemCode) > 0) { $existingJobNo = ClassCharacteristic::where('aufnr', $jobNo)->first(); // ->where('machine_id', $machineId)->where('plant_id', $plantId) @@ -2134,6 +2280,8 @@ class CharacteristicsController extends Controller $columns = Schema::getColumnListing((new ClassCharacteristic)->getTable()); + $itemColumns = Schema::getColumnListing((new ItemCharacteristic)->getTable()); + $invalidFields = []; foreach ($request->input('characteristics', []) as $char) { @@ -2289,6 +2437,9 @@ class CharacteristicsController extends Controller ], 404); } + $masterItemFields = ['class', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force']; + + $isNewItem = true; $isInsert = false; foreach ($serialNumbers as $serial) { @@ -2308,6 +2459,20 @@ class CharacteristicsController extends Controller } } + if ($isNewItem) { + $insertItemData = [ + 'plant_id' => $plantId, + 'item_id' => $itemId, + 'updated_by' => $userName ?? null, + ]; + + foreach ($masterItemFields as $field) { + if (in_array($field, $itemColumns)) { + $insertItemData[$field] = $char[$field] ?? null; + } + } + } + $insertData['marked_datetime'] = empty($char['marked_datetime']) ? now() : $char['marked_datetime']; $insertData['marked_by'] = ($char['marked_by'] == 'jothi') ? 'Admin' : $char['marked_by'] ?? null; @@ -2329,6 +2494,19 @@ class CharacteristicsController extends Controller $isInsert = true; $insertData['created_by'] = $userName ?? null; ClassCharacteristic::create($insertData); + + if ($isNewItem) { + $existingItem = ItemCharacteristic::where('item_id', $itemId)->where('plant_id', $plantId); + + if ($existingItem) { + $isNewItem = false; + $existingItem->update($insertItemData); + } else { + $isNewItem = false; + $insertItemData['created_by'] = $userName ?? null; + ItemCharacteristic::create($insertItemData); + } + } } } catch (\Exception $e) { return response()->json([ @@ -2401,6 +2579,8 @@ class CharacteristicsController extends Controller $columns = Schema::getColumnListing((new ClassCharacteristic)->getTable()); + $itemColumns = Schema::getColumnListing((new ItemCharacteristic)->getTable()); + $invalidFields = []; foreach ($request->input('characteristics', []) as $char) { @@ -2459,6 +2639,7 @@ class CharacteristicsController extends Controller // 'status_code' => "ERROR", // 'status_description' => "Serial numbers can't be empty!" // ], 404); + foreach ($characteristics as $ch) { $curHead = $ch['zmm_heading'] ?? null; if ($curHead == '' || $curHead == null) { @@ -2642,6 +2823,8 @@ class CharacteristicsController extends Controller $masterFields = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force', 'pending_released_status']; + $masterItemFields = ['class', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force']; + $isInsertOrUpdate = false; foreach ($characteristics as $char) { @@ -2658,12 +2841,33 @@ class CharacteristicsController extends Controller } } + $insertItemData = [ + 'plant_id' => $plantId, + 'item_id' => $itemId, + 'updated_by' => $userName ?? null, + ]; + + foreach ($masterItemFields as $field) { + if (in_array($field, $itemColumns)) { + $insertItemData[$field] = $char[$field] ?? null; + } + } + $existing = ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId); if ($existing) { $isInsertOrUpdate = true; $insertData['updated_by'] = $userName ?? null; $existing->update($insertData); + + $existingItem = ItemCharacteristic::where('item_id', $itemId)->where('plant_id', $plantId); + + if ($existingItem) { + $existingItem->update($insertItemData); + } else { + $insertItemData['created_by'] = $userName ?? null; + ItemCharacteristic::create($insertItemData); + } } else { return response()->json([ 'status_code' => 'ERROR', @@ -2943,80 +3147,152 @@ class CharacteristicsController extends Controller ], 404); } - $job = ClassCharacteristic::where('aufnr', $jobNumber)->first(); - - if (! $job) { - return response()->json([ - 'status_code' => 'SUCCESS', - 'status_description' => "Job number '{$jobNumber}' not found!", - ], 404); - } - - $jobPlant = ClassCharacteristic::where('aufnr', $jobNumber)->where('plant_id', $plantId)->first(); - - if (! $jobPlant) { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => "Job number '{$jobNumber}' not found for the plant code '{$plantCode}'!", - ], 404); - } - - $jobWorkCenter = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); - - if (! $jobWorkCenter) { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => "Job number '{$jobNumber}' not found for the work center '{$workCenter}'!", - ], 404); - } - - $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_datetime', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_datetime', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_datetime', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'winded_rework_status', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id']; + $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_datetime', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_datetime', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_datetime', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'winded_rework_status', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id', 'motor_stop_flow_id', 'pump_stop_flow_id', 'name_plate_stop_flow_id']; $characteristicsColumns = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force']; - $characteristicsData = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->distinct()->get($characteristicsColumns); // ->get(); + $job = ClassCharacteristic::where('aufnr', $jobNumber)->first(); - if ($characteristicsData->isEmpty()) { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => 'No characteristics data found for the provided Plant Code, Work Center, and Job Number!', - ], 404); - } + if (! $job) { + // check in production temp table for job characteristics to send + $prodJob = ProductionTemp::where('aufnr', $jobNumber)->first(); - $serials = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('gernr')->get(array_merge(['gernr', 'item_id'], $columnsToShow)); // ->get(array_merge(['gernr'], $columnsToShow)); - - $itemId = $serials->first()->item_id; - - $itemcode = Item::where('id', $itemId)->value('code') ?? ''; - - $markedSerials = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->get(['gernr', 'mark_status']); - - $allMarked = $markedSerials->every(function ($serial) { - return strtolower($serial->mark_status) == 'marked'; - }); - - if ($allMarked) { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => 'All serial numbers are already marked!', - ], 404); - } - - $serialNumbers = $serials->map(function ($serial) use ($columnsToShow) { - $otherData = []; - foreach ($columnsToShow as $col) { - $otherData[strtoupper($col)] = (string) $serial->$col ?? ''; + if (! $prodJob) { + return response()->json([ + 'status_code' => 'SUCCESS', + 'status_description' => "Job number '{$jobNumber}' not found!", // skip + ], 404); } - $otherData['MARKED_BY'] = ($otherData['MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MARKED_BY'] ?? ''; // marked_by - $otherData['MAN_MARKED_BY'] = ($otherData['MAN_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MAN_MARKED_BY'] ?? ''; // man_marked_by - $otherData['MOTOR_MARKED_BY'] = ($otherData['MOTOR_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MOTOR_MARKED_BY'] ?? ''; // motor_marked_by - $otherData['PUMP_MARKED_BY'] = ($otherData['PUMP_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['PUMP_MARKED_BY'] ?? ''; // pump_marked_by - $otherData['NAME_PLATE_MARKED_BY'] = ($otherData['NAME_PLATE_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['NAME_PLATE_MARKED_BY'] ?? ''; // name_plate_marked_by + $prodJobPlant = ProductionTemp::where('aufnr', $jobNumber)->where('plant_id', $plantId)->first(); - // $otherData['pending_released_status'] = (string)$otherData['pending_released_status'] ?? ''; - return array_merge(['GERNR' => $serial->gernr], $otherData); - }); + if (! $prodJobPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the plant code '{$plantCode}' in Production Temp table!", + ], 404); + } + + $prodJobWorkCenter = ProductionTemp::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + + if (! $prodJobWorkCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the work center '{$workCenter}' in Production Temp table!", + ], 404); + } + + $curHeadVal = strtoupper($prodJobWorkCenter?->zmm_heading ?? ''); + + if (Str::contains($curHeadVal, 'PRESSURE BOOSTER SYSTEM', ignoreCase: true) || Str::contains($curHeadVal, 'PUMP SET', ignoreCase: true) || Str::contains($curHeadVal, 'PUMPSET', ignoreCase: true) || Str::contains($curHeadVal, 'PUMPS', ignoreCase: true)) { + $curHeadVal = '3'; + } else { + $curHeadVal = ''; + } + + // pass here all available job characteristics + + $characteristicsData = ProductionTemp::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->distinct()->get($characteristicsColumns); // ->get(); + + if ($characteristicsData->isEmpty()) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => 'No characteristics data found for the provided Plant Code, Work Center, and Job Number in Production Temp table!', + ], 404); + } + + $serials = ProductionTemp::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('gernr')->get(['gernr', 'pending_released_status']); + + $itemcode = ''; + + $serialNumbers = $serials->map(function ($serial) use ($columnsToShow, $userName, $curHeadVal) { + $otherData = []; + foreach ($columnsToShow as $col) { + $otherData[strtoupper($col)] = ($col == 'pending_released_status') ? (string) $serial->$col ?? '0' : ''; + } + + $otherData['MARKED_DATETIME'] = now()->timezone('Asia/Kolkata')->format('Y-m-d H:i:s'); + $otherData['MARKED_PHYSICAL_COUNT'] = '0'; + $otherData['MARKED_EXPECTED_TIME'] = '0'; + $otherData['MARKED_BY'] = ($userName == 'Admin') ? 'jothi' : $userName ?? ''; + $otherData['MAN_MARKED_STATUS'] = '0'; + $otherData['MOTOR_MARKED_PHYSICAL_COUNT'] = '0'; + $otherData['MOTOR_EXPECTED_TIME'] = '0'; + $otherData['PUMP_MARKED_PHYSICAL_COUNT'] = '0'; + $otherData['PUMP_EXPECTED_TIME'] = '0'; + $otherData['NAME_PLATE_EXPECTED_TIME'] = '0'; + $otherData['MOTOR_PUMP_PUMPSET_STATUS'] = $curHeadVal ?? ''; + $otherData['WINDED_REWORK_STATUS'] = '0'; + $otherData['HAS_WORK_FLOW_ID'] = '0'; + $otherData['MOTOR_STOP_FLOW_ID'] = '5'; + $otherData['PUMP_STOP_FLOW_ID'] = '5'; + $otherData['NAME_PLATE_STOP_FLOW_ID'] = '5'; + + return array_merge(['GERNR' => $serial->gernr], $otherData); + }); + } else { + $jobPlant = ClassCharacteristic::where('aufnr', $jobNumber)->where('plant_id', $plantId)->first(); + + if (! $jobPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the plant code '{$plantCode}'!", + ], 404); + } + + $jobWorkCenter = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + + if (! $jobWorkCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the work center '{$workCenter}'!", + ], 404); + } + + $characteristicsData = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->distinct()->get($characteristicsColumns); // ->get(); + + if ($characteristicsData->isEmpty()) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => 'No characteristics data found for the provided Plant Code, Work Center, and Job Number!', + ], 404); + } + + $serials = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('gernr')->get(array_merge(['gernr', 'item_id'], $columnsToShow)); // ->get(array_merge(['gernr'], $columnsToShow)); + + $itemId = $serials->first()->item_id; + + $itemcode = Item::where('id', $itemId)->value('code') ?? ''; + + $markedSerials = ClassCharacteristic::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->get(['gernr', 'mark_status']); + + $allMarked = $markedSerials->every(function ($serial) { + return strtolower($serial->mark_status) == 'marked'; + }); + + if ($allMarked) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => 'All serial numbers are already marked!', + ], 404); + } + + $serialNumbers = $serials->map(function ($serial) use ($columnsToShow) { + $otherData = []; + foreach ($columnsToShow as $col) { + $otherData[strtoupper($col)] = (string) $serial->$col ?? ''; + } + + $otherData['MARKED_BY'] = ($otherData['MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MARKED_BY'] ?? ''; // marked_by + $otherData['MAN_MARKED_BY'] = ($otherData['MAN_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MAN_MARKED_BY'] ?? ''; // man_marked_by + $otherData['MOTOR_MARKED_BY'] = ($otherData['MOTOR_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['MOTOR_MARKED_BY'] ?? ''; // motor_marked_by + $otherData['PUMP_MARKED_BY'] = ($otherData['PUMP_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['PUMP_MARKED_BY'] ?? ''; // pump_marked_by + $otherData['NAME_PLATE_MARKED_BY'] = ($otherData['NAME_PLATE_MARKED_BY'] == 'Admin') ? 'jothi' : $otherData['NAME_PLATE_MARKED_BY'] ?? ''; // name_plate_marked_by + + // $otherData['pending_released_status'] = (string)$otherData['pending_released_status'] ?? ''; + return array_merge(['GERNR' => $serial->gernr], $otherData); + }); + } $characteristics = $characteristicsData->map(function ($char) use ($characteristicsColumns) { $data = []; @@ -3056,7 +3332,7 @@ class CharacteristicsController extends Controller } elseif (! preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $serialNumber)) { return response()->json([ 'status_code' => 'ERROR', - 'status_description' => "Serial number '{$serialNumber}' should not begin with '0'!", + 'status_description' => "Serial number '{$serialNumber}' should not begin with '0' or letter!", ], 404); } @@ -3241,7 +3517,7 @@ class CharacteristicsController extends Controller $characteristicsData = ClassCharacteristic::where('gernr', $serialNumber)->where('item_id', $itemId)->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); - $remFields = ['id', 'plant_id', 'machine_id', 'item_id', 'gernr', 'zmm_codeclass', 'zmm_colour', 'zmm_grade', 'zmm_grwt_cable', 'zmm_grwt_pf', 'zmm_isivalve', 'zmm_isi_wc', 'zmm_length', 'zmm_license_cml_no', 'zmm_mfgmonyr', 'zmm_motoridentification', 'zmm_newt_cable', 'zmm_newt_pf', 'zmm_packtype', 'zmm_panel', 'zmm_pumpidentification', 'zmm_psettype', 'zmm_size', 'zmm_type', 'zmm_usp', 'created_at', 'updated_at', 'created_by', 'updated_by', 'deleted_at', 'is_stopped', 'stopped_datetime', 'stopped_by']; + $remFields = ['id', 'plant_id', 'machine_id', 'item_id', 'gernr', 'zmm_codeclass', 'zmm_colour', 'zmm_grade', 'zmm_grwt_cable', 'zmm_grwt_pf', 'zmm_isivalve', 'zmm_isi_wc', 'zmm_length', 'zmm_license_cml_no', 'zmm_mfgmonyr', 'zmm_motoridentification', 'zmm_newt_cable', 'zmm_newt_pf', 'zmm_packtype', 'zmm_panel', 'zmm_pumpidentification', 'zmm_psettype', 'zmm_size', 'zmm_type', 'zmm_usp', 'created_at', 'updated_at', 'created_by', 'updated_by', 'deleted_at']; // , 'is_stopped', 'stopped_datetime', 'stopped_by' $filteredData = $characteristicsData->map(function ($char) use ($remFields) { $charArray = $char->toArray(); @@ -3441,10 +3717,38 @@ class CharacteristicsController extends Controller $job = ClassCharacteristic::where('aufnr', $jobNumber)->first(); if (! $job) { + // check in production temp table for pending serial numbers + $prodJob = ProductionTemp::where('aufnr', $jobNumber)->first(); + + if (! $prodJob) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found!", // skip + ], 404); + } + + $prodJobPlant = ProductionTemp::where('aufnr', $jobNumber)->where('plant_id', $plantId)->first(); + + if (! $prodJobPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the plant code '{$plantCode}' in Production Temp table!", + ], 404); + } + + $prodJobWorkCenter = ProductionTemp::where('aufnr', $jobNumber)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + + if (! $prodJobWorkCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNumber}' not found for the work center '{$workCenter}' in Production Temp table!", + ], 404); + } + return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => "Job number '{$jobNumber}' not found!", // skip - ], 404); + 'status_code' => 'SUCCESS', + 'status_description' => 'Has some pending serial numbers to mark!', + ], 200); } $jobPlant = ClassCharacteristic::where('aufnr', $jobNumber)->where('plant_id', $plantId)->first(); @@ -3504,7 +3808,7 @@ class CharacteristicsController extends Controller } } - // $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id']; + // $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id', 'motor_stop_flow_id', 'pump_stop_flow_id', 'name_plate_stop_flow_id']; $characteristicsColumns = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_grwt_motor', 'zmm_grwt_pump', 'zmm_grwt_pset', 'zmm_newt_motor', 'zmm_newt_pump', 'zmm_newt_pset', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_eff_ttl', 'zmm_labelperiod', 'zmm_modelyear', 'zmm_performance_factor', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force']; @@ -3579,7 +3883,7 @@ class CharacteristicsController extends Controller } elseif (! preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $serialNumber)) { return response()->json([ 'status_code' => 'ERROR', - 'status_description' => "Serial number '{$serialNumber}' should not begin with '0'!", + 'status_description' => "Serial number '{$serialNumber}' should not begin with '0' or letter!", ], 404); } @@ -3746,7 +4050,7 @@ class CharacteristicsController extends Controller // ], 404); // } - // $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id']; + // $columnsToShow = ['mark_status', 'marked_datetime', 'marked_physical_count', 'marked_expected_time', 'marked_by', 'man_marked_status', 'man_marked_datetime', 'man_marked_by', 'motor_marked_status', 'motor_marked_physical_count', 'motor_expected_time', 'motor_marked_by', 'pump_marked_status', 'pump_marked_physical_count', 'pump_expected_time', 'pump_marked_by', 'name_plate_marked_status', 'name_plate_expected_time', 'name_plate_marked_by', 'motor_pump_pumpset_status', 'winded_serial_number', 'motor_machine_name', 'pump_machine_name', 'name_plate_machine_name', 'part_validation_1', 'part_validation_2', 'samlight_logged_name', 'pending_released_status', 'has_work_flow_id', 'motor_stop_flow_id', 'pump_stop_flow_id', 'name_plate_stop_flow_id']; // $characteristicsColumns = ['class', 'arbid', 'gamng', 'lmnga', 'zz1_cn_bill_ord', 'zmm_amps', 'zmm_brand', 'zmm_degreeofprotection', 'zmm_delivery', 'zmm_dir_rot', 'zmm_discharge', 'zmm_discharge_max', 'zmm_discharge_min', 'zmm_duty', 'zmm_eff_motor', 'zmm_eff_pump', 'zmm_frequency', 'zmm_head', 'zmm_heading', 'zmm_head_max', 'zmm_head_minimum', 'zmm_idx_eff_mtr', 'zmm_idx_eff_pump', 'zmm_kvacode', 'zmm_maxambtemp', 'zmm_mincoolingflow', 'zmm_motorseries', 'zmm_motor_model', 'zmm_outlet', 'zmm_phase', 'zmm_pressure', 'zmm_pumpflowtype', 'zmm_pumpseries', 'zmm_pump_model', 'zmm_ratedpower', 'zmm_region', 'zmm_servicefactor', 'zmm_servicefactormaximumamps', 'zmm_speed', 'zmm_suction', 'zmm_suctionxdelivery', 'zmm_supplysource', 'zmm_temperature', 'zmm_thrustload', 'zmm_volts', 'zmm_wire', 'zmm_package', 'zmm_pvarrayrating', 'zmm_isi', 'zmm_isimotor', 'zmm_isipump', 'zmm_isipumpset', 'zmm_pumpset_model', 'zmm_stages', 'zmm_headrange', 'zmm_overall_efficiency', 'zmm_connection', 'zmm_min_bore_size', 'zmm_isireference', 'zmm_category', 'zmm_submergence', 'zmm_capacitorstart', 'zmm_capacitorrun', 'zmm_inch', 'zmm_motor_type', 'zmm_dismantle_direction', 'zmm_eff_ovrall', 'zmm_bodymoc', 'zmm_rotormoc', 'zmm_dlwl', 'zmm_inputpower', 'zmm_imp_od', 'zmm_ambtemp', 'zmm_de', 'zmm_dischargerange', 'zmm_efficiency_class', 'zmm_framesize', 'zmm_impellerdiameter', 'zmm_insulationclass', 'zmm_maxflow', 'zmm_minhead', 'zmm_mtrlofconst', 'zmm_nde', 'zmm_powerfactor', 'zmm_tagno', 'zmm_year', 'zmm_laser_name', 'zmm_logo_cp', 'zmm_logo_ce', 'zmm_logo_nsf', 'zmm_logo_eac', 'zmm_beenote', 'zmm_beenumber', 'zmm_beestar', 'zmm_codeclass', 'zmm_colour', 'zmm_grade', 'zmm_grwt_pset', 'zmm_grwt_cable', 'zmm_grwt_motor', 'zmm_grwt_pf', 'zmm_grwt_pump', 'zmm_isivalve', 'zmm_isi_wc', 'zmm_labelperiod', 'zmm_length', 'zmm_license_cml_no', 'zmm_mfgmonyr', 'zmm_modelyear', 'zmm_motoridentification', 'zmm_newt_pset', 'zmm_newt_cable', 'zmm_newt_motor', 'zmm_newt_pf', 'zmm_newt_pump', 'zmm_packtype', 'zmm_panel', 'zmm_performance_factor', 'zmm_pumpidentification', 'zmm_psettype', 'zmm_size', 'zmm_eff_ttl', 'zmm_type', 'zmm_usp', 'zmm_operating_range', 'zmm_intake_air', 'zmm_oxygen_transfer_rate', 'zmm_air_inlet_pipesize', 'zmm_sump_depth', 'zmm_poles', 'zmm_motor_heading', 'zmm_motor_speed', 'zqmm_qty', 'zmm_operating_temperature', 'zmm_axial_force']; @@ -3794,6 +4098,9 @@ class CharacteristicsController extends Controller 'PENDING_RELEASED_STATUS' => (string) $serialExists->pending_released_status ?? '0', 'SAMLIGHT_LOGGED_NAME' => $serialExists->samlight_logged_name ?? '', 'HAS_WORK_FLOW_ID' => $serialExists->has_work_flow_id ?? '0', + 'MOTOR_STOP_FLOW_ID' => $serialExists->motor_stop_flow_id ?? '5', + 'PUMP_STOP_FLOW_ID' => $serialExists->pump_stop_flow_id ?? '5', + 'NAME_PLATE_STOP_FLOW_ID' => $serialExists->name_plate_stop_flow_id ?? '5', ], 200); } } @@ -5362,6 +5669,7 @@ class CharacteristicsController extends Controller $workCenter = $request->header('work-center'); $machineName = $request->header('machine-name'); $jobNo = $request->header('aufnr'); + $serialNo = $request->header('gernr'); $itemCode = $request->header('item-code'); $workFlowId = $request->header('work-flow-id'); $workFlowId = strtoupper($workFlowId); @@ -5369,7 +5677,7 @@ class CharacteristicsController extends Controller $modelHeading = $request->header('model-heading'); $requestType = $request->header('request-type'); - Log::info("Request {$requestType} POST API >>", ['user-name' => $userName, 'characteristic-field' => $charField, 'plant-code' => $plantCode, 'work-center' => $workCenter, 'machine-name' => $machineName, 'aufnr' => $jobNo, 'item-code' => $itemCode, 'work-flow-id' => $workFlowId]); + Log::info("Request {$requestType} POST API >>", ['user-name' => $userName, 'characteristic-field' => $charField, 'plant-code' => $plantCode, 'work-center' => $workCenter, 'machine-name' => $machineName, 'aufnr' => $jobNo, 'gernr' => $serialNo, 'item-code' => $itemCode, 'work-flow-id' => $workFlowId]); if (! $userName || $userName == null || $userName == '') { return response()->json([ @@ -5380,7 +5688,17 @@ class CharacteristicsController extends Controller $userName = 'Admin'; } - if (! $plantCode || $plantCode == null || $plantCode == '') { + if (! $requestType || $requestType == null || $requestType == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Request type can't be empty!", + ], 404); + } elseif ($requestType != 'Characteristic' && $requestType != 'Quality' && $requestType != 'Stop') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Unknown request type '{$requestType}' found!", + ], 404); + } elseif (! $plantCode || $plantCode == null || $plantCode == '') { return response()->json([ 'status_code' => 'ERROR', 'status_description' => "Plant code can't be empty!", @@ -5400,6 +5718,11 @@ class CharacteristicsController extends Controller 'status_code' => 'ERROR', 'status_description' => "Job number can't be empty!", ], 404); + } elseif ($requestType == 'Stop' && (! $serialNo || $serialNo == null || $serialNo == '')) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number can't be empty!", + ], 404); } elseif (! $machineName || $machineName == null || $machineName == '') { return response()->json([ 'status_code' => 'ERROR', @@ -5415,11 +5738,6 @@ class CharacteristicsController extends Controller 'status_code' => 'ERROR', 'status_description' => "Model heading can't be empty!", ], 404); - } elseif (! $requestType || $requestType == null || $requestType == '') { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => "Request type can't be empty!", - ], 404); } if ($charField == null || $charField == '' || $charField == 'nil') { @@ -5484,11 +5802,23 @@ class CharacteristicsController extends Controller ], 404); } - if ($requestType != 'Characteristic' && $requestType != 'Quality') { - return response()->json([ - 'status_code' => 'ERROR', - 'status_description' => "Unknown request type '{$requestType}' found!", - ], 404); + if ($requestType == 'Stop') { + if (Str::length($serialNo) < 9) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' should contain minimum 9 digits!", + ], 404); + } elseif (! ctype_alnum($serialNo)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' should contain only alpha-numeric values!", + ], 404); + } elseif (! preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $serialNo)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' should not begin with '0' or letter!", + ], 404); + } } if ($modelType != 'MOTOR' && $modelType != 'PUMP' && $modelType != 'NAME_PLATE') { @@ -5736,6 +6066,48 @@ class CharacteristicsController extends Controller ], 404); } + if ($requestType == 'Stop') { + $serial = RequestCharacteristic::where('gernr', $serialNo)->first(); + if (! $serial) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' not found in request approval table!", + ], 404); + } + + $serAgaJob = RequestCharacteristic::where('gernr', $serialNo)->where('plant_id', $plantId)->first(); + if (! $serAgaJob) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' not found for the plant code '{$plantCode}' in request approval table!", + ], 404); + } + + $serAgaPlant = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('plant_id', $plantId)->first(); + if (! $serAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' not found with the job number '{$jobNo}' in request approval table!", + ], 404); + } + + $serAgaPlantItem = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('plant_id', $plantId)->first(); + if (! $serAgaPlantItem) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Serial number '{$serialNo}' not found with the item code '{$itemCode}' in request approval table!", + ], 404); + } + + $serAgaPlantMachine = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $serAgaPlantMachine) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '$jobNo' not found for the work center '$workCenter' in request approval table!", + ], 404); + } + } + if ($requestType == 'Characteristic') { $appTypExist = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('approver_type', $requestType)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); if (! $appTypExist) { @@ -5766,6 +6138,8 @@ class CharacteristicsController extends Controller ], 404); } + $existApprTyp = $charWfIdExist->characteristicApproverMaster->approver_type ?? null; + $charWfIdExist = RequestCharacteristic::where('work_flow_id', $workFlowId) ->whereHas('approver', function ($query) use ($requestType) { $query->where('approver_type', $requestType); @@ -5774,11 +6148,11 @@ class CharacteristicsController extends Controller if (! $charWfIdExist) { return response()->json([ 'status_code' => 'ERROR', - 'status_description' => "Quality approval Work Flow ID : '{$workFlowId}' found!", + 'status_description' => "{$existApprTyp} approval Work Flow ID : '{$workFlowId}' found!", ], 404); } } - } else { + } elseif ($requestType == 'Quality') { $appTypExist = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('approver_type', $requestType)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); if (! $appTypExist) { return response()->json([ @@ -5808,6 +6182,8 @@ class CharacteristicsController extends Controller ], 404); } + $existApprTyp = $qualWfIdExist->characteristicApproverMaster->approver_type ?? null; + $qualWfIdExist = RequestCharacteristic::where('work_flow_id', $workFlowId) ->whereHas('approver', function ($query) use ($requestType) { $query->where('approver_type', $requestType); @@ -5816,7 +6192,51 @@ class CharacteristicsController extends Controller if (! $qualWfIdExist) { return response()->json([ 'status_code' => 'ERROR', - 'status_description' => "Characteristic approval Work Flow ID : '{$workFlowId}' found!", + 'status_description' => "{$existApprTyp} approval Work Flow ID : '{$workFlowId}' found!", + ], 404); + } + } + } else { + $appTypExist = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('approver_type', $requestType)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $appTypExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}', work center '{$workCenter}', machine name '{$machineName}', and plant code '{$plantCode}' not found for the approver type 'Stop' in approver master!", + ], 404); + } + + $reqCharExist = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) use ($requestType) { + $query->where('approver_type', $requestType); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + + if (! $reqCharExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Request stop approvals not found for the Job number '{$jobNo}', item code '{$itemCode}', work center '{$workCenter}', model type '{$modelType}' and plant code '{$plantCode}'!", + ], 404); + } + + if ($workFlowId && $workFlowId != 'FINAL') { + $qualWfIdExist = RequestCharacteristic::where('work_flow_id', $workFlowId)->first(); + if (! $qualWfIdExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Stop approval 'Work Flow ID' not found in database!", + ], 404); + } + + $existApprTyp = $qualWfIdExist->characteristicApproverMaster->approver_type ?? null; + + $qualWfIdExist = RequestCharacteristic::where('work_flow_id', $workFlowId) + ->whereHas('approver', function ($query) use ($requestType) { + $query->where('approver_type', $requestType); + }) + ->first(); + if (! $qualWfIdExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "{$existApprTyp} approval Work Flow ID : '{$workFlowId}' found!", ], 404); } } @@ -5824,62 +6244,124 @@ class CharacteristicsController extends Controller $classRow = ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); + if ($requestType == 'Stop') { + $classRow = ClassCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); + } + if ($classRow) { - $requestChars = RequestCharacteristic::where('aufnr', $jobNo) - ->whereHas('approver', function ($query) { - $query->where('approver_type', 'Characteristic'); - })->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); + if ($requestType == 'Stop') { + $requestStop = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Stop'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); - $requestQual = RequestCharacteristic::where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) - ->whereHas('approver', function ($query) { - $query->where('approver_type', 'Quality'); - })->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('id')->get(); + if ($requestStop) { + $stopFlowStatus = ($requestStop->approver_status1 == 'Approved' || $requestStop->approver_status2 == 'Approved' || $requestStop->approver_status3 == 'Approved') ? '0' : '1'; - foreach ($requestQual as $row) { - $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved') ? '0' : '1'; + $classModelType = strtolower($modelType).'_stop_flow_id'; - TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) - ->update([ - 'has_work_flow_id' => $workFlowStatus, - 'updated_by' => $userName, - ]); - } - - $tempClassChars = TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); - - if (! $requestChars->isEmpty()) { - $hasCharPending = false; - $hasQualPending = false; - $allCharApproved = true; - $allQualApproved = true; - - foreach ($requestChars as $row) { - $isApproved = ($row->approver_status1 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Approved' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Approved' || $row->approver_status3 == 'Rejected'); - - if (! $isApproved) { - $allCharApproved = false; - $hasCharPending = true; - break; - } - } - - if ($hasCharPending) { - $newValue = '3'; - TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->forceDelete(); - - foreach ($typesToCreate as $type) { - TempClassCharacteristic::create([ - 'plant_id' => $plantId, - 'machine_id' => $machineId, - 'item_id' => $itemId, - 'aufnr' => $jobNo, - 'model_type' => $type, - 'has_work_flow_id' => '2', - 'created_by' => $userName, + TempStopCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_stop_flow_id' => $stopFlowStatus, 'updated_by' => $userName, ]); + + $classStopFlowStatus = ($stopFlowStatus == '0') ? '1' : '2'; + + ClassCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + $classModelType => $classStopFlowStatus, + 'updated_at' => now(), + 'updated_by' => $userName, + ]); + } + } else { + $requestChars = RequestCharacteristic::where('aufnr', $jobNo) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Characteristic'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); + + $requestQual = RequestCharacteristic::where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Quality'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); + + if ($requestQual) { + $workFlowStatus = ($requestQual->approver_status1 == 'Approved' || $requestQual->approver_status2 == 'Approved' || $requestQual->approver_status3 == 'Approved') ? '0' : '1'; + + TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_work_flow_id' => $workFlowStatus, + 'updated_by' => $userName, + ]); + } + + $tempClassChars = TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); + + if (! $requestChars->isEmpty()) { + $hasCharPending = false; + $hasQualPending = false; + $allCharApproved = true; + $allQualApproved = true; + + foreach ($requestChars as $row) { + $isApproved = ($row->approver_status1 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Approved' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Approved' || $row->approver_status3 == 'Rejected'); + + if (! $isApproved) { + $allCharApproved = false; + $hasCharPending = true; + break; + } } + + if ($hasCharPending) { + $newValue = '3'; + TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->forceDelete(); + + foreach ($typesToCreate as $type) { + TempClassCharacteristic::create([ + 'plant_id' => $plantId, + 'machine_id' => $machineId, + 'item_id' => $itemId, + 'aufnr' => $jobNo, + 'model_type' => $type, + 'has_work_flow_id' => '2', + 'created_by' => $userName, + 'updated_by' => $userName, + ]); + } + } elseif (! $tempClassChars->isEmpty()) { + foreach ($tempClassChars as $temp) { + if ($temp->has_work_flow_id == '1' || $temp->has_work_flow_id == '2') { + $hasQualPending = true; + $allQualApproved = false; + break; + } + + if ($temp->has_work_flow_id == '0') { + $allQualApproved = true; + } + } + + if ($hasQualPending) { + $newValue = '2'; + } elseif ($allQualApproved) { + $newValue = '0'; + } + } elseif ($allCharApproved) { + $newValue = '0'; + } + + ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_work_flow_id' => $newValue, + 'updated_at' => now(), + 'updated_by' => $userName, + ]); } elseif (! $tempClassChars->isEmpty()) { + $hasQualPending = false; + $allQualApproved = true; + foreach ($tempClassChars as $temp) { if ($temp->has_work_flow_id == '1' || $temp->has_work_flow_id == '2') { $hasQualPending = true; @@ -5897,105 +6379,92 @@ class CharacteristicsController extends Controller } elseif ($allQualApproved) { $newValue = '0'; } - } elseif ($allCharApproved) { - $newValue = '0'; - } - ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) - ->update([ - 'has_work_flow_id' => $newValue, - 'updated_at' => now(), - 'updated_by' => $userName, - ]); - } elseif (! $tempClassChars->isEmpty()) { - $hasQualPending = false; - $allQualApproved = true; - - foreach ($tempClassChars as $temp) { - if ($temp->has_work_flow_id == '1' || $temp->has_work_flow_id == '2') { - $hasQualPending = true; - $allQualApproved = false; - break; - } - - if ($temp->has_work_flow_id == '0') { - $allQualApproved = true; - } - } - - if ($hasQualPending) { - $newValue = '2'; - } elseif ($allQualApproved) { - $newValue = '0'; - } - - ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) - ->update([ - 'has_work_flow_id' => $newValue, - 'updated_at' => now(), - 'updated_by' => $userName, - ]); - } else { - ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) - ->update([ - 'has_work_flow_id' => '0', - 'updated_at' => now(), - 'updated_by' => $userName, - ]); - } - } else { - $requestChars = RequestCharacteristic::where('aufnr', $jobNo) - ->whereHas('approver', function ($query) { - $query->where('approver_type', 'Characteristic'); - })->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); - - $requestQual = RequestCharacteristic::where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) - ->whereHas('approver', function ($query) { - $query->where('approver_type', 'Quality'); - })->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('id')->get(); - - foreach ($requestQual as $row) { - $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved') ? '0' : '1'; - - TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) - ->update([ - 'has_work_flow_id' => $workFlowStatus, - 'updated_by' => $userName, - ]); - } - - if (! $requestChars->isEmpty()) { - $hasCharPending = false; - - foreach ($requestChars as $row) { - $isApproved = ($row->approver_status1 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Approved' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Approved' || $row->approver_status3 == 'Rejected'); - - if (! $isApproved) { - $hasCharPending = true; - break; - } - } - - if ($hasCharPending) { - TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->forceDelete(); - - foreach ($typesToCreate as $type) { - TempClassCharacteristic::create([ - 'plant_id' => $plantId, - 'machine_id' => $machineId, - 'item_id' => $itemId, - 'aufnr' => $jobNo, - 'model_type' => $type, - 'has_work_flow_id' => '2', - 'created_by' => $userName, + ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_work_flow_id' => $newValue, + 'updated_at' => now(), 'updated_by' => $userName, ]); + } else { + ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_work_flow_id' => '0', + 'updated_at' => now(), + 'updated_by' => $userName, + ]); + } + } + } else { + if ($requestType == 'Stop') { + $requestStop = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Stop'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); + + if ($requestStop) { + $stopFlowStatus = ($requestStop->approver_status1 == 'Approved' || $requestStop->approver_status2 == 'Approved' || $requestStop->approver_status3 == 'Approved') ? '0' : '1'; + + TempStopCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_stop_flow_id' => $stopFlowStatus, + 'updated_by' => $userName, + ]); + } + } else { + $requestChars = RequestCharacteristic::where('aufnr', $jobNo) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Characteristic'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->get(); + + $requestQual = RequestCharacteristic::where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) { + $query->where('approver_type', 'Quality'); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->latest()->first(); + + if ($requestQual) { + $workFlowStatus = ($requestQual->approver_status1 == 'Approved' || $requestQual->approver_status2 == 'Approved' || $requestQual->approver_status3 == 'Approved') ? '0' : '1'; + + TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) + ->update([ + 'has_work_flow_id' => $workFlowStatus, + 'updated_by' => $userName, + ]); + } + + if (! $requestChars->isEmpty()) { + $hasCharPending = false; + + foreach ($requestChars as $row) { + $isApproved = ($row->approver_status1 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Approved' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Approved' || $row->approver_status3 == 'Rejected'); + + if (! $isApproved) { + $hasCharPending = true; + break; + } + } + + if ($hasCharPending) { + TempClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->forceDelete(); + + foreach ($typesToCreate as $type) { + TempClassCharacteristic::create([ + 'plant_id' => $plantId, + 'machine_id' => $machineId, + 'item_id' => $itemId, + 'aufnr' => $jobNo, + 'model_type' => $type, + 'has_work_flow_id' => '2', + 'created_by' => $userName, + 'updated_by' => $userName, + ]); + } } } } } - if (! $workFlowId) { + if (! $workFlowId || $workFlowId == 'FINAL') { $records = null; if ($requestType == 'Characteristic') { @@ -6003,87 +6472,152 @@ class CharacteristicsController extends Controller ->whereHas('approver', function ($query) use ($requestType) { $query->where('approver_type', $requestType); })->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('id')->get(); - } else { + } elseif ($requestType == 'Quality') { $records = RequestCharacteristic::where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) ->whereHas('approver', function ($query) use ($requestType) { $query->where('approver_type', $requestType); })->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('id')->get(); + } elseif ($requestType == 'Stop') { + if ($workFlowId == 'FINAL') { + $records = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) use ($requestType) { + $query->where('approver_type', $requestType); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->latest() + ->first(); + } else { + $records = RequestCharacteristic::where('gernr', $serialNo)->where('aufnr', $jobNo)->where('item_id', $itemId)->where('model_type', $modelType) + ->whereHas('approver', function ($query) use ($requestType) { + $query->where('approver_type', $requestType); + })->where('machine_id', $machineId)->where('plant_id', $plantId)->orderBy('id')->get(); + } } $response = []; - foreach ($records as $row) { - if ($requestType == 'Characteristic') { - $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Rejected') ? '0' : '1'; + if ($workFlowId == 'FINAL') { + $workFlowStatus = ($records->approver_status1 == 'Approved' || $records->approver_status2 == 'Approved' || $records->approver_status3 == 'Approved') ? '0' : '1'; - // if ($row->approver?->approver_type != 'Characteristic' || ! $row->characteristic_name) { - // continue; - // } + $response[] = [ + 'work_flow_id' => (string) $records->work_flow_id, + 'work_flow_status' => $workFlowStatus, + 'model_type' => strtoupper($records->model_type) ?? '', + // 'approver_name_1' => $records->approver_name1 ?? '', + 'approver_name_1' => $records->approver?->name1 ?? '', + 'approver_status_1' => $records->approver_status1 ?? '', + 'approver_remark_1' => $records->approver_remark1 ?? '', + 'approved_at_1' => $records->approved1_at ?? '', // ? $records->approved1_at->format('d-m-Y H:i:s') : '', + 'approver_name_2' => $records->approver?->name2 ?? '', + 'approver_status_2' => $records->approver_status2 ?? '', + 'approver_remark_2' => $records->approver_remark2 ?? '', + 'approved_at_2' => $records->approved2_at ?? '', + 'approver_name_3' => $records->approver?->name3 ?? '', + 'approver_status_3' => $records->approver_status3 ?? '', + 'approver_remark_3' => $records->approver_remark3 ?? '', + 'approved_at_3' => $records->approved3_at ?? '', + 'mail_status' => ($records->mail_status == 'Sent') ? 'Sent-M1' : (($records->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($records->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), + 'triggered_at' => $records->trigger_at ?? '', + 'requested_by' => ($records->created_by == 'Admin') ? 'jothi' : $records->created_by ?? '', + 'requested_at' => $records->created_at ? $records->created_at->format('Y-m-d H:i:s') : '', + ]; + } else { + foreach ($records as $row) { + if ($requestType == 'Characteristic') { + $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved' || $row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Rejected') ? '0' : '1'; - $response[] = [ - 'work_flow_id' => (string) $row->work_flow_id, - 'work_flow_status' => $workFlowStatus, - 'model_type' => strtoupper($row->model_type) ?? '', - 'characteristic_name' => strtoupper($row->characteristic_name) ?? '', - 'current_value' => $row->current_value ?? '', - 'update_value' => $row->update_value ?? '', - // 'approver_name_1' => $row->approver_name1 ?? '', - 'approver_name_1' => $row->approver?->name1 ?? '', - 'approver_status_1' => $row->approver_status1 ?? '', - 'approver_remark_1' => $row->approver_remark1 ?? '', - 'approved_at_1' => $row->approved1_at ?? '', // ? $row->approved1_at->format('d-m-Y H:i:s') : '', - 'approver_name_2' => $row->approver?->name2 ?? '', - 'approver_status_2' => $row->approver_status2 ?? '', - 'approver_remark_2' => $row->approver_remark2 ?? '', - 'approved_at_2' => $row->approved2_at ?? '', // ? $row->approved2_at->format('d-m-Y H:i:s') : '', - 'approver_name_3' => $row->approver?->name3 ?? '', - 'approver_status_3' => $row->approver_status3 ?? '', - 'approver_remark_3' => $row->approver_remark3 ?? '', - 'approved_at_3' => $row->approved3_at ?? '', // ? $row->approved3_at->format('d-m-Y H:i:s') : '', - 'mail_status' => ($row->mail_status == 'Sent') ? 'Sent-M1' : (($row->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($row->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), - 'triggered_at' => $row->trigger_at ?? '', - 'requested_by' => ($row->created_by == 'Admin') ? 'jothi' : $row->created_by ?? '', - 'requested_at' => $row->created_at ? $row->created_at->format('Y-m-d H:i:s') : '', - ]; - } else { - $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved') ? '0' : '1'; + // if ($row->approver?->approver_type != 'Characteristic' || ! $row->characteristic_name) { + // continue; + // } - // / TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) - // / ->update([ - // / 'has_work_flow_id' => $workFlowStatus, - // / 'updated_by' => $userName, - // / ]); + $response[] = [ + 'work_flow_id' => (string) $row->work_flow_id, + 'work_flow_status' => $workFlowStatus, + 'model_type' => strtoupper($row->model_type) ?? '', + 'characteristic_name' => strtoupper($row->characteristic_name) ?? '', + 'current_value' => $row->current_value ?? '', + 'update_value' => $row->update_value ?? '', + // 'approver_name_1' => $row->approver_name1 ?? '', + 'approver_name_1' => $row->approver?->name1 ?? '', + 'approver_status_1' => $row->approver_status1 ?? '', + 'approver_remark_1' => $row->approver_remark1 ?? '', + 'approved_at_1' => $row->approved1_at ?? '', // ? $row->approved1_at->format('d-m-Y H:i:s') : '', + 'approver_name_2' => $row->approver?->name2 ?? '', + 'approver_status_2' => $row->approver_status2 ?? '', + 'approver_remark_2' => $row->approver_remark2 ?? '', + 'approved_at_2' => $row->approved2_at ?? '', // ? $row->approved2_at->format('d-m-Y H:i:s') : '', + 'approver_name_3' => $row->approver?->name3 ?? '', + 'approver_status_3' => $row->approver_status3 ?? '', + 'approver_remark_3' => $row->approver_remark3 ?? '', + 'approved_at_3' => $row->approved3_at ?? '', // ? $row->approved3_at->format('d-m-Y H:i:s') : '', + 'mail_status' => ($row->mail_status == 'Sent') ? 'Sent-M1' : (($row->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($row->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), + 'triggered_at' => $row->trigger_at ?? '', + 'requested_by' => ($row->created_by == 'Admin') ? 'jothi' : $row->created_by ?? '', + 'requested_at' => $row->created_at ? $row->created_at->format('Y-m-d H:i:s') : '', + ]; + } elseif ($requestType == 'Quality') { + $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved') ? '0' : '1'; - if ($workFlowStatus == '1') { - $workFlowStatus = ($row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Rejected') ? '2' : '1'; + // / TempClassCharacteristic::where('aufnr', $jobNo)->where('model_type', $modelType)->where('machine_id', $machineId)->where('plant_id', $plantId) + // / ->update([ + // / 'has_work_flow_id' => $workFlowStatus, + // / 'updated_by' => $userName, + // / ]); + + if ($workFlowStatus == '1') { + $workFlowStatus = ($row->approver_status1 == 'Rejected' || $row->approver_status2 == 'Rejected' || $row->approver_status3 == 'Rejected') ? '2' : '1'; + } + + // if ($row->approver?->approver_type != 'Quality' || $row->characteristic_name) { + // continue; + // } + + $response[] = [ + 'work_flow_id' => (string) $row->work_flow_id, + 'work_flow_status' => $workFlowStatus, + 'model_type' => strtoupper($row->model_type) ?? '', + // 'approver_name_1' => $row->approver_name1 ?? '', + 'approver_name_1' => $row->approver?->name1 ?? '', + 'approver_status_1' => $row->approver_status1 ?? '', + 'approver_remark_1' => $row->approver_remark1 ?? '', + 'approved_at_1' => $row->approved1_at ?? '', // ? $row->approved1_at->format('d-m-Y H:i:s') : '', + 'approver_name_2' => $row->approver?->name2 ?? '', + 'approver_status_2' => $row->approver_status2 ?? '', + 'approver_remark_2' => $row->approver_remark2 ?? '', + 'approved_at_2' => $row->approved2_at ?? '', // ? $row->approved2_at->format('d-m-Y H:i:s') : '', + 'approver_name_3' => $row->approver?->name3 ?? '', + 'approver_status_3' => $row->approver_status3 ?? '', + 'approver_remark_3' => $row->approver_remark3 ?? '', + 'approved_at_3' => $row->approved3_at ?? '', // ? $row->approved3_at->format('d-m-Y H:i:s') : '', + 'mail_status' => ($row->mail_status == 'Sent') ? 'Sent-M1' : (($row->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($row->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), + 'triggered_at' => $row->trigger_at ?? '', + 'requested_by' => ($row->created_by == 'Admin') ? 'jothi' : $row->created_by ?? '', + 'requested_at' => $row->created_at ? $row->created_at->format('Y-m-d H:i:s') : '', + ]; + } else { + $workFlowStatus = ($row->approver_status1 == 'Approved' || $row->approver_status2 == 'Approved' || $row->approver_status3 == 'Approved') ? '0' : '1'; + + $response[] = [ + 'work_flow_id' => (string) $row->work_flow_id, + 'work_flow_status' => $workFlowStatus, + 'model_type' => strtoupper($row->model_type) ?? '', + // 'approver_name_1' => $row->approver_name1 ?? '', + 'approver_name_1' => $row->approver?->name1 ?? '', + 'approver_status_1' => $row->approver_status1 ?? '', + 'approver_remark_1' => $row->approver_remark1 ?? '', + 'approved_at_1' => $row->approved1_at ?? '', // ? $row->approved1_at->format('d-m-Y H:i:s') : '', + 'approver_name_2' => $row->approver?->name2 ?? '', + 'approver_status_2' => $row->approver_status2 ?? '', + 'approver_remark_2' => $row->approver_remark2 ?? '', + 'approved_at_2' => $row->approved2_at ?? '', + 'approver_name_3' => $row->approver?->name3 ?? '', + 'approver_status_3' => $row->approver_status3 ?? '', + 'approver_remark_3' => $row->approver_remark3 ?? '', + 'approved_at_3' => $row->approved3_at ?? '', + 'mail_status' => ($row->mail_status == 'Sent') ? 'Sent-M1' : (($row->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($row->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), + 'triggered_at' => $row->trigger_at ?? '', + 'requested_by' => ($row->created_by == 'Admin') ? 'jothi' : $row->created_by ?? '', + 'requested_at' => $row->created_at ? $row->created_at->format('Y-m-d H:i:s') : '', + ]; } - - // if ($row->approver?->approver_type != 'Quality' || $row->characteristic_name) { - // continue; - // } - - $response[] = [ - 'work_flow_id' => (string) $row->work_flow_id, - 'work_flow_status' => $workFlowStatus, - 'model_type' => strtoupper($row->model_type) ?? '', - // 'approver_name_1' => $row->approver_name1 ?? '', - 'approver_name_1' => $row->approver?->name1 ?? '', - 'approver_status_1' => $row->approver_status1 ?? '', - 'approver_remark_1' => $row->approver_remark1 ?? '', - 'approved_at_1' => $row->approved1_at ?? '', // ? $row->approved1_at->format('d-m-Y H:i:s') : '', - 'approver_name_2' => $row->approver?->name2 ?? '', - 'approver_status_2' => $row->approver_status2 ?? '', - 'approver_remark_2' => $row->approver_remark2 ?? '', - 'approved_at_2' => $row->approved2_at ?? '', // ? $row->approved2_at->format('d-m-Y H:i:s') : '', - 'approver_name_3' => $row->approver?->name3 ?? '', - 'approver_status_3' => $row->approver_status3 ?? '', - 'approver_remark_3' => $row->approver_remark3 ?? '', - 'approved_at_3' => $row->approved3_at ?? '', // ? $row->approved3_at->format('d-m-Y H:i:s') : '', - 'mail_status' => ($row->mail_status == 'Sent') ? 'Sent-M1' : (($row->mail_status == 'Sent-Mail2') ? 'Sent-M2' : (($row->mail_status == 'Sent-Mail3') ? 'Sent-M3' : '-')), - 'triggered_at' => $row->trigger_at ?? '', - 'requested_by' => ($row->created_by == 'Admin') ? 'jothi' : $row->created_by ?? '', - 'requested_at' => $row->created_at ? $row->created_at->format('Y-m-d H:i:s') : '', - ]; } } @@ -6125,6 +6659,324 @@ class CharacteristicsController extends Controller } } + public function getLaserRequestStop(Request $request) + { + $expectedUser = env('API_AUTH_USER'); + $expectedPw = env('API_AUTH_PW'); + + $headerAuth = $request->header('Authorization'); + $expectedToken = 'Bearer '.$expectedUser.':'.$expectedPw; + + if ($headerAuth != $expectedToken) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => 'Invalid authorization token!', + ], 401); + } + + $userName = $request->header('user-name'); + $charField = $request->header('characteristic-field'); + $plantCode = $request->header('plant-code'); + $workCenter = $request->header('work-center'); + $machineName = $request->header('machine-name'); + $jobNo = $request->header('aufnr'); + $modelType = $request->header('model-type'); + $requestType = $request->header('request-type'); + + Log::info("Request {$requestType} GET API >>", ['user-name' => $userName, 'characteristic-field' => $charField, 'plant-code' => $plantCode, 'work-center' => $workCenter, 'machine-name' => $machineName]); + + if (! $userName || $userName == null || $userName == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "User name can't be empty!", + ], 404); + } elseif ($userName == 'jothi') { + $userName = 'Admin'; + } + + if (! $plantCode || $plantCode == null || $plantCode == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code can't be empty!", + ], 404); + } elseif (! $workCenter || $workCenter == null || $workCenter == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center can't be empty!", + ], 404); + } elseif (! $machineName || $machineName == null || $machineName == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name can't be empty!", + ], 404); + } elseif (! $jobNo || $jobNo == null || $jobNo == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number can't be empty", + ], 404); + } elseif (! $modelType || $modelType == null || $modelType == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Model type can't be empty!", + ], 404); + } elseif (! $requestType || $requestType == null || $requestType == '') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Request type can't be empty!", + ], 404); + } + + if ($charField == null || $charField == '' || $charField == 'nil') { + $charField = 'NIL'; + } + + if (! is_numeric($plantCode)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code '{$plantCode}' should contain only numeric values!", + ], 400); + } elseif (Str::length($plantCode) < 4 || Str::length($plantCode) > 7) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code '{$plantCode}' must be between 4 and 7 digits only!", + ], 400); + } elseif (! preg_match('/^[1-9]\d{3,6}$/', $plantCode)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Invalid plant code '{$plantCode}' found!", + ], 400); + } + + if (Str::length($workCenter) < 6) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' should contain minimum 6 characters!", + ], 404); + } elseif (! ctype_alnum($workCenter)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' should contain only alpha-numeric values!", + ], 404); + } + + if (Str::length($jobNo) < 7) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNo}' should contain minimum 7 digits!", + ], 404); + } elseif (! is_numeric($jobNo)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNo}' should contain only numeric values!", + ], 404); + } elseif (! preg_match('/^[1-9]\d{6,}$/', $jobNo)) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Job number '{$jobNo}' should not begin with '0'!", + ], 404); + } + + if ($modelType != 'MOTOR' && $modelType != 'PUMP' && $modelType != 'NAME_PLATE') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Unknown model type '{$modelType}' found!", + ], 404); + } + + if ($requestType != 'Stop') { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Unknown request type '{$requestType}' found!", + ], 404); + } + + $plant = Plant::where('code', $plantCode)->first(); + if (! $plant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code '{$plantCode}' not found in plants table!", + ], 404); + } + + $plantId = $plant->id; + + $user = User::where('name', $userName)->first(); + + if (! $user) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "User name '{$userName}' not found in users table!", + ], 404); + } + + $userPlant = User::where('name', $userName)->where('plant_id', $plantId)->first(); + + if (! $userPlant && ! $user->hasRole('Super Admin')) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "User name '{$userName}' not found for the plant code '{$plantCode}' in users table!", + ], 404); + } elseif (! $user->hasRole(['Super Admin', 'Laser Manager', 'Laser Supervisor', 'Laser Employee'])) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "User '{$userName}' does not have rights!", + ], 404); + } + + $machine = Machine::where('work_center', $workCenter)->first(); + if (! $machine) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found in machines table!", + ], 404); + } + + $machine = Machine::where('work_center', $workCenter)->where('plant_id', $plantId)->first(); + if (! $machine) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found for the plant code '{$plantCode}' in machines table!", + ], 404); + } + + $machineId = $machine->id; + + $pCode = CharacteristicApproverMaster::where('plant_id', $plantId)->first(); + if (! $pCode) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Plant code '{$plantCode}' not found in approver master!", + ], 404); + } + + $wCenter = CharacteristicApproverMaster::where('machine_id', $machineId)->first(); + if (! $wCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found in approver master!", + ], 404); + } + + $wCenterAgaPlant = CharacteristicApproverMaster::where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $wCenterAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $mName = CharacteristicApproverMaster::where('machine_name', $machineName)->first(); + if (! $mName) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' not found in approver master!", + ], 404); + } + + $mNameAgaPlant = CharacteristicApproverMaster::where('machine_name', $machineName)->where('plant_id', $plantId)->first(); + if (! $mNameAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cField = CharacteristicApproverMaster::where('characteristic_field', $charField)->first(); + if (! $cField) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found in approver master!", + ], 404); + } + + // Master characteristic field value 'NIL' not found in approver master! + $cFieldAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('plant_id', $plantId)->first(); + if (! $cFieldAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $mNameAndWorkCenter = CharacteristicApproverMaster::where('machine_name', $machineName)->where('machine_id', $machineId)->first(); + if (! $mNameAndWorkCenter) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' and work center '{$workCenter}' not found in approver master!", + ], 404); + } + + $mNameAndWorkCenterAgaPlant = CharacteristicApproverMaster::where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $mNameAndWorkCenterAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Machine name '{$machineName}' and work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndWorkCent = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_id', $machineId)->first(); + if (! $cFieldAndWorkCent) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the work center '{$workCenter}' in approver master!", + ], 404); + } + + $cFieldAndWorkCentAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $cFieldAndWorkCentAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' and work center '{$workCenter}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndMach = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->first(); + if (! $cFieldAndMach) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' not found for the machine name '{$machineName}' in approver master!", + ], 404); + } + + $cFieldAndMachAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->where('plant_id', $plantId)->first(); + if (! $cFieldAndMachAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}' and machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $cFieldAndWorkCentAndMachAgaPlant = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $cFieldAndWorkCentAndMachAgaPlant) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}', work center '{$workCenter}', and machine name '{$machineName}' not found for the plant code '{$plantCode}' in approver master!", + ], 404); + } + + $appTypExist = CharacteristicApproverMaster::where('characteristic_field', $charField)->where('approver_type', $requestType)->where('machine_name', $machineName)->where('machine_id', $machineId)->where('plant_id', $plantId)->first(); + if (! $appTypExist) { + return response()->json([ + 'status_code' => 'ERROR', + 'status_description' => "Master characteristic field value '{$charField}', work center '{$workCenter}', machine name '{$machineName}', and plant code '{$plantCode}' not found for the approver type 'Stop' in approver master!", + ], 404); + } + + $classModelType = strtolower($modelType).'_stop_flow_id'; + + ClassCharacteristic::where('aufnr', $jobNo)->where('machine_id', $machineId)->where('plant_id', $plantId)->where($classModelType, '5') + ->update([ + $classModelType => '4', + 'updated_at' => now(), + 'updated_by' => $userName, + ]); + + return response()->json([ + 'status_code' => 'SUCCESS', + 'status_description' => "Has {$modelType} Approver Master!", + ], 200); + } + public function show(string $id) { //