diff --git a/app/Config/Routes.php b/app/Config/Routes.php index bee6cc65..80aac532 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -521,5 +521,7 @@ $routes->post('updateTrpSandUseStockDetails', 'StockController::updateTrpSandUse //trp production stock details $routes->match(['GET', 'POST'], 'trpProductionDetails', 'StockController::trpProductionDetails'); $routes->post('updateTrpProductionDetails', 'StockController::updateTrpProductionDetails'); +//trp abstract +$routes->post('updateAbstractDetails','StockController::updateAbstractDetails'); diff --git a/app/Controllers/StockController.php b/app/Controllers/StockController.php index de76134c..00299d0a 100644 --- a/app/Controllers/StockController.php +++ b/app/Controllers/StockController.php @@ -143,243 +143,494 @@ class StockController extends BaseController // } - //Coating Machine Details starts - public function loadView_coatingMachineDetails() - { - - if ($this->request->getMethod() === 'POST') { - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - } else { - - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month - } - - } - - $data['month'] = $month ; - - $this->global['pageTitle'] = 'Coating Machine Details '; - - - $startDate = "$month-01"; - $endDate = date("Y-m-t", strtotime($startDate)); - $data['coatingMachineDetails'] = $this->coatingMachineDetails_model - ->select('t_coatingMachineDetails.*, - JSON_ARRAYAGG( - JSON_OBJECT( - "client_given_name", t_batchcard_files.client_file_name, - "filename", t_batchcard_files.filename, - "batchCardId" , t_batchcard_files.id, - "coating_id", t_batchcard_files.coating_id - ) - ) as batchcard_files') - ->join('t_batchcard_files', 't_batchcard_files.coating_id = t_coatingMachineDetails.id', 'left') - ->where('t_coatingMachineDetails.date >=', $startDate) - ->where('t_coatingMachineDetails.date <=', $endDate) - ->groupBy('t_coatingMachineDetails.id') - ->orderBy('t_coatingMachineDetails.date', 'asc') - ->findAll(); - - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate; - - return $this->loadViews("stock/CoatingMachineDetail", $this->global, $data, NULL); - } - - public function addNewCoatingMachineDetails() - { - $message1 = ''; - $message2 = ''; - $message3 = ''; - - $postData = $this->request->getPost(); - - $date = $postData['date']; - $shift = $postData['shift']; - - // Check if the same shift already exists on the same date - $sameShiftOnDateExists = $this->coatingMachineDetails_model - ->where('date', $date) - ->where('shift', $shift) - ->where('is_active', 1) - ->first(); - - if (!empty($sameShiftOnDateExists)) { - return redirect()->back()->with('error', 'Already same shift exists on the same date ..!!'); - } - - // Start transaction - $this->db->transBegin(); - - try { - // Insert into coating machine details table - $insertedId = $this->coatingMachineDetails_model->insert($postData); - - if ($insertedId !== false && $insertedId > 0) { - - $message1 = 'Coating Machine details updated successfully'; - - // Update gas stock consumption - $dateToBeInserted = $postData['date']; - $consumption = $postData['totalGasConsumption']; - $updatedResult = $this->updateGasStockConsumption($dateToBeInserted, $consumption); - - if ($updatedResult === false || $updatedResult <= 0) { - // Explicit failure handling for gas stock update - throw new \Exception('Failed to update gas stock consumption.'); - } - $message2 = 'And updated gas stock consumption.'; - $message3 = " Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; + //incoming Silica Sand Details starts + public function loadView_incomingSilicaSandDetails() + { + + if ($this->request->getMethod() === 'POST') { + + $remark = $this->request->getPost('remark'); + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { - throw new \Exception('Failed to insert Coating machine details.'); - } - - if ($insertedId !== false && $insertedId > 0) { - - $batchCardFiles = $this->request->getFileMultiple('batchCard'); - - if (!empty($batchCardFiles) && !($batchCardFiles[0]->getError() === UPLOAD_ERR_NO_FILE)) { - - foreach ($batchCardFiles as $file) { - - if ($file->isValid() && !$file->hasMoved()) { - $clientGivenName = $file->getClientName(); // User-given filename - $newName = $file->getRandomName(); - - if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) { - // Only save to DB if file moved successfully - $db = \Config\Database::connect(); - $builder = $db->table('t_batchcard_files'); - - $data = [ - 'client_file_name' => $clientGivenName, - 'filename' => $newName, - 'coating_id' => $insertedId - ]; - - $builder->insert($data); - } - } - } + $remark = $this->request->getVar('remark'); + + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month } - + } - - - - if ($this->db->transStatus() === false) { - throw new \Exception('Transaction failed due to database errors.'); + + $data['month'] = $month; + + $this->global['pageTitle'] = 'Incoming Silica Sand Details'; + + $materialCodes = []; + + $silicaSandMaterialCodes = $this->rawmaterialdetails_model->getAllSilicaRawMaterialCode(); + + $materialCodes [] = $silicaSandMaterialCodes; + + $wasteCoreSandMaterialCodes = $this->rawmaterialdetails_model->getAllWasteCoreSandMaterialCode(); + + $materialCodes [] = $wasteCoreSandMaterialCodes; + + $materialCodes = call_user_func_array('array_merge', $materialCodes); + + + if (!empty($materialCodes)) { + $data['igrDetails'] = $this->inwardGateRegister_model->findIgrDetailsForIncomingSilicaSand($materialCodes, $month, $remark); + } else { + $data['igrDetails'] = []; } - $this->db->transCommit(); - - - - // Set flashdata for success message - return redirect()->to("/coatingMachineDetails") - ->with('success', $message1 . " " . $message2 . " " . $message3); - } catch (\Exception $error) { - $this->db->transRollback(); - return redirect()->back()->with('error', ' ' . $error->getMessage()); + + $data['testedBy'] = []; + + $DesignationConfigID = 'C010'; + + $data['testedBy'] = $this->employeedetails_model->incomingSilicaSandTestedBy($DesignationConfigID); + + $data['approvedBy'] = $this->employeedetails_model->incomingSilicaSandApprovedBy($DesignationConfigID); + + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate; + + $data['remark'] = $remark; + + return $this->loadViews("stock/incomingSilicaSandDetails", $this->global, $data, NULL); } - } - - - - public function updateCoatingMachineDetails() - { - - - $message1 = ''; - $message2 = ''; - $message3 = ''; - - $putData = $this->request->getPost(); - - - $id = $putData['editCoatingMachineDetailId']; - - // Start transaction - $this->db->transBegin(); - try { - $updated = $this->coatingMachineDetails_model->update($id, $putData); - - - - if ($updated !== false && $updated > 0) { // Assuming $id is the record ID being updated - - $batchCardFiles = $this->request->getFileMultiple('batchCard'); - - - // Step 4: Upload new files and insert into DB - foreach ($batchCardFiles as $index => $file) { - - if ( !empty($batchCardFiles[$index]) && !($batchCardFiles[$index]->getError() === UPLOAD_ERR_NO_FILE)) { - - $db = \Config\Database::connect(); - $builder = $db->table('t_batchcard_files'); - - if ($file->isValid() && !$file->hasMoved()) { - $clientGivenName = $file->getClientName(); // User-given filename - $newName = $file->getRandomName(); // Randomized unique filename - - // Move the new file to storage - if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) { - // Insert new file record into the database - $data = [ - 'client_file_name' => $clientGivenName, - 'filename' => $newName, - 'coating_id' => $id - ]; - $builder->insert($data); - } - } - } + + public function updateIncomingSilicaSandDetails() + { + + $postData = $this->request->getPost(); + + $incomingSilicaSandDetailsData = json_decode($postData['incomingSilicaSandDetailsData'], true); + + $inserts = []; + $updates = []; + + foreach ($incomingSilicaSandDetailsData as $data) { + + $id = $data['id']; + + $dbData = [ + 'igrNo_fk' => $data['IGR No'], + 'materialCode' => $data['MaterialCode'], + 'grade' => $data['Grade'], + 'gradeCondition' => $data['Grade Condition'], + '_10' => $data['___10___'], + '_20' => $data['___20___'], + '_30' => $data['___30___'], + '_40' => $data['___40___'], + '_50' => $data['___50___'], + '_70' => $data['___70___'], + '_100' => $data['___100___'], + '_140' => $data['___140___'], + '_200' => $data['___200___'], + '_300' => $data['___300___'], + 'pan' => $data['PAN'], + 'total' => $data['Total'], + 'afsSpec' => $data['AFS Spec'], + 'afsActual' => $data['AFS Actual'], + 'plus20loss' => $data['Plus 20 loss%'], + 'plus30Loss' => $data['Plus 30 Loss %'], + 'moistureSpec' => $data['Moisture % Spec'], + 'moistureActual' => $data['Moisture Actual'], + 'moistureLoss' => $data['Moisture Loss'], + 'moistureLossQty' => $data['Moisture loss Qty'], + 'sieveLossQty' => $data['Sieve Loss Qty'], + 'salableQty' => $data['Salable Qty'], + 'remark' => $data['Remark'] + + ]; + + + + $resultExists = $this->incomingSilicaSandDetails_model + ->where('id', $id) + ->first(); + + if (!empty($resultExists)) { + $dbData['id'] = $resultExists['id']; + $updates[] = $dbData; + } else { + $inserts[] = $dbData; } } + + if (!empty($updates)) { + $updated = $this->incomingSilicaSandDetails_model->updateBatch($updates, 'id'); + } + + if (!empty($inserts)) { + $inserted = $this->incomingSilicaSandDetails_model->insertBatch($inserts); + } + + echo "Data Saved Successfully"; + } + + public function updateLabReport() + { + + $postData = $this->request->getPost(); + + $id = $postData['id']; + + $dbData = [ + 'igrNo_fk' => $postData['igrNo'], + 'materialCode' => $postData['materialCode'], + '_10' => $postData['_10Mm'], + '_20' => $postData['_20Mm'], + '_30' => $postData['_30Mm'], + '_40' => $postData['_40Mm'], + '_50' => $postData['_50Mm'], + '_70' => $postData['_70Mm'], + '_100' => $postData['_100Mm'], + '_140' => $postData['_140Mm'], + '_200' => $postData['_200Mm'], + '_300' => $postData['_300Mm'], + 'pan' => $postData['pan'], + 'total' => $postData['total'], + 'plus20Loss' => $postData['plus20Loss'], + 'plus30Loss' => $postData['plus30Loss'], + 'moistureSpec' => $postData['moistureSpec'], + 'moistureActual' => $postData['moistureActual'], + 'moistureLoss' => $postData['moistureLoss'], + 'moistureLossQty' => $postData['moistureLossQty'], + 'sieveLossQty' => $postData['sieveLossQty'], + 'salableQty' => $postData['salableQty'], + 'testedBy' => $postData['testedBy'], + 'approvedBy' => $postData['approvedBy'], + 'clayOrLossOfIgnition' => $postData['clayOrLossOfIgnition'], + 'reportComments' => $postData['reportComments'], + 'gradeRange' => $postData['gradeRange'], + 'reportTime' => $postData['reportTime'] + + ]; + + + + $resultExists = $this->incomingSilicaSandDetails_model + ->where('id', $id) + ->first(); + if ($resultExists) { + $updated = $this->incomingSilicaSandDetails_model + ->update($id, $dbData); + } else { + $updated = $this->incomingSilicaSandDetails_model + ->insert($dbData); + } + + + if ($updated) { + return $this->response->setJSON(['status' => 'success', 'message' => 'Data Updated Successfully']); + } else { + return $this->response->setJSON(['status' => 'error', 'message' => 'Failed to update data']); + } + } + + //Drier machine details + public function drierMachineDetails() + { + + + //drier will be processing different method than other stock in case of session stock month and date format for generating + //dummy data and updating the data . be cautious while updating the code..!! + + if ($this->request->getMethod() === 'POST') { + + $currentMonth = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $currentMonth); //in M-Y format + + $formattedDate = $date->format('Y-m'); //in Y-m format + + + $session = session (); + + $session->set('stock_month',$formattedDate); + + + } else { + + $session = session(); + + $currentMonth = $session->get('stock_month'); + + if (empty($currentMonth)) { + $currentMonth = date('M-Y'); // Default to the current month + }else{ + $currentMonth = DateTime::createFromFormat('Y-m', $currentMonth); // in Y-m format + + $currentMonth = $currentMonth->format('M-Y'); // in M-Y format + } + } + + $monthData = $this->getMonthDatesFromInput($currentMonth); + + $isActiveFilter = 1 ; + $data['startDate'] = $monthData[0]['database']; + $data['endDate'] = $monthData[count($monthData) - 1]['database']; + $data['timeDropdown'] = $this->generateTimeOptions(); + $data['supplierData'] = $this->supplier_model->supplierlisting($isActiveFilter); + + $data['drierDetails'] = $this->drierMachineDetails_model + ->where('date >=', $data['startDate']) + ->where('date <=', $data['endDate']) + ->orderBy('date','asc') + ->findAll(); + + + $data['datefordropdown'] = $currentMonth; + + $this->global['pageTitle'] = 'Drier Details'; + $this->loadViews("stock/drierMachineDetails", $this->global, $data, NULL); + + + } + + public function addOrEditdrierMachineDetails() + { - if ($updated !== false && $updated > 0) { - $message1 = "successfully updated Coating machineDetail ."; - //update Gas stock consumption if update is successfull..!! - $dateToBeUpdated = $putData['date']; + + $data = $this->request->getPost(); + + $drierData[] = $this->mapDrierEntry($data); + + + $this->db->transBegin(); + try { + $inserts = []; + $updates = []; + + foreach ($drierData as $row) { + $existingRow = $row['id']; + $data = $row; + + + if (($existingRow)) { + $existingRow = $this->drierMachineDetails_model->where('id', $row['id'] ?? '')->first(); + + $this->handleGasStockUpdate($existingRow, $row); + $updates[] = $data; + } else { + $this->updateGasStockConsumption($data['date'], $data['total_gas_consumption']); + $inserts[] = $data; + } + } + + if (!empty($inserts)) { + $this->drierMachineDetails_model->insertBatch($inserts); + } + + if (!empty($updates)) { + $this->drierMachineDetails_model->updateBatch($updates, 'id'); + } + + if ($this->db->transStatus() === false) { + throw new \Exception('Transaction failed due to database error.'); + } + + $this->db->transCommit(); + + return redirect()->to("/drierMachineDetails")->with('success', "Data Saved Successfully"); + + } catch (\Exception $error) { + $this->db->transRollback(); + return redirect()->back()->with('error', ' ' . $error->getMessage()); + } + } + + /** + * Maps input row to expected format. + */ + private function mapDrierEntry(array $data): array + { + return [ + 'id' => $data['id'] ?? null, + 'date' => $this->convertToDateWithFlexibleFormats($data['date'], ["d-m-Y", "Y-m-d", "m/d/Y", "m-d-Y"], "Y-m-d"), + 'drier_on_time' => $data['drier_on_time'], + 'drier_off_time' => $data['drier_off_time'], + 'drier_running_hours' => $data['drier_running_hours'], + 'supplier_name' => $data['supplier_name'], + 'input_sand_moisture' => $data['input_sand_moisture'], + 'total_gas_consumption' => $data['total_gas_consumption'], + 'gas_per_ton' => $data['gas_per_ton'], + 'input_sand_qty' => $data['input_sand_qty'], + 'moisture_loss_qty' => $data['moisture_loss_qty'], + 'sand_dried_qty' => $data['sand_dried_qty'], + 'qty_per_hours' => $data['qty_per_hours'], + 'dust_qty' => $data['dust_qty'], + 'customer_name' => $data['customer_name'] + ]; + } - $existingCoatingGasConsumption = $putData['existingTotalGasConsumption']; - $updatedCoatingGasConsumption = $putData['totalGasConsumption']; - if ($existingCoatingGasConsumption != $updatedCoatingGasConsumption) { - $changeInConsumption = $updatedCoatingGasConsumption - $existingCoatingGasConsumption; - $updatedResult = $this->updateGasStockConsumption($dateToBeUpdated, $changeInConsumption); + //Coating Machine Details starts + public function loadView_coatingMachineDetails() + { + + if ($this->request->getMethod() === 'POST') { + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { + + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } + + } + + $data['month'] = $month ; + + $this->global['pageTitle'] = 'Coating Machine Details '; + + + $startDate = "$month-01"; + $endDate = date("Y-m-t", strtotime($startDate)); + $data['coatingMachineDetails'] = $this->coatingMachineDetails_model + ->select('t_coatingMachineDetails.*, + JSON_ARRAYAGG( + JSON_OBJECT( + "client_given_name", t_batchcard_files.client_file_name, + "filename", t_batchcard_files.filename, + "batchCardId" , t_batchcard_files.id, + "coating_id", t_batchcard_files.coating_id + ) + ) as batchcard_files') + ->join('t_batchcard_files', 't_batchcard_files.coating_id = t_coatingMachineDetails.id', 'left') + ->where('t_coatingMachineDetails.date >=', $startDate) + ->where('t_coatingMachineDetails.date <=', $endDate) + ->groupBy('t_coatingMachineDetails.id') + ->orderBy('t_coatingMachineDetails.date', 'asc') + ->findAll(); + + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate; + + return $this->loadViews("stock/CoatingMachineDetail", $this->global, $data, NULL); + } + + public function addNewCoatingMachineDetails() + { + $message1 = ''; + $message2 = ''; + $message3 = ''; + + $postData = $this->request->getPost(); + + $date = $postData['date']; + $shift = $postData['shift']; + + // Check if the same shift already exists on the same date + $sameShiftOnDateExists = $this->coatingMachineDetails_model + ->where('date', $date) + ->where('shift', $shift) + ->where('is_active', 1) + ->first(); + + if (!empty($sameShiftOnDateExists)) { + return redirect()->back()->with('error', 'Already same shift exists on the same date ..!!'); + } + + // Start transaction + $this->db->transBegin(); + + try { + // Insert into coating machine details table + $insertedId = $this->coatingMachineDetails_model->insert($postData); + + if ($insertedId !== false && $insertedId > 0) { + + $message1 = 'Coating Machine details updated successfully'; + + // Update gas stock consumption + $dateToBeInserted = $postData['date']; + $consumption = $postData['totalGasConsumption']; + $updatedResult = $this->updateGasStockConsumption($dateToBeInserted, $consumption); if ($updatedResult === false || $updatedResult <= 0) { // Explicit failure handling for gas stock update throw new \Exception('Failed to update gas stock consumption.'); } $message2 = 'And updated gas stock consumption.'; - - $message3 = "Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; + $message3 = " Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; + } else { + throw new \Exception('Failed to insert Coating machine details.'); } - // Commit the transaction if all queries succeed + + if ($insertedId !== false && $insertedId > 0) { + + $batchCardFiles = $this->request->getFileMultiple('batchCard'); + + if (!empty($batchCardFiles) && !($batchCardFiles[0]->getError() === UPLOAD_ERR_NO_FILE)) { + + foreach ($batchCardFiles as $file) { + + if ($file->isValid() && !$file->hasMoved()) { + $clientGivenName = $file->getClientName(); // User-given filename + $newName = $file->getRandomName(); + + if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) { + // Only save to DB if file moved successfully + $db = \Config\Database::connect(); + $builder = $db->table('t_batchcard_files'); + + $data = [ + 'client_file_name' => $clientGivenName, + 'filename' => $newName, + 'coating_id' => $insertedId + ]; + + $builder->insert($data); + } + } + } + } + + } + if ($this->db->transStatus() === false) { @@ -389,337 +640,1754 @@ class StockController extends BaseController - // Set flashdata for success message return redirect()->to("/coatingMachineDetails") ->with('success', $message1 . " " . $message2 . " " . $message3); - } else { - throw new \Exception('Failed to update Coating machine details.'); + } catch (\Exception $error) { + $this->db->transRollback(); + return redirect()->back()->with('error', ' ' . $error->getMessage()); } - - - - - - } catch (\Exception $error) { - $this->db->transRollback(); - return redirect()->back()->with('error', ' ' . $error->getMessage()); } - } - public function deleteBatchCardFile() - { - $data = $this->request->getPost(); - - if (!empty($data)) { + + + public function updateCoatingMachineDetails() + { + + + $message1 = ''; + $message2 = ''; + $message3 = ''; + + $putData = $this->request->getPost(); + + + $id = $putData['editCoatingMachineDetailId']; + + // Start transaction + $this->db->transBegin(); + try { + $updated = $this->coatingMachineDetails_model->update($id, $putData); + - $batchId = $data['id']; - $db = \Config\Database::connect(); - $builder = $db->table('t_batchcard_files'); - - // Step 1: Fetch the filename from DB before deleting - $fileRecord = $builder->select('filename')->where('id', $batchId)->get()->getRow(); - - if ($fileRecord) { - $filePath = WRITEPATH . 'uploads/batchcard/' . $fileRecord->filename; - - // Step 2: Delete the file from storage - if (file_exists($filePath)) { - unlink($filePath); + + if ($updated !== false && $updated > 0) { // Assuming $id is the record ID being updated + + $batchCardFiles = $this->request->getFileMultiple('batchCard'); + + + // Step 4: Upload new files and insert into DB + foreach ($batchCardFiles as $index => $file) { + + if ( !empty($batchCardFiles[$index]) && !($batchCardFiles[$index]->getError() === UPLOAD_ERR_NO_FILE)) { + + $db = \Config\Database::connect(); + $builder = $db->table('t_batchcard_files'); + + if ($file->isValid() && !$file->hasMoved()) { + $clientGivenName = $file->getClientName(); // User-given filename + $newName = $file->getRandomName(); // Randomized unique filename + + // Move the new file to storage + if ($file->move(WRITEPATH . 'uploads/batchcard', $newName)) { + // Insert new file record into the database + $data = [ + 'client_file_name' => $clientGivenName, + 'filename' => $newName, + 'coating_id' => $id + ]; + $builder->insert($data); + } + } + } + } } - - // Step 3: Delete the record from the database - $sql = "DELETE FROM t_batchcard_files WHERE id = ?"; - $deleted = $db->query($sql, [$batchId]); - - if ($deleted) { - return $this->response->setJSON([ - 'status' => '200', - 'message' => "Deleted Batch Card File Successfully..!!" - ]); + + if ($updated !== false && $updated > 0) { + $message1 = "successfully updated Coating machineDetail ."; + //update Gas stock consumption if update is successfull..!! + $dateToBeUpdated = $putData['date']; + + $existingCoatingGasConsumption = $putData['existingTotalGasConsumption']; + $updatedCoatingGasConsumption = $putData['totalGasConsumption']; + + if ($existingCoatingGasConsumption != $updatedCoatingGasConsumption) { + + $changeInConsumption = $updatedCoatingGasConsumption - $existingCoatingGasConsumption; + $updatedResult = $this->updateGasStockConsumption($dateToBeUpdated, $changeInConsumption); + + if ($updatedResult === false || $updatedResult <= 0) { + // Explicit failure handling for gas stock update + throw new \Exception('Failed to update gas stock consumption.'); + } + $message2 = 'And updated gas stock consumption.'; + + $message3 = "Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; + } + // Commit the transaction if all queries succeed + + + if ($this->db->transStatus() === false) { + throw new \Exception('Transaction failed due to database errors.'); + } + $this->db->transCommit(); + + + + + // Set flashdata for success message + return redirect()->to("/coatingMachineDetails") + ->with('success', $message1 . " " . $message2 . " " . $message3); + } else { + throw new \Exception('Failed to update Coating machine details.'); + } + + + + + + } catch (\Exception $error) { + $this->db->transRollback(); + return redirect()->back()->with('error', ' ' . $error->getMessage()); + } + } + + public function deleteBatchCardFile() + { + $data = $this->request->getPost(); + + if (!empty($data)) { + + $batchId = $data['id']; + $db = \Config\Database::connect(); + $builder = $db->table('t_batchcard_files'); + + // Step 1: Fetch the filename from DB before deleting + $fileRecord = $builder->select('filename')->where('id', $batchId)->get()->getRow(); + + if ($fileRecord) { + $filePath = WRITEPATH . 'uploads/batchcard/' . $fileRecord->filename; + + // Step 2: Delete the file from storage + if (file_exists($filePath)) { + unlink($filePath); + } + + // Step 3: Delete the record from the database + $sql = "DELETE FROM t_batchcard_files WHERE id = ?"; + $deleted = $db->query($sql, [$batchId]); + + if ($deleted) { + return $this->response->setJSON([ + 'status' => '200', + 'message' => "Deleted Batch Card File Successfully..!!" + ]); + } else { + return $this->response->setJSON([ + 'status' => '400', + 'message' => "Failed to Delete..!! Try Again Later" + ]); + } } else { return $this->response->setJSON([ - 'status' => '400', - 'message' => "Failed to Delete..!! Try Again Later" + 'status' => '404', + 'message' => "File Not Found..!!" ]); } - } else { - return $this->response->setJSON([ - 'status' => '404', - 'message' => "File Not Found..!!" - ]); } + + return $this->response->setJSON([ + 'status' => '400', + 'message' => "Invalid Request..!!" + ]); } - - return $this->response->setJSON([ - 'status' => '400', - 'message' => "Invalid Request..!!" - ]); - } - public function downloadBatchcardZip() - { - $coatingId = $this->request->getGet('coating_id'); - $date = $this->request->getGet('date'); - $batchCardFiles = $this->getBatchCardFiles($coatingId); // Fetch files from DB - - if (empty($batchCardFiles)) { - return redirect()->back()->with('error', 'No batchcard files found.'); + public function downloadBatchcardZip() + { + $coatingId = $this->request->getGet('coating_id'); + $date = $this->request->getGet('date'); + $batchCardFiles = $this->getBatchCardFiles($coatingId); // Fetch files from DB + + if (empty($batchCardFiles)) { + return redirect()->back()->with('error', 'No batchcard files found.'); + } + + $zipFileName = 'batchcard_files_' . $date . '.zip'; + $zipFilePath = WRITEPATH . 'uploads/batchcard' . $zipFileName; // CI4 WRITEPATH safe directory + + $zip = new \ZipArchive(); + if ($zip->open($zipFilePath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) === true) { + foreach ($batchCardFiles as $file) { + $originalFilePath = WRITEPATH . 'uploads/batchcard/' . $file['filename']; // Actual stored file + $clientFileName = $file['client_file_name'] ?? $file['filename']; // Use client name if available + + if (file_exists($originalFilePath)) { + $zip->addFile($originalFilePath, $clientFileName); // Rename inside ZIP + } + } + $zip->close(); + + $response = $this->response->download($zipFilePath, null)->setFileName($zipFileName); + + // Delete ZIP after response is sent + register_shutdown_function(function () use ($zipFilePath) { + if (file_exists($zipFilePath)) { + unlink($zipFilePath); + } + }); + + return $response; + } + + return redirect()->back()->with('error', 'Failed to create ZIP file.'); } + + // Example function to get batchcard files from DB + private function getBatchCardFiles($coatingId) + { + $batchCardFiles = $this->db->table('t_batchcard_files') + ->where('coating_id', $coatingId) + ->get() + ->getResultArray(); + + return $batchCardFiles; + } + - $zipFileName = 'batchcard_files_' . $date . '.zip'; - $zipFilePath = WRITEPATH . 'uploads/batchcard' . $zipFileName; // CI4 WRITEPATH safe directory - - $zip = new \ZipArchive(); - if ($zip->open($zipFilePath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) === true) { - foreach ($batchCardFiles as $file) { - $originalFilePath = WRITEPATH . 'uploads/batchcard/' . $file['filename']; // Actual stored file - $clientFileName = $file['client_file_name'] ?? $file['filename']; // Use client name if available + + //Gas Stock Details + public function loadView_gasStockDetails() + { + + if ($this->request->getMethod() === 'POST') { + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } + } + + $data = []; + + $data['month'] = $month; + + $this->global['pageTitle'] = "Gas Stock Details"; + + + $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); + $previousMonthStartDate = "$previousMonth-01"; + $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); + $data['previousMonthGasStockDetails'] = $this->gasStockDetails_model + ->select('date,balanceStock') + ->where('date =', $previousMonthEndDate) + ->orderBy('date', 'desc') + ->findAll(); + + $startDate = "$month-01"; + $endDate = date("Y-m-t", strtotime($startDate)); + + $data['gasStockDetails'] = $this->gasStockDetails_model + ->select( + 't_gasStockDetails.*, + drier_summary.drierMachineGasconsumption AS drierMachineGasConsumption, + drier_summary.driedSand AS sandDried, + coating_summary.coatingMachineGasconsumption, + coating_summary.coatedSand' + ) + // Subquery with early date filtering + ->join( + '(SELECT date, + SUM(totalGasconsumption) AS coatingMachineGasconsumption, + SUM(totalCoatingSandInKg) / 1000 AS coatedSand + FROM t_coatingMachineDetails + WHERE is_active = 1 + AND date >= ' . $this->db->escape($startDate) . ' + AND date <= ' . $this->db->escape($endDate) . ' + GROUP BY date + ) AS coating_summary', + 'coating_summary.date = t_gasStockDetails.date', + 'left' + ) + ->join( + '(SELECT date, + SUM(total_gas_consumption) AS drierMachineGasconsumption, + SUM(sand_dried_qty) AS driedSand + FROM t_drierMachineDetails + WHERE date >= ' . $this->db->escape($startDate) . ' + AND date <= ' . $this->db->escape($endDate) . ' + GROUP BY date + ) AS drier_summary', + 'drier_summary.date = t_gasStockDetails.date', + 'left' + ) + + ->where('t_gasStockDetails.date >=', $startDate) + ->where('t_gasStockDetails.date <=', $endDate) + ->groupBy('t_gasStockDetails.date') + ->findAll(); + + + + $data['month'] = DateTime::createFromFormat('Y-m', $month)->format('M-Y'); + + return $this->loadViews("stock/gasStockDetails", $this->global, $data, NULL); + } + + public function updateGasStockDetails() + { + + $postData = $this->request->getPost(); + + $updateGasStockDetailsData = json_decode($postData['updateGasStockDetails'], true); + + $updates = []; + + $inserts = []; + + foreach ($updateGasStockDetailsData as $data) { + + $date = $data['date']; + + + $dbData = [ + 'date' => $data['date'] , + 'opening' => $data['opening'] , + 'purchaseBharath' => $data['purchaseBharath'] , + 'purchaseIndian' => $data['purchaseIndian'] , + 'total' => $data['total'] , + 'consumption' => $data['consumption'] , + 'balanceStock' => $data['balanceStock'] , + 'trp_panel_gas_consumption' => $data['trpPanelGasConsumption'] , + 'trp_physical_gas_consumption' => $data['trpPhysicalGasConsumption'] , + 'trp_sand_production' => $data['trpSandProduction'] , + 'rotary_drier_consumption' => $data['rotaryDrierConsumption'] + ]; + + $resultExists = $this->gasStockDetails_model + ->where('date', $date) + ->first(); + + + if (empty($resultExists)) { + $inserts[] = $dbData; + } else { + $dbData['id'] = $resultExists['id']; + $updates[] = $dbData; + } + + } + + + if (!empty($inserts)) { + $this->gasStockDetails_model->insertBatch($inserts); + } + + if (!empty($updates)) { + + $updateResult = $this->gasStockDetails_model->updateBatch($updates, 'id'); + + if ($updateResult === FALSE) { + echo "Error during update"; + } else { + echo "Data Updated Successfully"; + return; + } + } + + echo "Data Saved Successfully Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; + } + + private function updateGasStockConsumption($date, $consumption) + { + + $resultExists = $this->gasStockDetails_model + ->where('date', $date) + ->first(); + + if ($resultExists) { + + + if ($date instanceof DateTime) { + $date = $date->format('Y-m-d'); + } elseif (!strtotime($date)) { + throw new \Exception("Invalid date format provided."); + } else { + $date = date('Y-m-d', strtotime($date)); + } + + $endDate = date('Y-m-t', strtotime($date)); + + + //what happens if the updation is on the last day of the month? + $resultExists = $this->gasStockDetails_model + ->where('date >=', $date) + ->where('date <=', $endDate) + ->orderBy('date', 'asc') + ->findAll(); + + $updatedOpeningStock = 0; + $updates = []; + + + foreach ($resultExists as $index => $result) { + + if ($index == 0) { + $result['consumption'] = (float)($result['consumption']) + (float)($consumption); + $result['total'] = (float)$result['opening'] + (float)$result['purchaseBharath'] + (float)$result['purchaseIndian']; + $result['balanceStock'] = $result['total'] - $result['consumption']; + $updatedOpeningStock = (int)$result['balanceStock']; + } else { + $result['opening'] = (float)$updatedOpeningStock; + $result['total'] = (float)$result['opening'] + (float)$result['purchaseBharath'] + (float)$result['purchaseIndian']; + $result['balanceStock'] = (float)$result['total'] - (float)$result['consumption']; + $updatedOpeningStock = (int)$result['balanceStock']; + } + + + $updates[] = $result; + } + + if (!empty($updates)) { + $result = $this->gasStockDetails_model->updateBatch($updates, 'id'); + return ($result !== false && $result > 0) ? $result : 0; + } else { + return 0; + } + } else { + + + + $previousMonthDate = new DateTime($date); + $previousMonthDate = $previousMonthDate->modify('first day of this month') + ->modify('-1 day') + ->format('Y-m-d'); + + + + $previousMonthResultExists = $this->gasStockDetails_model + ->where('date', $previousMonthDate) + ->first(); + + + + $opening = 0; + + if (!empty($previousMonthResultExists) && isset($previousMonthResultExists['balanceStock'])) { + $opening = $previousMonthResultExists['balanceStock']; + } + + + + $startDate = DateTime::createFromFormat('Y-m-d', $date)->modify('first day of this month')->format('Y-m-d'); + $endDate = DateTime::createFromFormat('Y-m-d', $date)->modify('last day of this month')->format('Y-m-d'); + + $datesInMonth = []; + $inserts = []; + + $period = new DatePeriod( + new DateTime($startDate), + new DateInterval('P1D'), + (new DateTime($endDate))->modify('+1 day') + ); + + foreach ($period as $day) { + $datesInMonth[] = $day->format('Y-m-d'); + } + + foreach ($datesInMonth as $datesInMonthIndex => $dateInMonth) { + + //update previousMonthResultExists + $balanceStock = $opening; + $consumptionForDate = 0; + if ($dateInMonth == $date) { + $consumptionForDate = $consumption; + $balanceStock = $opening - $consumption; + } + + $inserts[] = [ + 'date' => $dateInMonth, + 'opening' => $opening, + 'purchaseBharath' => Null, + 'purchaseIndian' => Null, + 'total' => Null, + 'consumption' => $consumptionForDate, + 'balanceStock' => $balanceStock + ]; + + $opening = $balanceStock; + } + + if (!empty($inserts)) { + $result = $this->gasStockDetails_model->insertBatch($inserts); + return ($result !== false && $result > 0) ? $result : 0; + } else { + return 0; + } + } + } + + + + + //diesel stock details - if (file_exists($originalFilePath)) { - $zip->addFile($originalFilePath, $clientFileName); // Rename inside ZIP + public function dieselMachineStockDetails(){ + + + if ($this->request->getMethod() === 'POST') { + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { + + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } + } + + $data = []; + + $data['month'] = $month; + + $this->global['pageTitle'] = 'Diesel Machine Stock Details'; + + + //filter part starts + + //start date dynamic from front-end + $startDate = "$month-01"; + //end date of given month + $endDate = date("Y-m-t", strtotime($startDate)); + + + //filter applied currently + $customisedMachineCodes = $this->request->getPost('customisedMachineCodes') ?? []; + + + //already applied filter + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->select('machine_id') + ->where('date',"$month-01") + ->where('machine_category','diesel') + ->findAll(); + + + //check user applies for filter currently + if(!empty($customisedMachineCodes)){ + + //user applied filter, + + //check already filter existing , if exists remove that , + if(!empty($existingCustomMachineCodes)){ + + //hard delete done..!! + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->where('date',"$month-01") + ->where('machine_category','diesel') + ->delete(); + + } + + + //if no filter already exists or removed current one , just add current filter for that month ....!! + $inserts = []; + + foreach($customisedMachineCodes as $index => $customisedMachineCode){ + + $inserts [] = [ + 'date' => "$month-01", + 'machine_category' => "diesel", + 'machine_id' => $customisedMachineCode + ]; + + + //checking filtered material code present in table , if not create dummy one for whole month + $findMachineCode = $this->factoryVehicleDieselDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->where('machine_id',$customisedMachineCode) + ->findAll(); + + //check any material code is not present in stock table but applied in filter + if(empty($findMachineCode)){ + + //create dummy entry for this + $this->createDummyEntryForDieselMachine($customisedMachineCode,$startDate,$endDate); + } + + } + + if(!empty($inserts)){ + //insert all the latest applied filter + $this->monthWiseMachineInStockModel->insertBatch($inserts); + + //get the currently applied filter + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->select('machine_id') + ->where('date',"$month-01") + ->where('machine_category','diesel') + ->get() + ->getResultArray(); + + } + + } + + + //possible if no filter applied at all...!!! + if(empty($existingCustomMachineCodes)){ + //no filter applied at all just present all active material codes + $existingCustomMachineCodes = $this->factoryMachine_model + ->getAllActiveDieselMachines(); + }else{ + //if filter present,get that material codes + $existingCustomMachineCodes = $this->factoryMachine_model + ->getSelectedDieselMachines(array_column($existingCustomMachineCodes, 'machine_id')); + } + + + + //this existingCustomMachineCodes gets its machine 'id' after visiting factory machine master table in above step, + + $machineCodeList = array_column($existingCustomMachineCodes, 'id'); + + $dieselMachines = $existingCustomMachineCodes; + + $data['activeDieselMachines'] = $this->factoryMachine_model->getAllActiveDieselMachines(); + + + + + + + + + + + + // Get the previous month's last date diesel stock details for next month updation + + $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); + $previousMonthStartDate = "$previousMonth-01"; + $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); + + $data['previousMonthDieselMachineStockDetails'] = $this->factoryVehicleDieselDetails_model + ->select(['machine_id', 'date', 'closing_reading']) + ->distinct() + ->where('date =', $previousMonthEndDate) + ->groupBy(['machine_id', 'date']) + ->orderBy('date', 'desc') + ->orderBy('machine_id', 'asc') + ->findAll(); + + + $data['previousMonthTotalDieselMachineStockDetails'] = $this->factoryVehicleDieselStockSummary_model + ->select(['id', 'date', 'balance_stock']) + ->distinct() + ->where('date =', $previousMonthEndDate) + ->groupBy(['id', 'date']) + ->orderBy('date', 'desc') + ->findAll(); + + + + // checking in database if the data is available for the month + + $startDate = "$month-01"; + $endDate = date("Y-m-t", strtotime($startDate)); + + $data['dieselMachineStockDetails'] = $this->factoryVehicleDieselDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->whereIn('machine_id',$machineCodeList) + ->groupBy(['machine_id', 'date']) + ->orderBy('date', 'asc') + ->orderBy('machine_id', 'asc') + ->findAll(); + + + $data['totalDiesel'] = $this->factoryVehicleDieselStockSummary_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->orderBy('date', 'asc') + ->findAll(); + + // Initialize an empty array to hold the grouped data + $data['groupedDieselMachineStockDetails'] = []; + + // Temporary array to store grouped data by date + $groupedByDate = []; + + // Group by 'date' + foreach ($data['dieselMachineStockDetails'] as $detail) { + $date = $detail['date']; + + // Initialize the outer array for this date if it doesn't exist + if (!isset($groupedByDate[$date])) { + $groupedByDate[$date] = []; + } + + /******************************************************************************************************************* + creating an sub array (inner array) for date wise and append the detail into an array as sub-array + + $groupedByDate[] outer array + + $groupedByDate[$date] + will look like [[material1],[material2],[material3],[material4],[material5]] inner array + + the above process is done for single row (date wise) and the same process is repeated for all the rows + *******************************************************************************************************************/ + + $groupedByDate[$date][] = $detail; + } + + // Reset the structure to have indexed arrays without the date keys + $data['groupedDieselMachineStockDetails'] = array_values($groupedByDate); + + + + //temp_code_s_2025_02 + + // getting diesel machines for creating table headers + // checking already existing stock if yes then get the diesel machines id from the existing stock + // if not get all the diesel machines from the factory Machine master table + + // if (!empty($data['groupedDieselMachineStockDetails'])) { + + // $result = $groupedByDate[$date]; + + // $distinctMachineId = []; + + // foreach ($result as $index => $eachResult) { + // $distinctMachineId[] = $result[$index]['machine_id']; + // } + + // $dieselMachines = $this->factoryMachine_model + // ->whereIn('id', $distinctMachineId) + // ->orderBy('id', 'asc') + // ->get() + // ->getResultArray(); + + + // } else { + + // $dieselMachines = $this->factoryMachine_model + // ->where('is_active', 1) + // ->where('energy_type', 'Diesel') + // ->orderBy('id', 'asc') + // ->get() + // ->getResultArray(); + + // } + + //temp_code_e_2025_02 + + + + + + $dieselMachinesCount = count($dieselMachines); + + $data['dieselMachinesCount'] = $dieselMachinesCount; + $data['dieselMachines'] = $dieselMachines; + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate ; + + // return $this->response->setJSON(['status' =>'success' ,'message' => $data['dieselMachines']]); + + return $this->loadViews("stock/dieselStockDetails", $this->global, $data, NULL); + + + + + } + + public function updateDieselMachineDetails() { + + $postData = $this->request->getPost(); + $updateDmDetailsData = json_decode($postData['updateDieselMachineDetails'], true); + + $updateTotalDmDetailsData = $updateDmDetailsData[0]; + $updateDmDetailsData = $updateDmDetailsData[1]; + + $updatesDmR = []; + $insertsDmR = []; + $updatesTotalDmR = []; + $insertsTotalDmR = []; + + // Fetch existing records in bulk for diesel machine details + $dates = array_column($updateDmDetailsData, 'date'); + $machineIds = array_column($updateDmDetailsData, 'machine_id'); + $existingDmRecords = $this->factoryVehicleDieselDetails_model + ->whereIn('date', $dates) + ->whereIn('machine_id', $machineIds) + ->findAll(); + + $existingDmMap = []; + foreach ($existingDmRecords as $record) { + $existingDmMap[$record['date']][$record['machine_id']] = $record; + } + + foreach ($updateDmDetailsData as $data) { + $date = $data['date']; + $machineId = $data['machine_id']; + + $dbData = [ + 'date' => $data['date'], + 'machine_id' => $data['machine_id'], + 'opening_reading' => $data['opening_reading'], + 'closing_reading' => $data['closing_reading'], + 'filling_diesel' => $data['filling_diesel'], + 'consumption' => $data['consumption'], + 'running_hours' => $data['running_hours'], + 'mileage' => $data['mileage'] + ]; + + if (isset($existingDmMap[$date][$machineId])) { + $dbData['id'] = $existingDmMap[$date][$machineId]['id']; + $updatesDmR[] = $dbData; + } else { + $insertsDmR[] = $dbData; + } + } + + // Fetch existing records in bulk for diesel stock summary + $dates = array_column($updateTotalDmDetailsData, 'date'); + $existingTotalDmRecords = $this->factoryVehicleDieselStockSummary_model + ->whereIn('date', $dates) + ->findAll(); + + $existingTotalDmMap = []; + foreach ($existingTotalDmRecords as $record) { + $existingTotalDmMap[$record['date']] = $record; + } + + foreach ($updateTotalDmDetailsData as $data) { + $date = $data['date']; + + $dbData = [ + 'date' => $data['date'], + 'opening_stock' => $data['opening_stock'], + 'purchase_diesel' => $data['purchase_diesel'], + 'total_filling_diesel' => $data['total_filling_diesel'], + 'balance_stock' => $data['balance_stock'] + ]; + + if (isset($existingTotalDmMap[$date])) { + $dbData['id'] = $existingTotalDmMap[$date]['id']; + $updatesTotalDmR[] = $dbData; + } else { + $insertsTotalDmR[] = $dbData; + } + } + + // Start the transaction + $this->db->transBegin(); + + try { + if (!empty($insertsDmR)) { + $this->factoryVehicleDieselDetails_model->insertBatch($insertsDmR); + } + + if (!empty($updatesDmR)) { + $this->factoryVehicleDieselDetails_model->updateBatch($updatesDmR, 'id'); + } + + if (!empty($insertsTotalDmR)) { + $this->factoryVehicleDieselStockSummary_model->insertBatch($insertsTotalDmR); + } + + if (!empty($updatesTotalDmR)) { + $this->factoryVehicleDieselStockSummary_model->updateBatch($updatesTotalDmR, 'id'); + } + + // Commit the transaction if all operations are successful + $this->db->transCommit(); + echo "Data Saved Successfully"; + + } catch (\Exception $error) { + // Rollback the transaction in case of any errors + $this->db->transRollback(); + echo "An error occurred: " . $error->getMessage(); } } - $zip->close(); - - $response = $this->response->download($zipFilePath, null)->setFileName($zipFileName); - // Delete ZIP after response is sent - register_shutdown_function(function () use ($zipFilePath) { - if (file_exists($zipFilePath)) { - unlink($zipFilePath); + + //power stock details + public function powerConsumptionDetails(){ + + + if ($this->request->getMethod() === 'POST') { + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); //in M-Y format + + $formattedDate = $date->format('Y-m'); //in Y-m format + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + + } else { + + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } } - }); - - return $response; - } - - return redirect()->back()->with('error', 'Failed to create ZIP file.'); - } - - // Example function to get batchcard files from DB - private function getBatchCardFiles($coatingId) - { - $batchCardFiles = $this->db->table('t_batchcard_files') - ->where('coating_id', $coatingId) - ->get() - ->getResultArray(); - - return $batchCardFiles; - } - - - //incoming Silica Sand Details starts - public function loadView_incomingSilicaSandDetails() - { + $data = []; - if ($this->request->getMethod() === 'POST') { + $data['month'] = $month; - $remark = $this->request->getPost('remark'); - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); + $this->global['pageTitle'] = 'Power Consumption Stock Details'; - } else { - $remark = $this->request->getVar('remark'); + - $session = session(); + //filter part starts - $month = $session->get('stock_month'); + //start date dynamic from front-end + $startDate = "$month-01"; + //end date of given month + $endDate = date("Y-m-t", strtotime($startDate)); + + + //filter applied currently + $customisedMachineCodes = $this->request->getPost('customisedMachineCodes') ?? []; + + + //already applied filter + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->select('machine_id') + ->where('date',"$month-01") + ->where('machine_category','electric') + ->findAll(); + + + //check user applies for filter currently + if(!empty($customisedMachineCodes)){ + + //user applied filter, + + //check already filter existing , if exists remove that , + if(!empty($existingCustomMachineCodes)){ + + //hard delete done..!! + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->where('date',"$month-01") + ->where('machine_category','electric') + ->delete(); + + } + + + //if no filter already exists or removed current one , just add current filter for that month ....!! + $inserts = []; + + foreach($customisedMachineCodes as $index => $customisedMachineCode){ + + $inserts [] = [ + 'date' => "$month-01", + 'machine_category' => "electric", + 'machine_id' => $customisedMachineCode + ]; + + + //checking filtered material code present in table , if not create dummy one for whole month + $findMachineCode = $this->powerConsumptionDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->where('machine_id',$customisedMachineCode) + ->findAll(); + + + //check any material code is not present in stock table but applied in filter + if(empty($findMachineCode)){ + + + //create dummy entry for this + $this->createDummyEntryForElectricMachine($customisedMachineCode,$startDate,$endDate); + } + + } + + if(!empty($inserts)){ + //insert all the latest applied filter + $this->monthWiseMachineInStockModel->insertBatch($inserts); + + //get the currently applied filter + $existingCustomMachineCodes = $this->monthWiseMachineInStockModel + ->select('machine_id') + ->where('date',"$month-01") + ->where('machine_category','electric') + ->get() + ->getResultArray(); + + } + + } + + + //possible if no filter applied at all...!!! + if(empty($existingCustomMachineCodes)){ + //no filter applied at all just present all active material codes + $existingCustomMachineCodes = $this->factoryMachine_model + ->getAllActiveElectricMachines(); + }else{ + //if filter present,get that material codes + $existingCustomMachineCodes = $this->factoryMachine_model + ->getSelectedElectricMachines(array_column($existingCustomMachineCodes, 'machine_id')); + } + + + + //this existingCustomMachineCodes gets its machine after visiting factory machine master table + $machineCodeList = array_column($existingCustomMachineCodes, 'id'); + + $electricMachines = $existingCustomMachineCodes; + + $data['activeElectricMachines'] = $this->factoryMachine_model->getAllActiveElectricMachines(); + + + + + + + + + + + // Get the previous month's last date power consumption stock details for next month updation + + $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); + $previousMonthStartDate = "$previousMonth-01"; + $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); + + $data['previousMonthPowerConsumptionStockDetails'] = $this->powerConsumptionDetails_model + ->select(['machine_id', 'date', 'closing_units']) + ->distinct() + ->where('date =', $previousMonthEndDate) + ->groupBy(['machine_id', 'date']) + ->orderBy('date', 'desc') + ->orderBy('machine_id', 'asc') + ->findAll(); + + $data['previousMonthTotalPowerMachineStockDetails'] = $this->powerConsumptionSummary_model + ->select(['id', 'date', 'final_reading']) + ->distinct() + ->where('date =', $previousMonthEndDate) + ->groupBy(['id', 'date']) + ->orderBy('date', 'desc') + ->findAll(); + + + + // checking in database if the data is available for the month + + + + $data['powerConsumptionStockDetails'] = $this->powerConsumptionDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->whereIn('machine_id',$machineCodeList) + ->groupBy(['machine_id', 'date']) + ->orderBy('date', 'asc') + ->orderBy('machine_id', 'asc') + ->findAll(); + + $data['totalPower'] = $this->powerConsumptionSummary_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->orderBy('date', 'asc') + ->findAll(); + + // Initialize an empty array to hold the grouped data + $data['groupedPowerConsumptionStockDetails'] = []; + + // Temporary array to store grouped data by date + $groupedByDate = []; + + // Group by 'date' + foreach ($data['powerConsumptionStockDetails'] as $detail) { + $date = $detail['date']; + + // Initialize the outer array for this date if it doesn't exist + if (!isset($groupedByDate[$date])) { + $groupedByDate[$date] = []; + } + + /******************************************************************************************************************* + creating an sub array (inner array) for date wise and append the detail into an array as sub-array + + $groupedByDate[] outer array + + $groupedByDate[$date] + will look like [[material1],[material2],[material3],[material4],[material5]] inner array + + the above process is done for single row (date wise) and the same process is repeated for all the rows + *******************************************************************************************************************/ + + $groupedByDate[$date][] = $detail; + } + + // Reset the structure to have indexed arrays without the date keys + $data['groupedPowerConsumptionStockDetails'] = array_values($groupedByDate); + + + //temp_code_s_2025_02 + + // getting electric machines for creating table headers + // checking already existing stock if yes then get the electric machines id from the existing stock + // if not get all the electric machines from the factory Machine master table + + // if (!empty($data['groupedPowerConsumptionStockDetails'])) { + + // $result = $groupedByDate[$date]; + + // $distinctMachineId = []; + + // foreach ($result as $index => $eachResult) { + // $distinctMachineId[] = $result[$index]['machine_id']; + // } + + // $electricMachines = $this->factoryMachine_model->getSelectedElectricMachines($distinctMachineId); + + + // } else { + + // $electricMachines = $this->factoryMachine_model->getAllActiveElectricMachines(); + + // } + + //temp_code_e_2025_02 + + + + $electricMachinesCount = count($electricMachines); + + $data['electricMachinesCount'] = $electricMachinesCount; + $data['electricMachines'] = $electricMachines; + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate; + + // return $this->response->setJSON(['status' =>'success' ,'message' => $data['electricMachines']]); + + return $this->loadViews("stock/powerConsumptionDetails", $this->global, $data, NULL); - if (empty($month)) { - $month = date('Y-m'); // Default to the current month } - } + public function updatePowerConsumptionDetails(){ - $data['month'] = $month; + //pm stands for power machine + + + $postData = $this->request->getPost(); - $this->global['pageTitle'] = 'Incoming Silica Sand Details'; + $updatePowerConsumptionDetailsData = json_decode($postData['updatePowerConsumptionDetails'], true); - $materialCodes = []; + $updateTotalPmDetailsData = $updatePowerConsumptionDetailsData[0]; + $updatePmDetailsData = $updatePowerConsumptionDetailsData[1]; + + //PmR stands for power machine readings - $silicaSandMaterialCodes = $this->rawmaterialdetails_model->getAllSilicaRawMaterialCode(); + $updatesPmR = []; + $insertsPmR = []; - $materialCodes [] = $silicaSandMaterialCodes; + $updatesTotalPmR = []; + $insertsTotalPmR = []; - $wasteCoreSandMaterialCodes = $this->rawmaterialdetails_model->getAllWasteCoreSandMaterialCode(); + // Fetch existing records in bulk for power machine details + $dates = array_column($updatePmDetailsData, 'date'); + $machineIds = array_column($updatePmDetailsData, 'machine_id'); + $existingPmRecords = $this->powerConsumptionDetails_model + ->whereIn('date', $dates) + ->whereIn('machine_id', $machineIds) + ->findAll(); + + $existingPmMap = []; + foreach ($existingPmRecords as $record) { + $existingPmMap[$record['date']][$record['machine_id']] = $record; + } + + foreach ($updatePmDetailsData as $data) { + $date = $data['date']; + $machineId = $data['machine_id']; + + $dbData = [ + 'date' => $data['date'], + 'machine_id' => $data['machine_id'], + 'opening_units' => $data['opening_units'], + 'closing_units' => $data['closing_units'], + 'total_units' => $data['total_units'], + ]; + + if (isset($existingPmMap[$date][$machineId])) { + $dbData['id'] = $existingPmMap[$date][$machineId]['id']; + $updatesPmR[] = $dbData; + } else { + $insertsPmR[] = $dbData; + } + } + + // Fetch existing records in bulk for power stock summary + $dates = array_column($updateTotalPmDetailsData, 'date'); + $existingTotalPmRecords = $this->powerConsumptionSummary_model + ->whereIn('date', $dates) + ->findAll(); + + $existingTotalPmMap = []; + foreach ($existingTotalPmRecords as $record) { + $existingTotalPmMap[$record['date']] = $record; + } + + foreach ($updateTotalPmDetailsData as $data) { + $date = $data['date']; + + $dbData = [ + 'date' => $data['date'], + 'opening_reading' => $data['opening_reading'], + 'final_reading' => $data['final_reading'], + 'total_reading' => $data['total_reading'], + 'total_units' => $data['total_units'], + 'average_pf' => $data['average_pf'], + 'present_pf' => $data['present_pf'], + 'md' => $data['md'], + 'mf' => $data['mf'] + ]; + + if (isset($existingTotalPmMap[$date])) { + $dbData['id'] = $existingTotalPmMap[$date]['id']; + $updatesTotalPmR[] = $dbData; + } else { + $insertsTotalPmR[] = $dbData; + } + } + + // Start the transaction + $this->db->transBegin(); + + try { + if (!empty($insertsPmR)) { + $this->powerConsumptionDetails_model->insertBatch($insertsPmR); + } + + if (!empty($updatesPmR)) { + $this->powerConsumptionDetails_model->updateBatch($updatesPmR, 'id'); + } + + if (!empty($insertsTotalPmR)) { + $this->powerConsumptionSummary_model->insertBatch($insertsTotalPmR); + } + + if (!empty($updatesTotalPmR)) { + $this->powerConsumptionSummary_model->updateBatch($updatesTotalPmR, 'id'); + } + + // Commit the transaction if all operations are successful + $this->db->transCommit(); + echo "Data Saved Successfully"; + + } catch (\Exception $error) { + // Rollback the transaction in case of any errors + $this->db->transRollback(); + echo "An error occurred: " . $error->getMessage(); + } - $materialCodes [] = $wasteCoreSandMaterialCodes; - - $materialCodes = call_user_func_array('array_merge', $materialCodes); - - - if (!empty($materialCodes)) { - $data['igrDetails'] = $this->inwardGateRegister_model->findIgrDetailsForIncomingSilicaSand($materialCodes, $month, $remark); - } else { - $data['igrDetails'] = []; - } - - $data['testedBy'] = []; - - $DesignationConfigID = 'C010'; - - $data['testedBy'] = $this->employeedetails_model->incomingSilicaSandTestedBy($DesignationConfigID); - - $data['approvedBy'] = $this->employeedetails_model->incomingSilicaSandApprovedBy($DesignationConfigID); - - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate; - - $data['remark'] = $remark; - - return $this->loadViews("stock/incomingSilicaSandDetails", $this->global, $data, NULL); - } - - public function updateIncomingSilicaSandDetails() - { - - $postData = $this->request->getPost(); - - $incomingSilicaSandDetailsData = json_decode($postData['incomingSilicaSandDetailsData'], true); - - $inserts = []; - $updates = []; - - foreach ($incomingSilicaSandDetailsData as $data) { - - $id = $data['id']; - - $dbData = [ - 'igrNo_fk' => $data['IGR No'], - 'materialCode' => $data['MaterialCode'], - 'grade' => $data['Grade'], - 'gradeCondition' => $data['Grade Condition'], - '_10' => $data['___10___'], - '_20' => $data['___20___'], - '_30' => $data['___30___'], - '_40' => $data['___40___'], - '_50' => $data['___50___'], - '_70' => $data['___70___'], - '_100' => $data['___100___'], - '_140' => $data['___140___'], - '_200' => $data['___200___'], - '_300' => $data['___300___'], - 'pan' => $data['PAN'], - 'total' => $data['Total'], - 'afsSpec' => $data['AFS Spec'], - 'afsActual' => $data['AFS Actual'], - 'plus20loss' => $data['Plus 20 loss%'], - 'plus30Loss' => $data['Plus 30 Loss %'], - 'moistureSpec' => $data['Moisture % Spec'], - 'moistureActual' => $data['Moisture Actual'], - 'moistureLoss' => $data['Moisture Loss'], - 'moistureLossQty' => $data['Moisture loss Qty'], - 'sieveLossQty' => $data['Sieve Loss Qty'], - 'salableQty' => $data['Salable Qty'], - 'remark' => $data['Remark'] - - ]; - - - - $resultExists = $this->incomingSilicaSandDetails_model - ->where('id', $id) - ->first(); - - if (!empty($resultExists)) { - $dbData['id'] = $resultExists['id']; - $updates[] = $dbData; - } else { - $inserts[] = $dbData; } - } - - if (!empty($updates)) { - $updated = $this->incomingSilicaSandDetails_model->updateBatch($updates, 'id'); - } - - if (!empty($inserts)) { - $inserted = $this->incomingSilicaSandDetails_model->insertBatch($inserts); - } - - echo "Data Saved Successfully"; - } - - public function updateLabReport() - { - - $postData = $this->request->getPost(); - - $id = $postData['id']; - - $dbData = [ - 'igrNo_fk' => $postData['igrNo'], - 'materialCode' => $postData['materialCode'], - '_10' => $postData['_10Mm'], - '_20' => $postData['_20Mm'], - '_30' => $postData['_30Mm'], - '_40' => $postData['_40Mm'], - '_50' => $postData['_50Mm'], - '_70' => $postData['_70Mm'], - '_100' => $postData['_100Mm'], - '_140' => $postData['_140Mm'], - '_200' => $postData['_200Mm'], - '_300' => $postData['_300Mm'], - 'pan' => $postData['pan'], - 'total' => $postData['total'], - 'plus20Loss' => $postData['plus20Loss'], - 'plus30Loss' => $postData['plus30Loss'], - 'moistureSpec' => $postData['moistureSpec'], - 'moistureActual' => $postData['moistureActual'], - 'moistureLoss' => $postData['moistureLoss'], - 'moistureLossQty' => $postData['moistureLossQty'], - 'sieveLossQty' => $postData['sieveLossQty'], - 'salableQty' => $postData['salableQty'], - 'testedBy' => $postData['testedBy'], - 'approvedBy' => $postData['approvedBy'], - 'clayOrLossOfIgnition' => $postData['clayOrLossOfIgnition'], - 'reportComments' => $postData['reportComments'], - 'gradeRange' => $postData['gradeRange'], - 'reportTime' => $postData['reportTime'] - - ]; - - - - $resultExists = $this->incomingSilicaSandDetails_model - ->where('id', $id) - ->first(); - if ($resultExists) { - $updated = $this->incomingSilicaSandDetails_model - ->update($id, $dbData); - } else { - $updated = $this->incomingSilicaSandDetails_model - ->insert($dbData); - } - if ($updated) { - return $this->response->setJSON(['status' => 'success', 'message' => 'Data Updated Successfully']); - } else { - return $this->response->setJSON(['status' => 'error', 'message' => 'Failed to update data']); - } - } + //Dust And Rough Stock Details + public function loadView_dustAndRoughStockDetails() + { + + if ($this->request->getMethod() === 'POST') { + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } + } + + $data = []; + + $data['month'] = $month; + + $this->global['pageTitle'] = 'Dust And Rough Stock Details'; + + $startDate = "$month-01"; + $endDate = date("Y-m-t", strtotime($startDate)); + $data['dustAndRoughStockDetails'] = $this->dustAndRoughStockDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->orderBy('date', 'asc') + ->findAll(); + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate; + + return $this->loadViews("stock/dustAndRoughStockDetails", $this->global, $data, NULL); + } + + + public function updateDustAndRoughStockDetails() + { + + $postData = $this->request->getPost(); + + $updateDustAndRoughStockDetailsData = json_decode($postData['updateDustAndRoughStockDetails'], true); + + $updates = []; + + $inserts = []; + + foreach ($updateDustAndRoughStockDetailsData as $data) { + + $data['date'] = DateTime::createFromFormat('d-m-Y', $data['date'])->format('Y-m-d'); + + $date = $data['date']; + + $dbData = [ + 'date' => $data['date'], + 'finalRough' => $data['finalRough'], + 'dust' => $data['dust'], + 'total' => $data['total'] + ]; + + $resultExists = $this->dustAndRoughStockDetails_model + ->where('date', $date) + ->first(); - // Bag Stock details starts + if (empty($resultExists)) { + $inserts[] = $dbData; + } else { + $updates[] = $dbData; + } + } + + if (!empty($inserts)) { + $this->dustAndRoughStockDetails_model->insertBatch($inserts); + } + + if (!empty($updates)) { + + $updateResult = $this->dustAndRoughStockDetails_model->updateBatch($updates, 'date'); + + if ($updateResult === FALSE) { + echo "Error during update"; + } else { + echo "Data Updated Successfully"; + return; + } + } + + echo "Data Saved Successfully"; + } + + + //Resin Stock Details + public function loadView_resinStockDetails() + { + + if ($this->request->getMethod() === 'POST') { + + $month = $this->request->getPost('month'); + + $date = DateTime::createFromFormat('M-Y', $month); + + $formattedDate = $date->format('Y-m'); + + $month = $formattedDate; + + $session = session (); + + $session->set('stock_month',$month); + + } else { + $session = session(); + + $month = $session->get('stock_month'); + + if (empty($month)) { + $month = date('Y-m'); // Default to the current month + } + } + + $data = []; + + $data['month'] = $month; + + $this->global['pageTitle'] = 'Resin Stock Details'; + + $startDate = "$month-01"; + $endDate = date("Y-m-t", strtotime($startDate)); + + + + $customisedMaterialCodes = $this->request->getPost('customisedMaterialCodes') ?? []; + + $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel + ->select('materialCode') + ->where('date',"$month-01") + ->where('stock_category','resin') + ->findAll(); + + + //check user applies for filter currently + if(!empty($customisedMaterialCodes)){ + + //user applied filter, + + //check already filter existing , if exists remove that , + if(!empty($existingCustomMaterialCodes)){ + + //hard delete done..!! + $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel + ->where('date',"$month-01") + ->where('stock_category','resin') + ->delete(); + + } + + + //if no filter already exists or removed current one , just add current filter for that month ....!! + $inserts = []; + + foreach($customisedMaterialCodes as $index => $customisedMaterialCode){ + + $inserts [] = [ + 'date' => "$month-01", + 'stock_category' => "resin", + 'materialCode' => $customisedMaterialCode + ]; + + //checking filtered material code present in table , if not create dummy one for whole month + $findMaterialCode = $this->resinStockDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->where('materialCode',$customisedMaterialCode) + ->findAll(); + + //check any material code is not present in stock table but applied in filter + if(empty($findMaterialCode)){ + //create dummy entry for that + $this->createDummyEntryForResin($customisedMaterialCode,$startDate,$endDate); + } + + } + + if(!empty($inserts)){ + //insert all the latest applied filter + $this->monthWiseMaterialInStockModel->insertBatch($inserts); + + //get the currently applied filter + $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel + ->select('materialCode') + ->where('date',"$month-01") + ->where('stock_category','resin') + ->get()->getResultArray(); + + } + + } + + + //possible if no filter applied at all...!!! + if(empty($existingCustomMaterialCodes)){ + //no filter applied at all just present all active material codes + $existingCustomMaterialCodes = $this->rawmaterialdetails_model->getAllResinMaterialCode(); + }else{ + //if filter present,get that material codes + $existingCustomMaterialCodes = $this->rawmaterialdetails_model + ->getSelectedResinMaterialCode(array_column($existingCustomMaterialCodes, 'materialCode')); + } + + + $materialCodeList = array_column($existingCustomMaterialCodes, 'MaterialCode'); + + $resinMaterials = $existingCustomMaterialCodes ; + + $data['activeResinMaterials'] = $this->rawmaterialdetails_model->getAllResinMaterialCode(); + + + + // Get the previous month's last date resin stock details for next month updation + + $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); + $previousMonthStartDate = "$previousMonth-01"; + $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); + $data['previousMonthResinStockDetails'] = $this->resinStockDetails_model + ->select(['materialCode', 'date', 'balanceStock']) + ->distinct() + ->where('date =', $previousMonthEndDate) + ->groupBy(['materialCode', 'date']) + ->orderBy('date', 'desc') + ->orderBy('materialCode', 'asc') + ->findAll(); + + + + // checking in database if the data is available for the month + + + + $data['resinStockDetails'] = $this->resinStockDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->whereIn('materialCode',$materialCodeList) + ->groupBy(['materialCode', 'date']) + ->orderBy('date', 'asc') + ->orderBy('materialCode', 'asc') + ->findAll(); + + // Initialize an empty array to hold the grouped data + $data['groupedResinStockDetails'] = []; + + // Temporary array to store grouped data by date + $groupedByDate = []; + + // Group by 'date' + foreach ($data['resinStockDetails'] as $detail) { + $date = $detail['date']; + + // Initialize the outer array for this date if it doesn't exist + if (!isset($groupedByDate[$date])) { + $groupedByDate[$date] = []; + } + + /******************************************************************************************************************* + creating an sub array (inner array) for date wise and append the detail into an array as sub-array + + $groupedByDate[] outer array + + $groupedByDate[$date] + will look like [[material1],[material2],[material3],[material4],[material5]] inner array + + the above process is done for single row (date wise) and the same process is repeated for all the rows + *******************************************************************************************************************/ + + $groupedByDate[$date][] = $detail; + } + + // Reset the structure to have indexed arrays without the date keys + $data['groupedResinStockDetails'] = array_values($groupedByDate); + + + //temp_code_s_2025_02 + + // getting resin material for creating table headers + // checking already existing stock if yes then get the material code from the existing stock + // if not get all the material codes currently isActive from the raw material details table + + // if (!empty($data['groupedResinStockDetails'])) { + + // $result = $groupedByDate[$date]; + + // $distinctMaterialCodes = []; + + // foreach ($result as $index => $eachResult) { + // $distinctMaterialCodes[] = $result[$index]['materialCode']; + // } + + // $resinMaterials = $this->rawmaterialdetails_model->getSelectedResinMaterialCode($distinctMaterialCodes); + + // } else { + + // $resinMaterials = $this->rawmaterialdetails_model->getAllResinMaterialCode(); + + // } + + //temp_code_e_2025_02 + + + // getting customer for creating table headers + // checking already existing stock if yes then get customer from the existing stock + // if not set customer in db , then set '' empty string + + foreach ($resinMaterials as $key => $resinMaterial) { + $materialCode = $resinMaterial['MaterialCode']; + $resinMaterials[$key]['customers'] = $this->resinStockDetails_model + ->select('customer') + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->where('materialCode', $materialCode) + ->first()['customer'] ?? ''; + } + + $resinMaterialCount = count($resinMaterials); + + $data['resinMaterialCount'] = $resinMaterialCount; + $data['resinMaterials'] = $resinMaterials; + + $date = DateTime::createFromFormat('Y-m', $month); + + $formattedDate = $date->format('M-Y'); + + $data['month'] = $formattedDate; + + return $this->loadViews("stock/resinStockDetails", $this->global, $data, NULL); + } + + + + public function updateResinStockDetails() + { + + + $postData = $this->request->getPost(); + + $updateResinStockDetailsData = json_decode($postData['updateResinStockDetails'], true); + + $updates = []; + + $inserts = []; + + foreach ($updateResinStockDetailsData as $data) { + + $date = $data['date']; + $materialCode = $data['materialCode']; + + + $dbData = [ + 'date' => $data['date'], + 'materialCode' => $data['materialCode'], + 'customer' => $data['customer'], + 'opening' => $data['opening'], + 'receipt' => $data['receipt'], + 'used' => $data['used'], + 'balanceStock' => $data['balanceStock'], + ]; + + $resultExists = $this->resinStockDetails_model + ->where('date', $date) + ->where('materialCode', $materialCode) + ->first(); + + + if (empty($resultExists)) { + $inserts[] = $dbData; + } else { + $dbData['id'] = $resultExists['id']; + $updates[] = $dbData; + } + } + + + if (!empty($inserts)) { + $this->resinStockDetails_model->insertBatch($inserts); + } + + if (!empty($updates)) { + + $updateResult = $this->resinStockDetails_model->updateBatch($updates, 'id'); + + if ($updateResult === FALSE) { + echo "Error during update"; + } else { + echo "Data Updated Successfully"; + return; + } + } + + echo "Data Saved Successfully"; + } + + public function createDummyEntryForResin($customisedMaterialCode, $startDate, $endDate) + { + if (!empty($customisedMaterialCode)) { + $inserts = []; + + // Convert start and end date to timestamps + $startTimestamp = strtotime($startDate); + $endTimestamp = strtotime($endDate); + + while ($startTimestamp <= $endTimestamp) { + $inserts[] = [ + 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format + 'materialCode' => $customisedMaterialCode, + 'customer' => ' ', + 'opening' => ' ', + 'receipt' => ' ', + 'used' => ' ', + 'balanceStock' => ' ', + ]; + + $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day + } + + if (!empty($inserts)) { + $this->resinStockDetails_model->insertBatch($inserts); + } + } + } + + + // Bag Stock details starts //custom filterMaterialCode given by user @@ -756,11 +2424,6 @@ class StockController extends BaseController // Action - - - - - public function loadView_bagStockDetails() { @@ -837,21 +2500,21 @@ class StockController extends BaseController 'date' => "$month-01", 'stock_category' => "packing_material", 'materialCode' => $customisedMaterialCode - ]; + ]; - //checking filtered material code present in table , if not create dummy one for whole month - $findMaterialCode = $this->bagStockDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->where('materialCode',$customisedMaterialCode) - ->findAll(); + //checking filtered material code present in table , if not create dummy one for whole month + $findMaterialCode = $this->bagStockDetails_model + ->where('date >=', $startDate) + ->where('date <=', $endDate) + ->where('materialCode',$customisedMaterialCode) + ->findAll(); - //check any material code is not present in stock table but applied in filter - if(empty($findMaterialCode)){ + //check any material code is not present in stock table but applied in filter + if(empty($findMaterialCode)){ //create dummy entry for that $this->createDummyEntryForBag($customisedMaterialCode,$startDate,$endDate); - } - + } + } if(!empty($inserts)){ @@ -905,7 +2568,7 @@ class StockController extends BaseController - // checking in database if the data is available for the month + // checking in database if the data is available for the month $data['bagStockDetails'] = $this->bagStockDetails_model ->where('date >=', $startDate) @@ -935,12 +2598,12 @@ class StockController extends BaseController /******************************************************************************************************************* creating an sub array (inner array) for date wise and append the detail into an array as sub-array - $groupedByDate[] outer array + $groupedByDate[] outer array - $groupedByDate[$date] - will look like [[bag1],[bag2],[bag3],[bag4],[bag5]] inner array + $groupedByDate[$date] + will look like [[bag1],[bag2],[bag3],[bag4],[bag5]] inner array - the above process is done for single row (date wise) and the same process is repeated for all the rows + the above process is done for single row (date wise) and the same process is repeated for all the rows *******************************************************************************************************************/ @@ -969,7 +2632,7 @@ class StockController extends BaseController // } // $bagMaterials = $this->rawmaterialdetails_model->getSelectedBagMaterialCode($distinctMaterialCodes); - + // } else { // $bagMaterials = $this->rawmaterialdetails_model->getAllBagMaterialCode(); // } @@ -1064,817 +2727,8 @@ class StockController extends BaseController } - //Dust And Rough Stock Details - public function loadView_dustAndRoughStockDetails() - { - if ($this->request->getMethod() === 'POST') { - $month = $this->request->getPost('month'); - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - } else { - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month - } - } - - $data = []; - - $data['month'] = $month; - - $this->global['pageTitle'] = 'Dust And Rough Stock Details'; - - $startDate = "$month-01"; - $endDate = date("Y-m-t", strtotime($startDate)); - $data['dustAndRoughStockDetails'] = $this->dustAndRoughStockDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->orderBy('date', 'asc') - ->findAll(); - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate; - - return $this->loadViews("stock/dustAndRoughStockDetails", $this->global, $data, NULL); - } - - public function updateDustAndRoughStockDetails() - { - - $postData = $this->request->getPost(); - - $updateDustAndRoughStockDetailsData = json_decode($postData['updateDustAndRoughStockDetails'], true); - - $updates = []; - - $inserts = []; - - foreach ($updateDustAndRoughStockDetailsData as $data) { - - $data['date'] = DateTime::createFromFormat('d-m-Y', $data['date'])->format('Y-m-d'); - - $date = $data['date']; - - $dbData = [ - 'date' => $data['date'], - 'finalRough' => $data['finalRough'], - 'dust' => $data['dust'], - 'total' => $data['total'] - ]; - - $resultExists = $this->dustAndRoughStockDetails_model - ->where('date', $date) - ->first(); - - - if (empty($resultExists)) { - $inserts[] = $dbData; - } else { - $updates[] = $dbData; - } - } - - if (!empty($inserts)) { - $this->dustAndRoughStockDetails_model->insertBatch($inserts); - } - - if (!empty($updates)) { - - $updateResult = $this->dustAndRoughStockDetails_model->updateBatch($updates, 'date'); - - if ($updateResult === FALSE) { - echo "Error during update"; - } else { - echo "Data Updated Successfully"; - return; - } - } - - echo "Data Saved Successfully"; - } - - - //Resin Stock Details - public function loadView_resinStockDetails() - { - - if ($this->request->getMethod() === 'POST') { - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - } else { - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month - } - } - - $data = []; - - $data['month'] = $month; - - $this->global['pageTitle'] = 'Resin Stock Details'; - - $startDate = "$month-01"; - $endDate = date("Y-m-t", strtotime($startDate)); - - - - $customisedMaterialCodes = $this->request->getPost('customisedMaterialCodes') ?? []; - - $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel - ->select('materialCode') - ->where('date',"$month-01") - ->where('stock_category','resin') - ->findAll(); - - - //check user applies for filter currently - if(!empty($customisedMaterialCodes)){ - - //user applied filter, - - //check already filter existing , if exists remove that , - if(!empty($existingCustomMaterialCodes)){ - - //hard delete done..!! - $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel - ->where('date',"$month-01") - ->where('stock_category','resin') - ->delete(); - - } - - - //if no filter already exists or removed current one , just add current filter for that month ....!! - $inserts = []; - - foreach($customisedMaterialCodes as $index => $customisedMaterialCode){ - - $inserts [] = [ - 'date' => "$month-01", - 'stock_category' => "resin", - 'materialCode' => $customisedMaterialCode - ]; - - //checking filtered material code present in table , if not create dummy one for whole month - $findMaterialCode = $this->resinStockDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->where('materialCode',$customisedMaterialCode) - ->findAll(); - - //check any material code is not present in stock table but applied in filter - if(empty($findMaterialCode)){ - //create dummy entry for that - $this->createDummyEntryForResin($customisedMaterialCode,$startDate,$endDate); - } - - } - - if(!empty($inserts)){ - //insert all the latest applied filter - $this->monthWiseMaterialInStockModel->insertBatch($inserts); - - //get the currently applied filter - $existingCustomMaterialCodes = $this->monthWiseMaterialInStockModel - ->select('materialCode') - ->where('date',"$month-01") - ->where('stock_category','resin') - ->get()->getResultArray(); - - } - - } - - - //possible if no filter applied at all...!!! - if(empty($existingCustomMaterialCodes)){ - //no filter applied at all just present all active material codes - $existingCustomMaterialCodes = $this->rawmaterialdetails_model->getAllResinMaterialCode(); - }else{ - //if filter present,get that material codes - $existingCustomMaterialCodes = $this->rawmaterialdetails_model - ->getSelectedResinMaterialCode(array_column($existingCustomMaterialCodes, 'materialCode')); - } - - - $materialCodeList = array_column($existingCustomMaterialCodes, 'MaterialCode'); - - $resinMaterials = $existingCustomMaterialCodes ; - - $data['activeResinMaterials'] = $this->rawmaterialdetails_model->getAllResinMaterialCode(); - - - - // Get the previous month's last date resin stock details for next month updation - - $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); - $previousMonthStartDate = "$previousMonth-01"; - $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); - $data['previousMonthResinStockDetails'] = $this->resinStockDetails_model - ->select(['materialCode', 'date', 'balanceStock']) - ->distinct() - ->where('date =', $previousMonthEndDate) - ->groupBy(['materialCode', 'date']) - ->orderBy('date', 'desc') - ->orderBy('materialCode', 'asc') - ->findAll(); - - - - // checking in database if the data is available for the month - - - - $data['resinStockDetails'] = $this->resinStockDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->whereIn('materialCode',$materialCodeList) - ->groupBy(['materialCode', 'date']) - ->orderBy('date', 'asc') - ->orderBy('materialCode', 'asc') - ->findAll(); - - // Initialize an empty array to hold the grouped data - $data['groupedResinStockDetails'] = []; - - // Temporary array to store grouped data by date - $groupedByDate = []; - - // Group by 'date' - foreach ($data['resinStockDetails'] as $detail) { - $date = $detail['date']; - - // Initialize the outer array for this date if it doesn't exist - if (!isset($groupedByDate[$date])) { - $groupedByDate[$date] = []; - } - - /******************************************************************************************************************* - creating an sub array (inner array) for date wise and append the detail into an array as sub-array - - $groupedByDate[] outer array - - $groupedByDate[$date] - will look like [[material1],[material2],[material3],[material4],[material5]] inner array - - the above process is done for single row (date wise) and the same process is repeated for all the rows - *******************************************************************************************************************/ - - $groupedByDate[$date][] = $detail; - } - - // Reset the structure to have indexed arrays without the date keys - $data['groupedResinStockDetails'] = array_values($groupedByDate); - - - //temp_code_s_2025_02 - - // getting resin material for creating table headers - // checking already existing stock if yes then get the material code from the existing stock - // if not get all the material codes currently isActive from the raw material details table - - // if (!empty($data['groupedResinStockDetails'])) { - - // $result = $groupedByDate[$date]; - - // $distinctMaterialCodes = []; - - // foreach ($result as $index => $eachResult) { - // $distinctMaterialCodes[] = $result[$index]['materialCode']; - // } - - // $resinMaterials = $this->rawmaterialdetails_model->getSelectedResinMaterialCode($distinctMaterialCodes); - - // } else { - - // $resinMaterials = $this->rawmaterialdetails_model->getAllResinMaterialCode(); - - // } - - //temp_code_e_2025_02 - - - // getting customer for creating table headers - // checking already existing stock if yes then get customer from the existing stock - // if not set customer in db , then set '' empty string - - foreach ($resinMaterials as $key => $resinMaterial) { - $materialCode = $resinMaterial['MaterialCode']; - $resinMaterials[$key]['customers'] = $this->resinStockDetails_model - ->select('customer') - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->where('materialCode', $materialCode) - ->first()['customer'] ?? ''; - } - - $resinMaterialCount = count($resinMaterials); - - $data['resinMaterialCount'] = $resinMaterialCount; - $data['resinMaterials'] = $resinMaterials; - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate; - - return $this->loadViews("stock/resinStockDetails", $this->global, $data, NULL); - } - - public function createDummyEntryForResin($customisedMaterialCode, $startDate, $endDate) - { - if (!empty($customisedMaterialCode)) { - $inserts = []; - - // Convert start and end date to timestamps - $startTimestamp = strtotime($startDate); - $endTimestamp = strtotime($endDate); - - while ($startTimestamp <= $endTimestamp) { - $inserts[] = [ - 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format - 'materialCode' => $customisedMaterialCode, - 'customer' => ' ', - 'opening' => ' ', - 'receipt' => ' ', - 'used' => ' ', - 'balanceStock' => ' ', - ]; - - $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day - } - - if (!empty($inserts)) { - $this->resinStockDetails_model->insertBatch($inserts); - } - } - } - - public function createDummyEntryForBag($customisedMaterialCode, $startDate, $endDate) - { - if (!empty($customisedMaterialCode)) { - $inserts = []; - - // Convert start and end date to timestamps - $startTimestamp = strtotime($startDate); - $endTimestamp = strtotime($endDate); - - while ($startTimestamp <= $endTimestamp) { - $inserts[] = [ - 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format - 'materialCode' => $customisedMaterialCode, - 'customer' => ' ', - 'opening' => ' ', - 'receipt' => ' ', - 'used' => ' ', - 'balanceStock' => ' ', - ]; - - $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day - } - - if (!empty($inserts)) { - $this->bagStockDetails_model->insertBatch($inserts); - } - } - } - - public function createDummyEntryForDieselMachine($customisedMachineCode, $startDate, $endDate) - { - if (!empty($customisedMachineCode)) { - $inserts = []; - - // Convert start and end date to timestamps - $startTimestamp = strtotime($startDate); - $endTimestamp = strtotime($endDate); - - while ($startTimestamp <= $endTimestamp) { - $inserts[] = [ - 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format - 'machine_id' => $customisedMachineCode, - 'opening_units' => ' ', - 'closing_units' => ' ', - 'total_units' => ' ', - ]; - - $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day - } - - if (!empty($inserts)) { - $this->factoryVehicleDieselDetails_model->insertBatch($inserts); - } - } - } - - public function createDummyEntryForElectricMachine($customisedMachineCode, $startDate, $endDate) - { - if (!empty($customisedMachineCode)) { - $inserts = []; - - // Convert start and end date to timestamps - $startTimestamp = strtotime($startDate); - $endTimestamp = strtotime($endDate); - - while ($startTimestamp <= $endTimestamp) { - $inserts[] = [ - 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format - 'machine_id' => $customisedMachineCode, - 'opening_units' => ' ', - 'closing_units' => ' ', - 'total_units' => ' ', - ]; - - $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day - } - - if (!empty($inserts)) { - $this->powerConsumptionDetails_model->insertBatch($inserts); - } - } - } - - - public function updateResinStockDetails() - { - - - $postData = $this->request->getPost(); - - $updateResinStockDetailsData = json_decode($postData['updateResinStockDetails'], true); - - $updates = []; - - $inserts = []; - - foreach ($updateResinStockDetailsData as $data) { - - $date = $data['date']; - $materialCode = $data['materialCode']; - - - $dbData = [ - 'date' => $data['date'], - 'materialCode' => $data['materialCode'], - 'customer' => $data['customer'], - 'opening' => $data['opening'], - 'receipt' => $data['receipt'], - 'used' => $data['used'], - 'balanceStock' => $data['balanceStock'], - ]; - - $resultExists = $this->resinStockDetails_model - ->where('date', $date) - ->where('materialCode', $materialCode) - ->first(); - - - if (empty($resultExists)) { - $inserts[] = $dbData; - } else { - $dbData['id'] = $resultExists['id']; - $updates[] = $dbData; - } - } - - - if (!empty($inserts)) { - $this->resinStockDetails_model->insertBatch($inserts); - } - - if (!empty($updates)) { - - $updateResult = $this->resinStockDetails_model->updateBatch($updates, 'id'); - - if ($updateResult === FALSE) { - echo "Error during update"; - } else { - echo "Data Updated Successfully"; - return; - } - } - - echo "Data Saved Successfully"; - } - - - //Gas Stock Details - public function loadView_gasStockDetails() - { - - if ($this->request->getMethod() === 'POST') { - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - } else { - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month - } - } - - $data = []; - - $data['month'] = $month; - - $this->global['pageTitle'] = "Gas Stock Details"; - - - $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); - $previousMonthStartDate = "$previousMonth-01"; - $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); - $data['previousMonthGasStockDetails'] = $this->gasStockDetails_model - ->select('date,balanceStock') - ->where('date =', $previousMonthEndDate) - ->orderBy('date', 'desc') - ->findAll(); - - $startDate = "$month-01"; - $endDate = date("Y-m-t", strtotime($startDate)); - - $data['gasStockDetails'] = $this->gasStockDetails_model - ->select( - 't_gasStockDetails.*, - drier_summary.drierMachineGasconsumption AS drierMachineGasConsumption, - drier_summary.driedSand AS sandDried, - coating_summary.coatingMachineGasconsumption, - coating_summary.coatedSand' - ) - // Subquery with early date filtering - ->join( - '(SELECT date, - SUM(totalGasconsumption) AS coatingMachineGasconsumption, - SUM(totalCoatingSandInKg) / 1000 AS coatedSand - FROM t_coatingMachineDetails - WHERE is_active = 1 - AND date >= ' . $this->db->escape($startDate) . ' - AND date <= ' . $this->db->escape($endDate) . ' - GROUP BY date - ) AS coating_summary', - 'coating_summary.date = t_gasStockDetails.date', - 'left' - ) - ->join( - '(SELECT date, - SUM(total_gas_consumption) AS drierMachineGasconsumption, - SUM(sand_dried_qty) AS driedSand - FROM t_drierMachineDetails - WHERE date >= ' . $this->db->escape($startDate) . ' - AND date <= ' . $this->db->escape($endDate) . ' - GROUP BY date - ) AS drier_summary', - 'drier_summary.date = t_gasStockDetails.date', - 'left' - ) - - ->where('t_gasStockDetails.date >=', $startDate) - ->where('t_gasStockDetails.date <=', $endDate) - ->groupBy('t_gasStockDetails.date') - ->findAll(); - - - - $data['month'] = DateTime::createFromFormat('Y-m', $month)->format('M-Y'); - - return $this->loadViews("stock/gasStockDetails", $this->global, $data, NULL); - } - - public function updateGasStockDetails() - { - - $postData = $this->request->getPost(); - - $updateGasStockDetailsData = json_decode($postData['updateGasStockDetails'], true); - - $updates = []; - - $inserts = []; - - foreach ($updateGasStockDetailsData as $data) { - - $date = $data['date']; - - - $dbData = [ - 'date' => $data['date'] , - 'opening' => $data['opening'] , - 'purchaseBharath' => $data['purchaseBharath'] , - 'purchaseIndian' => $data['purchaseIndian'] , - 'total' => $data['total'] , - 'consumption' => $data['consumption'] , - 'balanceStock' => $data['balanceStock'] , - 'trp_panel_gas_consumption' => $data['trpPanelGasConsumption'] , - 'trp_physical_gas_consumption' => $data['trpPhysicalGasConsumption'] , - 'trp_sand_production' => $data['trpSandProduction'] , - 'rotary_drier_consumption' => $data['rotaryDrierConsumption'] - ]; - - $resultExists = $this->gasStockDetails_model - ->where('date', $date) - ->first(); - - - if (empty($resultExists)) { - $inserts[] = $dbData; - } else { - $dbData['id'] = $resultExists['id']; - $updates[] = $dbData; - } - - } - - - if (!empty($inserts)) { - $this->gasStockDetails_model->insertBatch($inserts); - } - - if (!empty($updates)) { - - $updateResult = $this->gasStockDetails_model->updateBatch($updates, 'id'); - - if ($updateResult === FALSE) { - echo "Error during update"; - } else { - echo "Data Updated Successfully"; - return; - } - } - - echo "Data Saved Successfully Warning..!! Kindly Update the next subsequent month Gas Stock If older month Gas Stock Updated..!!"; - } - - private function updateGasStockConsumption($date, $consumption) - { - - $resultExists = $this->gasStockDetails_model - ->where('date', $date) - ->first(); - - if ($resultExists) { - - - if ($date instanceof DateTime) { - $date = $date->format('Y-m-d'); - } elseif (!strtotime($date)) { - throw new \Exception("Invalid date format provided."); - } else { - $date = date('Y-m-d', strtotime($date)); - } - - $endDate = date('Y-m-t', strtotime($date)); - - - //what happens if the updation is on the last day of the month? - $resultExists = $this->gasStockDetails_model - ->where('date >=', $date) - ->where('date <=', $endDate) - ->orderBy('date', 'asc') - ->findAll(); - - $updatedOpeningStock = 0; - $updates = []; - - - foreach ($resultExists as $index => $result) { - - if ($index == 0) { - $result['consumption'] = (float)($result['consumption']) + (float)($consumption); - $result['total'] = (float)$result['opening'] + (float)$result['purchaseBharath'] + (float)$result['purchaseIndian']; - $result['balanceStock'] = $result['total'] - $result['consumption']; - $updatedOpeningStock = (int)$result['balanceStock']; - } else { - $result['opening'] = (float)$updatedOpeningStock; - $result['total'] = (float)$result['opening'] + (float)$result['purchaseBharath'] + (float)$result['purchaseIndian']; - $result['balanceStock'] = (float)$result['total'] - (float)$result['consumption']; - $updatedOpeningStock = (int)$result['balanceStock']; - } - - - $updates[] = $result; - } - - if (!empty($updates)) { - $result = $this->gasStockDetails_model->updateBatch($updates, 'id'); - return ($result !== false && $result > 0) ? $result : 0; - } else { - return 0; - } - } else { - - - - $previousMonthDate = new DateTime($date); - $previousMonthDate = $previousMonthDate->modify('first day of this month') - ->modify('-1 day') - ->format('Y-m-d'); - - - - $previousMonthResultExists = $this->gasStockDetails_model - ->where('date', $previousMonthDate) - ->first(); - - - - $opening = 0; - - if (!empty($previousMonthResultExists) && isset($previousMonthResultExists['balanceStock'])) { - $opening = $previousMonthResultExists['balanceStock']; - } - - - - $startDate = DateTime::createFromFormat('Y-m-d', $date)->modify('first day of this month')->format('Y-m-d'); - $endDate = DateTime::createFromFormat('Y-m-d', $date)->modify('last day of this month')->format('Y-m-d'); - - $datesInMonth = []; - $inserts = []; - - $period = new DatePeriod( - new DateTime($startDate), - new DateInterval('P1D'), - (new DateTime($endDate))->modify('+1 day') - ); - - foreach ($period as $day) { - $datesInMonth[] = $day->format('Y-m-d'); - } - - foreach ($datesInMonth as $datesInMonthIndex => $dateInMonth) { - - //update previousMonthResultExists - $balanceStock = $opening; - $consumptionForDate = 0; - if ($dateInMonth == $date) { - $consumptionForDate = $consumption; - $balanceStock = $opening - $consumption; - } - - $inserts[] = [ - 'date' => $dateInMonth, - 'opening' => $opening, - 'purchaseBharath' => Null, - 'purchaseIndian' => Null, - 'total' => Null, - 'consumption' => $consumptionForDate, - 'balanceStock' => $balanceStock - ]; - - $opening = $balanceStock; - } - - if (!empty($inserts)) { - $result = $this->gasStockDetails_model->insertBatch($inserts); - return ($result !== false && $result > 0) ? $result : 0; - } else { - return 0; - } - } - } public function trpSandUseStockDetails(){ @@ -2045,9 +2899,32 @@ class StockController extends BaseController $data['wcsSupplierList'] = $result[2] ; - $data['trpAbstract'] = $this->trpAbstract_model->currentMonthTrpAbstract($startDate,$endDate); + + + + + $trpAbstract = $this->trpAbstract_model->where('date', $startDate)->findAll(); + + // dd( $trpAbstract ); + + $groupedTrpAbstract = [] ; + + foreach($trpAbstract as $abs){ + if(!isset($groupedTrpAbstract[$abs['particulars']])){ + $groupedTrpAbstract[$abs['particulars']] = $abs ; + } + } + + $trpAbstract = $groupedTrpAbstract ; + + $data['trpAbstract'] = $trpAbstract ; + + // dd( $data['trpAbstract']['Incoming Raw Sand Details'] ); + + // dd((int)$trpAbstract["Incoming Raw Sand Details"]['opening_stock']); + $date = DateTime::createFromFormat('Y-m', $month); $formattedDate = $date->format('M-Y'); @@ -2285,6 +3162,46 @@ class StockController extends BaseController } + public function updateAbstractDetails() { + $updateAbstractDetails = json_decode($this->request->getPost('updateAbstractDetails'), true); + + if (empty($updateAbstractDetails)) { + echo "No data received"; + return; + } + + + + $date = trim($updateAbstractDetails[0]['date']); + + $monthPresent = $this->trpAbstract_model->where('date', $date)->findAll(); + + if ( count($monthPresent) > 1 ) { // Update existing records + + + foreach ($updateAbstractDetails as $updateAbstractDetail) { + $this->trpAbstract_model + ->where('date', trim($updateAbstractDetail['date'])) + ->where('particulars', trim($updateAbstractDetail['particulars'])) + ->set($updateAbstractDetail) + ->update(); // Correct update usage + } + $result = true; // Indicate success + } else { // Insert new records + $result = $this->trpAbstract_model->insertBatch($updateAbstractDetails); + } + + if ($result) { + echo "Data Saved Successfully"; + } else { + echo "Error in Submitting the abstract"; + } + } + + + + + @@ -2296,7 +3213,7 @@ class StockController extends BaseController - // --------------------------------------------gwm---------------------------------------------- + // -------------------------------------------- in class helpers---------------------------------------------- public function getMonthDatesFromInput($monthYear) @@ -2344,140 +3261,7 @@ class StockController extends BaseController } - public function drierMachineDetails() - { - - //drier will be processing different method than other stock in case of session stock month and date format for generating - //dummy data and updating the data . be cautious while updating the code..!! - - if ($this->request->getMethod() === 'POST') { - - $currentMonth = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $currentMonth); //in M-Y format - - $formattedDate = $date->format('Y-m'); //in Y-m format - - - $session = session (); - - $session->set('stock_month',$formattedDate); - - - } else { - - $session = session(); - - $currentMonth = $session->get('stock_month'); - - if (empty($currentMonth)) { - $currentMonth = date('M-Y'); // Default to the current month - }else{ - $currentMonth = DateTime::createFromFormat('Y-m', $currentMonth); // in Y-m format - - $currentMonth = $currentMonth->format('M-Y'); // in M-Y format - } - } - - $monthData = $this->getMonthDatesFromInput($currentMonth); - - $isActiveFilter = 1 ; - $data['startDate'] = $monthData[0]['database']; - $data['endDate'] = $monthData[count($monthData) - 1]['database']; - $data['timeDropdown'] = $this->generateTimeOptions(); - $data['supplierData'] = $this->supplier_model->supplierlisting($isActiveFilter); - - $data['drierDetails'] = $this->drierMachineDetails_model - ->where('date >=', $data['startDate']) - ->where('date <=', $data['endDate']) - ->orderBy('date','asc') - ->findAll(); - - - $data['datefordropdown'] = $currentMonth; - - $this->global['pageTitle'] = 'Drier Details'; - $this->loadViews("stock/drierMachineDetails", $this->global, $data, NULL); - - - } - - public function addOrEditdrierMachineDetails() - { - - - $data = $this->request->getPost(); - - $drierData[] = $this->mapDrierEntry($data); - - - $this->db->transBegin(); - try { - $inserts = []; - $updates = []; - - foreach ($drierData as $row) { - $existingRow = $row['id']; - $data = $row; - - - if (($existingRow)) { - $existingRow = $this->drierMachineDetails_model->where('id', $row['id'] ?? '')->first(); - - $this->handleGasStockUpdate($existingRow, $row); - $updates[] = $data; - } else { - $this->updateGasStockConsumption($data['date'], $data['total_gas_consumption']); - $inserts[] = $data; - } - } - - if (!empty($inserts)) { - $this->drierMachineDetails_model->insertBatch($inserts); - } - - if (!empty($updates)) { - $this->drierMachineDetails_model->updateBatch($updates, 'id'); - } - - if ($this->db->transStatus() === false) { - throw new \Exception('Transaction failed due to database error.'); - } - - $this->db->transCommit(); - - return redirect()->to("/drierMachineDetails")->with('success', "Data Saved Successfully"); - - } catch (\Exception $error) { - $this->db->transRollback(); - return redirect()->back()->with('error', ' ' . $error->getMessage()); - } - } - - /** - * Maps input row to expected format. - */ - private function mapDrierEntry(array $data): array - { - return [ - 'id' => $data['id'] ?? null, - 'date' => $this->convertToDateWithFlexibleFormats($data['date'], ["d-m-Y", "Y-m-d", "m/d/Y", "m-d-Y"], "Y-m-d"), - 'drier_on_time' => $data['drier_on_time'], - 'drier_off_time' => $data['drier_off_time'], - 'drier_running_hours' => $data['drier_running_hours'], - 'supplier_name' => $data['supplier_name'], - 'input_sand_moisture' => $data['input_sand_moisture'], - 'total_gas_consumption' => $data['total_gas_consumption'], - 'gas_per_ton' => $data['gas_per_ton'], - 'input_sand_qty' => $data['input_sand_qty'], - 'moisture_loss_qty' => $data['moisture_loss_qty'], - 'sand_dried_qty' => $data['sand_dried_qty'], - 'qty_per_hours' => $data['qty_per_hours'], - 'dust_qty' => $data['dust_qty'], - 'customer_name' => $data['customer_name'] - ]; - } /** * Updates gas stock consumption if the value changes. @@ -2515,799 +3299,93 @@ class StockController extends BaseController return $dateInput; } - public function powerConsumptionDetails(){ - - if ($this->request->getMethod() === 'POST') { - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); //in M-Y format - - $formattedDate = $date->format('Y-m'); //in Y-m format - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - - } else { - - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month + public function createDummyEntryForBag($customisedMaterialCode, $startDate, $endDate) + { + if (!empty($customisedMaterialCode)) { + $inserts = []; + + // Convert start and end date to timestamps + $startTimestamp = strtotime($startDate); + $endTimestamp = strtotime($endDate); + + while ($startTimestamp <= $endTimestamp) { + $inserts[] = [ + 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format + 'materialCode' => $customisedMaterialCode, + 'customer' => ' ', + 'opening' => ' ', + 'receipt' => ' ', + 'used' => ' ', + 'balanceStock' => ' ', + ]; + + $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day + } + + if (!empty($inserts)) { + $this->bagStockDetails_model->insertBatch($inserts); } } - - $data = []; - - $data['month'] = $month; - - $this->global['pageTitle'] = 'Power Consumption Stock Details'; - - - - - //filter part starts - - //start date dynamic from front-end - $startDate = "$month-01"; - //end date of given month - $endDate = date("Y-m-t", strtotime($startDate)); - - - //filter applied currently - $customisedMachineCodes = $this->request->getPost('customisedMachineCodes') ?? []; - - - //already applied filter - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->select('machine_id') - ->where('date',"$month-01") - ->where('machine_category','electric') - ->findAll(); - - - //check user applies for filter currently - if(!empty($customisedMachineCodes)){ - - //user applied filter, - - //check already filter existing , if exists remove that , - if(!empty($existingCustomMachineCodes)){ - - //hard delete done..!! - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->where('date',"$month-01") - ->where('machine_category','electric') - ->delete(); - - } - - - //if no filter already exists or removed current one , just add current filter for that month ....!! - $inserts = []; - - foreach($customisedMachineCodes as $index => $customisedMachineCode){ - - $inserts [] = [ - 'date' => "$month-01", - 'machine_category' => "electric", - 'machine_id' => $customisedMachineCode - ]; - - - //checking filtered material code present in table , if not create dummy one for whole month - $findMachineCode = $this->powerConsumptionDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->where('machine_id',$customisedMachineCode) - ->findAll(); - - - //check any material code is not present in stock table but applied in filter - if(empty($findMachineCode)){ - - - //create dummy entry for this - $this->createDummyEntryForElectricMachine($customisedMachineCode,$startDate,$endDate); - } - - } - - if(!empty($inserts)){ - //insert all the latest applied filter - $this->monthWiseMachineInStockModel->insertBatch($inserts); - - //get the currently applied filter - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->select('machine_id') - ->where('date',"$month-01") - ->where('machine_category','electric') - ->get() - ->getResultArray(); - - } - - } - - - //possible if no filter applied at all...!!! - if(empty($existingCustomMachineCodes)){ - //no filter applied at all just present all active material codes - $existingCustomMachineCodes = $this->factoryMachine_model - ->getAllActiveElectricMachines(); - }else{ - //if filter present,get that material codes - $existingCustomMachineCodes = $this->factoryMachine_model - ->getSelectedElectricMachines(array_column($existingCustomMachineCodes, 'machine_id')); - } - - - - //this existingCustomMachineCodes gets its machine after visiting factory machine master table - $machineCodeList = array_column($existingCustomMachineCodes, 'id'); - - $electricMachines = $existingCustomMachineCodes; - - $data['activeElectricMachines'] = $this->factoryMachine_model->getAllActiveElectricMachines(); - - - - - - - - - - - // Get the previous month's last date power consumption stock details for next month updation - - $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); - $previousMonthStartDate = "$previousMonth-01"; - $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); - - $data['previousMonthPowerConsumptionStockDetails'] = $this->powerConsumptionDetails_model - ->select(['machine_id', 'date', 'closing_units']) - ->distinct() - ->where('date =', $previousMonthEndDate) - ->groupBy(['machine_id', 'date']) - ->orderBy('date', 'desc') - ->orderBy('machine_id', 'asc') - ->findAll(); - - $data['previousMonthTotalPowerMachineStockDetails'] = $this->powerConsumptionSummary_model - ->select(['id', 'date', 'final_reading']) - ->distinct() - ->where('date =', $previousMonthEndDate) - ->groupBy(['id', 'date']) - ->orderBy('date', 'desc') - ->findAll(); - - - - // checking in database if the data is available for the month - - - - $data['powerConsumptionStockDetails'] = $this->powerConsumptionDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->whereIn('machine_id',$machineCodeList) - ->groupBy(['machine_id', 'date']) - ->orderBy('date', 'asc') - ->orderBy('machine_id', 'asc') - ->findAll(); - - $data['totalPower'] = $this->powerConsumptionSummary_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->orderBy('date', 'asc') - ->findAll(); - - // Initialize an empty array to hold the grouped data - $data['groupedPowerConsumptionStockDetails'] = []; - - // Temporary array to store grouped data by date - $groupedByDate = []; - - // Group by 'date' - foreach ($data['powerConsumptionStockDetails'] as $detail) { - $date = $detail['date']; - - // Initialize the outer array for this date if it doesn't exist - if (!isset($groupedByDate[$date])) { - $groupedByDate[$date] = []; - } - - /******************************************************************************************************************* - creating an sub array (inner array) for date wise and append the detail into an array as sub-array - - $groupedByDate[] outer array - - $groupedByDate[$date] - will look like [[material1],[material2],[material3],[material4],[material5]] inner array - - the above process is done for single row (date wise) and the same process is repeated for all the rows - *******************************************************************************************************************/ - - $groupedByDate[$date][] = $detail; - } - - // Reset the structure to have indexed arrays without the date keys - $data['groupedPowerConsumptionStockDetails'] = array_values($groupedByDate); - - - //temp_code_s_2025_02 - - // getting electric machines for creating table headers - // checking already existing stock if yes then get the electric machines id from the existing stock - // if not get all the electric machines from the factory Machine master table - - // if (!empty($data['groupedPowerConsumptionStockDetails'])) { - - // $result = $groupedByDate[$date]; - - // $distinctMachineId = []; - - // foreach ($result as $index => $eachResult) { - // $distinctMachineId[] = $result[$index]['machine_id']; - // } - - // $electricMachines = $this->factoryMachine_model->getSelectedElectricMachines($distinctMachineId); - - - // } else { - - // $electricMachines = $this->factoryMachine_model->getAllActiveElectricMachines(); - - // } - - //temp_code_e_2025_02 - - - - $electricMachinesCount = count($electricMachines); - - $data['electricMachinesCount'] = $electricMachinesCount; - $data['electricMachines'] = $electricMachines; - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate; - - // return $this->response->setJSON(['status' =>'success' ,'message' => $data['electricMachines']]); - - return $this->loadViews("stock/powerConsumptionDetails", $this->global, $data, NULL); - } - public function updatePowerConsumptionDetails(){ - - //pm stands for power machine - - - $postData = $this->request->getPost(); - - $updatePowerConsumptionDetailsData = json_decode($postData['updatePowerConsumptionDetails'], true); - - $updateTotalPmDetailsData = $updatePowerConsumptionDetailsData[0]; - $updatePmDetailsData = $updatePowerConsumptionDetailsData[1]; - - //PmR stands for power machine readings - - $updatesPmR = []; - $insertsPmR = []; - - $updatesTotalPmR = []; - $insertsTotalPmR = []; - - // Fetch existing records in bulk for power machine details - $dates = array_column($updatePmDetailsData, 'date'); - $machineIds = array_column($updatePmDetailsData, 'machine_id'); - $existingPmRecords = $this->powerConsumptionDetails_model - ->whereIn('date', $dates) - ->whereIn('machine_id', $machineIds) - ->findAll(); - - $existingPmMap = []; - foreach ($existingPmRecords as $record) { - $existingPmMap[$record['date']][$record['machine_id']] = $record; - } - - foreach ($updatePmDetailsData as $data) { - $date = $data['date']; - $machineId = $data['machine_id']; - - $dbData = [ - 'date' => $data['date'], - 'machine_id' => $data['machine_id'], - 'opening_units' => $data['opening_units'], - 'closing_units' => $data['closing_units'], - 'total_units' => $data['total_units'], - ]; - - if (isset($existingPmMap[$date][$machineId])) { - $dbData['id'] = $existingPmMap[$date][$machineId]['id']; - $updatesPmR[] = $dbData; - } else { - $insertsPmR[] = $dbData; - } - } - - // Fetch existing records in bulk for power stock summary - $dates = array_column($updateTotalPmDetailsData, 'date'); - $existingTotalPmRecords = $this->powerConsumptionSummary_model - ->whereIn('date', $dates) - ->findAll(); - - $existingTotalPmMap = []; - foreach ($existingTotalPmRecords as $record) { - $existingTotalPmMap[$record['date']] = $record; - } - - foreach ($updateTotalPmDetailsData as $data) { - $date = $data['date']; - - $dbData = [ - 'date' => $data['date'], - 'opening_reading' => $data['opening_reading'], - 'final_reading' => $data['final_reading'], - 'total_reading' => $data['total_reading'], - 'total_units' => $data['total_units'], - 'average_pf' => $data['average_pf'], - 'present_pf' => $data['present_pf'], - 'md' => $data['md'], - 'mf' => $data['mf'] - ]; - - if (isset($existingTotalPmMap[$date])) { - $dbData['id'] = $existingTotalPmMap[$date]['id']; - $updatesTotalPmR[] = $dbData; - } else { - $insertsTotalPmR[] = $dbData; - } - } - - // Start the transaction - $this->db->transBegin(); - - try { - if (!empty($insertsPmR)) { - $this->powerConsumptionDetails_model->insertBatch($insertsPmR); - } - - if (!empty($updatesPmR)) { - $this->powerConsumptionDetails_model->updateBatch($updatesPmR, 'id'); - } - - if (!empty($insertsTotalPmR)) { - $this->powerConsumptionSummary_model->insertBatch($insertsTotalPmR); - } - - if (!empty($updatesTotalPmR)) { - $this->powerConsumptionSummary_model->updateBatch($updatesTotalPmR, 'id'); - } - - // Commit the transaction if all operations are successful - $this->db->transCommit(); - echo "Data Saved Successfully"; - - } catch (\Exception $error) { - // Rollback the transaction in case of any errors - $this->db->transRollback(); - echo "An error occurred: " . $error->getMessage(); - } - + public function createDummyEntryForDieselMachine($customisedMachineCode, $startDate, $endDate) + { + if (!empty($customisedMachineCode)) { + $inserts = []; + + // Convert start and end date to timestamps + $startTimestamp = strtotime($startDate); + $endTimestamp = strtotime($endDate); + + while ($startTimestamp <= $endTimestamp) { + $inserts[] = [ + 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format + 'machine_id' => $customisedMachineCode, + 'opening_units' => ' ', + 'closing_units' => ' ', + 'total_units' => ' ', + ]; + + $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day + } + + if (!empty($inserts)) { + $this->factoryVehicleDieselDetails_model->insertBatch($inserts); + } + } } - - - public function dieselMachineStockDetails(){ - - - if ($this->request->getMethod() === 'POST') { - - $month = $this->request->getPost('month'); - - $date = DateTime::createFromFormat('M-Y', $month); - - $formattedDate = $date->format('Y-m'); - - $month = $formattedDate; - - $session = session (); - - $session->set('stock_month',$month); - - } else { - - $session = session(); - - $month = $session->get('stock_month'); - - if (empty($month)) { - $month = date('Y-m'); // Default to the current month - } - } - - $data = []; - - $data['month'] = $month; - - $this->global['pageTitle'] = 'Diesel Machine Stock Details'; - - - //filter part starts - - //start date dynamic from front-end - $startDate = "$month-01"; - //end date of given month - $endDate = date("Y-m-t", strtotime($startDate)); - - - //filter applied currently - $customisedMachineCodes = $this->request->getPost('customisedMachineCodes') ?? []; - - - //already applied filter - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->select('machine_id') - ->where('date',"$month-01") - ->where('machine_category','diesel') - ->findAll(); - - - //check user applies for filter currently - if(!empty($customisedMachineCodes)){ - - //user applied filter, - - //check already filter existing , if exists remove that , - if(!empty($existingCustomMachineCodes)){ - - //hard delete done..!! - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->where('date',"$month-01") - ->where('machine_category','diesel') - ->delete(); - - } - - - //if no filter already exists or removed current one , just add current filter for that month ....!! - $inserts = []; - - foreach($customisedMachineCodes as $index => $customisedMachineCode){ - - $inserts [] = [ - 'date' => "$month-01", - 'machine_category' => "diesel", - 'machine_id' => $customisedMachineCode - ]; - - - //checking filtered material code present in table , if not create dummy one for whole month - $findMachineCode = $this->factoryVehicleDieselDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->where('machine_id',$customisedMachineCode) - ->findAll(); - - //check any material code is not present in stock table but applied in filter - if(empty($findMachineCode)){ - - //create dummy entry for this - $this->createDummyEntryForDieselMachine($customisedMachineCode,$startDate,$endDate); - } - - } - - if(!empty($inserts)){ - //insert all the latest applied filter - $this->monthWiseMachineInStockModel->insertBatch($inserts); - - //get the currently applied filter - $existingCustomMachineCodes = $this->monthWiseMachineInStockModel - ->select('machine_id') - ->where('date',"$month-01") - ->where('machine_category','diesel') - ->get() - ->getResultArray(); - - } - - } - - - //possible if no filter applied at all...!!! - if(empty($existingCustomMachineCodes)){ - //no filter applied at all just present all active material codes - $existingCustomMachineCodes = $this->factoryMachine_model - ->getAllActiveDieselMachines(); - }else{ - //if filter present,get that material codes - $existingCustomMachineCodes = $this->factoryMachine_model - ->getSelectedDieselMachines(array_column($existingCustomMachineCodes, 'machine_id')); - } - - - - //this existingCustomMachineCodes gets its machine 'id' after visiting factory machine master table in above step, - - $machineCodeList = array_column($existingCustomMachineCodes, 'id'); - - $dieselMachines = $existingCustomMachineCodes; - - $data['activeDieselMachines'] = $this->factoryMachine_model->getAllActiveDieselMachines(); - - - - - - - - - - - - // Get the previous month's last date diesel stock details for next month updation - - $previousMonth = DateTime::createFromFormat('Y-m', $month)->modify('-1 month')->format('Y-m'); - $previousMonthStartDate = "$previousMonth-01"; - $previousMonthEndDate = date("Y-m-t", strtotime($previousMonthStartDate)); - - $data['previousMonthDieselMachineStockDetails'] = $this->factoryVehicleDieselDetails_model - ->select(['machine_id', 'date', 'closing_reading']) - ->distinct() - ->where('date =', $previousMonthEndDate) - ->groupBy(['machine_id', 'date']) - ->orderBy('date', 'desc') - ->orderBy('machine_id', 'asc') - ->findAll(); - - - $data['previousMonthTotalDieselMachineStockDetails'] = $this->factoryVehicleDieselStockSummary_model - ->select(['id', 'date', 'balance_stock']) - ->distinct() - ->where('date =', $previousMonthEndDate) - ->groupBy(['id', 'date']) - ->orderBy('date', 'desc') - ->findAll(); - - - - // checking in database if the data is available for the month - - $startDate = "$month-01"; - $endDate = date("Y-m-t", strtotime($startDate)); - - $data['dieselMachineStockDetails'] = $this->factoryVehicleDieselDetails_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->whereIn('machine_id',$machineCodeList) - ->groupBy(['machine_id', 'date']) - ->orderBy('date', 'asc') - ->orderBy('machine_id', 'asc') - ->findAll(); - - - $data['totalDiesel'] = $this->factoryVehicleDieselStockSummary_model - ->where('date >=', $startDate) - ->where('date <=', $endDate) - ->orderBy('date', 'asc') - ->findAll(); - - // Initialize an empty array to hold the grouped data - $data['groupedDieselMachineStockDetails'] = []; - - // Temporary array to store grouped data by date - $groupedByDate = []; - - // Group by 'date' - foreach ($data['dieselMachineStockDetails'] as $detail) { - $date = $detail['date']; - - // Initialize the outer array for this date if it doesn't exist - if (!isset($groupedByDate[$date])) { - $groupedByDate[$date] = []; - } - - /******************************************************************************************************************* - creating an sub array (inner array) for date wise and append the detail into an array as sub-array - - $groupedByDate[] outer array - - $groupedByDate[$date] - will look like [[material1],[material2],[material3],[material4],[material5]] inner array - - the above process is done for single row (date wise) and the same process is repeated for all the rows - *******************************************************************************************************************/ - - $groupedByDate[$date][] = $detail; - } - - // Reset the structure to have indexed arrays without the date keys - $data['groupedDieselMachineStockDetails'] = array_values($groupedByDate); - - - - //temp_code_s_2025_02 - - // getting diesel machines for creating table headers - // checking already existing stock if yes then get the diesel machines id from the existing stock - // if not get all the diesel machines from the factory Machine master table - - // if (!empty($data['groupedDieselMachineStockDetails'])) { - - // $result = $groupedByDate[$date]; - - // $distinctMachineId = []; - - // foreach ($result as $index => $eachResult) { - // $distinctMachineId[] = $result[$index]['machine_id']; - // } - - // $dieselMachines = $this->factoryMachine_model - // ->whereIn('id', $distinctMachineId) - // ->orderBy('id', 'asc') - // ->get() - // ->getResultArray(); - - - // } else { - - // $dieselMachines = $this->factoryMachine_model - // ->where('is_active', 1) - // ->where('energy_type', 'Diesel') - // ->orderBy('id', 'asc') - // ->get() - // ->getResultArray(); - - // } - - //temp_code_e_2025_02 - - - - - - $dieselMachinesCount = count($dieselMachines); - - $data['dieselMachinesCount'] = $dieselMachinesCount; - $data['dieselMachines'] = $dieselMachines; - - $date = DateTime::createFromFormat('Y-m', $month); - - $formattedDate = $date->format('M-Y'); - - $data['month'] = $formattedDate ; - - // return $this->response->setJSON(['status' =>'success' ,'message' => $data['dieselMachines']]); - - return $this->loadViews("stock/dieselStockDetails", $this->global, $data, NULL); - - - - - } - - public function updateDieselMachineDetails() { - - $postData = $this->request->getPost(); - $updateDmDetailsData = json_decode($postData['updateDieselMachineDetails'], true); + public function createDummyEntryForElectricMachine($customisedMachineCode, $startDate, $endDate) + { + if (!empty($customisedMachineCode)) { + $inserts = []; - $updateTotalDmDetailsData = $updateDmDetailsData[0]; - $updateDmDetailsData = $updateDmDetailsData[1]; + // Convert start and end date to timestamps + $startTimestamp = strtotime($startDate); + $endTimestamp = strtotime($endDate); - $updatesDmR = []; - $insertsDmR = []; - $updatesTotalDmR = []; - $insertsTotalDmR = []; + while ($startTimestamp <= $endTimestamp) { + $inserts[] = [ + 'date' => date('Y-m-d', $startTimestamp), // Convert timestamp to date format + 'machine_id' => $customisedMachineCode, + 'opening_units' => ' ', + 'closing_units' => ' ', + 'total_units' => ' ', + ]; - // Fetch existing records in bulk for diesel machine details - $dates = array_column($updateDmDetailsData, 'date'); - $machineIds = array_column($updateDmDetailsData, 'machine_id'); - $existingDmRecords = $this->factoryVehicleDieselDetails_model - ->whereIn('date', $dates) - ->whereIn('machine_id', $machineIds) - ->findAll(); - - $existingDmMap = []; - foreach ($existingDmRecords as $record) { - $existingDmMap[$record['date']][$record['machine_id']] = $record; - } - - foreach ($updateDmDetailsData as $data) { - $date = $data['date']; - $machineId = $data['machine_id']; - - $dbData = [ - 'date' => $data['date'], - 'machine_id' => $data['machine_id'], - 'opening_reading' => $data['opening_reading'], - 'closing_reading' => $data['closing_reading'], - 'filling_diesel' => $data['filling_diesel'], - 'consumption' => $data['consumption'], - 'running_hours' => $data['running_hours'], - 'mileage' => $data['mileage'] - ]; - - if (isset($existingDmMap[$date][$machineId])) { - $dbData['id'] = $existingDmMap[$date][$machineId]['id']; - $updatesDmR[] = $dbData; - } else { - $insertsDmR[] = $dbData; - } - } - - // Fetch existing records in bulk for diesel stock summary - $dates = array_column($updateTotalDmDetailsData, 'date'); - $existingTotalDmRecords = $this->factoryVehicleDieselStockSummary_model - ->whereIn('date', $dates) - ->findAll(); - - $existingTotalDmMap = []; - foreach ($existingTotalDmRecords as $record) { - $existingTotalDmMap[$record['date']] = $record; - } - - foreach ($updateTotalDmDetailsData as $data) { - $date = $data['date']; - - $dbData = [ - 'date' => $data['date'], - 'opening_stock' => $data['opening_stock'], - 'purchase_diesel' => $data['purchase_diesel'], - 'total_filling_diesel' => $data['total_filling_diesel'], - 'balance_stock' => $data['balance_stock'] - ]; - - if (isset($existingTotalDmMap[$date])) { - $dbData['id'] = $existingTotalDmMap[$date]['id']; - $updatesTotalDmR[] = $dbData; - } else { - $insertsTotalDmR[] = $dbData; - } - } - - // Start the transaction - $this->db->transBegin(); - - try { - if (!empty($insertsDmR)) { - $this->factoryVehicleDieselDetails_model->insertBatch($insertsDmR); + $startTimestamp = strtotime('+1 day', $startTimestamp); // Move to the next day } - if (!empty($updatesDmR)) { - $this->factoryVehicleDieselDetails_model->updateBatch($updatesDmR, 'id'); + if (!empty($inserts)) { + $this->powerConsumptionDetails_model->insertBatch($inserts); } - - if (!empty($insertsTotalDmR)) { - $this->factoryVehicleDieselStockSummary_model->insertBatch($insertsTotalDmR); - } - - if (!empty($updatesTotalDmR)) { - $this->factoryVehicleDieselStockSummary_model->updateBatch($updatesTotalDmR, 'id'); - } - - // Commit the transaction if all operations are successful - $this->db->transCommit(); - echo "Data Saved Successfully"; - - } catch (\Exception $error) { - // Rollback the transaction in case of any errors - $this->db->transRollback(); - echo "An error occurred: " . $error->getMessage(); } } + + + + diff --git a/app/Models/FactoryMachineModel.php b/app/Models/FactoryMachineModel.php index 83d6eaed..3e77c081 100644 --- a/app/Models/FactoryMachineModel.php +++ b/app/Models/FactoryMachineModel.php @@ -7,7 +7,7 @@ use CodeIgniter\Model; class FactoryMachineModel extends Model { // The table associated with this model - protected $table = 't_factoryMachineMaster'; + protected $table = 't_factorymachinemaster'; // Primary key of the table protected $primaryKey = 'id'; @@ -41,7 +41,7 @@ class FactoryMachineModel extends Model public function checkMachineName($machineId,$machineName){ - $builder = $this->db->table('t_factoryMachineMaster'); + $builder = $this->db->table('t_factorymachinemaster'); if(!empty($machineId)){ $builder = $builder->where('id !=' , $machineId); @@ -64,7 +64,7 @@ class FactoryMachineModel extends Model public function getAllActiveElectricMachines(){ - $result = $this->db->table('t_factoryMachineMaster') + $result = $this->db->table('t_factorymachinemaster') ->where('is_active', 1) ->where('energy_type', 'electric') ->orderBy('id', 'asc') @@ -77,7 +77,7 @@ class FactoryMachineModel extends Model public function getSelectedElectricMachines($distinctMachineId){ - $result = $this->db->table('t_factoryMachineMaster') + $result = $this->db->table('t_factorymachinemaster') ->whereIn('id', $distinctMachineId) ->orderBy('id', 'asc') ->get() @@ -89,7 +89,7 @@ class FactoryMachineModel extends Model public function getAllActiveDieselMachines(){ - $result = $this->db->table('t_factoryMachineMaster') + $result = $this->db->table('t_factorymachinemaster') ->where('is_active', 1) ->where('energy_type', 'diesel') ->orderBy('id', 'asc') @@ -102,7 +102,7 @@ class FactoryMachineModel extends Model public function getSelectedDieselMachines($distinctMachineId){ - $result = $this->db->table('t_factoryMachineMaster') + $result = $this->db->table('t_factorymachinemaster') ->whereIn('id', $distinctMachineId) ->orderBy('id', 'asc') ->get() diff --git a/app/Models/FactoryVehicleDieselDetailsModel.php b/app/Models/FactoryVehicleDieselDetailsModel.php index 7a441358..cac41203 100644 --- a/app/Models/FactoryVehicleDieselDetailsModel.php +++ b/app/Models/FactoryVehicleDieselDetailsModel.php @@ -6,7 +6,7 @@ use CodeIgniter\Model; class FactoryVehicleDieselDetailsModel extends Model { - protected $table = 't_factoryVehicleDieselDetails'; + protected $table = 't_factoryvehicledieseldetails'; protected $primaryKey = 'id'; protected $allowedFields = [ diff --git a/app/Models/FactoryVehicleDieselStockSummaryModel.php b/app/Models/FactoryVehicleDieselStockSummaryModel.php index 98462a36..0e37e548 100644 --- a/app/Models/FactoryVehicleDieselStockSummaryModel.php +++ b/app/Models/FactoryVehicleDieselStockSummaryModel.php @@ -6,7 +6,7 @@ use CodeIgniter\Model; class FactoryVehicleDieselStockSummaryModel extends Model { - protected $table = 't_factoryVehicleDieselStockSummary'; + protected $table = 't_factoryvehicledieselstocksummary'; protected $primaryKey = 'id'; protected $allowedFields = [ diff --git a/app/Models/PowerConsumptionDetails.php b/app/Models/PowerConsumptionDetails.php index 67a88fcc..5902ddfa 100644 --- a/app/Models/PowerConsumptionDetails.php +++ b/app/Models/PowerConsumptionDetails.php @@ -6,7 +6,7 @@ use CodeIgniter\Model; class PowerConsumptionDetails extends Model { - protected $table = 't_powerConsumptionDetails'; + protected $table = 't_powerconsumptiondetails'; protected $primaryKey = 'id'; protected $allowedFields = [ diff --git a/app/Models/TrpProductionModel.php b/app/Models/TrpProductionModel.php index e6691ebd..55277d90 100644 --- a/app/Models/TrpProductionModel.php +++ b/app/Models/TrpProductionModel.php @@ -60,7 +60,7 @@ class TrpProductionModel extends Model // Subquery definition $subquery = $this->db->table('t_materialmaster') ->select('materialCode') - ->where('Category' ,'waste core') //328 - is for waste core in config master + ->where('Category' ,'328') ->get() ->getResultArray(); diff --git a/app/Views/stock/CoatingMachineDetail.php b/app/Views/stock/CoatingMachineDetail.php index 03b7d201..e22539d7 100644 --- a/app/Views/stock/CoatingMachineDetail.php +++ b/app/Views/stock/CoatingMachineDetail.php @@ -666,7 +666,7 @@
- + * @@ -888,7 +888,7 @@
- + * diff --git a/app/Views/stock/dustAndRoughStockDetails.php b/app/Views/stock/dustAndRoughStockDetails.php index c3435ccf..f394a58c 100644 --- a/app/Views/stock/dustAndRoughStockDetails.php +++ b/app/Views/stock/dustAndRoughStockDetails.php @@ -354,53 +354,34 @@ > -
+ - - - - - - - - - - - - - - - - - - - - - -
Total Final Rough Dust Total
- Total -
-
+ } ?> + + + + + Total + + + + + + + elements are editable (optional) 456 - $("#basicDetailsTableId td, #meshTableId td, #incomingSilicaSandDetailsTable td").attr("contenteditable", "true"); + }); diff --git a/app/Views/stock/trpProductionStockDetails.php b/app/Views/stock/trpProductionStockDetails.php index fcb5ada9..1317bcf7 100644 --- a/app/Views/stock/trpProductionStockDetails.php +++ b/app/Views/stock/trpProductionStockDetails.php @@ -1477,395 +1477,311 @@ $timeOtions[] = "12:00 AM"; $trpAbstractEach){ + if(!empty($trpAbstract)){ - $particulars = $trpAbstractEach['particulars']; - - switch ($particulars) { - case "Incoming Raw Sand Details": ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Incoming Raw Sand Details - - - - - - - - - - - - - - - - - - - + + $abstractForCurrentMonth=[ + [ + 'absDate' => $trpAbstract["Incoming Raw Sand Details"]['date'] , + 'absParticulars' => "Incoming Raw Sand Details", + 'absRunningHrs' => "", + 'absPerHour' => "", + 'absOpeningStock'=> (int)$trpAbstract["Incoming Raw Sand Details"]['opening_stock'], + 'absReceipt' => $totalWcsReceived, + 'absTotal' => (int)$trpAbstract["Incoming Raw Sand Details"]['opening_stock'] + $totalWcsReceived, + 'absConsumption' => $summary['edProduction'], + 'absClosingStock' => ((int)$trpAbstract["Incoming Raw Sand Details"]['opening_stock'] + $totalWcsReceived) - $summary['edProduction'], + 'absPhysicalStock' => (int)$trpAbstract["Incoming Raw Sand Details"]['physical_stock'], + 'absRemarks' => $trpAbstract["Incoming Raw Sand Details"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["ED Details"]['date'] , + 'absParticulars' => "ED Details", + 'absRunningHrs' => $summary['edRunningHours'], + 'absPerHour' => number_format( $summary['edProduction'] / ($summary['edRunningHours'] == 0 ? 1 : $summary['edRunningHours']) ,2), + 'absOpeningStock'=> (int)$trpAbstract["ED Details"]['opening_stock'], + 'absReceipt' => $summary['edProduction'], + 'absTotal' => (int)$trpAbstract["ED Details"]['opening_stock'] + $summary['edProduction'], + 'absConsumption' => $summary['edUsage'] + ($summary['coolerBags'] * 1250 ) + ($summary['cycloneWaste'] * 1250 ) + ( $summary['edWaste'] * 1250 ), + 'absClosingStock' => (int)$trpAbstract["ED Details"]['opening_stock'] + $summary['edProduction'] - ($summary['edUsage'] + ($summary['coolerBags'] * 1250 ) + ($summary['cycloneWaste'] * 1250 ) + ( $summary['edWaste'] * 1250 ) ), + 'absPhysicalStock' =>(int)$trpAbstract["ED Details"]['physical_stock'], + 'absRemarks' => $trpAbstract["ED Details"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["TRP Total Sand"]['date'] , + 'absParticulars' => "TRP Total Sand", + 'absRunningHrs' => $summary['sandFeedingHours'], + 'absPerHour' => $summary['trpProductionPerHour'], + 'absOpeningStock'=> (int)$trpAbstract["TRP Total Sand"]['opening_stock'], + 'absReceipt' =>$summary['trpProduction'], + 'absTotal' =>(int)$trpAbstract["TRP Total Sand"]['opening_stock'] + $summary['trpProduction'], + 'absConsumption' =>$totalCrsReceived, + 'absClosingStock' =>(int)$trpAbstract["TRP Total Sand"]['opening_stock'] + $summary['trpProduction'] - $totalCrsReceived, + 'absPhysicalStock' =>(int)$trpAbstract["TRP Total Sand"]['physical_stock'], + 'absRemarks' => $trpAbstract["TRP Total Sand"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["Trp Physical Gas Consumption"]['date'] , + 'absParticulars' => "Trp Physical Gas Consumption", + 'absRunningHrs' => "", + 'absPerHour' => number_format(($summary['trpPlusDrierGasConsumption']) / ( ( $summary['trpProduction'] == 0 ? 1000 : $summary['trpProduction'] )/1000), 2, '.', ''), + 'absOpeningStock'=>(int)$trpAbstract["Trp Physical Gas Consumption"]['opening_stock'], + 'absReceipt' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absTotal' => (int)$trpAbstract["Trp Physical Gas Consumption"]['opening_stock'] + $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absConsumption' => $summary['physicalGasConsumption'], + 'absClosingStock' => (int)$trpAbstract["Trp Physical Gas Consumption"]['opening_stock'] + $summary['gasReceiptBg'] + $summary['gasReceiptPg'] - $summary['physicalGasConsumption'], + 'absPhysicalStock' =>(int)$trpAbstract["Trp Physical Gas Consumption"]['physical_stock'], + 'absRemarks' => $trpAbstract["Trp Physical Gas Consumption"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["Trp Panel Gas Consumption"]['date'] , + 'absParticulars' => "Trp Panel Gas Consumption", + 'absRunningHrs' => "", + 'absPerHour' => number_format(($summary['panelGasConsumption']) / ( ( $summary['trpProduction'] == 0 ? 1000 : $summary['trpProduction'] )/1000) ,2), + 'absOpeningStock'=>(int)$trpAbstract["Trp Panel Gas Consumption"]['opening_stock'], + 'absReceipt' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absTotal' => (int)$trpAbstract["Trp Panel Gas Consumption"]['opening_stock'] + $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absConsumption' => $summary['panelGasConsumption'], + 'absClosingStock' => (int)$trpAbstract["Trp Panel Gas Consumption"]['opening_stock'] + $summary['gasReceiptBg'] + $summary['gasReceiptPg'] - $summary['panelGasConsumption'], + 'absPhysicalStock' =>(int)$trpAbstract["Trp Panel Gas Consumption"]['physical_stock'], + 'absRemarks' => $trpAbstract["Trp Panel Gas Consumption"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["Water Consumption"]['date'] , + 'absParticulars' => "Water Consumption", + 'absRunningHrs' => "", + 'absPerHour' => "", + 'absOpeningStock'=>(int)$trpAbstract["Water Consumption"]['opening_stock'], + 'absReceipt' =>$summary['waterReceipt'], + 'absTotal' =>(int)$trpAbstract["Water Consumption"]['opening_stock'] + $summary['waterReceipt'], + 'absConsumption' => $summary['waterConsumption'], + 'absClosingStock' =>(int)$trpAbstract["Water Consumption"]['opening_stock'] + $summary['waterReceipt'] - $summary['waterConsumption'], + 'absPhysicalStock' =>(int)$trpAbstract["Water Consumption"]['physical_stock'], + 'absRemarks' => $trpAbstract["Water Consumption"]['remarks'], + ], + [ + 'absDate' => $trpAbstract["Power Consumption"]['date'] , + 'absParticulars' => "Power Consumption", + 'absRunningHrs' =>$summary['ebReadingPerUnitTon'], + 'absPerHour' => "", + 'absOpeningStock'=>(int)$trpAbstract["Power Consumption"]['opening_stock'], + 'absReceipt' =>'', + 'absTotal' =>'', + 'absConsumption' => $summary['ebReading'], + 'absClosingStock' =>'', + 'absPhysicalStock' =>(int)$trpAbstract["Power Consumption"]['physical_stock'], + 'absRemarks' => $trpAbstract["Power Consumption"]['remarks'], + ] + ]; + + ?> + + - - - ED Details - - - - - - - - - - - - - - - - - - - - - + $absDate = DateTime::createFromFormat('M-Y', $month)->format('Y-m'); + $absDate = "$absDate-01"; + ?> + + + + - - - - - TRP Total Sand - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - - - - Trp Physical Gas Consumption - - - - - - - - - - - - - - - - - - - + "Incoming Raw Sand Details", + 'absRunningHrs' => "", + 'absPerHour' => "", + 'absOpeningStock'=>'', + 'absReceipt' => $totalWcsReceived, + 'absTotal' => $totalWcsReceived, + 'absConsumption' => $summary['edProduction'], + 'absClosingStock' =>( $totalWcsReceived ) - $summary['edProduction'], + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "ED Details", + 'absRunningHrs' => $summary['edRunningHours'], + 'absPerHour' => number_format( $summary['edProduction'] / ($summary['edRunningHours'] == 0 ? 1 : $summary['edRunningHours']) ,2), + 'absOpeningStock'=>'', + 'absReceipt' => $summary['edProduction'], + 'absTotal' => $summary['edProduction'], + 'absConsumption' => $summary['edUsage'] + ($summary['coolerBags'] * 1250 ) + ($summary['cycloneWaste'] * 1250 ) + ( $summary['edWaste'] * 1250 ), + 'absClosingStock' => $summary['edProduction'] - $summary['edUsage'] + ($summary['coolerBags'] * 1250 ) + ($summary['cycloneWaste'] * 1250 ) + ( $summary['edWaste'] * 1250 ), + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "TRP Total Sand", + 'absRunningHrs' => $summary['sandFeedingHours'], + 'absPerHour' => $summary['trpProductionPerHour'], + 'absOpeningStock'=>'', + 'absReceipt' =>$summary['trpProduction'], + 'absTotal' =>$summary['trpProduction'], + 'absConsumption' =>$totalCrsReceived, + 'absClosingStock' =>$summary['trpProduction'] - $totalCrsReceived, + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "Trp Physical Gas Consumption", + 'absRunningHrs' => "", + 'absPerHour' => number_format(($summary['trpPlusDrierGasConsumption']) / ( ( $summary['trpProduction'] == 0 ? 1000 : $summary['trpProduction'] )/1000), 2, '.', ''), + 'absOpeningStock'=>'', + 'absReceipt' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absTotal' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absConsumption' => $summary['physicalGasConsumption'], + 'absClosingStock' =>($summary['gasReceiptBg'] + $summary['gasReceiptPg']) - $summary['physicalGasConsumption'], + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "Trp Panel Gas Consumption", + 'absRunningHrs' => "", + 'absPerHour' => number_format(($summary['panelGasConsumption']) / ( ( $summary['trpProduction'] == 0 ? 1000 : $summary['trpProduction'] )/1000) ,2), + 'absOpeningStock'=>'', + 'absReceipt' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absTotal' => $summary['gasReceiptBg'] + $summary['gasReceiptPg'], + 'absConsumption' => $summary['panelGasConsumption'], + 'absClosingStock' =>($summary['gasReceiptBg'] + $summary['gasReceiptPg']) - $summary['panelGasConsumption'], + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "Water Consumption", + 'absRunningHrs' => "", + 'absPerHour' => "", + 'absOpeningStock'=>'', + 'absReceipt' =>$summary['waterReceipt'], + 'absTotal' =>$summary['waterReceipt'], + 'absConsumption' =>$summary['waterReceipt'] - $summary['waterConsumption'], + 'absClosingStock' =>'', + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + [ + + 'absParticulars' => "Power Consumption", + 'absRunningHrs' =>$summary['ebReadingPerUnitTon'], + 'absPerHour' => "", + 'absOpeningStock'=>'', + 'absReceipt' =>'', + 'absTotal' =>'', + 'absConsumption' => $summary['ebReading'], + 'absClosingStock' =>'', + 'absPhysicalStock' =>'', + 'absRemarks' =>'', + ], + ] - - - - Trp Panel Gas Consumption - - - - - - - - - - - - - - - - - - - + + ?> + format('Y-m'); + $absDate = "$absDate-01"; + ?> + + + + - - - - - Water Consumption - - - - - - - - - - - - - - - - - - - - - - - - - Power Consumption - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
@@ -1939,7 +1861,7 @@ $timeOtions[] = "12:00 AM"; //table to json function - var updateTrpProductionDetails = tableToJson(); + var updateTrpProductionDetails = tableToJsonTrp(); @@ -1981,7 +1903,7 @@ $timeOtions[] = "12:00 AM"; + + + + + + +