partial #2242 - separate user and payment type table
This commit is contained in:
parent
3ec5e9c404
commit
f5b1040fdb
16
db/migrate/000156_user_payment_type.sql
Normal file
16
db/migrate/000156_user_payment_type.sql
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
CREATE TABLE `user_payment_type` (
|
||||||
|
`id_user_payment_type` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`id_user` int(11) unsigned NULL,
|
||||||
|
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||||
|
`stripe_id` varchar(255) DEFAULT NULL,
|
||||||
|
`card` varchar(16) DEFAULT NULL,
|
||||||
|
`card_type` enum('visa','mastercard','amex','discover') DEFAULT NULL,
|
||||||
|
`balanced_id` varchar(255) DEFAULT NULL,
|
||||||
|
`card_exp_year` int(4) DEFAULT NULL,
|
||||||
|
`card_exp_month` int(2) DEFAULT NULL,
|
||||||
|
`date` DATETIME NOT NULL,
|
||||||
|
PRIMARY KEY (`id_user_payment_type`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE `user_payment_type` ADD CONSTRAINT `user_payment_type_ibfk1` FOREIGN KEY(`id_user`) REFERENCES `user`(`id_user`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
@ -274,19 +274,6 @@ class Crunchbutton_Order extends Cana_Table {
|
|||||||
$this->txn = $this->transaction();
|
$this->txn = $this->transaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->_customer->id) {
|
|
||||||
switch (c::config()->processor) {
|
|
||||||
case 'stripe':
|
|
||||||
default:
|
|
||||||
$user->stripe_id = $this->_customer->id;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'balanced':
|
|
||||||
$user->balanced_id = $this->_customer->id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->location_lat = $params['lat'];
|
$user->location_lat = $params['lat'];
|
||||||
$user->location_lon = $params['lon'];
|
$user->location_lon = $params['lon'];
|
||||||
|
|
||||||
@ -297,12 +284,6 @@ class Crunchbutton_Order extends Cana_Table {
|
|||||||
$user->address = $this->address;
|
$user->address = $this->address;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->pay_type == 'card' && $params['card']['id']) {
|
|
||||||
$user->card = '************'.$params['card']['lastfour'];
|
|
||||||
$user->card_exp_year = $params['card']['year'];
|
|
||||||
$user->card_exp_month = $params['card']['month'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->pay_type = $this->pay_type;
|
$user->pay_type = $this->pay_type;
|
||||||
$user->delivery_type = $this->delivery_type;
|
$user->delivery_type = $this->delivery_type;
|
||||||
$user->tip = $this->tip;
|
$user->tip = $this->tip;
|
||||||
@ -316,6 +297,53 @@ class Crunchbutton_Order extends Cana_Table {
|
|||||||
$user = new User( $user->id_user );
|
$user = new User( $user->id_user );
|
||||||
$this->_user = $user;
|
$this->_user = $user;
|
||||||
|
|
||||||
|
// If the pay_type is card
|
||||||
|
if ($this->pay_type == 'card' ) {
|
||||||
|
// Verify if the user already has a payment type
|
||||||
|
$payment_type = $user->payment_type();
|
||||||
|
if( !$payment_type ){
|
||||||
|
// Copy the last user's payment
|
||||||
|
$payment_type = Crunchbutton_User_Payment_Type::copyPaymentFromUserTable( $user->id_user );
|
||||||
|
}
|
||||||
|
$saveThisPayment = false;
|
||||||
|
// The user hasnt any payment type, so lets create one
|
||||||
|
if( $payment_type ){
|
||||||
|
// Compare this payment with the last one
|
||||||
|
if( $params['card']['id'] && $params['card']['year'] && $params['card']['lastfour'] && $params['card']['month'] && (
|
||||||
|
$user_payment_type->card != '************'.$params['card']['lastfour'] ||
|
||||||
|
$user_payment_type->card_exp_year != $params['card']['year'] ||
|
||||||
|
$user_payment_type->card_exp_month != $params['card']['month'] ) ){
|
||||||
|
$saveThisPayment = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$saveThisPayment = true;
|
||||||
|
}
|
||||||
|
if( $saveThisPayment ){
|
||||||
|
$user_payment_type = new Crunchbutton_User_Payment_Type();
|
||||||
|
$user_payment_type->id_user = $user->id_user;
|
||||||
|
$user_payment_type->active = 1;
|
||||||
|
if ($this->_customer->id) {
|
||||||
|
switch (c::config()->processor) {
|
||||||
|
case 'stripe':
|
||||||
|
default:
|
||||||
|
$user_payment_type->stripe_id = $this->_customer->id;
|
||||||
|
break;
|
||||||
|
case 'balanced':
|
||||||
|
$user_payment_type->balanced_id = $this->_customer->id;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$user_payment_type->card = '************'.$params['card']['lastfour'];
|
||||||
|
$user_payment_type->card_type = $params['card']['card_type'];
|
||||||
|
$user_payment_type->card_exp_year = $params['card']['year'];
|
||||||
|
$user_payment_type->card_exp_month = $params['card']['month'];
|
||||||
|
$user_payment_type->date = date('Y-m-d H:i:s');
|
||||||
|
$user_payment_type->save();
|
||||||
|
// Desactive others payments
|
||||||
|
$user_payment_type->desactiveOlderPaymentsType( $user->id_user, $user_payment_type->id_user_payment_type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If the user typed a password it will create a new user auth
|
// If the user typed a password it will create a new user auth
|
||||||
if( $params['password'] != '' ){
|
if( $params['password'] != '' ){
|
||||||
$params_auth = array();
|
$params_auth = array();
|
||||||
@ -545,14 +573,20 @@ class Crunchbutton_Order extends Cana_Table {
|
|||||||
switch (c::config()->processor) {
|
switch (c::config()->processor) {
|
||||||
case 'stripe':
|
case 'stripe':
|
||||||
default:
|
default:
|
||||||
|
if( $user && $user->payment_type() ){
|
||||||
|
$stripe_id = $user->payment_type()->stripe_id;
|
||||||
|
}
|
||||||
$charge = new Charge_Stripe([
|
$charge = new Charge_Stripe([
|
||||||
'stripe_id' => $user->stripe_id
|
'stripe_id' => $stripe_id
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'balanced':
|
case 'balanced':
|
||||||
|
if( $user && $user->payment_type() ){
|
||||||
|
$balanced_id = $user->payment_type()->balanced_id;
|
||||||
|
}
|
||||||
$charge = new Charge_Balanced([
|
$charge = new Charge_Balanced([
|
||||||
'balanced_id' => $user->balanced_id
|
'balanced_id' => $balanced_id
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -222,6 +222,15 @@ class Crunchbutton_User extends Cana_Table {
|
|||||||
$out['ip'] = $_SERVER['REMOTE_ADDR'];
|
$out['ip'] = $_SERVER['REMOTE_ADDR'];
|
||||||
$out['email'] = $this->email ? $this->email : $this->email();
|
$out['email'] = $this->email ? $this->email : $this->email();
|
||||||
|
|
||||||
|
// Get user payment type
|
||||||
|
$payment_type = $this->payment_type();
|
||||||
|
if( $payment_type ){
|
||||||
|
$out[ 'card' ] = $payment_type->card;
|
||||||
|
$out[ 'card_type' ] = $payment_type->card_type;
|
||||||
|
$out[ 'card_exp_year' ] = $payment_type->card_exp_year;
|
||||||
|
$out[ 'card_exp_month' ] = $payment_type->card_exp_month;
|
||||||
|
}
|
||||||
|
|
||||||
if (c::env() == 'beta' || c::env() == 'local') {
|
if (c::env() == 'beta' || c::env() == 'local') {
|
||||||
$out['debug'] = true;
|
$out['debug'] = true;
|
||||||
}
|
}
|
||||||
@ -234,6 +243,10 @@ class Crunchbutton_User extends Cana_Table {
|
|||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function payment_type(){
|
||||||
|
return Crunchbutton_User_Payment_Type::getUserPaymentType( $this->id_user );
|
||||||
|
}
|
||||||
|
|
||||||
public function getLastNote(){
|
public function getLastNote(){
|
||||||
$lastOrderNotes = $this->lastOrder();
|
$lastOrderNotes = $this->lastOrder();
|
||||||
if( $lastOrderNotes->notes ){
|
if( $lastOrderNotes->notes ){
|
||||||
|
|||||||
50
include/library/Crunchbutton/User/Payment/Type.php
Normal file
50
include/library/Crunchbutton/User/Payment/Type.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Crunchbutton_User_Payment_Type extends Cana_Table {
|
||||||
|
|
||||||
|
public function getUserPaymentType( $id_user = null ){
|
||||||
|
$id_user = ( $id_user ) ? $id_user : c::user()->id_user;
|
||||||
|
if( $id_user ){
|
||||||
|
$payment = Crunchbutton_User_Payment_Type::q( 'SELECT * FROM user_payment_type WHERE id_user = "' . $id_user . '" AND active = 1 ORDER BY id_user_payment_type DESC LIMIT 1' );
|
||||||
|
if( $payment->id_user_payment_type ){
|
||||||
|
return $payment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function desactiveOlderPaymentsType( $id_user, $id_user_payment_type ){
|
||||||
|
$query = 'UPDATE user_payment_type SET active = 0 WHERE id_user = ' . $id_user . ' AND id_user_payment_type != ' . $id_user_payment_type;
|
||||||
|
c::db()->query( $query );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copyPaymentFromUserTable( $id_user = null ){
|
||||||
|
$id_user = ( $id_user ) ? $id_user : c::user()->id_user;
|
||||||
|
if( $id_user ){
|
||||||
|
$user = Crunchbutton_User::o( $id_user );
|
||||||
|
if( $user->card && $user->card_exp_year && $user->card_exp_month ){
|
||||||
|
$user_payment_type = new Crunchbutton_User_Payment_Type();
|
||||||
|
$user_payment_type->id_user = $user->id_user;
|
||||||
|
$user_payment_type->active = 1;
|
||||||
|
$user_payment_type->stripe_id = $user->stripe_id;
|
||||||
|
$user_payment_type->balanced_id = $user->balanced_id;
|
||||||
|
$user_payment_type->card = $user->card;
|
||||||
|
$user_payment_type->card_type = $user->card_type;
|
||||||
|
$user_payment_type->card_exp_year = $user->card_exp_year;
|
||||||
|
$user_payment_type->card_exp_month = $user->card_exp_month;
|
||||||
|
$user_payment_type->date = date('Y-m-d H:i:s');
|
||||||
|
$user_payment_type->save();
|
||||||
|
return Crunchbutton_User_Payment_Type::o( $user_payment_type->id_user_payment_type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __construct($id = null) {
|
||||||
|
parent::__construct();
|
||||||
|
$this
|
||||||
|
->table('user_payment_type')
|
||||||
|
->idVar('id_user_payment_type')
|
||||||
|
->load($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -931,6 +931,7 @@ App.tokenizeCard = function(card, complete) {
|
|||||||
res.status = true;
|
res.status = true;
|
||||||
res.id = response.data.id;
|
res.id = response.data.id;
|
||||||
res.uri = response.data.uri;
|
res.uri = response.data.uri;
|
||||||
|
res.card_type = response.data.card_type;
|
||||||
res.lastfour = response.data.last_four;
|
res.lastfour = response.data.last_four;
|
||||||
res.month = card.expiration_month;
|
res.month = card.expiration_month;
|
||||||
res.year = card.expiration_year;
|
res.year = card.expiration_year;
|
||||||
|
|||||||
@ -597,6 +597,7 @@ NGApp.factory( 'OrderService', function ($http, $location, $rootScope, $filter,
|
|||||||
id: card.id,
|
id: card.id,
|
||||||
uri: card.uri,
|
uri: card.uri,
|
||||||
lastfour: card.lastfour,
|
lastfour: card.lastfour,
|
||||||
|
card_type: card.card_type,
|
||||||
month: card.month,
|
month: card.month,
|
||||||
year: card.year
|
year: card.year
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user