diff --git a/app/Config/Routes.php b/app/Config/Routes.php index b56284fd..e63f0881 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -152,6 +152,8 @@ $routes->get('purchaseorder/Savencrlist', 'Purchaseorder::Savencrlist'); $routes->get('purchaseorder/Nonconfirmativelist', 'Purchaseorder::Nonconfirmativelist'); $routes->post('purchaseorder/addloadfile', 'Purchaseorder::addloadfile'); $routes->post('purchaseorder/uploadfile', 'Purchaseorder::uploadfile'); +$routes->post('getMaterialUsedPO', 'Purchaseorder::getMaterialUsedPO'); +$routes->post('getSupplierUsedPO', 'Purchaseorder::getSupplierUsedPO'); //Zohobooks sync $routes->match(['GET', 'POST'], 'user/zohobooks_api_fetch_all', 'User::zohobooks_api_fetch_all'); @@ -288,8 +290,9 @@ $routes->post('ViewIGRfile', 'Inwardgateregister::ViewIGRfile'); $routes->post('getAdditionalIGRFile', 'Inwardgateregister::getAdditionalIGRFile'); $routes->post('deleteAdditionalIGRFile', 'Inwardgateregister::deleteAdditionalIGRFile'); $routes->get('download-files/(:segment)', 'Inwardgateregister::downloadFilesAsZip/$1'); - $routes->post('inwardgateregister/edituploadfile', 'Inwardgateregister::edituploadfile'); +$routes->post('getIGRRemarks', 'Inwardgateregister::getIGRRemarks'); +$routes->post('saveIGRRemarks', 'Inwardgateregister::saveIGRRemarks'); // Non IGR / Expense diff --git a/app/Controllers/Inwardgateregister.php b/app/Controllers/Inwardgateregister.php index 89aadcd7..4a51d8a0 100755 --- a/app/Controllers/Inwardgateregister.php +++ b/app/Controllers/Inwardgateregister.php @@ -7,6 +7,7 @@ use App\Controllers\BaseController; use CodeIgniter\Validation\Exceptions\ValidationException; use App\Models\Inwardgateregister_model; +use App\Models\IGRRemarks_model; use ZipArchive; @@ -21,6 +22,7 @@ use ZipArchive; class Inwardgateregister extends BaseController { protected $inwardgateregister_model; + protected $IGRRemarks_model; protected $session; /** @@ -30,6 +32,7 @@ class Inwardgateregister extends BaseController { parent::__construct(); $this->inwardgateregister_model = new Inwardgateregister_model(); + $this->IGRRemarks_model = new IGRRemarks_model(); $this->session = session(); helper('form'); //$this->load->library('form_validation'); @@ -1791,6 +1794,37 @@ function updateIGRWeight(){ return redirect()->to('/ViewIGR'); } } + + + + public function getIGRRemarks() + { + $igrNo = $this->request->getPost('igr_no'); + $data = $this->IGRRemarks_model->select('t_igr_remarkes.remark ,t_igr_remarkes.remark_on , t_employee_details.FirstName as remark_by') + ->join('t_employee_details', 't_igr_remarkes.remark_by = t_employee_details.EmpID', 'left') + ->where('t_igr_remarkes.igr_no', $igrNo) + ->findAll(); + + echo json_encode($data); + } + + public function saveIGRRemarks() + { + $data['igr_no'] = $this->request->getPost('igr_no'); + $data['remark'] = $this->request->getPost('remark'); + $data['remark_by'] = session()->get('EmpID'); + $data['remark_on'] = date('Y-m-d H:i:s'); + + $insert = $this->IGRRemarks_model->save($data); + + $data = $this->IGRRemarks_model->select('t_igr_remarkes.remark ,t_igr_remarkes.remark_on , t_employee_details.FirstName as remark_by') + ->join('t_employee_details', 't_igr_remarkes.remark_by = t_employee_details.EmpID', 'left') + ->where('t_igr_remarkes.igr_no', $data['igr_no']) + ->findAll(); + + echo json_encode($data); + + } diff --git a/app/Controllers/Purchaseorder.php b/app/Controllers/Purchaseorder.php index 418b28f2..6c9c507d 100755 --- a/app/Controllers/Purchaseorder.php +++ b/app/Controllers/Purchaseorder.php @@ -10,6 +10,7 @@ use App\Models\Costcenter_model; use App\Models\Inwardgateregister_model; use App\Models\Purchaseorder_model; use App\Models\Requistion_model; +use App\Models\PurchaseOrderLineItemModel; use Mpdf\Mpdf; use DateTime; @@ -29,6 +30,7 @@ class Purchaseorder extends BaseController protected $inwardgateregister_model; protected $requistion_model; protected $costcenter_model; + protected $PurchaseOrderLineItemModel; protected $session; @@ -42,6 +44,7 @@ class Purchaseorder extends BaseController $this->inwardgateregister_model = new Inwardgateregister_model(); $this->requistion_model = new Requistion_model(); $this->costcenter_model = new Costcenter_model(); + $this->PurchaseOrderLineItemModel = new PurchaseOrderLineItemModel(); $this->session = session(); helper('form'); //$this->load->library('form_validation'); @@ -345,8 +348,19 @@ class Purchaseorder extends BaseController $data['POItem'] = $this->purchaseorder_model->GetImportPurchaseOrderDetailsForPDF($PONO); $CurrencyType = $data['POItem'][0]->CurrencyType; } else if ($ReqType == CAPITAL) { - $data['POItem'] = $this->purchaseorder_model->GetCapitalPurchaseOrderDetailsForPDF($PONO); - $CurrencyType = $data['POItem'][0]->CurrencyType; + + $CapitalRange = $this->purchaseorder_model->where('PONO',$PONO)->get()->getRow()->CapitalRange; + + if($CapitalRange == 1){ + $data['POItem'] = $this->purchaseorder_model->GetServicePurchaseOrderDetailsForpdf($PONO); + $data['serviceTaxList'] = $this->purchaseorder_model->GetServiceTaxDetails($PONO); + $CurrencyType = $data['POItem'][0]->CurrencyType; + }else{ + $data['POItem'] = $this->purchaseorder_model->GetImportPurchaseOrderDetailsForPDF($PONO); + $CurrencyType = $data['POItem'][0]->CurrencyType; + } + // $data['POItem'] = $this->purchaseorder_model->GetCapitalPurchaseOrderDetailsForPDF($PONO); + } @@ -415,7 +429,7 @@ class Purchaseorder extends BaseController // $html = view('pdf_view', $data); // $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content $html = view('po_pdf', $data); - // echo $html;die; + // echo $html;die; $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content // Set HTML footer @@ -2515,14 +2529,14 @@ class Purchaseorder extends BaseController /* All Function following This command for FINANCE TEAM PO APPROVAL SCREEN*/ function poapproval() { - $q = "APPROVAL"; - $this->global['pageTitle'] = 'Purchase Order Approval'; - // $data['Status']= $this->purchaseorder_model->getStatus(); - $userID = $this->session->get('userId'); - //print_r($data['Status']);echo "CON"; - $data['AppList'] = $this->purchaseorder_model->getPOList($q); + // $q = "APPROVAL"; + // $this->global['pageTitle'] = 'Purchase Order Approval'; + // // $data['Status']= $this->purchaseorder_model->getStatus(); + // $userID = $this->session->get('userId'); + // //print_r($data['Status']);echo "CON"; + // $data['AppList'] = $this->purchaseorder_model->getPOList($q); - $this->loadViews("poapproval_view", $this->global, $data, NULL); + // $this->loadViews("poapproval_view", $this->global, $data, NULL); } @@ -3316,9 +3330,9 @@ class Purchaseorder extends BaseController /* capital po print/pdf*/ - public function CapitalPoPrint($PONO) + public function CapitalPoPrint() { - + $PONO = $this->request->getVar('PONO'); $PoStatus = ''; $data['AmendmentPDF'] = $this->purchaseorder_model->amendpdf($PONO); // Load the pdf page with multiviews @@ -3406,53 +3420,32 @@ class Purchaseorder extends BaseController - $mpdf = new Mpdf([ + $mpdf = new \Mpdf\Mpdf([ 'mode' => 'utf-8', - 'format' => 'A4-P', // Page format: A4 with portrait orientation - // 'format' => [148, 210], // Set custom width and height in millimeters - 'default_font_size' => 6, + 'format' => 'A4', 'default_font' => 'sans-serif', - 'margin_left' => 10, - 'margin_right' => 10, - 'margin_top' => 10, - 'margin_bottom' => 10, - 'margin_header' => 82, - 'margin_footer' => 38, - 'orientation' => 'P', + 'margin_header' => 0, + 'margin_top' => -30, + 'margin_right' => 14, + 'margin_left' => 5, + 'margin_footer' => -30, + 'orientation' => 'P' ]); + // Set PDF properties + $mpdf->SetTitle('Invoice'); + $mpdf->SetAuthor($data['CompanyDetails'][0]->CompanyName); + $mpdf->SetCreator('Venba'); - // Set watermark - if ($PoStatus == PO_RELEASED || $PoStatus == PO_SERVICE_COMPLETED || $PoStatus == MRIR_APPROVED || $PoStatus == MRIR_REJECTED || $PoStatus == IGR_CREATED || $PoStatus == '' || $PoStatus == SPECIAL_PO) { - $mpdf->SetWatermarkText(''); - } else { - $mpdf->SetWatermarkText('DRAFT'); - } - $mpdf->SetWatermarkImage('.public/assets/images/mpdf.png', 8, 10); - $mpdf->showWatermarkImage = true; - $mpdf->watermark_font = 'DejaVuSansCondensed'; - $mpdf->showWatermarkText = true; - - // Set HTML header - $HtmlHeading = view('includes/pdfheader', $data); - $mpdf->SetHTMLHeader($HtmlHeading); - - // Set HTML footer - $HTMLFooter = view('includes/pdffooter', $data); - $mpdf->setFooter($HTMLFooter . "Page {PAGENO} of {nb}"); - - // Set auto margins $mpdf->setAutoTopMargin = 'stretch'; $mpdf->setAutoBottomMargin = 'stretch'; + $mpdf->use_kwt = true; - // Generate PDF content - $html = view('capitalpopdf', $data); + $html = view('po_pdf', $data); + // echo $html;die; + $mpdf->WriteHTML($html); // Use WriteHTML() method to add body content - // Write HTML content to PDF - $mpdf->WriteHTML($html); - $mpdf->SetDisplayMode('fullpage'); - // Output PDF - $mpdf->Output('CapitalPOReport' . $PONO . '.pdf', 'I'); + $mpdf->Output('POReport' . $PONO . '.pdf', 'D'); } @@ -4507,5 +4500,40 @@ class Purchaseorder extends BaseController // return $this->response->setJSON($result); } + + public function getMaterialUsedPO() + { + $materialCode = $this->request->getPost('materialCode'); + + + $data = $this->PurchaseOrderLineItemModel->select('t_purchaseorder_lineitem.PONO,t_purchaseorder_master.TotalOrderValue,t_purchaseorder_master.CreatedDate,t_purchaseorder_master.POType,t_purchaseorder_master.CapitalRange') + ->where('t_purchaseorder_lineitem.MaterialCode',$materialCode) + ->join('t_purchaseorder_master', 't_purchaseorder_lineitem.PONO = t_purchaseorder_master.PONO', 'left') + ->groupBy('t_purchaseorder_lineitem.MaterialCode,t_purchaseorder_lineitem.PONO') + ->orderBy('t_purchaseorder_master.CreatedDate' , 'desc') + ->findAll(); + + + echo json_encode($data); + + + } + + public function getSupplierUsedPO() + { + $supplier_id = $this->request->getPost('supplier_id'); + + + $data = $this->purchaseorder_model->select('PONO,TotalOrderValue,CreatedDate,POType,CapitalRange') + ->where('SupplierID',$supplier_id) + ->orderBy('CreatedDate' , 'desc') + ->findAll(); + + + echo json_encode($data); + + + } + /*--------------------------------------------------------------------------------------*/ } diff --git a/app/Models/IGRRemarks_model.php b/app/Models/IGRRemarks_model.php new file mode 100644 index 00000000..0d11a76d --- /dev/null +++ b/app/Models/IGRRemarks_model.php @@ -0,0 +1,23 @@ +db->table('t_igr_master igr') - ->select('igr.*,PO.IsOpenOrder,PO.DeliveryDate,sup.SupplierName,PO.POType,trans.name as TransporterName , SUM(IGRD.QuantityAsPerInvoice) as ReceivedQuantity, SUM(IGRD.NetWeight) as NetWeight , count(IGRD.IGRNo) as itemCount') + ->select('igr.*,PO.IsOpenOrder,PO.DeliveryDate,sup.SupplierName,PO.POType,trans.name as TransporterName , SUM(IGRD.QuantityAsPerInvoice) as ReceivedQuantity, SUM(IGRD.NetWeight) as NetWeight , count(IGRD.IGRNo) as itemCount , count(remark.id) as remark_count') ->join('t_purchaseorder_master PO', 'igr.PONO = PO.PONO') ->join('t_supplierdetailsn sup', 'PO.SupplierID = sup.SupplierID') ->join('t_transporter trans', 'igr.TransporterId = trans.id' , 'left') ->join('t_igr_details IGRD', 'igr.IGRNo = IGRD.IGRNo') + ->join('t_igr_remarkes remark', 'igr.IGRNo = remark.igr_no', 'left') ->where('igr.IGRStatus !=', MRIR_CREATED) ->where('Date(igr.CreatedDate) >=',"$fromDate") ->where('Date(igr.CreatedDate) <=', "$toDate") @@ -411,7 +412,7 @@ class Inwardgateregister_model extends Model $builder = $this->db->table('t_igr_master igr') ->distinct() - ->select('igr.IGRNO,igr.*,igrd.*,MM.MaterialName,MM.UOM,sup.Address,sup.SupplierName,POM.ServiceDescription,POL.Quantity,POM.POType,POM.IsOpenOrder') + ->select('igr.IGRNO,igr.*,igrd.*,MM.MaterialName,MM.UOM,sup.Address,sup.SupplierName,POM.ServiceDescription,POL.Quantity,POL.Rate,POM.POType,POM.IsOpenOrder') ->join('t_igr_details igrd', 'igrd.IGRNO = igr.IGRNO') ->join('t_purchaseorder_master POM', 'igr.PONO = POM.PONO') ->join('t_purchaseorder_lineitem POL', 'igr.PONO = POL.PONO and POL.MaterialCode=igrd.MaterialCode ') diff --git a/app/Models/PurchaseOrderLineItemModel.php b/app/Models/PurchaseOrderLineItemModel.php new file mode 100644 index 00000000..31eb030b --- /dev/null +++ b/app/Models/PurchaseOrderLineItemModel.php @@ -0,0 +1,100 @@ + 'required|alpha_numeric|max_length[20]', + 'PONO' => 'permit_empty|alpha_numeric|max_length[27]', + 'ReqNo' => 'required|alpha_numeric|max_length[20]', + 'ItemNo' => 'permit_empty|integer', + 'MaterialCode' => 'required|alpha_numeric|max_length[20]', + 'Quantity' => 'required|decimal', + 'Rate' => 'required|decimal', + 'ReceivedQuantity' => 'required|decimal', + 'AmendmentQuantity' => 'permit_empty|decimal', + 'AmendmentRemarks' => 'permit_empty|string|max_length[20]', + 'ServiceMaterialDescription' => 'permit_empty|string', + 'AmendedDetails' => 'permit_empty|string', + 'Status' => 'required|string|max_length[20]', + 'OGR_Status' => 'permit_empty|string|max_length[50]', + 'CreatedBy' => 'required|string|max_length[50]', + 'UpdateBY' => 'required|string|max_length[50]', + 'CostCenterCode' => 'permit_empty|alpha_numeric|max_length[5]', + 'ServiceFrequency' => 'permit_empty|string|max_length[100]', + 'Per' => 'permit_empty|string|max_length[50]', + ]; + + // Validation messages + protected $validationMessages = [ + 'LineItemNo' => [ + 'required' => 'Line Item Number is required.', + 'alpha_numeric' => 'Line Item Number must be alphanumeric.', + ], + 'MaterialCode' => [ + 'required' => 'Material Code is required.', + ], + // Add custom messages for other fields as needed + ]; + + // Skip validation + protected $skipValidation = false; + + /** + * Custom function to fetch line items by PONO + * @param string $pono + * @return array + */ + public function getByPONO(string $pono) + { + return $this->where('PONO', $pono)->findAll(); + } + + /** + * Custom function to update the status of a line item + * @param string $lineItemNo + * @param string $status + * @return bool + */ + public function updateStatus(string $lineItemNo, string $status): bool + { + return $this->update($lineItemNo, ['Status' => $status]); + } +} diff --git a/app/Models/Purchaseorder_model.php b/app/Models/Purchaseorder_model.php index f36fe521..42f7d670 100755 --- a/app/Models/Purchaseorder_model.php +++ b/app/Models/Purchaseorder_model.php @@ -6,6 +6,71 @@ use CodeIgniter\Model; class Purchaseorder_model extends Model { + + protected $table = 't_purchaseorder_master'; // Table name + protected $primaryKey = 'POID'; // Primary key + + protected $useAutoIncrement = true; + + // Allowed fields for insert/update operations + protected $allowedFields = [ + 'PONO', + 'ParentPO', + 'POType', + 'SupplierID', + 'TotalOrderValue', + 'PODate', + 'Status', + 'PORange', + 'DeliverySchedule', + 'DeliveryOption', + 'ServiceDescription', + 'ExchangeRateCalculatedon', + 'ExchangeRate', + 'PaymentTerms', + 'PaymentID', + 'PaymentOtherDescription', + 'ServiceWorkStatus', + 'ServiceWorkStatusRemarks', + 'CapitalRange', + 'CurrencyType', + 'CreatedDate', + 'CreatedBy', + 'UpdateBY', + 'UpdatedOn', + 'DeliveryAddress', + 'DeliveryDate', + 'ApprovedBy', + 'ApprovedOn', + 'ReleasedBy', + 'ReleasedOn', + 'OnHoldBy', + 'OnHoldOn', + 'Remarks', + 'Import_DispatchDetails', + 'Import_PlaceofOrgin', + 'AmendedDetails', + 'Supplier_Reference', + 'Mode_Of_Shipment', + 'Supplier_Offer_No', + 'Other_Reference', + 'Fincap', + 'Description_Of_Service', + 'InsuranceStatus', + 'InsuranceNumber', + 'POSubType', + 'IsQualityChkReqired', + 'BudgetType', + 'Paymentstatus', + 'IsOpenOrder', + 'POFile', + ]; + + // Automatically handle timestamps + protected $useTimestamps = true; + protected $createdField = 'CreatedDate'; + protected $updatedField = 'UpdatedOn'; + function GetServicePOListforStatusUpdate() { $builder = $this->db->table('t_purchaseorder_master PO')->distinct() diff --git a/app/Views/POlist.php b/app/Views/POlist.php index 4c118748..91d3a75b 100755 --- a/app/Views/POlist.php +++ b/app/Views/POlist.php @@ -214,11 +214,13 @@ title="PONO; ?> - Click here to view Purchase Order details"> + + - Click here to Print the Purchase Order details"> + diff --git a/app/Views/Report_pending_purchase.php b/app/Views/Report_pending_purchase.php index 56b18268..14388065 100755 --- a/app/Views/Report_pending_purchase.php +++ b/app/Views/Report_pending_purchase.php @@ -10,9 +10,7 @@