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 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));
}
}
}
}
}