pack_purchase_flow:GWM

This commit is contained in:
sriramv 2023-06-03 16:11:57 +05:30
parent 1e73d6acb0
commit fb3a6f36bb
10 changed files with 324 additions and 67 deletions

View File

@ -50,12 +50,13 @@ $routes->match(['get','post'],'/member_deactivate/(:any)','Member_controller::me
$routes->match(['get','post'],'/member_activate/(:any)','Member_controller::member_activate/$1');
$routes->match(['get'],'/scheduler','Member_controller::scheduler');
$routes->match(['get','post'],'/payment', 'PaymentController::index');
$routes->get('/payment', 'PaymentController::index');
$routes->post('/payment/(:any)', 'PaymentController::index/$1');
$routes->get('payment_form', 'PaymentController::payment_form');
$routes->post('processPayment', 'PaymentController::processPayment');
$routes->match(['get','post'],'/test/(:any)','Test_controller::index/$1');

View File

@ -53,6 +53,7 @@ class Member_controller extends BaseController
{
$token = $this->session->get("token");
$this->session->set('logged_user',$memberdata['id']);
$this->session->set('logged_user_name',$memberdata['name']);
if ($token)
{
$tokendata = $this->Cart_token_model->where('md5(token)', $token )->findAll();

View File

@ -16,7 +16,7 @@ use App\Models\Packages_and_pricing_model;
use App\Models\Cart_model;
use App\Models\Credits_usage_tracking_model;
use App\Models\Rule_model;
use App\Models\Cart_token_model;
class PaymentController extends BaseController
{
@ -33,31 +33,77 @@ class PaymentController extends BaseController
$this->CreditsUsageTrackingModel = new Credits_usage_tracking_model();
$this->TransactionModel = new transaction_model();
$this->RuleModel = new Rule_model();
$this->Cart_token_model = new Cart_token_model();
}
public function index()
public function index($token = null)
{
if($this->request->getmethod() == 'post')
{
$count = $this->request->getVar('count');
foreach ($count as $key => $value)
{
$this->Cart_token_model->where('id', $this->request->getVar('cart_token_id')[$key] )->set(array( 'count' => $value ))->update();
}
if(!session()->has('logged_user'))
{
$this->session->set('token',$token);
return redirect()->to(base_url());
}
else{
$this->payment_form();
}
} else {
return $this->payment_form();
}
}
public function payment_form()
{
if(!session()->has('logged_user'))
{
return redirect()->to(base_url());
}
$CartData = $this->cartModel->where('member_id',session()->get('logged_user'))->findAll();
$count = count($CartData);
if($count)
{
$credit_pack_expiry_duration = $this->RuleModel->select('value')->where('rule_key', 1 )->get()->getRow()->value;
$gst = $this->RuleModel->select('value')->where('rule_key', 3 )->get()->getRow()->value;
$pst = $this->RuleModel->select('value')->where('rule_key', 4 )->get()->getRow()->value;
$today = date("Y-m-d");
$days = "+".$credit_pack_expiry_duration." days";
$amount = 0;
$orderId = 'EGF'.rand(10,100).rand(10,100).rand(10,100);
$credit_pack_expiry_duration = $this->RuleModel->select('value')->where('rule_key', 1 )->get()->getRow()->value;
$gst = $this->RuleModel->select('value')->where('rule_key', 3 )->get()->getRow()->value;
$pst = $this->RuleModel->select('value')->where('rule_key', 4 )->get()->getRow()->value;
$today = date("Y-m-d");
$days = "+".$credit_pack_expiry_duration." days";
$amount = 0;
$item_count = 0;
if($CartData[0]['order_id'] == null)
{
$orderId = 'EGF'.rand(10,100).rand(10,100).rand(10,100);
}else{
$orderId = $CartData[0]['order_id'];
}
$packageArray = [];
for($i=0;$i<$count;$i++)
{
$packageData = $this->PackagesModel->where('id',$CartData[$i]['pack_id'])->find();
$packageData[0]['count'] = $CartData[$i]['count'];
array_push($packageArray , $packageData[0]);
$cost = $packageData[0]['cost'] * $CartData[$i]['count'];
// $this->RuleModel->where('rule_key', 1 )->find()->value;
$credits_data['member_id'] = session()->get('logged_user');
$credits_data['package_name'] = $packageData[0]['package_name'];
$credits_data['package_type'] = $packageData[0]['package_type'];
@ -71,37 +117,42 @@ class PaymentController extends BaseController
$credits_data['cost_with_tax'] = round( ( $packageData[0]['cost'] + (($packageData[0]['cost'] * ($gst + $pst) ) / 100) ) , 2 );
$single_pack_no_of_count = $CartData[$i]['count'];
for($j=0;$j<$single_pack_no_of_count;$j++)
if($CartData[0]['order_id'] == null)
{
for($j=0;$j<$single_pack_no_of_count;$j++)
{
$insert_data = $this->creditsModel->save($credits_data);
}
$this->cartModel->where('id', $CartData[$i]['id'] )
->where('member_id', session()->get('logged_user'))
->set(array( 'order_id' => $orderId ))->update();
}
$amount = $amount + $cost;
$item_count = $item_count + $single_pack_no_of_count;
}
$data['amount'] = $amount;
$data['item_count'] = $item_count;
$data['order_id'] = $orderId;
$data['gst'] = $gst;
$data['pst'] = $pst;
$data['packageArray'] = $packageArray;
$data['userdata']=$this->dModel->getLoggedInUserData(session()->get('logged_user'));
// echo '<pre>';
// print_r($data);
// echo '</pre>';
// die();
echo view('payment_form',$data);
// echo '<pre>';
// print_r($data);
// echo '</pre>';
// die();
$data['userdata']=$this->dModel->getLoggedInMemberData(session()->get('logged_user'));
echo view('checkout',$data);
// echo view('payment_form',$data);
} else { echo 'cart empty .. !'; }
}
public function payment_form()
{
return view('payment_form');
}
public function processPayment()
{
try {
@ -158,15 +209,28 @@ class PaymentController extends BaseController
$response = $payments_api->createPayment($create_payment_request);
if ($response->isSuccess()) {
echo json_encode($response->getResult());
$data = json_encode($response->getResult());
$result = json_decode( $data ,true);
echo $result['payment']['id'];
$TrancactionId = $response->getResult()->payment->id;
$payment_order_id = $response->getResult()->payment->order_id;
$TrancactionId = $result['payment']['id'];
$payment_order_id = $result['payment']['order_id'];
$TrancactionData['member_id'] = session()->get('logged_user');
$TrancactionData['transaction_id'] = $TrancactionId;
$TrancactionData['transaction'] = json_encode($response->getResult());
$this->TransactionModel->save($TrancactionData);
$this->creditsModel->where('order_id', $order_id )->where('member_id', session()->get('logged_user'))
->set(array( 'is_active' => 1 , 'transaction_id' => $TrancactionId ))->update();
$insert = $this->TransactionModel->save($TrancactionData);
if( $insert)
{
$this->creditsModel->where('order_id', $order_id )->where('member_id', session()->get('logged_user'))
->set(array( 'is_active' => 1 , 'transaction_id' => $result['payment']['id'] ))->update();
$this->cartModel->where('order_id', $order_id )->delete();
}
echo json_encode($response->getResult());
} else {
echo json_encode(array('errors' => $response->getErrors()));

View File

@ -7,7 +7,7 @@ class Cart_model extends Model
protected $table = 'cart';
protected $primaryKey = 'id';
protected $allowedFields = ['member_id','pack_id','count'];
protected $allowedFields = ['member_id','pack_id','count','order_id'];
}

View File

@ -32,7 +32,7 @@ class Member_model extends Model
{
$builder = $this->db->table('member');
$builder -> select("id,mobile,email,password,is_email_verified");
$builder -> select("id,mobile,email,password,is_email_verified,name");
$builder -> where('email',$email);
$result = $builder->get();
if(count($result->getResultArray()) ==1)

View File

@ -7,7 +7,7 @@ class transaction_model extends Model
protected $table = 'transactions';
protected $primaryKey = 'id';
protected $allowedFields = ['member_id','transaction'];
protected $allowedFields = ['member_id','transaction_id','transaction'];
}

View File

@ -25,7 +25,7 @@
<div class="container">
<h1 class="heading-border">Cart</h1>
<form method="post" action="<?= base_url('/test/').md5($token); ?>">
<form method="post" action="<?= base_url('/payment/').md5($token); ?>">
<?php foreach ($tokendata as $key => $value) { ?>
<input type ="hidden" name="pack_id[]" value="<?= $value['id'] ?>">

View File

@ -1,6 +1,50 @@
<!DOCTYPE html>
<?php
require 'vendor/autoload.php';
include 'App\Libraries\LocationInfo.php';
use Square\Environment;
use Ramsey\Uuid\Uuid;
// Pulled from the .env file and upper cased e.g. SANDBOX, PRODUCTION.
$upper_case_environment = strtoupper(getenv('ENVIRONMENT'));
$web_payment_sdk_url = $_ENV["ENVIRONMENT"] === Environment::PRODUCTION ? "https://web.squarecdn.com/v1/square.js" : "https://sandbox.web.squarecdn.com/v1/square.js";
?>
<html lang="en-US">
<head>
<script type="text/javascript" src="<?php echo $web_payment_sdk_url ?>"></script>
<script type="text/javascript">
window.applicationId =
"<?php
echo getenv('SQUARE_APPLICATION_ID');
?>";
window.locationId =
"<?php
echo getenv('SQUARE_LOCATION_ID');
?>";
window.currency =
"<?php
echo $location_info->getCurrency();
?>";
window.country =
"<?php
echo $location_info->getCountry();
?>";
window.idempotencyKey =
"<?php
echo Uuid::uuid4();
?>";
</script>
<!-- <link rel="stylesheet" type="text/css" href="<?= base_url(); ?>public/square-stylesheets/style.css">
<link rel="stylesheet" type="text/css" href="<?= base_url(); ?>public/square-stylesheets/sq-payment.css"> -->
<title>Checkout - Golf Evolution</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
@ -44,10 +88,10 @@
<div class="row edit-address">
<div class="col-lg-3">
<input type="radio" class="select-address">
<span>Tom Holland</span>
<span><?= $userdata->name; ?></span>
</div>
<div class="col-lg-7">
<div class="billing-address">2544 Enterprise Way kelowna,V1X7X5</div>
<div class="billing-address"><?= $userdata->address; ?></div>
</div>
<div class="col-lg-2 text-end">
<a href="#" class="billing-edit">Edit</a>
@ -101,65 +145,72 @@
</div>
</form>
</div>
<form class="payment-form" id="fast-checkout">
<div class="wrapper">
<h4 class="payment-title">Payment Method</h4>
<div class="credit-card">
<div class="row">
<div class="col-lg-12 ">
<!-- Add Payment Method Code-->
<input type="hidden" value="<?= $amount; ?>" name="amount" id="amount">
<input type="hidden" value="<?= $order_id; ?>" name="order_id" id="order_id">
<div id="card-container"></div>
<span id="payment-flow-message"></span>
<button id="card-button" type="button">Proceed to Pay</button>
</div>
</div>
</div>
<div class="google-pay">
<div class="row google-pay-content align-items-center">
<div class="col-lg-10 d-flex align-items-center">
<input type="radio">
<span>Google Pay</span>
</div>
<div class="col-lg-2 text-end">
<div id="google-pay-button" alt="google-pay" type="button"></div>
<!-- <div class="col-lg-2 text-end">
<img src="<?= base_url()."/public"; ?>/assets/member_images/g-pay.png" alt="" width="64" height="58"/>
</div>
</div> -->
</div>
</div>
</div>
</div>
</form>
<div class="col-lg-4">
<div class="order-summary">
<div class="row order1">
<div class="col-lg-12 col-12">
<h4>Order Summary</h4>
</div>
</div>
</div>
<?php foreach ($packageArray as $row) { ?>
<div class="row evo">
<div class="col-lg-6 col-6"><div class="product-name">Evo Pack 1</div></div>
<div class="col-lg-6 col-6 text-end"><div class="product-price"><span class="price-symbol">$</span>550.00</div></div>
</div>
<div class="row evo">
<div class="col-lg-6 col-6"><div class="product-name">Evo Pack2</div></div>
<div class="col-lg-6 col-6 text-end"><div class="product-price"><span class="price-symbol">$</span>1000.00</div></div>
<div class="col-lg-6 col-6"><div class="product-name"><?php echo $row['package_name']." (".$row['count'].")"; ?></div></div>
<div class="col-lg-6 col-6 text-end"><div class="product-price"><span class="price-symbol">$</span><?php echo $row['cost'] * $row['count']; ?></div></div>
</div>
<?php } ?>
<div class="row item1">
<div class="col-lg-6 col-6"><p>Items (2):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span>1550.00</p></div>
<div class="col-lg-6 col-6"><p>Items (<?= $item_count; ?>):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span><?= $amount; ?></p></div>
</div>
<div class="row item2">
<div class="col-lg-6 col-6"><p>PST (7%):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span>108.50</p></div>
<div class="col-lg-6 col-6"><p>PST (<?= $pst; ?>%):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span><?= round($amount * $pst / 100); ?></p></div>
</div>
<div class="row item3">
<div class="col-lg-6 col-6"><p>GST (5%):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span>77.50</p></div>
<div class="col-lg-6 col-6"><p>GST (<?= $gst; ?>%):</p></div>
<div class="col-lg-6 col-6 text-end"><p><span class="price-symbol">$</span><?= round($amount * $gst / 100); ?></p></div>
</div>
<div class="row order2">
<div class="col-lg-6 col-6"><h5>Order Total:</h5></div>
<div class="col-lg-6 col-6 text-end"><div class="product-total"><span class="price-symbol">$</span>1736.00</div></div>
<div class="col-lg-6 col-6 text-end"><div class="product-total"><span class="price-symbol">$</span><?= round( ( $amount + (($amount * ($gst + $pst) ) / 100) ) , 2 ); ?></div></div>
</div>
<div class="row order-button">
<div class="col-lg-12">
<p>By placing your order, you agree to our company privacy policy and condition of use.</p>
<input type="submit" value="Proceed to Pay">
<!-- <button id="card-button" type="button">Proceed to Pay</button> -->
<!-- <input id="card-button" type="submit" value="Proceed to Pay"> -->
</div>
</div>
@ -172,13 +223,13 @@
</div>
</section>
<section class="google-pay">
<div class="container">
</div>
</section>
<?php include 'member_layout/footer.php' ?>
<!-- <script type="text/javascript" src="<?= base_url(); ?>public/square-js/sq-ach.js"></script>
<script type="text/javascript" src="<?= base_url(); ?>public/square-js/sq-apple-pay.js"></script> -->
<script type="text/javascript" src="<?= base_url(); ?>public/square-js/sq-google-pay.js"></script>
<script type="text/javascript" src="<?= base_url(); ?>public/square-js/sq-card-pay.js"></script>
<script type="text/javascript" src="<?= base_url(); ?>public/square-js/sq-payment-flow.js"></script>
</body>
</html>

View File

@ -9,7 +9,8 @@
<li><a href="https://golfevolutionkelowna.ca/evo-membership/">Pre-Sales Offer</a></li>
<li class="custom-logo-link"><a href="#" rel="home"><img src="<?= base_url()."/public"; ?>/assets/member_images/GolfEvolution-Logo-Colour.png" alt="" width="120" height="89"></a></li>
<li><a href="https://golfevolutionkelowna.ca/about-us/">About Us</a></li>
<li><a href="#" class="nav-button"><img src="<?= base_url()."/public"; ?>/assets/member_images/button-logo.png" width="20" height="20">MEMBER ACCESS</a></li>
<li><a href="#" class="nav-button"><img src="<?= base_url()."/public"; ?>/assets/member_images/button-logo.png" width="20" height="20">
<?php if(session()->has('logged_user')) { echo session()->get('logged_user_name'); }else{ ?>MEMBER ACCESS<?php } ?></a></li>
</ul>
</div>
</div>
@ -23,6 +24,7 @@
<div class="col-lg-12">
<div class="nav-main">
<img src="<?= base_url()."/public"; ?>/assets/member_images/GolfEvolution-footer-Logo-White.png" alt="">
<button class="button-menu"><i class="fa fa-bars"></i></button>
</div>
</div>

138
app/Views/payment.php Normal file
View File

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Payment Successful - Golf Evolution</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="assets/images/favicon.png" sizes="192x192" />
<link rel="apple-touch-icon" href="assets/images/favicon.png" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/front-style.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
</head>
<body class="payment">
<?php include 'module/header.php' ?>
<section>
<div class="container">
<div class="row">
<div class="col-lg-2"></div>
<div class="col-lg-8">
<div class="payment-box">
<div class="row payment-head">
<div class="col-lg-12">
<div>
<img src="assets/images/Vector.png" alt="" width="60" height="60"/>
<h1 class="sucessful-heading">Payment Successful!</h1>
<p>The order confirmation has been sent to your registered mail id</p>
</div>
</div>
</div>
<div class="row aside">
<div class="col-lg-12">
<div class="aside-content">
<div class="trans-id label">Transactions ID</div>
<div class="trans-id">V2SwTL5GN1Ha61R7OHSCiBOv1YUZY</div>
</div>
<div class="aside-content">
<div class="trans-date label">Transactions Date</div>
<div class="trans-date">Friday, September 8, 2023</div>
</div>
<div class="aside-content aside-content-last">
<div class="trans-method label">Payment Method</div>
<div class="trans-method">Visa card ending with 7413</div>
</div>
</div>
</div>
<div class="row order">
<div class="col-lg-12">
<div class="order-heading">Your Order</div>
</div>
<div class="col-lg-6">
<div class="row">
<div class="col-lg-4">
<img src="assets/images/cart-icon.png" alt="" width="70" height="70">
</div>
<div class="col-lg-5">
<div class="product-name">Evo Pack 1</div>
<div class="credits-number">24 Credits</div>
<div class="credit-point">20+4 Credits Extra*</div>
<div class="credit-price">1 Credit at $22.90</div>
</div>
<div class="col-lg-3"></div>
</div>
</div>
<div class="col-lg-6 d-flex justify-content-end align-items-start">
<div class="order-total"><span class="price-symbol">$</span>1100.00</div>
</div>
</div>
<div class="total">
<div class="row total-list">
<div class="col-lg-6">
<div class="subtotal label">Subtotal</div>
</div>
<div class="col-lg-6 text-end">
<div class="subtotal"><span class="price-symbol">$</span>1100.00</div>
</div>
</div>
<div class="row total-list">
<div class="col-lg-6">
<div class="taxes label">Taxes</div>
</div>
<div class="col-lg-3"></div>
<div class="col-lg-1 text-end">
<div class="taxes pst label">PST(7%)</div>
</div>
<div class="col-lg-2 text-end">
<div class="taxes pst"><span class="price-symbol">$</span>77.00</div>
</div>
<div class="col-lg-6">
</div>
<div class="col-lg-3"></div>
<div class="col-lg-1 text-end">
<div class="taxes gst label">GST(5%)</div>
</div>
<div class="col-lg-2 text-end">
<div class="taxes gst"><span class="price-symbol">$</span>55.00</div>
</div>
</div>
<div class="row sub-total-main">
<div class="col-lg-6">
<div class="order-total label">Total</div>
</div>
<div class="col-lg-6 text-end">
<div class="order-total"><span class="price-symbol">$</span>1232.00</div>
</div>
</div>
</div>
<div class="row dashboard">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<button>Return to Dashboard</button>
</div>
<div class="col-lg-4"></div>
</div>
</div>
</div>
<div class="col-lg-2"></div>
</div>
</div>
</section>
<?php include 'module/footer.php' ?>
</body>
</html>