HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: /var/www/html/nt/application/controllers/frontend/Agreement.php
<?php

defined('BASEPATH') or exit('No direct script access allowed');

require_once APPPATH . "third_party/razorpay-php/Razorpay.php";

use Razorpay\Api\Api;
use Razorpay\Api\Errors\SignatureVerificationError;

class Agreement extends CI_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->load->model(array('mcommon', 'frontend/query', 'admin/magreement', 'admin/mdemand'));
		$this->load->helper(array('sms', 'email', 'crypto'));
	}
	
	public function list()
	{
		if ($this->session->userdata('logged_in') && $this->session->userdata('user_type') == 'frontend') {
			$data = array();
			$data['records'] = array();
			$records = $this->magreement->getRecords(array('a.lessee_id' => $this->session->userdata('register_lessee_id')));
			if(!empty($records)){
				$data['records'] = $records;
			}
			$data['content'] = 'frontend/agreement/agreement_list';
			$this->load->view('frontend/layouts/index', $data);
		}
		else{
			redirect(base_url());
		}
	}
	
	public function getAllotmentDetail($allotmentId = '')
	{
		if ($this->session->userdata('logged_in') && $this->session->userdata('user_type') == 'frontend') {
			$data = array();
			$allotment_id = '';
			$record = array();
			$demands = array();
			
			$allotment_id = decode_url($allotmentId);
			if(is_numeric($allotment_id)){
				$record = $this->magreement->getDetails(array('a.allotment_id' => $allotment_id));
				if(!empty($record)){
					$data['record'] = $record;
					$data['uomData'] = $this->mcommon->getRow('uom_master', array('uom_id' => $record['uom_id']));
					
					$agreementDetail = $this->mdemand->getAgreementDetails(array('ag.agreement_id' => $record['agreement_id']));
					$demands = $this->mcommon->getDetails('agreement_demand', array('agreement_id' => $record['agreement_id'], 'is_publish' => 1));
					$data['demands'] = $demands;
					$data['agreementType'] = $agreementDetail['type'];
					if(!empty($demands)){
						foreach($demands as $record){
							$demandPaymentInfo = $this->mcommon->getRow('agreement_demand_payment', array('demand_id' => $record['demand_id'], 'status' => 'Captured'));
							$uom = $this->mcommon->getRow('uom_master', array('uom_id' => $agreementDetail['uom_id']));
							$penaltyRate = ($record['balance_bf'] > 0) ? $agreementDetail['interest_percentage_if_not_paid'] : 0.00;
							$amtBeforeGst = ($record['schedule_amount'] + $record['balance_bf'] + $record['penalty_amount']);
							$currentYear = date('Y');
							$scheduleYear = date('Y', strtotime($record['schedule_from_date']));
							
							$schedule_due_date = ($record['schedule_due_date'] != '') ? date('d/m/Y', strtotime($record['schedule_due_date'])) : '';
							$publishedDate = ($record['published_at'] != '') ? date('d/m/Y', strtotime($record['published_at'])) : '';
							
							$paybutton = ($record['payment_status'] == 0 && date('Y-m-d') < $record['schedule_due_date']) ? '<a class="btn app-btn-secondary" href="' . base_url('frontend/agreement/demand_payment_initiate/' . base64_encode($this->encryption->encrypt(serialize(array('demand_id' => $record['demand_id']))))) . '">Pay&nbsp;Now</a>' : (($record['payment_status'] == 1) ? '<button class="btn app-btn-success mb-2" style="pointer-events: none;">Paid</button>' : '');
							
							$invoiceButton = (date('Y-m-d') < $record['schedule_due_date']) ? '<a class="btn-sm app-btn-primary text-center mb-2 d-block" style="width:80px;" target="_blank" href="'.base_url().'downloadInvoicePdf/'.encode_url($record['demand_id']).'"><i class="fa fa-download" aria-hidden="true"></i> Invoice</a>' : '';
							
							$demandArr[] = array(
								'schedule_from_date' => date('d/m/Y', strtotime($record['schedule_from_date'])),
								'schedule_to_date' => date('d/m/Y', strtotime($record['schedule_to_date'])),
								'lease_rent_per_unit' => $agreementDetail['lease_rent_per_unit'],
								'total_area' => $agreementDetail['total_area'],
								'uom_name' => $uom['name'],
								'balance_bf' => $record['balance_bf'],
								'penaltyRate' => $penaltyRate,
								'penalty_amount' => $record['penalty_amount'],
								'schedule_amount' => $record['schedule_amount'],
								'amtBeforeGst' => $amtBeforeGst,
								'cgst_rate' => $record['cgst_rate'],
								'cgst_amount' => $record['cgst_amount'],
								'sgst_rate' => $record['sgst_rate'],
								'sgst_amount' => $record['sgst_amount'],
								'gst_rate' => $record['gst_rate'],
								'gst_amount' => $record['gst_amount'],
								'net_payable_amount' => $record['net_payable_amount'],
								'schedule_due_date' => $schedule_due_date,
								'publishedDate' => $publishedDate,
								'paybutton' => $paybutton,
								'invoiceButton' => $invoiceButton,
								'status' => (!empty($demandPaymentInfo)) ? (($demandPaymentInfo['status'] == 'Captured') ? 'Success' : '') : '',
								'payment_date' => (!empty($demandPaymentInfo)) ? date('d/m/Y', strtotime($demandPaymentInfo['payment_date'])) : '',
								'payment_mode' => (!empty($demandPaymentInfo)) ? ucwords($demandPaymentInfo['payment_mode']) : '',
								'order_id' => (!empty($demandPaymentInfo)) ? $demandPaymentInfo['order_id'] : '',
								'razorpay_payment_id' => (!empty($demandPaymentInfo)) ? $demandPaymentInfo['razorpay_payment_id'] : ''
							);
						}
						
						$data['demandData'] = $demandArr;
					}
					else{
						$data['demandData'] = '';
					}
				}
				$data['content'] = 'frontend/agreement/allotment_detail';
				$this->load->view('frontend/layouts/index', $data);
			}
		}
		else{
			redirect(base_url());
		}
	}
	
	public function detail_view($param1 = null)
	{
		if ($this->session->userdata('logged_in') && $this->session->userdata('user_type') == 'frontend') {
			$param1 = !is_null($param1) ? $param1 : base64_encode($this->encryption->encrypt(''));
			$agreement_id = $this->encryption->decrypt(base64_decode($param1));
			
			if (is_null($agreement_id) || $agreement_id == '') {
				redirect(base_url('frontend/agreement/404'));
			}
			
			$data = array();
			$data['agreement_det'] = $this->magreement->get_agreement(array('agreement.agreement_id' => $agreement_id))->last_row();
			$data['property_attributes'] = $this->magreement->get_property_attribute(array('property_id' => $data['agreement_det']->property_id));
			
			$data['property_type_attribute'] = $this->magreement->property_type_attribute($data['agreement_det']->property_id);
			
			$demand_amounts = $this->magreement->get_agreement_demand(array('agreement.agreement_id' => $agreement_id, 'agreement_demand.is_publish' => 1, 'agreement_demand.is_active' => 1, 'agreement_demand.licencee_id' => $this->session->userdata('licencee_id')));
			
			$demand_discounts_arr = array();
			$i = 0;
			foreach ($demand_amounts->result() as $da) {
				$demand_discounts_arr[$i]['demands'] = $da;
				$demand_discounts_arr[$i]['discounts'] = $this->magreement->get_agreement_demand_discount(array('agreement_discount_waiver.agreement_id' => $da->agreement_id, 'agreement_discount_waiver.demand_notice_number' => $da->notice_number, 'agreement_discount_waiver.is_active' => 1));
				$demand_discounts_arr[$i]['demand_payment'] = $this->magreement->get_agreement_demand_payment(array('a.demand_id' => $da->demand_id));
				$i++;
			}
			
			$data['demand_amount_discount'] = $demand_discounts_arr;
			$data['content'] = 'frontend/agreement/agreement_demand_view';
			$this->load->view('frontend/layouts/index', $data);
		}
		else{
			redirect(base_url());
		}
	}
	
	
	/* Start Allotment Payment Functionality */
	public function payment_initiate($param1)
	{
		$det_arr = unserialize($this->encryption->decrypt(base64_decode($param1)));

		$demand_det = $this->magreement->getDetails(array('a.allotment_id' => $det_arr['allotment_id']));
		
		$schedule_amt = isset($demand_det['payable_amount']) && $demand_det['payable_amount'] != '' ? floatval($demand_det['payable_amount']) : 0.00;
		
		$allotment_id = $det_arr['allotment_id'];
		$lessee_id = $demand_det['lessee_id'];
		
		$payable_amount = isset($schedule_amt) && $schedule_amt != '' ? $schedule_amt : '0.00';
		$payable_amount = sprintf("%.2f", $payable_amount);
		
		$post_fields['full_name'] = $this->session->userdata('name');
		$post_fields['email'] = $this->session->userdata('primary_email');
		$post_fields['phone'] = $this->session->userdata('primary_contact_no1');
		$post_fields['amount'] = $payable_amount;
		$post_fields['currency'] = "INR";
		$post_fields['receipt_id'] = substr(hash('sha256', rand_string(6) . microtime()), 0, 20);
		$post_fields['callback_url'] 	= base_url('frontend/agreement/paymentSuccess');
		$post_fields['cancel_url'] 	= base_url('frontend/agreement/paymentFailure');
		$post_fields['checkout_url'] 	= RAZORPAY_CHECKOUT_URL;
		$post_fields['key_id'] = RAZORPAY_KEY;
		
		
		$params1 = array();
		$params1['amount'] = $payable_amount;
		$params1['currency'] = $post_fields['currency'];
		$params1['receipt_id'] = $post_fields['receipt_id'];
		$params1['user_name'] = ucwords($this->session->userdata('name'));
		$params1['email'] = $this->session->userdata('primary_email');
		$params1['phone'] = $this->session->userdata('primary_contact_no1');
		
		$razorpay_returnvalue = $this->genRazorpayPayment($params1);
		$razorpay_order_id = $razorpay_returnvalue["order_id"];
		
		$post_fields['order_id'] = $razorpay_returnvalue["order_id"];
		
		
		if($razorpay_order_id != ''){
			$this->db->trans_start();
	
			$payment_data = array(
				'allotment_id' => $allotment_id,
				'lessee_id' => $lessee_id,
				'payment_date' => date('Y-m-d'),
				'txnid' => $post_fields['receipt_id'],
				'order_id' => $razorpay_order_id,
				'razorpay_payment_id' => NULL,
				'amount' => $payable_amount,
				'payment_mode' => '',
				'remarks' => '',
				'status' => 'PENDING',
				'created_by' => $lessee_id,
				'created_ts' => date('Y-m-d H:i:s'),
			);
			$payment_id = $this->mcommon->insert('allotment_payment_info', $payment_data);
	
			$txn_data = $this->mcommon->update('allotment', array('allotment_id' => $allotment_id), array('txnid' => $post_fields['receipt_id'], 'order_id' => $razorpay_order_id));
	
			$this->db->trans_complete();
	
			$data['razorpaydata'] = $post_fields;
			$data['content'] = 'frontend/agreement/allotment_money_payment';
			$this->load->view('frontend/layouts/index', $data);
		}
	}
	
	public function genRazorpayPayment($option)
	{
		$keyId = RAZORPAY_KEY;
		$keySecret = RAZORPAY_KEY_SECRET;

		$api = new Api($keyId, $keySecret);

		$recipt_id = $option['receipt_id'];
		$order_currencey = $option['currency'];
		$amount = $option['amount'];
		$user = $option['user_name'];

		$orderData = array(
			'receipt'         => $recipt_id,
			'amount'          => $amount * 100, // rupees in paise
			'currency'        => $order_currencey,
			'payment_capture' => 1 // auto capture
		);
		$razorpayOrder = $api->order->create($orderData);
		$razorpayOrderId = $razorpayOrder['id'];
		
		//echo "<pre>"; print_r($razorpayOrder); die;

		$payable_amount = $orderData['amount'];
		$data = array(
			"key"               => $keyId,
			"amount"            => $payable_amount,
			"image"             => base_url()."public/frontend_assets/assets/images/wbidc-logo.png",
			"prefill"           => array(
				"name"              => $user,
				"email"             => $option['email'],
				"contact"           => $option['phone'],
			),

			"theme"             => array(
				"color"             => "#F37254"
			),
			"order_id"          => $razorpayOrderId,
		);

		return $data;

	}
	
	public function paymentSuccess()
	{
		$success = false;
		$razorpay_posted_data = $this->input->post();
		$razorpay_posted_data['keyId'] = RAZORPAY_KEY;
		$razorpay_posted_data['keySecret'] = RAZORPAY_KEY_SECRET;
		
		//echo "<pre>"; print_r($razorpay_posted_data); die;
		
		$api = new Api($razorpay_posted_data['keyId'], $razorpay_posted_data['keySecret']);
		
		$applicationData = $this->mcommon->getRow('allotment', array('order_id' => $razorpay_posted_data['razorpay_order_id']));
		
		if(!empty($applicationData)){
			
			if($razorpay_posted_data['razorpay_payment_id'] != '' && $razorpay_posted_data['razorpay_order_id'] != ''){
			
				//licencee details set in session------------------------------
				$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$applicationData['lessee_id']));
				$session_data = $user_data;
				$session_data['user_type'] = 'frontend';
				$session_data['logged_in'] = TRUE;
				$this->session->set_userdata($session_data);
				//end licencee details set in session--------------------------
				
				$generated_signature = hash_hmac('sha256', $applicationData['order_id'] ."|". $razorpay_posted_data['razorpay_payment_id'], $razorpay_posted_data['keySecret']);
				
				if($generated_signature == $razorpay_posted_data['razorpay_signature']){
					try {
						// Please note that the razorpay order ID must
						// come from a trusted source (session here, but
						// could be database or something else)
						$attributes = array(
							'razorpay_order_id' => $razorpay_posted_data['razorpay_order_id'],
							'razorpay_payment_id' => $razorpay_posted_data['razorpay_payment_id'],
							'razorpay_signature' => $razorpay_posted_data['razorpay_signature']
						);
						
						//print_r($attributes); die;
			
						$api->utility->verifyPaymentSignature($attributes);
						$success = true;
					} catch (SignatureVerificationError $e) {
						$success = false;
						$error = 'Razorpay Error : ' . $e->getMessage();
					}
				}
				
				if ($success === true) {
					$this->mcommon->update('allotment_payment_info', array('order_id' => $razorpay_posted_data['razorpay_order_id']), array('razorpay_payment_id' => $razorpay_posted_data['razorpay_payment_id'], 'razorpay_signature' => $razorpay_posted_data['razorpay_signature']));
					
					$param = array();
					$param['payment_id'] = $razorpay_posted_data['razorpay_payment_id'];
					$param['order_id'] = $razorpay_posted_data['razorpay_order_id'];
					$check_payment_status = $this->allotment_payment_verify($param);
					
					//echo "<pre>"; print_r($check_payment_status); die;
					
					if($check_payment_status['rtn'] === true){
						payment_confirmed($check_payment_status['primary_contact_no'], $check_payment_status['paidAmt'], $check_payment_status['notice_number'], $check_payment_status['transDate']);
						
						$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'SUCCESS', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
						$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
						$this->load->view('frontend/layouts/index', $data);
					}
					else{
						$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
						$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
						$this->load->view('frontend/layouts/index', $data);
					}
				} else {
					$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
					$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
					$this->load->view('frontend/layouts/index', $data);
				}
			
			}
			else {
				//echo "1"; print_r($razorpay_posted_data['error']); die;
				$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
				//echo $responseMetadata['payment_id']; die;
				$this->mcommon->update('allotment_payment_info', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
				
				//licencee details set in session------------------------------
				$appData = $this->mcommon->getRow('allotment', array('order_id' => $responseMetadata['order_id']));
				$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
				$session_data = $user_data;
				$session_data['user_type'] = 'frontend';
				$session_data['logged_in'] = TRUE;
				$this->session->set_userdata($session_data);
				//end licencee details set in session--------------------------
				
				$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
				$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
				$this->load->view('frontend/layouts/index', $data);
			}
		}
		else {
			//echo "<pre>"; print_r($razorpay_posted_data['error']); die;
			$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
			//echo $responseMetadata['order_id']; die;
			$this->mcommon->update('allotment_payment_info', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
			
			//licencee details set in session------------------------------
			$appData = $this->mcommon->getRow('allotment', array('order_id' => $responseMetadata['order_id']));
			$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
			$session_data = $user_data;
			$session_data['user_type'] = 'frontend';
			$session_data['logged_in'] = TRUE;
			$this->session->set_userdata($session_data);
			//end licencee details set in session--------------------------
				
			$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
			$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
			$this->load->view('frontend/layouts/index', $data);
		}
	}

	public function paymentFailure()
	{
		
		$razorpay_posted_data = $this->input->post();
		
		//echo "<pre>"; print_r($razorpay_posted_data['error']); die;
		$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
		//echo $responseMetadata['payment_id']; die;
		$this->mcommon->update('allotment_payment_info', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
		
		//licencee details set in session------------------------------
		$appData = $this->mcommon->getRow('allotment', array('order_id' => $responseMetadata['order_id']));
		$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
		$session_data = $user_data;
		$session_data['user_type'] = 'frontend';
		$session_data['logged_in'] = TRUE;
		$this->session->set_userdata($session_data);
		//end licencee details set in session--------------------------
			
		$data['redirect'] = base_url('frontend/agreement/allotment_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
		$data['content'] = 'frontend/agreement/allotment_payment_confirmation';
		$this->load->view('frontend/layouts/index', $data);
	}

	public function allotment_payment_complete($value1)
	{
		if (is_null($value1))
			redirect(base_url('frontend/agreement/list'));

		$det = unserialize($this->encryption->decrypt(base64_decode($value1)));

		$data['status'] = $det['status'];
		$data['payment_status'] = $det['payment_status'];
		//$data['payment'] = $det['posted_data'];
		$data['demand_det'] = $this->magreement->get_allotment_payment_info(array('allotment_payment_info.order_id' => $det['order_id']))->last_row();
		
		if(strtolower($data['demand_det']->status) == 'failure'){ 
			//$this->mbooking->move_booking_to_failed($det['booking_id']);
		}

		$data['content'] = 'frontend/agreement/allotment_payment_complete';
		$this->load->view('frontend/layouts/index', $data);
	}
	
	public function allotment_payment_verify($option){
		$return  = array();
		$keyId = RAZORPAY_KEY;
		$keySecret = RAZORPAY_KEY_SECRET;

		$api = new Api($keyId, $keySecret);
		
		try {
			// Fetch order details
			$order = $api->order->fetch($option['order_id'])->payments();
			//echo $order->items[0]->id;
			//echo "<pre>"; print_r($order); die;
			// Fetch payment ID from order
			$payment_id = $order->items[0]->id;
			
			// Capture the payment
			$payment = $api->payment->fetch($payment_id);
			$getPaymentData = $this->mcommon->getRow('allotment_payment_info', array('order_id' => $option['order_id']));
			$capturedAmount = ($payment->amount / 100);
			//echo "<pre>"; print_r($payment); die;
			//$payJson = json_encode(serialize($payment));
			//$payObject = unserialize(json_decode($payJson));
		
			/*echo "Payment ID: " . $payment->id . "\n";
			echo "Amount Captured: " . $payment->amount . "\n";
			echo "Status: " . $payment->status . "\n";
			echo "Captured: " . $payment->captured . "\n";
			echo "method: " . $payment->method . "\n";
			echo "email: " . $payment->email . "\n";
			echo "contact: " . $payment->contact . "\n";
			echo "created_at: " . date('m/d/Y H:i:s', $payment->created_at) . "\n";
			echo "auth_code: " . $payment->acquirer_data->auth_code . "\n";*/
			
			if(!empty($payment)){
				if(($payment->status == 'captured' && $payment->captured == 1) && ($payment->order_id != '') && ($getPaymentData['amount'] == $capturedAmount)){ //Success Payment
					$payment_data = array(
						'payment_date' => date('Y-m-d H:i:s', $payment->created_at),
						'razorpay_payment_id' => $payment->id,
						'payment_mode' => $payment->method,
						'remarks' => 'Payment Successful',
						'status' => ucwords($payment->status),
						'updated_ts' => date('Y-m-d H:i:s'),
					);
					
					if($option['type'] == 'Cron'){
						$payment_data['cronjob_data'] = json_encode(serialize($payment));
						$payment_data['cronjob_status'] = 'COMPLETED';
						$payment_data['cronjob_end_time'] = date('Y-m-d H:i:s');
					} else{
						$payment_data['response_txt'] = json_encode(serialize($payment));
					}
					
					$update = $this->mcommon->update('allotment_payment_info', array('order_id' => $payment->order_id), $payment_data);
					if($update){
						$application_payment_condn = array('payment_status' => 'Success');
						$application_update = $this->mcommon->update('allotment', array('order_id' => $payment->order_id), $application_payment_condn);
						$getdemandData = $this->mcommon->getRow('allotment', array('order_id' => $payment->order_id));
						$getLesseeData = $this->mcommon->getRow('register_lease_master', array('register_lessee_id' => $getdemandData['lessee_id']));
						
						$return['primary_contact_no'] = $getLesseeData['primary_contact_no1'];
						$return['paidAmt'] = $getPaymentData['amount'];
						$return['transDate'] = date('Y-m-d H:i:s', $payment->created_at);
						$return['status'] = $payment->status;
						$return['rtn'] = true;
						return $return;
					}
				}
				else{ //Failed Payment
					$payment_data = array(
						'payment_date' => date('Y-m-d H:i:s', $payment->created_at),
						'razorpay_payment_id' => $payment->id,
						'response_txt' => json_encode(serialize($payment)),
						'remarks' => 'Payment Failed',
						'status' => ucwords($payment->status),
						'updated_ts' => date('Y-m-d H:i:s'),
					);
					
					$update = $this->mcommon->update('allotment_payment_info', array('order_id' => $payment->order_id), $payment_data);
					if($update){
						if($option['type'] == 'Cron'){
							if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
								$start_date = strtotime($payment->created_ts);
								$end_date = strtotime("+8 day", $start_date);
								$last_date = date('Y-m-d', $end_date);
										
								if((date('Y-m-d') > $last_date) && ($payment->status != 'captured')){
									$application_failed_det = $this->magreement->update_allotment_payment_to_failed($payment->order_id);
								}
							}
							else{//for others mode
								
								if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020) && ($payment->status != 'captured')) {
									$application_failed_det = $this->magreement->update_allotment_payment_to_failed($payment->order_id);
								}
							}
						}
						
						$return['status'] = $payment->status;
						return $return;
					}
				}
			}
			else{
				
				if($option['type'] == 'Cron'){
					if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
						$start_date = strtotime($getPaymentData['created_ts']);
						$end_date = strtotime("+8 day", $start_date);
						$last_date = date('Y-m-d', $end_date);
								
						if(date('Y-m-d') > $last_date){
							$application_failed_det = $this->magreement->update_allotment_payment_to_failed($option['order_id']);
						}
					}
					else{//for others mode
						
						if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020)) {
							$application_failed_det = $this->magreement->update_allotment_payment_to_failed($option['order_id']);
						}
					}
				}
				
				$return['status'] = 'Payment Not Found';
				$return['rtn'] = false;
				return $return;
			}
			
		} catch (Exception $e) {
			if($option['type'] == 'Cron'){
				if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
					$start_date = strtotime($getPaymentData['created_ts']);
					$end_date = strtotime("+8 day", $start_date);
					$last_date = date('Y-m-d', $end_date);
							
					if(date('Y-m-d') > $last_date){
						$application_failed_det = $this->magreement->update_allotment_payment_to_failed($option['order_id']);
					}
				}
				else{//for others mode
					
					if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020)) {
						$application_failed_det = $this->magreement->update_allotment_payment_to_failed($option['order_id']);
					}
				}
			}
			
			// Handle any exceptions that occur during the capture process
			$error = "Error capturing payment: " . $e->getMessage();
			$return['status'] = $error;
			$return['rtn'] = false;
			return $return;
		}
	
	}
	
	public function allotmentPaymentVerifyCron(){
		$param = array();
		$payments = $this->mcommon->getDetails('allotment_payment_info', array("status IN ('PENDING','NOT-FOUND','FAILURE', 'Failure', 'FAILED','AWAITED','INITIATED','UNSUCCESSFUL','Aborted', 'TIMEOUT', 'Failed', 'Created')" => NULL));
		//$payments = $this->mcommon->getDetails('payment_info', array('payment_id' => 46));
		if(!empty($payments)){
			foreach($payments as $payment){
				if($payment['order_id'] != ''){
					$cron_det = $this->mcommon->update('allotment_payment_info', array('order_id' => $payment['order_id']), array('cronjob_start_time' => date('Y-m-d H:i:s')));
					$param['payment_id'] = $payment['razorpay_payment_id'];
					$param['order_id'] = $payment['order_id'];
					$param['type'] = 'Cron';
					$check_app_payment_status = $this->demand_payment_verify($param);
					if($check_app_payment_status){
						$cron_status = "Update Successful for ORDER ID: " . $payment['order_id'];
					}
				}
				else{
					$cron_status = "No Payment ID found";
				}
				
				$add_data = $this->mcommon->insert('activity_log', array('log_datetime' => date('Y-m-d H:i:s'), 'process_name' => 'allotment-payment-verify-cron', 'log_desc' => $cron_status));
				echo $cron_status . "<br>";
			}
		}else{
			$cron_status .= " No Pending transactions found.";
			$add_data = $this->mcommon->insert('activity_log', array('log_datetime' => date('Y-m-d H:i:s'), 'process_name' => 'allotment-payment-verify-cron', 'log_desc' => $cron_status));
			echo $cron_status . "<br>";
		}
	
	}
	/* End Allotment Payment Functionality */
	
	
	
	/* Start Demand Payment Functionality */
	public function demand_payment_initiate($param1)
	{
		$det_arr = unserialize($this->encryption->decrypt(base64_decode($param1)));

		$demand_det = $this->mdemand->getDemandDetails(array('a.demand_id' => $det_arr['demand_id']));
		
		$schedule_amt = isset($demand_det['net_payable_amount']) && $demand_det['net_payable_amount'] != '' ? floatval($demand_det['net_payable_amount']) : 0.00;
		
		$demand_id = $det_arr['demand_id'];
		$lessee_id = $demand_det['lessee_id'];
		
		$payable_amount = isset($schedule_amt) && $schedule_amt != '' ? $schedule_amt : '0.00';
		$payable_amount = sprintf("%.2f", $payable_amount);
		
		$post_fields['full_name'] = $this->session->userdata('name');
		$post_fields['email'] = $this->session->userdata('primary_email');
		$post_fields['phone'] = $this->session->userdata('primary_contact_no1');
		$post_fields['amount'] = $payable_amount;
		$post_fields['currency'] = "INR";
		$post_fields['receipt_id'] = substr(hash('sha256', rand_string(6) . microtime()), 0, 20);
		$post_fields['callback_url'] 	= base_url('frontend/agreement/demandPaymentSuccess');
		$post_fields['cancel_url'] 	= base_url('frontend/agreement/demandPaymentFailure');
		$post_fields['checkout_url'] 	= RAZORPAY_CHECKOUT_URL;
		$post_fields['key_id'] = RAZORPAY_KEY;
		
		
		$params1 = array();
		$params1['amount'] = $payable_amount;
		$params1['currency'] = $post_fields['currency'];
		$params1['receipt_id'] = $post_fields['receipt_id'];
		$params1['user_name'] = ucwords($this->session->userdata('name'));
		$params1['email'] = $this->session->userdata('primary_email');
		$params1['phone'] = $this->session->userdata('primary_contact_no1');
		
		$razorpay_returnvalue = $this->genRazorpayPayment($params1);
		$razorpay_order_id = $razorpay_returnvalue["order_id"];
		
		$post_fields['order_id'] = $razorpay_returnvalue["order_id"];
		
		
		if($razorpay_order_id != ''){
			
			$this->db->trans_start();
	
			$payment_data = array(
				'demand_id' => $demand_id,
				'lessee_id' => $lessee_id,
				'payment_date' => date('Y-m-d'),
				'txnid' => $post_fields['receipt_id'],
				'order_id' => $razorpay_order_id,
				'razorpay_payment_id' => NULL,
				'amount' => $payable_amount,
				'payment_mode' => '',
				'remarks' => '',
				'status' => 'PENDING',
				'created_by' => $lessee_id,
				'created_ts' => date('Y-m-d H:i:s'),
			);
			$payment_id = $this->mcommon->insert('agreement_demand_payment', $payment_data);
	
			$txn_data = $this->mcommon->update('agreement_demand', array('demand_id' => $demand_id), array('txnid' => $post_fields['receipt_id'], 'order_id' => $razorpay_order_id));
	
			$this->db->trans_complete();
	
			$data['razorpaydata'] = $post_fields;
			$data['content'] = 'frontend/agreement/agreement_demand_payment';
			$this->load->view('frontend/layouts/index', $data);
		}
	}
	
	public function demandPaymentSuccess()
	{
		$success = false;
		$razorpay_posted_data = $this->input->post();
		$razorpay_posted_data['keyId'] = RAZORPAY_KEY;
		$razorpay_posted_data['keySecret'] = RAZORPAY_KEY_SECRET;
		
		//echo "<pre>"; print_r($razorpay_posted_data); die;
		
		$api = new Api($razorpay_posted_data['keyId'], $razorpay_posted_data['keySecret']);
		
		$applicationData = $this->mcommon->getRow('agreement_demand', array('order_id' => $razorpay_posted_data['razorpay_order_id']));
		
		if(!empty($applicationData)){
			
			if($razorpay_posted_data['razorpay_payment_id'] != '' && $razorpay_posted_data['razorpay_order_id'] != ''){
			
				//licencee details set in session------------------------------
				$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$applicationData['lessee_id']));
				$session_data = $user_data;
				$session_data['user_type'] = 'frontend';
				$session_data['logged_in'] = TRUE;
				$this->session->set_userdata($session_data);
				//end licencee details set in session--------------------------
				
				$generated_signature = hash_hmac('sha256', $applicationData['order_id'] ."|". $razorpay_posted_data['razorpay_payment_id'], $razorpay_posted_data['keySecret']);
				
				if($generated_signature == $razorpay_posted_data['razorpay_signature']){
					try {
						// Please note that the razorpay order ID must
						// come from a trusted source (session here, but
						// could be database or something else)
						$attributes = array(
							'razorpay_order_id' => $razorpay_posted_data['razorpay_order_id'],
							'razorpay_payment_id' => $razorpay_posted_data['razorpay_payment_id'],
							'razorpay_signature' => $razorpay_posted_data['razorpay_signature']
						);
						
						//print_r($attributes); die;
			
						$api->utility->verifyPaymentSignature($attributes);
						$success = true;
					} catch (SignatureVerificationError $e) {
						$success = false;
						$error = 'Razorpay Error : ' . $e->getMessage();
					}
				}
				
				if ($success === true) {
					$this->mcommon->update('agreement_demand_payment', array('order_id' => $razorpay_posted_data['razorpay_order_id']), array('razorpay_payment_id' => $razorpay_posted_data['razorpay_payment_id'], 'razorpay_signature' => $razorpay_posted_data['razorpay_signature']));
					
					$param = array();
					$param['payment_id'] = $razorpay_posted_data['razorpay_payment_id'];
					$param['order_id'] = $razorpay_posted_data['razorpay_order_id'];
					$check_payment_status = $this->demand_payment_verify($param);
					
					//echo "<pre>"; print_r($check_payment_status); die;
					
					if($check_payment_status['rtn'] === true){
						payment_confirmed($check_payment_status['primary_contact_no'], $check_payment_status['paidAmt'], $check_payment_status['notice_number'], $check_payment_status['transDate']);
						
						$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'SUCCESS', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
						$data['content'] = 'frontend/agreement/demand_payment_confirmation';
						$this->load->view('frontend/layouts/index', $data);
					}
					else{
						$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
						$data['content'] = 'frontend/agreement/demand_payment_confirmation';
						$this->load->view('frontend/layouts/index', $data);
					}
				} else {
					$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $razorpay_posted_data['razorpay_order_id'])))));
					$data['content'] = 'frontend/agreement/demand_payment_confirmation';
					$this->load->view('frontend/layouts/index', $data);
				}
			
			}
			else {
				//echo "1"; print_r($razorpay_posted_data['error']); die;
				$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
				//echo $responseMetadata['payment_id']; die;
				$this->mcommon->update('agreement_demand_payment', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
				
				//licencee details set in session------------------------------
				$appData = $this->mcommon->getRow('agreement_demand', array('order_id' => $responseMetadata['order_id']));
				$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
				$session_data = $user_data;
				$session_data['user_type'] = 'frontend';
				$session_data['logged_in'] = TRUE;
				$this->session->set_userdata($session_data);
				//end licencee details set in session--------------------------
				
				$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
				$data['content'] = 'frontend/agreement/demand_payment_confirmation';
				$this->load->view('frontend/layouts/index', $data);
			}
		}
		else {
			//echo "<pre>"; print_r($razorpay_posted_data['error']); die;
			$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
			//echo $responseMetadata['order_id']; die;
			$this->mcommon->update('agreement_demand_payment', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
			
			//licencee details set in session------------------------------
			$appData = $this->mcommon->getRow('agreement_demand', array('order_id' => $responseMetadata['order_id']));
			$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
			$session_data = $user_data;
			$session_data['user_type'] = 'frontend';
			$session_data['logged_in'] = TRUE;
			$this->session->set_userdata($session_data);
			//end licencee details set in session--------------------------
				
			$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
			$data['content'] = 'frontend/agreement/demand_payment_confirmation';
			$this->load->view('frontend/layouts/index', $data);
		}
	}
	
	public function demandPaymentFailure()
	{
		
		$razorpay_posted_data = $this->input->post();
		
		//echo "<pre>"; print_r($razorpay_posted_data['error']); die;
		$responseMetadata = json_decode($razorpay_posted_data['error']['metadata'], true);
		//echo $responseMetadata['payment_id']; die;
		$this->mcommon->update('agreement_demand_payment', array('order_id' => $responseMetadata['order_id']), array('razorpay_payment_id' => $responseMetadata['payment_id']));
		
		//licencee details set in session------------------------------
		$appData = $this->mcommon->getRow('agreement_demand', array('order_id' => $responseMetadata['order_id']));
		$user_data = $this->mcommon->getRow('register_lease_master',array('register_lessee_id'=>$appData['lessee_id']));
		$session_data = $user_data;
		$session_data['user_type'] = 'frontend';
		$session_data['logged_in'] = TRUE;
		$this->session->set_userdata($session_data);
		//end licencee details set in session--------------------------
			
		$data['redirect'] = base_url('frontend/agreement/demand_payment_complete/' . base64_encode($this->encryption->encrypt(serialize(array('status' => 'FAILURE', 'payment_status' => $check_payment_status['status'], 'order_id' => $responseMetadata['order_id'])))));
		$data['content'] = 'frontend/agreement/demand_payment_confirmation';
		$this->load->view('frontend/layouts/index', $data);
	}
	
	public function demand_payment_complete($value1)
	{
		if (is_null($value1))
			redirect(base_url('frontend/agreement/list'));

		$det = unserialize($this->encryption->decrypt(base64_decode($value1)));

		$data['status'] = $det['status'];
		$data['payment_status'] = $det['payment_status'];
		//$data['payment'] = $det['posted_data'];
		$data['demand_det'] = $this->magreement->get_demand_payment_info(array('agreement_demand_payment.order_id' => $det['order_id']))->last_row();
		
		if(strtolower($data['demand_det']->status) == 'failure'){ 
			//$this->mbooking->move_booking_to_failed($det['booking_id']);
		}

		$data['content'] = 'frontend/agreement/demand_payment_complete';
		$this->load->view('frontend/layouts/index', $data);
	}
	
	public function demand_payment_verify($option){
		$return  = array();
		$keyId = RAZORPAY_KEY;
		$keySecret = RAZORPAY_KEY_SECRET;

		$api = new Api($keyId, $keySecret);
		
		try {
			// Fetch order details
			$order = $api->order->fetch($option['order_id'])->payments();
			//echo $order->items[0]->id;
			//echo "<pre>"; print_r($order); die;
			// Fetch payment ID from order
			$payment_id = $order->items[0]->id;
			
			// Capture the payment
			$payment = $api->payment->fetch($payment_id);
			$getPaymentData = $this->mcommon->getRow('agreement_demand_payment', array('order_id' => $option['order_id']));
			$capturedAmount = ($payment->amount / 100);
			//echo "<pre>"; print_r($payment); die;
			//$payJson = json_encode(serialize($payment));
			//$payObject = unserialize(json_decode($payJson));
		
			/*echo "Payment ID: " . $payment->id . "\n";
			echo "Amount Captured: " . $payment->amount . "\n";
			echo "Status: " . $payment->status . "\n";
			echo "Captured: " . $payment->captured . "\n";
			echo "method: " . $payment->method . "\n";
			echo "email: " . $payment->email . "\n";
			echo "contact: " . $payment->contact . "\n";
			echo "created_at: " . date('m/d/Y H:i:s', $payment->created_at) . "\n";
			echo "auth_code: " . $payment->acquirer_data->auth_code . "\n";*/
			
			if(!empty($payment)){
				if(($payment->status == 'captured' && $payment->captured == 1) && ($payment->order_id != '') && ($getPaymentData['amount'] == $capturedAmount)){ //Success Payment
					$payment_data = array(
						'payment_date' => date('Y-m-d H:i:s', $payment->created_at),
						'razorpay_payment_id' => $payment->id,
						'payment_mode' => $payment->method,
						'remarks' => 'Payment Successful',
						'status' => ucwords($payment->status),
						'updated_ts' => date('Y-m-d H:i:s'),
					);
					
					if($option['type'] == 'Cron'){
						$payment_data['cronjob_data'] = json_encode(serialize($payment));
						$payment_data['cronjob_status'] = 'COMPLETED';
						$payment_data['cronjob_end_time'] = date('Y-m-d H:i:s');
					} else{
						$payment_data['response_txt'] = json_encode(serialize($payment));
					}
					
					$update = $this->mcommon->update('agreement_demand_payment', array('order_id' => $payment->order_id), $payment_data);
					if($update){
						$application_payment_condn = array('payment_status' => 1);
						$application_update = $this->mcommon->update('agreement_demand', array('order_id' => $payment->order_id), $application_payment_condn);
						$getdemandData = $this->mcommon->getRow('agreement_demand', array('order_id' => $payment->order_id));
						$getLesseeData = $this->mcommon->getRow('register_lease_master', array('register_lessee_id' => $getdemandData['lessee_id']));
						
						$return['primary_contact_no'] = $getLesseeData['primary_contact_no1'];
						$return['paidAmt'] = $getPaymentData['amount'];
						$return['notice_number'] = $getdemandData['notice_number'];
						$return['transDate'] = date('Y-m-d H:i:s', $payment->created_at);
						$return['status'] = $payment->status;
						$return['rtn'] = true;
						return $return;
					}
				}
				else{ //Failed Payment
					$payment_data = array(
						'payment_date' => date('Y-m-d H:i:s', $payment->created_at),
						'razorpay_payment_id' => $payment->id,
						'response_txt' => json_encode(serialize($payment)),
						'remarks' => 'Payment Failed',
						'status' => ucwords($payment->status),
						'updated_ts' => date('Y-m-d H:i:s'),
					);
					
					$update = $this->mcommon->update('agreement_demand_payment', array('order_id' => $payment->order_id), $payment_data);
					if($update){
						if($option['type'] == 'Cron'){
							if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
								$start_date = strtotime($payment->created_ts);
								$end_date = strtotime("+8 day", $start_date);
								$last_date = date('Y-m-d', $end_date);
										
								if((date('Y-m-d') > $last_date) && ($payment->status != 'captured')){
									$application_failed_det = $this->magreement->update_demand_payment_to_failed($payment->order_id);
								}
							}
							else{//for others mode
								
								if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020) && ($payment->status != 'captured')) {
									$application_failed_det = $this->magreement->update_demand_payment_to_failed($payment->order_id);
								}
							}
						}
						
						$return['status'] = $payment->status;
						return $return;
					}
				}
			}
			else{
				
				if($option['type'] == 'Cron'){
					if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
						$start_date = strtotime($getPaymentData['created_ts']);
						$end_date = strtotime("+8 day", $start_date);
						$last_date = date('Y-m-d', $end_date);
								
						if(date('Y-m-d') > $last_date){
							$application_failed_det = $this->magreement->update_demand_payment_to_failed($option['order_id']);
						}
					}
					else{//for others mode
						
						if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020)) {
							$application_failed_det = $this->magreement->update_demand_payment_to_failed($option['order_id']);
						}
					}
				}
				
				$return['status'] = 'Payment Not Found';
				$return['rtn'] = false;
				return $return;
			}
			
		} catch (Exception $e) {
			if($option['type'] == 'Cron'){
				if($getPaymentData['payment_mode'] == 'NEFT'){//for NEFT mode
					$start_date = strtotime($getPaymentData['created_ts']);
					$end_date = strtotime("+8 day", $start_date);
					$last_date = date('Y-m-d', $end_date);
							
					if(date('Y-m-d') > $last_date){
						$application_failed_det = $this->magreement->update_demand_payment_to_failed($option['order_id']);
					}
				}
				else{//for others mode
					
					if (((strtotime(date('Y-m-d H:i:s')) - strtotime($getPaymentData['created_ts'])) > 1020)) {
						$application_failed_det = $this->magreement->update_demand_payment_to_failed($option['order_id']);
					}
				}
			}
			
			// Handle any exceptions that occur during the capture process
			$error = "Error capturing payment: " . $e->getMessage();
			$return['status'] = $error;
			$return['rtn'] = false;
			return $return;
		}
	
	}
	
	public function demandPaymentVerifyCron(){
		$param = array();
		$payments = $this->mcommon->getDetails('agreement_demand_payment', array("status IN ('PENDING','NOT-FOUND','FAILURE', 'Failure', 'FAILED','AWAITED','INITIATED','UNSUCCESSFUL','Aborted', 'TIMEOUT', 'Failed', 'Created')" => NULL));
		//$payments = $this->mcommon->getDetails('payment_info', array('payment_id' => 46));
		if(!empty($payments)){
			foreach($payments as $payment){
				if($payment['order_id'] != ''){
					$cron_det = $this->mcommon->update('agreement_demand_payment', array('order_id' => $payment['order_id']), array('cronjob_start_time' => date('Y-m-d H:i:s')));
					$param['payment_id'] = $payment['razorpay_payment_id'];
					$param['order_id'] = $payment['order_id'];
					$param['type'] = 'Cron';
					$check_app_payment_status = $this->demand_payment_verify($param);
					if($check_app_payment_status){
						$cron_status = "Update Successful for ORDER ID: " . $payment['order_id'];
					}
				}
				else{
					$cron_status = "No Payment ID found";
				}
				
				$add_data = $this->mcommon->insert('activity_log', array('log_datetime' => date('Y-m-d H:i:s'), 'process_name' => 'demand-payment-verify-cron', 'log_desc' => $cron_status));
				echo $cron_status . "<br>";
			}
		}else{
			$cron_status .= " No Pending transactions found.";
			$add_data = $this->mcommon->insert('activity_log', array('log_datetime' => date('Y-m-d H:i:s'), 'process_name' => 'demand-payment-verify-cron', 'log_desc' => $cron_status));
			echo $cron_status . "<br>";
		}
	
	}
	/* End Demand Payment Functionality */
	
	
	
	/* Function for Allotment Money Receipt download in PDF */
	public function download_allotment_money_pdf($allotmentId)
	{
		if ($this->session->userdata('logged_in') && $this->session->userdata('user_type') == 'frontend') {
			$this->load->library('pdf');
			$data = array();
			$allotment_id = decode_url($allotmentId);
			
			if(is_numeric($allotment_id)){
				
				$allotmentData = $this->magreement->getDetails(array('a.allotment_id' => $allotment_id));
				if(!empty($allotmentData)){
					$data['allotmentData'] = $allotmentData;
					$data['uom'] = $this->mcommon->getRow('uom_master', array('uom_id' => $allotmentData['uom_id']));
					$filename = 'Allotment-Money-Receipt-' .$allotment_id.'-'.time(); 
					$html = $this->load->view('frontend/downloadAllotmentMoneyReceipt', $data, true);
					// $this->pdf->create($html, $filename);
					// echo $html;die;
			
					$this->pdf->loadHtml($html);
					$this->pdf->set_paper("a4", "landscape");
					$this->pdf->render();
			
					$this->pdf->stream("" . $filename . ".pdf", array("Attachment" => 0));
				}
			}
		}
	}
	
	public function download_invoice_pdf($demandId)
	{
		if ($this->session->userdata('logged_in') && $this->session->userdata('user_type') == 'frontend') {
			$this->load->library('pdf');
			$data = array();
			$demand_id = decode_url($demandId);
			
			if(is_numeric($demand_id)){
				
				$demandData = $this->mdemand->getDemandDetails(array('a.demand_id' => $demand_id));
				if(!empty($demandData)){
					$data['demandData'] = $demandData;
					$data['uom'] = $this->mcommon->getRow('uom_master', array('uom_id' => $demandData['uom_id']));
					$data['penaltyRate'] = ($demandData['balance_bf'] > 0) ? $demandData['interest_percentage_if_not_paid'] : 0.00;
					$data['amtBeforeGst'] = ($demandData['schedule_amount'] + $demandData['balance_bf'] + $demandData['penalty_amount']);
					$data['demandPaymentInfo'] = $this->mcommon->getRow('agreement_demand_payment', array('demand_id' => $demandData['demand_id'], 'status' => 'Captured'));
					$filename = 'Invoice-' .$demand_id.'-'.time(); 
					$html = $this->load->view('frontend/downloadInvoiceReceipt', $data, true);
					// $this->pdf->create($html, $filename);
					// echo $html;die;
			
					$this->pdf->loadHtml($html);
					$this->pdf->set_paper("a4", "landscape");
					$this->pdf->render();
			
					$this->pdf->stream("" . $filename . ".pdf", array("Attachment" => 0));
				}
			}
		}
		
	}
	
}