ria/app/Controllers/Storerequisitioncontroller.php
2024-09-11 08:54:25 +05:30

468 lines
14 KiB
PHP
Executable File

<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use CodeIgniter\Validation\Exceptions\ValidationException;
use App\Models\Storerequistion_model;
/**
* Module : Store And Stock list details
* Storerequisitioncontroller Class to control all Store's-stock related operations.
* @author : Venba
* @version : 1.1
* @since : 18 November 2017
* @example : Revised at 15th april 2024
*/
class Storerequisitioncontroller extends BaseController
{
protected $storerequistion_model;
protected $session;
/**
* Default constructor of the class
*/
public function __construct()
{
parent::__construct();
$this->storerequistion_model = new Storerequistion_model();
$this->session = session();
helper('form'); //$this->load->library('form_validation');
$this->isLoggedIn();
}
/**
* For Store requisition listing (NOTE : this listing descripted - what are the store requistion)
**/
function addstores()
{
$this->global['pageTitle'] = 'Raise Store Requisition';
$userId = $this->session->get('userId');
$data['DEPCode'] = $this->session->get('DEPCode');
$data['DepName'] = $this->session->get('DepartmentName');
$data['cost'] = $this->storerequistion_model->getCostUser($userId);
$data['MaterialList'] = $this->storerequistion_model->getRawMaterialList();
$this->loadViews("addstorerequisitionslip", $this->global, $data, null);
}
/**
* Store requisition listing is under Draft status (this hide the raise StoreRequisition button).
**/
function addstore()
{
$this->global['pageTitle'] = 'Store Requisition Details';
$userId = $this->session->get('userId');
$data['Store'] = $this->storerequistion_model->Storeall($userId);
$this->loadViews("storerequisition", $this->global, $data, null);
}
/**
* Its handles Store Requistion Delete Operations ( in Store Requistion listing )
*/
function DeleteReqNo()
{
$StoreReqNo = $this->request->getPost('id');
$updateddt = get_current_date_time();
$Request = array('Status' => REQ_DELETED, 'updatedOn' => $updateddt);
$this->storerequistion_model->UpdateRequistion($StoreReqNo, $Request);
echo "Successfully Deleted the " . $StoreReqNo;
}
/**
* For editing purpose and it has oldest all store requistion.
*/
function EditStoreRequistion()
{
$StoreReqNo = $_GET['StoreReqNo'];
$this->global['pageTitle'] = 'Edit StoreRequisition';
$data['cost'] = $this->storerequistion_model->editRequistDetails($StoreReqNo);
$data['Status'] = $this->storerequistion_model->getStoreRequistionStatus($StoreReqNo);
$data['MaterialList'] = $this->storerequistion_model->getRawMaterialList();
$data['DepName'] = $this->session->get('DepartmentName');
$data['LineItem'] = $this->storerequistion_model->editstorerequistions($StoreReqNo);
$this->loadViews("editstorerequisition", $this->global, $data, null);
}
/**
* To convert the dateformat (date with time) and store to DB
*/
function getDateformat($Val)
{
$date = new DateTime($Val);
$retDate = $date->format('Y-m-d H:i:s');
return $retDate;
}
/**
* For new StoreRequestion values inserted into DB
*/
function addNewRequistion()
{
$CostCenter = $this->request->getPost('CostCenter');
$DEPCode = $this->request->getPost('txtDepCode');
$CreateBy = $this->session->get('userId');
$createddt = get_current_date_time();
$DeletedRow = $this->request->getPost('txtDeletedRow');
$RowCount = $this->request->getPost('txtRowCount');
$Status = $this->request->getPost('txtStatus');
$Requestedby = $this->session->get('EmpID');
$comma_separated = explode(':', $DeletedRow);
$StoreReqNo = '';
$StoreItemStatus = STORE_OPEN;
$Request = array('Requestedby' => $Requestedby, 'DepartmentCode' => $DEPCode, 'ReqDate' => $createddt, 'CostCenterCode' => $CostCenter, 'Status' => $Status, 'CreatedDate' => $createddt, 'CreatedBy' => $CreateBy);
$Req = $this->storerequistion_model->addRequistion($Request);
if (count($Req) > 0) {
$StoreReqNo = $Req[0]['StoreReqNo'];
}
$SkipInsert = False;
for ($i = 1; $i <= $RowCount; $i++) {
$SkipInsert = "False";
if (count($comma_separated) > 0) {
for ($j = 1; $j < count($comma_separated); $j++) {
$deletedRow = $comma_separated[$j];
if ($deletedRow == $i) {
$SkipInsert = "True";
break;
}
}
}
if ($SkipInsert == "False") {
$MaterialCode = $this->request->getPost('MaterialCode' . $i);
$QuantityRequired = $this->request->getPost('Quantity' . $i);
$Remarks = $this->request->getPost('Remarks' . $i);
$Request = array('MaterialCode' => $MaterialCode, 'Status' => $StoreItemStatus, 'QuantityRequired' => $QuantityRequired, 'Remarks' => $Remarks, 'StoreReqNo' => $StoreReqNo);
$addReq = $this->storerequistion_model->addstoreRequistion($Request);
}
}
if ($Status == STORE_DRAFT) {
echo 'Successfully Saved the Store Requistion details';
} else {
echo 'Successfully Created the Store Requistion details';
}
}
/**
* For Store requisition listing (NOTE : this listing descripted - only approved store requistion)
*/
function addstorerequisitionlist()
{
$this->global['pageTitle'] = 'Store Requisition Listing';
$data['Status'] = $this->storerequistion_model->getStatus();
$data['TotNoOfLine'] = $this->storerequistion_model->getRequistionList();
$this->loadViews("storerequisitionlisting", $this->global, $data, null);
}
/**
* To issue Store Requistion
**/
function issuestorerequisition()
{
$this->global['pageTitle'] = 'Issue StoreRequisition';
$StoreReqNo = $_GET['ReqNo'];
$data['ReqItem'] = $this->storerequistion_model->getRequistItemList($StoreReqNo);
$data['ReqListDetails'] = $this->storerequistion_model->getRequistDetails($StoreReqNo);
$this->loadViews("issueStoreRequistion", $this->global, $data, null);
}
/**
* To Update with existing one with new one (Issued Requistion)
* */
function UpdateIssueRequistion()
{
$ReqNO = $this->request->getPost('txtReqNo');
$RowCount = $this->request->getPost('txtRowCount');
$createddt = get_current_date_time();
$UPdateby = $this->session->get('userId');
$UPdateon = get_current_date_time();
for ($i = 1; $i <= $RowCount; $i++) {
$MaterialCode = $this->request->getPost('MaterialCode' . $i);
$IssuedQuantity = $this->request->getPost('txtIssuedQuantity' . $i);
$Reqqty = $this->request->getPost('txtqty' . $i);
$savedqty = $this->storerequistion_model->getSavedQty($ReqNO, $MaterialCode);
$Qtyissued = 0;
foreach ($savedqty as $Qty) {
$Qtyissued = $Qty->QuantityIssued;
}
$ActQty = $Qtyissued + $IssuedQuantity;
if ($Reqqty > $ActQty) {
$ItemStatus = STORE_PARTIALLYISSUSED;
} else {
$ItemStatus = STORE_ISSUSED;
}
if (strlen($IssuedQuantity) > 0) {
$Remarks = $this->request->getPost('txtRemarks' . $i);
$CreatedBy = $this->session->get('userId');
$storerequisition = array('StoreReqNo' => $ReqNO, 'MaterialCode' => $MaterialCode, 'QuantityIssued' => $ActQty, 'Status' => $ItemStatus, 'StoreComments' => $Remarks, 'UpdatedOn' => $createddt, 'UpdatedBy' => $CreatedBy);
$this->storerequistion_model->UpdateStoreRequistionItem($storerequisition, $ReqNO, $MaterialCode);
$getAvailableqty = $this->storerequistion_model->getItemQuantityFromStock(trim($MaterialCode));
if (count($getAvailableqty) > 0) {
$avlQty = $getAvailableqty[0]['Quantity'];
}
$BalanceQty = $avlQty - $IssuedQuantity;
$updatStock = array(
'Quantity' => $BalanceQty, 'Status' => '0',
'Remarks' => 'Stock Deducted For' . $ReqNO, 'UpdatedOn' => $UPdateon, 'UpdatedBy' => $UPdateby
);
$this->storerequistion_model->UpdateStock($updatStock, trim($MaterialCode));
$StoreReqNo = $ReqNO;
$reqstatus = $this->storerequistion_model->getstatuscount('ST037', $ReqNO);
$reqstatuscount = 0;
foreach ($reqstatus as $Req) {
$reqstatuscount = $Req->SCount;
}
if ($reqstatuscount == $RowCount) {
$reqStatus = STORE_ISSUSED;
} else {
$reqStatus = STORE_PARTIALLYISSUSED;
}
$updatestatus = array('Status' => $reqStatus);
$this->storerequistion_model->updatestoremaster($updatestatus, $StoreReqNo);
}
}
echo "<script>alert('Updated Successfully!');</script>";
redirect('storerequisitionlisting', 'refresh');
}
/**
* For Store Requisition listing (Note: this listing descripted - Approve the store requisition )
**/
function SearchRequistLists()
{
$userID = $this->session->get('userId');
$data['AppList'] = $this->storerequistion_model->getApproverRequistList($userID);
$this->global['pageTitle'] = 'Approval Store Requisition Listing';
$data['Status'] = $this->storerequistion_model->getStatus();
$this->loadViews("approvalstorerequisitionslip", $this->global, $data, NULL);
}
/**
* To change the approval storerequisition status ( Approve Completed are not)
*/
function ApproveRequest()
{
$Status = Trim($_GET['Status']);
$StoreReqNo = trim($this->request->getPost('id'));
$Remarks = trim($this->request->getPost('newcomments'));
$ApprovedBy = $this->session->get('userId');
$ApprovedDate = get_current_date_time();
$Request = array('Status' => $Status, 'Comments' => $Remarks, 'ApprovedOn' => $ApprovedDate, 'Approvedby' => $ApprovedBy);
$this->storerequistion_model->UpdateRequistion($StoreReqNo, $Request);
echo "Successfully Updated the Requistion No: " . $StoreReqNo;
}
/*to load the first screen of the Requistion List Approval Screen*/
function requisitionlistApproval()
{
$this->global['pageTitle'] = 'Approvalstorerequisitionlist';
$userID = $this->session->get('userId');
$data['AppList'] = $this->storerequistion_model->getApproverRequistList($userID);
$this->loadViews("requisitionlistapproval", $this->global, $data, NULL);
}
/* To Edit the view store request*/
function ViewRequest()
{
$StoreReqNo = $this->request->getPost('id');
$result = $this->storerequistion_model->getRequistItemListApproval($StoreReqNo);
$ReqList = $this->storerequistion_model->getRequistDetails($StoreReqNo);
$HTML = "";
for ($i = 0; $i < count($result); $i++) {
$SNo = $i + 1;
$MaterialCode = $result[$i]['MaterialCode'];
$MaterialName = $result[$i]['MaterialName'];
$UOM = $result[$i]['UOM'];
$Quantity = $result[$i]['QuantityRequired'];
$IssuedQty = $result[$i]['QuantityIssued'];
$Status = $result[$i]['StatusName'];
$Remarks = $result[$i]['Remarks'];
$HTML .= "<tr id='" . $i . "'>
<td align='left'>" . $SNo . "</td>
<td align='left'>" . $MaterialCode . "</td>
<td align='left'>" . $MaterialName . "</td>
<td align='left'>" . $UOM . "</td>
<td align='left'>" . $Quantity . "</td>
<td align='left'>" . $IssuedQty . "</td>
<td align='left'>" . $Status . "</td>
<td align='left'>" . $Remarks . "</td>
</tr>";
}
die(json_encode(array('Items' => $HTML, 'Requist' => $ReqList)));
}
/**
* For stored new values after edited StoreRequistion information.
*/
function UpdateStoreRequistion()
{
$CostCenter = $this->request->getPost('CostCenter');
$DeletedRow = $this->request->getPost('txtDeletedRow');
$RowCount = $this->request->getPost('txtRowCount');
$Status = $this->request->getPost('txtStatus');
$Requestedby = $this->session->get('EmpID');
$comma_separated = explode(':', $DeletedRow);
$StoreReqNo = $this->request->getPost('txtReqNo');
$Requestedby = $this->request->getPost('RequestedBy');
$UpdatedBy = $this->session->get('userId');
$updatedDate = get_current_date_time();
if (strlen($Status) > 1) {
$Request = array('CostCenterCode' => $CostCenter, 'Status' => $Status, 'updatedOn' => $updatedDate);
$UpdateReq = $this->storerequistion_model->UpdateRequistion($StoreReqNo, $Request);
}
$SkipInsert = False;
$StoreItemStatus = STORE_OPEN;
for ($i = 1; $i <= $RowCount; $i++) {
$SkipInsert = "False";
if (count($comma_separated) > 0) {
for ($j = 1; $j < count($comma_separated); $j++) {
$deletedRow = $comma_separated[$j];
if ($deletedRow == $i) {
$SkipInsert = "True";
break;
}
}
}
if ($SkipInsert == "False") {
$MaterialCode = $this->request->getPost('MaterialCode' . $i);
$QuantityRequired = $this->request->getPost('Quantity' . $i);
$Remarks = $this->request->getPost('Remarks' . $i);
$IsExists = $this->storerequistion_model->LineItemIsExists($StoreReqNo, $MaterialCode);
if (count($IsExists) == 0) {
$ReqDetails = array('StoreReqNo' => $StoreReqNo, 'MaterialCode' => $MaterialCode, 'QuantityRequired' => $QuantityRequired, 'Remarks' => $Remarks, 'Status' => $StoreItemStatus, 'UpdatedBy' => $UpdatedBy, 'UpdatedOn' => $updatedDate);
$this->storerequistion_model->addstoreRequistion($ReqDetails);
} else {
$ReqDetails = array('QuantityRequired' => $QuantityRequired, 'Remarks' => $Remarks, 'Status' => $StoreItemStatus, 'UpdatedBy' => $UpdatedBy, 'UpdatedOn' => $updatedDate);
$this->storerequistion_model->UpdateRequistionLineItem($ReqDetails, $StoreReqNo, $MaterialCode);
}
}
}
echo 'Successfully updated the Requistion details';
}
/**
* Its handles Store Requistion Line item Delete Operations ( add & edit Store Requistion screen)
*/
function DeleteRequistionForm()
{
$ReqList = $this->request->getPost('id');
$StoreReqNo = '';
$MaterialCode = '';
if (count($ReqList) > 0) {
$StoreReqNo = $ReqList[0];
$MaterialCode = $ReqList[1];
}
$this->storerequistion_model->DeleteRequistionLineItem($StoreReqNo, $MaterialCode);
echo "Successfully Deleted the Line item" . $StoreReqNo;
}
}