1518 lines
49 KiB
PHP
1518 lines
49 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Controllers\BaseController;
|
|
use App\Models\Supplier_model;
|
|
use App\Models\PowerConsumptionDetails;
|
|
use App\Models\CoatingMachineDetailsModel;
|
|
use App\Models\DrierMachineDetailsModel;
|
|
use App\Models\FactoryMachineModel;
|
|
use App\Models\FactoryVehicleDieselDetailsModel;
|
|
use App\Models\FactoryVehicleDieselStockSummaryModel;
|
|
use App\Models\IncomingSilicaSandDetailsModel;
|
|
use App\Models\Inwardgateregister_model;
|
|
use App\Models\Rawmaterialdetails_model;
|
|
use App\Models\BagStockDetailsModel;
|
|
use App\Models\DustAndRoughModel;
|
|
use App\Models\ResinStockModel;
|
|
use App\Models\GasStockModel;
|
|
use CodeIgniter\HTTP\ResponseInterface;
|
|
use DateTime;
|
|
use DatePeriod;
|
|
use DateInterval;
|
|
|
|
class StockController extends BaseController
|
|
{
|
|
|
|
protected $supplier_model;
|
|
protected $powerConsumptionDetails_model;
|
|
protected $coatingMachineDetails_model;
|
|
protected $drierMachineDetails_model;
|
|
protected $factoryMachine_model;
|
|
protected $factoryVehicleDieselDetails_model;
|
|
protected $factoryVehicleDieselStockSummary_model;
|
|
protected $session;
|
|
protected $incomingSilicaSandDetails_model;
|
|
protected $inwardGateRegister_model;
|
|
protected $rawmaterialdetails_model;
|
|
protected $bagStockDetails_model;
|
|
protected $Rawmaterialdetails_model;
|
|
protected $dustAndRoughStockDetails_model;
|
|
protected $resinStockDetails_model;
|
|
protected $gasStockDetails_model;
|
|
|
|
protected $db;
|
|
|
|
/**
|
|
* This is default constructor of the class
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->db = \Config\Database::connect();
|
|
parent::__construct();
|
|
|
|
$this->supplier_model = new Supplier_model();
|
|
|
|
$this->powerConsumptionDetails_model = new PowerConsumptionDetails();
|
|
|
|
$this->coatingMachineDetails_model = new CoatingMachineDetailsModel();
|
|
|
|
$this->drierMachineDetails_model = new DrierMachineDetailsModel();
|
|
|
|
$this->factoryMachine_model = new FactoryMachineModel();
|
|
|
|
$this->factoryVehicleDieselDetails_model = new FactoryVehicleDieselDetailsModel();
|
|
|
|
$this->factoryVehicleDieselStockSummary_model = new FactoryVehicleDieselStockSummaryModel();
|
|
|
|
$this->rawmaterialdetails_model = new Rawmaterialdetails_model();
|
|
|
|
$this->incomingSilicaSandDetails_model = new IncomingSilicaSandDetailsModel();
|
|
|
|
$this->inwardGateRegister_model = new Inwardgateregister_model();
|
|
|
|
$this->bagStockDetails_model = new BagStockDetailsModel();
|
|
|
|
$this->dustAndRoughStockDetails_model = new DustAndRoughModel();
|
|
|
|
$this->resinStockDetails_model = new ResinStockModel();
|
|
|
|
$this->gasStockDetails_model = new GasStockModel();
|
|
|
|
|
|
$this->session = session();
|
|
helper('form');
|
|
|
|
$this->isLoggedIn();
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
//
|
|
}
|
|
|
|
//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;
|
|
} else {
|
|
|
|
$filteredMonth = $this->request->getGet('month');
|
|
$month = $filteredMonth ?? date('Y-m');
|
|
}
|
|
|
|
$this->global['pageTitle'] = 'Coating Machine Details ';
|
|
|
|
|
|
$startDate = "$month-01";
|
|
$endDate = date("Y-m-t", strtotime($startDate));
|
|
$data['coatingMachineDetails'] = $this->coatingMachineDetails_model
|
|
->where('date >=', $startDate)
|
|
->where('date <=', $endDate)
|
|
->where('is_active', 1)
|
|
->orderBy('date', 'asc')
|
|
->findAll();
|
|
|
|
$date = DateTime::createFromFormat('Y-m', $month);
|
|
|
|
$formattedDate = $date->format('M-Y');
|
|
|
|
$data['month'] = $formattedDate;
|
|
|
|
return $this->loadViews("CoatingMachineDetail", $this->global, $data, NULL);
|
|
|
|
}
|
|
|
|
public function addNewCoatingMachineDetails()
|
|
{
|
|
$message1 = '';
|
|
$message2 = '';
|
|
|
|
$postData = $this->request->getPost();
|
|
$month = $this->request->getGet('month');
|
|
$month = DateTime::createFromFormat('M-Y', $month)->format('Y-m');
|
|
|
|
$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->transStart();
|
|
|
|
try {
|
|
// Insert into coating machine details table
|
|
$inserted = $this->coatingMachineDetails_model->insert($postData);
|
|
|
|
if ($inserted !== false && $inserted > 0) {
|
|
|
|
$message1 = 'Coating Machine details updated successfully';
|
|
|
|
// Update gas stock consumption
|
|
$dateToBeInserted = $postData['date'];
|
|
$consumption = $postData['totalGasConsumption'];
|
|
$updatedResult = $this->updateGasStockConsumption($dateToBeInserted, $consumption);
|
|
|
|
$message2 = ($updatedResult !== false && $updatedResult > 0) ? 'And Updated Gas Consumption in Gas Stock' : 'And failed to Updated Gas Consumption in Gas Stock';
|
|
|
|
}
|
|
|
|
// Commit the transaction if all queries succeed
|
|
$this->db->transComplete();
|
|
|
|
if ($this->db->transStatus() === false) {
|
|
throw new \Exception('Transaction failed');
|
|
}
|
|
|
|
// Set flashdata for success message
|
|
return redirect()->to("/coatingMachineDetails?month=$month")->with('success', $message1 . " " . $message2);
|
|
|
|
} catch (\Exception $error) {
|
|
// Rollback on any exception
|
|
$this->db->transRollback();
|
|
return redirect()->back()->with('error', 'Failed to update Coating machine details: ' . $error->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function updateCoatingMachineDetails()
|
|
{
|
|
$message1 = '';
|
|
$message2 = '';
|
|
|
|
$putData = $this->request->getPost();
|
|
$month = $this->request->getGet('month');
|
|
$month = DateTime::createFromFormat('M-Y', $month)->format('Y-m');
|
|
|
|
$id = $putData['editCoatingMachineDetailId'];
|
|
|
|
// Start transaction
|
|
$this->db->transStart();
|
|
try {
|
|
$updated = $this->coatingMachineDetails_model->update($id, $putData);
|
|
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;
|
|
$updateResult = $this->updateGasStockConsumption($dateToBeUpdated, $changeInConsumption);
|
|
$message2 = ($updateResult !== false && $updateResult > 0)
|
|
? 'And Updated Gas Stock Consumption '
|
|
: "But Failed to Update Gas Stock Consumption ";
|
|
}
|
|
// Commit the transaction if all queries succeed
|
|
$this->db->transComplete();
|
|
|
|
if ($this->db->transStatus() === false) {
|
|
throw new \Exception('Transaction failed');
|
|
}
|
|
|
|
|
|
|
|
// Set flashdata for success message
|
|
return redirect()->to("/coatingMachineDetails?month=$month")->with('success', $message1 . " " . $message2);
|
|
}
|
|
} catch (\Exception $error) {
|
|
// Rollback on any exception
|
|
$this->db->transRollback();
|
|
return redirect()->back()->with('error', 'Failed to update Coating machine details' . $error->getMessage());
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
public function deleteCoatingMachineDetails()
|
|
{
|
|
|
|
$id = $this->request->getGet('id');
|
|
|
|
$data['is_active'] = 0;
|
|
|
|
$updated = $this->coatingMachineDetails_model->update($id, $data);
|
|
|
|
if ($updated) {
|
|
// Set flashdata for success message
|
|
return redirect()->to('/coatingMachineDetails')->with('success', 'Coating Machine details deleted successfully');
|
|
} else {
|
|
// Set flashdata for error message
|
|
return redirect()->back()->with('error', 'Failed to delete Coating machine details');
|
|
}
|
|
}
|
|
|
|
//incoming Silica Sand Details starts
|
|
public function loadView_incomingSilicaSandDetails()
|
|
{
|
|
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$month = $this->request->getPost('month');
|
|
|
|
$date = DateTime::createFromFormat('M-Y', $month);
|
|
|
|
$formattedDate = $date->format('Y-m');
|
|
|
|
$month = $formattedDate;
|
|
} else {
|
|
$month = date('Y-m');
|
|
}
|
|
|
|
$data['month'] = $month;
|
|
|
|
$this->global['pageTitle'] = 'Incoming Silica Sand Details';
|
|
|
|
$materialCodes = $this->rawmaterialdetails_model->getAllSilicaRawMaterialCode();
|
|
|
|
if (!empty($materialCodes)) {
|
|
$data['igrDetails'] = $this->inwardGateRegister_model->findIgrDetailsForIncomingSilicaSand($materialCodes, $month);
|
|
|
|
} else {
|
|
$data['igrDetails'] = [];
|
|
}
|
|
|
|
$date = DateTime::createFromFormat('Y-m', $month);
|
|
|
|
$formattedDate = $date->format('M-Y');
|
|
|
|
$data['month'] = $formattedDate;
|
|
|
|
return $this->loadViews("incomingSilicaSandDetails", $this->global, $data, NULL);
|
|
|
|
}
|
|
|
|
public function updateIncomingSilicaSandDetails()
|
|
{
|
|
|
|
$postData = $this->request->getPost();
|
|
|
|
$incomingSilicaSandDetailsData = json_decode($postData['incomingSilicaSandDetailsData'], true);
|
|
|
|
|
|
foreach ($incomingSilicaSandDetailsData as $data) {
|
|
|
|
$IGRNO = $data['IGR No'];
|
|
$materialCode = $data['MaterialCode'];
|
|
|
|
|
|
$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('igrNo_fk', $IGRNO)
|
|
->where('materialCode', $materialCode)
|
|
->first();
|
|
|
|
|
|
|
|
if (!empty($resultExists)) {
|
|
|
|
$updated = $this->incomingSilicaSandDetails_model
|
|
->where('igrNo_fk', $IGRNO)
|
|
->where('materialCode', $materialCode)
|
|
->set($dbData)
|
|
->update();
|
|
|
|
} else {
|
|
$inserted = $this->incomingSilicaSandDetails_model->insert($dbData);
|
|
}
|
|
|
|
}
|
|
|
|
echo "Data Saved Successfully";
|
|
|
|
}
|
|
|
|
|
|
// Bag Stock details starts
|
|
public function loadView_bagStockDetails()
|
|
{
|
|
|
|
if ($this->request->getMethod() === 'POST') {
|
|
$month = $this->request->getPost('month');
|
|
|
|
$date = DateTime::createFromFormat('M-Y', $month);
|
|
|
|
$formattedDate = $date->format('Y-m');
|
|
|
|
$month = $formattedDate;
|
|
} else {
|
|
$month = date('Y-m');
|
|
}
|
|
|
|
$data = [];
|
|
|
|
$data['month'] = $month;
|
|
|
|
$this->global['pageTitle'] = 'Bag 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['previousMonthBagStockDetails'] = $this->bagStockDetails_model
|
|
->select(['materialCode', 'date', 'balanceStock'])
|
|
->distinct()
|
|
->where('date =', $previousMonthEndDate)
|
|
->groupBy(['materialCode', 'date'])
|
|
->orderBy('date', 'desc')
|
|
->orderBy('materialCode', 'asc')
|
|
->findAll();
|
|
|
|
|
|
|
|
|
|
$startDate = "$month-01";
|
|
$endDate = date("Y-m-t", strtotime($startDate));
|
|
$data['bagStockDetails'] = $this->bagStockDetails_model
|
|
->where('date >=', $startDate)
|
|
->where('date <=', $endDate)
|
|
->groupBy(['materialCode', 'date'])
|
|
->orderBy('date', 'asc')
|
|
->orderBy('materialCode', 'asc')
|
|
->findAll();
|
|
|
|
// Initialize an empty array to hold the grouped data
|
|
$data['groupedBagStockDetails'] = [];
|
|
|
|
// Temporary array to store grouped data by date
|
|
$groupedByDate = [];
|
|
|
|
// Group by 'date'
|
|
foreach ($data['bagStockDetails'] as $detail) {
|
|
$date = $detail['date'];
|
|
|
|
// Initialize the array for this date if it doesn't exist
|
|
if (!isset($groupedByDate[$date])) {
|
|
$groupedByDate[$date] = [];
|
|
}
|
|
|
|
// Append the detail to the sub-array for this date
|
|
$groupedByDate[$date][] = $detail;
|
|
}
|
|
|
|
// Reset the structure to have indexed arrays without the date keys
|
|
$data['groupedBagStockDetails'] = array_values($groupedByDate);
|
|
|
|
|
|
|
|
$bagMaterials = $this->rawmaterialdetails_model->getAllBagMaterialCode();
|
|
|
|
|
|
|
|
foreach ($bagMaterials as $key => $bagMaterial) {
|
|
$materialCode = $bagMaterial['MaterialCode'];
|
|
$bagMaterials[$key]['customers'] = $this->bagStockDetails_model
|
|
->select('customer')
|
|
->where('date >=', $startDate)
|
|
->where('date <=', $endDate)
|
|
->where('materialCode', $materialCode)
|
|
->first()['customer'] ?? '';
|
|
}
|
|
|
|
$bagMaterialcount = count($bagMaterials);
|
|
|
|
$data['bagMaterialcount'] = $bagMaterialcount;
|
|
$data['bagMaterials'] = $bagMaterials;
|
|
|
|
$date = DateTime::createFromFormat('Y-m', $month);
|
|
|
|
$formattedDate = $date->format('M-Y');
|
|
|
|
$data['month'] = $formattedDate;
|
|
|
|
return $this->loadViews("bagStockDetails", $this->global, $data, NULL);
|
|
|
|
}
|
|
|
|
public function updateBagStockDetails()
|
|
{
|
|
|
|
$postData = $this->request->getPost();
|
|
|
|
$updateBagStockDetailsData = json_decode($postData['updateBagStockDetails'], true);
|
|
|
|
$inserts = [];
|
|
$updates = [];
|
|
|
|
foreach ($updateBagStockDetailsData 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->bagStockDetails_model
|
|
->where('date', $date)
|
|
->where('materialCode', $materialCode)
|
|
->first();
|
|
|
|
|
|
if (empty($resultExists)) {
|
|
$inserts[] = $dbData;
|
|
|
|
} else {
|
|
$dbData['id'] = $resultExists['id'];
|
|
$updates[] = $dbData;
|
|
|
|
}
|
|
}
|
|
|
|
if (!empty($inserts)) {
|
|
$inserted = $this->bagStockDetails_model->insertBatch($inserts);
|
|
}
|
|
if (!empty($updates)) {
|
|
|
|
$updateResult = $this->bagStockDetails_model->updateBatch($updates, 'id');
|
|
|
|
if ($updateResult === FALSE) {
|
|
echo "Error during update";
|
|
} else {
|
|
echo "Data Updated Successfully";
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
echo "Data Saved Successfully";
|
|
|
|
}
|
|
|
|
|
|
//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;
|
|
} else {
|
|
$month = date('Y-m');
|
|
}
|
|
|
|
$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("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;
|
|
} else {
|
|
$month = date('Y-m');
|
|
}
|
|
|
|
$data = [];
|
|
|
|
$data['month'] = $month;
|
|
|
|
$this->global['pageTitle'] = 'Resin 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['previousMonthResinStockDetails'] = $this->resinStockDetails_model
|
|
->select(['materialCode', 'date', 'balanceStock'])
|
|
->distinct()
|
|
->where('date =', $previousMonthEndDate)
|
|
->groupBy(['materialCode', 'date'])
|
|
->orderBy('date', 'desc')
|
|
->orderBy('materialCode', 'asc')
|
|
->findAll();
|
|
|
|
|
|
|
|
|
|
$startDate = "$month-01";
|
|
$endDate = date("Y-m-t", strtotime($startDate));
|
|
$data['resinStockDetails'] = $this->resinStockDetails_model
|
|
->where('date >=', $startDate)
|
|
->where('date <=', $endDate)
|
|
->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 array for this date if it doesn't exist
|
|
if (!isset($groupedByDate[$date])) {
|
|
$groupedByDate[$date] = [];
|
|
}
|
|
|
|
// Append the detail to the sub-array for this date
|
|
$groupedByDate[$date][] = $detail;
|
|
}
|
|
|
|
// Reset the structure to have indexed arrays without the date keys
|
|
$data['groupedResinStockDetails'] = array_values($groupedByDate);
|
|
|
|
|
|
|
|
$resinMaterials = $this->rawmaterialdetails_model->getAllResinMaterialCode();
|
|
|
|
foreach ($resinMaterials as $key => $resinMaterial) {
|
|
$materialCode = $resinMaterial['MaterialCode'];
|
|
$resinMaterials[$key]['customers'] = $this->bagStockDetails_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("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";
|
|
|
|
}
|
|
|
|
|
|
//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;
|
|
} else {
|
|
$month = date('Y-m');
|
|
}
|
|
|
|
$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.*,
|
|
t_drierMachineDetails.total_gas_consumption AS drierMachineGasConsumption,
|
|
t_drierMachineDetails.sand_dried_qty 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(
|
|
't_drierMachineDetails',
|
|
't_drierMachineDetails.date = t_gasStockDetails.date
|
|
AND t_drierMachineDetails.date >= ' . $this->db->escape($startDate) . '
|
|
AND t_drierMachineDetails.date <= ' . $this->db->escape($endDate),
|
|
'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("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'],
|
|
];
|
|
|
|
$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";
|
|
}
|
|
|
|
private function updateGasStockConsumption($date, $consumption)
|
|
{
|
|
$count = 0;
|
|
|
|
$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) {
|
|
|
|
$count++;
|
|
|
|
if ($index == 0) {
|
|
$result['consumption'] = $result['consumption'] + ($consumption);
|
|
$result['total'] = $result['opening'] + $result['purchaseBharath'] + $result['purchaseIndian'];
|
|
$result['balanceStock'] = $result['total'] - $result['consumption'];
|
|
$updatedOpeningStock = $result['balanceStock'];
|
|
} else {
|
|
$result['opening'] = $updatedOpeningStock;
|
|
$result['total'] = $result['opening'] + $result['purchaseBharath'] + $result['purchaseIndian'];
|
|
$result['balanceStock'] = $result['total'] - $result['consumption'];
|
|
$updatedOpeningStock = $result['balanceStock'];
|
|
}
|
|
|
|
log_message('info',$count);
|
|
log_message('info',$date);
|
|
log_message('info', $result['opening']);
|
|
|
|
$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' => 0,
|
|
'purchaseIndian' => 0,
|
|
'total' => 0,
|
|
'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;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
// --------------------------------------------gwm----------------------------------------------
|
|
|
|
|
|
public function getMonthDatesFromInput($monthYear)
|
|
{
|
|
|
|
$date = DateTime::createFromFormat('M-Y', $monthYear);
|
|
|
|
if (!$date) {
|
|
return "Invalid date format. Use 'M-yyyy' format.";
|
|
}
|
|
|
|
$year = $date->format('Y');
|
|
$month = $date->format('m');
|
|
|
|
$totalDays = cal_days_in_month(CAL_GREGORIAN, $month, $year);
|
|
|
|
$dates = [];
|
|
for ($day = 1; $day <= $totalDays; $day++) {
|
|
|
|
$currentDate = DateTime::createFromFormat('Y-m-d', "$year-$month-$day");
|
|
|
|
$dates[] = [
|
|
'readable' => $currentDate->format('d-m-Y'),
|
|
'database' => $currentDate->format('Y-m-d')
|
|
];
|
|
}
|
|
|
|
return $dates;
|
|
}
|
|
|
|
public function generateTimeOptions()
|
|
{
|
|
$times = [];
|
|
$start = strtotime('00:00'); // Start at midnight (12:00 AM)
|
|
$end = strtotime('23:45'); // End at 11:45 PM
|
|
|
|
while ($start <= $end) {
|
|
$timeValue = date('H:i', $start); // 24-hour format for value
|
|
$timeLabel = date('h:i A', $start); // 12-hour format with AM/PM for display
|
|
$times[$timeValue] = $timeLabel; // Store time in associative array
|
|
$start = strtotime('+15 minutes', $start); // Increment by 15 minutes
|
|
}
|
|
|
|
return $times;
|
|
}
|
|
|
|
public function drierMachineDetails()
|
|
{
|
|
|
|
|
|
$currentMonth = $this->request->getPost('month') ? $this->request->getPost('month') : date('M-Y');
|
|
|
|
$monthData = $this->getMonthDatesFromInput($currentMonth);
|
|
|
|
$data['startDate'] = $monthData[0]['database'];
|
|
$data['endDate'] = $monthData[count($monthData) - 1]['database'];
|
|
$data['timeDropdown'] = $this->generateTimeOptions();
|
|
$data['supplierData'] = $this->supplier_model->supplierlisting();
|
|
|
|
$data['drierDetails'] = $this->drierMachineDetails_model->where('date >=', $data['startDate'])->where('date <=', $data['endDate'])->findAll();
|
|
if (!count($data['drierDetails'])) {
|
|
//insert empty data
|
|
$tempInsert = [];
|
|
foreach ($monthData as $key => $value) {
|
|
array_push($tempInsert, ['date' => $value['database']]);
|
|
}
|
|
$this->drierMachineDetails_model->insertBatch($tempInsert);
|
|
|
|
$data['drierDetails'] = $this->drierMachineDetails_model->where('date >=', $data['startDate'])->where('date <=', $data['endDate'])->findAll();
|
|
}
|
|
|
|
$data['datefordropdown'] = $currentMonth;
|
|
|
|
|
|
|
|
|
|
$this->global['pageTitle'] = 'Drier Details';
|
|
$this->loadViews("drierMachineDetails", $this->global, $data, NULL);
|
|
}
|
|
|
|
public function addOrEditdrierMachineDetails()
|
|
{
|
|
$drierData = json_decode($this->request->getPost('drierData'), true);
|
|
|
|
if (empty($drierData)) {
|
|
echo "No data received.";
|
|
return;
|
|
}
|
|
|
|
foreach ($drierData as $row) {
|
|
$data = [
|
|
'date' => DateTime::createFromFormat('d-m-Y', $row['Date'])->format('Y-m-d'),
|
|
'drier_on_time' => $row['Drier On Time'],
|
|
'drier_off_time' => $row['Drier Off Time'],
|
|
'drier_running_hours' => $row['Running Hrs'],
|
|
'supplier_name' => $row['Supplier Name'],
|
|
'input_sand_moisture' => $row['i/p Sand Moisture(%)'],
|
|
'total_gas_consumption' => $row['Tot Gas Consumption'],
|
|
'gas_per_ton' => $row['Gas Pre Ton'],
|
|
'input_sand_qty' => $row['i/p Sand Qty'],
|
|
'moisture_loss_qty' => $row['Moisture Loss Qty'],
|
|
'sand_dried_qty' => $row['Sand Dried Qty'],
|
|
'qty_per_hours' => $row['Qty Per Hrs'],
|
|
'dust_qty' => $row['Dust Qty'],
|
|
'customer_name' => $row['Customer Name']
|
|
];
|
|
|
|
// Check if a row with the same date already exists
|
|
$existingRow = $this->drierMachineDetails_model->where('date', $data['date'])->first();
|
|
|
|
if ($existingRow) {
|
|
// If exists, update the row
|
|
|
|
//before updating the row update gas stock
|
|
$existingDrierGasConsumption = $existingRow['total_gas_consumption'];
|
|
$updatedDrierGasConsumption = $row['Tot Gas Consumption'];
|
|
|
|
if ($existingDrierGasConsumption != $updatedDrierGasConsumption) {
|
|
|
|
$changeInConsumption = $updatedDrierGasConsumption - $existingDrierGasConsumption ;
|
|
$dateToBeUpdated = $existingRow['date'] ;
|
|
$result =$this->gasStockDetails_model
|
|
->where('date',$dateToBeUpdated)
|
|
->find();
|
|
$consumption = $result[0]['consumption'] + $changeInConsumption ;
|
|
$result = $this->updateGasStockConsumption($dateToBeUpdated, $consumption);
|
|
}
|
|
|
|
$this->drierMachineDetails_model->update($existingRow['id'], $data);
|
|
} else {
|
|
// If not, insert a new row
|
|
//before inserting the row update gas stock
|
|
$consumption = $row['Tot Gas Consumption'];
|
|
$dateToBeInserted = $data['date'];
|
|
$this->updateGasStockConsumption($dateToBeInserted, $consumption);
|
|
|
|
|
|
$this->drierMachineDetails_model->insert($data);
|
|
}
|
|
}
|
|
|
|
echo "Data successfully saved.";
|
|
}
|
|
|
|
public function factoryVehicleDieselDetails()
|
|
{
|
|
$currentMonth = $this->request->getPost('month') ? $this->request->getPost('month') : date('M-Y');
|
|
|
|
$monthData = $this->getMonthDatesFromInput($currentMonth);
|
|
|
|
$data['startDate'] = $monthData[0]['database'];
|
|
$data['endDate'] = $monthData[count($monthData) - 1]['database'];
|
|
$data['datefordropdown'] = $currentMonth;
|
|
|
|
//Machine Details
|
|
$data['machineDetails'] = $this->factoryMachine_model->where('energy_type', 'diesel')->where('is_active', 1)->findAll();
|
|
if (!count([$data['machineDetails']])) {
|
|
return $this->response->setBody("<script>alert('No Machine data available');</script>");
|
|
}
|
|
|
|
//Diesel Stock Summary Details
|
|
$data['summaryDetails'] = $this->factoryVehicleDieselStockSummary_model->select('date,opening_stock as opening_stock_0,purchase_diesel as purchase_diesel_0,total_filling_diesel as total_filling_diesel_0,balance_stock as balance_stock_0')->where('date >=', $data['startDate'])->where('date <=', $data['endDate'])->findAll();
|
|
if (!count($data['summaryDetails'])) {
|
|
//insert empty data
|
|
$tempInsert = [];
|
|
foreach ($monthData as $key => $value) {
|
|
array_push($tempInsert, ['date' => $value['database']]);
|
|
}
|
|
$this->factoryVehicleDieselStockSummary_model->insertBatch($tempInsert);
|
|
|
|
$data['summaryDetails'] = $this->factoryVehicleDieselStockSummary_model->where('date >=', $data['startDate'])->where('date <=', $data['endDate'])->findAll();
|
|
}
|
|
|
|
//Diesel Consumption Details
|
|
$data['dieselConsumptionDetails'] = $this->getDieselConsumptionPivot($data['machineDetails'], $data['startDate'], $data['endDate']);
|
|
if (!count($data['dieselConsumptionDetails'])) {
|
|
//insert empty data
|
|
$tempInsert = [];
|
|
foreach ($monthData as $key => $value) {
|
|
array_push($tempInsert, ['date' => $value['database'], 'machine_id' => $data['machineDetails'][0]['id']]);
|
|
}
|
|
$this->factoryVehicleDieselDetails_model->insertBatch($tempInsert);
|
|
|
|
$data['dieselConsumptionDetails'] = $this->getDieselConsumptionPivot($data['machineDetails'], $data['startDate'], $data['endDate']);
|
|
}
|
|
|
|
|
|
$mergedArray = [];
|
|
|
|
// Loop through the first array
|
|
foreach ($data['summaryDetails'] as $item1) {
|
|
$date = $item1["date"];
|
|
|
|
// Find the matching item in the second array by date
|
|
foreach ($data['dieselConsumptionDetails'] as $item2) {
|
|
if ($item2["date"] === $date) {
|
|
// Merge the two arrays
|
|
$mergedArray[] = array_merge($item1, $item2);
|
|
break; // Stop once the matching date is found
|
|
}
|
|
}
|
|
}
|
|
$data['dieselConsumptionDetails'] = $mergedArray;
|
|
|
|
$data['machineName'] = array_column($data['machineDetails'], 'machine_name');
|
|
|
|
$this->global['pageTitle'] = 'Drier Details';
|
|
$this->loadViews("factoryDieselMachineDetails", $this->global, $data, NULL);
|
|
|
|
}
|
|
|
|
public function getDieselConsumptionPivot($machineDetails, $startDate, $endDeate)
|
|
{
|
|
$machineIds = array_column($machineDetails, 'id');
|
|
|
|
if (empty($machineIds)) {
|
|
return [];
|
|
}
|
|
|
|
$fields = ['opening_reading', 'closing_reading', 'filling_diesel', 'consumption', 'running_hours', 'mileage'];
|
|
|
|
$pivotColumns = [];
|
|
foreach ($machineIds as $machineId) {
|
|
foreach ($fields as $field) {
|
|
$pivotColumns[] = "MAX(CASE WHEN machine_id = $machineId THEN $field ELSE 0 END) AS {$field}_{$machineId}";
|
|
}
|
|
}
|
|
|
|
$pivotColumnString = implode(", ", $pivotColumns);
|
|
|
|
$sql = "SELECT `date`, $pivotColumnString FROM `t_factoryVehicleDieselDetails`
|
|
WHERE machine_id IN (" . implode(",", $machineIds) . ") AND `date` >= ? AND `date` <= ?
|
|
GROUP BY `date`";
|
|
|
|
$query = $this->db->query($sql, [$startDate, $endDeate]);
|
|
$result = $query->getResultArray();
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function addOrEditfactoryVehicleDieselDetails()
|
|
{
|
|
$dieselMachineTableData = json_decode($this->request->getPost('dieselMachineTableData'), true);
|
|
|
|
$transformedData = [];
|
|
foreach ($dieselMachineTableData as $entry) {
|
|
$date = $entry['date'];
|
|
|
|
foreach ($entry as $key => $value) {
|
|
|
|
if ($key === 'date') {
|
|
continue;
|
|
}
|
|
|
|
preg_match('/(.*?)_(\d+)$/', $key, $matches);
|
|
|
|
if (count($matches) === 3) {
|
|
$field = $matches[1];
|
|
$machineId = $matches[2];
|
|
|
|
$insertKey = "{$date}_{$machineId}";
|
|
if (!isset($transformedData[$insertKey])) {
|
|
$transformedData[$insertKey] = [
|
|
'date' => DateTime::createFromFormat('d-m-Y', $date)->format('Y-m-d'),
|
|
'machine_id' => $machineId,
|
|
'opening_reading' => 0.00,
|
|
'closing_reading' => 0.00,
|
|
'filling_diesel' => 0.00,
|
|
'consumption' => 0.00,
|
|
'running_hours' => 0.00,
|
|
'mileage' => 0.00,
|
|
];
|
|
}
|
|
|
|
$transformedData[$insertKey][$field] = (float) $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
foreach ($transformedData as $row) {
|
|
|
|
if ($row['machine_id'] == 0) {
|
|
// Summary data: if machine_id is 0, it indicates summary data. This distinction is used because these records will be stored in a separate table.
|
|
$this->factoryVehicleDieselStockSummary_model->where('date', $row['date'])->set($row)->update();
|
|
|
|
} else {
|
|
|
|
// Diesel - factory vehicle data :
|
|
$existingRow = $this->factoryVehicleDieselDetails_model->where('date', $row['date'])->where('machine_id', $row['machine_id'])->first();
|
|
if ($existingRow) {
|
|
$this->factoryVehicleDieselDetails_model->update($existingRow['id'], $row);
|
|
} else {
|
|
$this->factoryVehicleDieselDetails_model->insert($row);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
echo "Data successfully saved.";
|
|
|
|
}
|
|
|
|
|
|
public function powerConsumptionDetails()
|
|
{
|
|
$currentMonth = $this->request->getPost('month') ? $this->request->getPost('month') : date('M-Y');
|
|
|
|
$monthData = $this->getMonthDatesFromInput($currentMonth);
|
|
|
|
$data['startDate'] = $monthData[0]['database'];
|
|
$data['endDate'] = $monthData[count($monthData) - 1]['database'];
|
|
$data['datefordropdown'] = $currentMonth;
|
|
|
|
//Machine Details
|
|
$data['machineDetails'] = $this->factoryMachine_model->where('energy_type', 'electric')->where('is_active', 1)->findAll();
|
|
if (!count([$data['machineDetails']])) {
|
|
return $this->response->setBody("<script>alert('No Machine data available');</script>");
|
|
}
|
|
|
|
|
|
|
|
//Diesel Consumption Details
|
|
$data['powerConsumptionDetails'] = $this->getElectricConsumptionPivot($data['machineDetails'], $data['startDate'], $data['endDate']);
|
|
if (!count($data['powerConsumptionDetails'])) {
|
|
//insert empty data
|
|
$tempInsert = [];
|
|
foreach ($monthData as $key => $value) {
|
|
array_push($tempInsert, ['date' => $value['database'], 'machine_id' => $data['machineDetails'][0]['id']]);
|
|
}
|
|
$this->powerConsumptionDetails_model->insertBatch($tempInsert);
|
|
|
|
$data['powerConsumptionDetails'] = $this->getElectricConsumptionPivot($data['machineDetails'], $data['startDate'], $data['endDate']);
|
|
}
|
|
|
|
|
|
|
|
|
|
$data['machineName'] = array_column($data['machineDetails'], 'machine_name');
|
|
|
|
$this->global['pageTitle'] = 'Power Consumption Details';
|
|
$this->loadViews("powerConsumptionDetails", $this->global, $data, NULL);
|
|
|
|
}
|
|
|
|
public function getElectricConsumptionPivot($machineDetails, $startDate, $endDeate)
|
|
{
|
|
$machineIds = array_column($machineDetails, 'id');
|
|
|
|
if (empty($machineIds)) {
|
|
return [];
|
|
}
|
|
|
|
$fields = ['opening_units', 'closing_units', 'total_units'];
|
|
|
|
$pivotColumns = [];
|
|
foreach ($machineIds as $machineId) {
|
|
foreach ($fields as $field) {
|
|
$pivotColumns[] = "MAX(CASE WHEN machine_id = $machineId THEN $field ELSE 0 END) AS {$field}_{$machineId}";
|
|
}
|
|
}
|
|
|
|
$pivotColumnString = implode(", ", $pivotColumns);
|
|
|
|
$sql = "SELECT `date`, $pivotColumnString FROM `t_powerConsumptionDetails`
|
|
WHERE machine_id IN (" . implode(",", $machineIds) . ") AND `date` >= ? AND `date` <= ?
|
|
GROUP BY `date`";
|
|
|
|
$query = $this->db->query($sql, [$startDate, $endDeate]);
|
|
$result = $query->getResultArray();
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function addOrEditPowerConsumptionDetails()
|
|
{
|
|
$electricMachineTableData = json_decode($this->request->getPost('electricMachineTableData'), true);
|
|
|
|
$transformedData = [];
|
|
foreach ($electricMachineTableData as $entry) {
|
|
$date = $entry['date'];
|
|
|
|
foreach ($entry as $key => $value) {
|
|
|
|
if ($key === 'date') {
|
|
continue;
|
|
}
|
|
|
|
preg_match('/(.*?)_(\d+)$/', $key, $matches);
|
|
|
|
if (count($matches) === 3) {
|
|
$field = $matches[1];
|
|
$machineId = $matches[2];
|
|
|
|
$insertKey = "{$date}_{$machineId}";
|
|
if (!isset($transformedData[$insertKey])) {
|
|
$transformedData[$insertKey] = [
|
|
'date' => DateTime::createFromFormat('d-m-Y', $date)->format('Y-m-d'),
|
|
'machine_id' => $machineId,
|
|
'opening_units' => 0.00,
|
|
'closing_units' => 0.00,
|
|
'total_units' => 0.00
|
|
];
|
|
}
|
|
|
|
$transformedData[$insertKey][$field] = (float) $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
foreach ($transformedData as $row) {
|
|
|
|
$existingRow = $this->powerConsumptionDetails_model->where('date', $row['date'])->where('machine_id', $row['machine_id'])->first();
|
|
if ($existingRow) {
|
|
$this->powerConsumptionDetails_model->update($existingRow['id'], $row);
|
|
} else {
|
|
$this->powerConsumptionDetails_model->insert($row);
|
|
}
|
|
}
|
|
|
|
|
|
echo "Data successfully saved.";
|
|
|
|
}
|
|
|
|
|
|
}
|