diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 501df2912044..3263a724548a 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -1235,7 +1235,7 @@ class AccountController extends BaseController */ public function savePaymentGatewayLimits() { - $gateway_type_id = intval(Input::get('gateway_type_id')); + $gateway_type_id = Input::get('gateway_type_id'); $gateway_settings = AccountGatewaySettings::scope()->where('gateway_type_id', '=', $gateway_type_id)->first(); if ( ! $gateway_settings) { diff --git a/app/Http/routes.php b/app/Http/routes.php index 6d3d6a23e0c1..4940c8037ca7 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -704,11 +704,11 @@ if (!defined('CONTACT_EMAIL')) { define('PAYMENT_METHOD_STATUS_VERIFICATION_FAILED', 'verification_failed'); define('PAYMENT_METHOD_STATUS_VERIFIED', 'verified'); - define('GATEWAY_TYPE_CREDIT_CARD', 1); - define('GATEWAY_TYPE_BANK_TRANSFER', 2); - define('GATEWAY_TYPE_PAYPAL', 3); - define('GATEWAY_TYPE_BITCOIN', 4); - define('GATEWAY_TYPE_DWOLLA', 5); + define('GATEWAY_TYPE_CREDIT_CARD', 'credit_card'); + define('GATEWAY_TYPE_BANK_TRANSFER', 'bank_transfer'); + define('GATEWAY_TYPE_PAYPAL', 'paypal'); + define('GATEWAY_TYPE_BITCOIN', 'bitcoin'); + define('GATEWAY_TYPE_DWOLLA', 'dwolla'); define('GATEWAY_TYPE_TOKEN', 'token'); define('REMINDER1', 'reminder1'); diff --git a/app/Models/GatewayType.php b/app/Models/GatewayType.php index 38fdf48d4eb2..6c711d85b304 100644 --- a/app/Models/GatewayType.php +++ b/app/Models/GatewayType.php @@ -12,6 +12,8 @@ class GatewayType extends Eloquent */ public $timestamps = false; + public $incrementing = false; + /** * @return mixed */ diff --git a/app/Ninja/Datatables/AccountGatewayDatatable.php b/app/Ninja/Datatables/AccountGatewayDatatable.php index 700063e6575f..3b439daa0e6d 100644 --- a/app/Ninja/Datatables/AccountGatewayDatatable.php +++ b/app/Ninja/Datatables/AccountGatewayDatatable.php @@ -156,15 +156,14 @@ class AccountGatewayDatatable extends EntityDatatable $min = $accountGatewaySettings ? $accountGatewaySettings->min_limit : 0; $max = $accountGatewaySettings ? $accountGatewaySettings->max_limit : 0; - return "javascript:showLimitsModal('{$gatewayType->name}',{$gatewayType->id},$min,$max)"; + return "javascript:showLimitsModal('{$gatewayType->name}','{$gatewayType->id}',$min,$max)"; }, function ($model) use ($gatewayType) { // Only show this action if the given gateway supports this gateway type $accountGateway = AccountGateway::find($model->id); $paymentDriver = $accountGateway->paymentDriver(); - $gatewayTypes = $paymentDriver->gatewayTypes(); - return in_array($gatewayType->id, $gatewayTypes); + return $paymentDriver->handles($gatewayType->id); } ]; } diff --git a/database/migrations/2016_09_05_150625_create_gateway_types.php b/database/migrations/2016_09_05_150625_create_gateway_types.php index 1fec411bc9af..cd8e11c7d6ad 100644 --- a/database/migrations/2016_09_05_150625_create_gateway_types.php +++ b/database/migrations/2016_09_05_150625_create_gateway_types.php @@ -12,21 +12,24 @@ class CreateGatewayTypes extends Migration */ public function up() { + Schema::dropIfExists('account_gateway_settings'); Schema::dropIfExists('gateway_types'); + Schema::create('gateway_types', function($t) { - $t->increments('id'); + $t->string('id'); $t->string('name'); + + $t->primary('id'); }); - Schema::dropIfExists('account_gateway_settings'); Schema::create('account_gateway_settings', function($t) { $t->increments('id'); $t->unsignedInteger('account_id'); $t->unsignedInteger('user_id'); - $t->unsignedInteger('gateway_type_id')->nullable(); + $t->string('gateway_type_id')->nullable(); $t->timestamp('updated_at')->nullable(); @@ -39,6 +42,12 @@ class CreateGatewayTypes extends Migration $t->foreign('gateway_type_id')->references('id')->on('gateway_types')->onDelete('cascade'); }); + + Schema::table('payment_types', function($t) + { + $t->string('gateway_type_id')->nullable(); + $t->foreign('gateway_type_id')->references('id')->on('gateway_types')->onDelete('cascade'); + }); } /** * Reverse the migrations. diff --git a/database/seeds/GatewayTypesSeeder.php b/database/seeds/GatewayTypesSeeder.php index 33ae1d2984e3..929b3d23cad9 100644 --- a/database/seeds/GatewayTypesSeeder.php +++ b/database/seeds/GatewayTypesSeeder.php @@ -10,15 +10,15 @@ class GatewayTypesSeeder extends Seeder $gateway_types = [ - ['name' => 'Credit Card'], - ['name' => 'Bank Transfer'], - ['name' => 'PayPal'], - ['name' => 'Bitcoin'], - ['name' => 'Dwolla'], + ['id' => 'credit_card', 'name' => 'Credit Card'], + ['id' => 'bank_transfer', 'name' => 'Bank Transfer'], + ['id' => 'paypal', 'name' => 'PayPal'], + ['id' => 'bitcoin', 'name' => 'Bitcoin'], + ['id' => 'dwolla', 'name' => 'Dwolla'], ]; foreach ($gateway_types as $gateway_type) { - $record = GatewayType::where('name', '=', $gateway_type['name'])->first(); + $record = GatewayType::where('id', '=', $gateway_type['id'])->first(); if (!$record) { GatewayType::create($gateway_type); } diff --git a/database/seeds/PaymentTypesSeeder.php b/database/seeds/PaymentTypesSeeder.php index 6ded62284583..66addcc8b9b4 100644 --- a/database/seeds/PaymentTypesSeeder.php +++ b/database/seeds/PaymentTypesSeeder.php @@ -10,32 +10,39 @@ class PaymentTypesSeeder extends Seeder $paymentTypes = [ array('name' => 'Apply Credit'), - array('name' => 'Bank Transfer'), + array('name' => 'Bank Transfer', 'gateway_type_id' => GATEWAY_TYPE_BANK_TRANSFER), array('name' => 'Cash'), - array('name' => 'Debit'), - array('name' => 'ACH'), - array('name' => 'Visa Card'), - array('name' => 'MasterCard'), - array('name' => 'American Express'), - array('name' => 'Discover Card'), - array('name' => 'Diners Card'), - array('name' => 'EuroCard'), - array('name' => 'Nova'), - array('name' => 'Credit Card Other'), - array('name' => 'PayPal'), + array('name' => 'Debit', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'ACH', 'gateway_type_id' => GATEWAY_TYPE_BANK_TRANSFER), + array('name' => 'Visa Card', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'MasterCard', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'American Express', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Discover Card', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Diners Card', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'EuroCard', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Nova', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Credit Card Other', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'PayPal', 'gateway_type_id' => GATEWAY_TYPE_PAYPAL), array('name' => 'Google Wallet'), array('name' => 'Check'), - array('name' => 'Carte Blanche'), - array('name' => 'UnionPay'), - array('name' => 'JCB'), - array('name' => 'Laser'), - array('name' => 'Maestro'), - array('name' => 'Solo'), - array('name' => 'Switch'), + array('name' => 'Carte Blanche', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'UnionPay', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'JCB', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Laser', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Maestro', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Solo', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), + array('name' => 'Switch', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD), ]; foreach ($paymentTypes as $paymentType) { - if (!DB::table('payment_types')->where('name', '=', $paymentType['name'])->get()) { + $record = PaymentType::where('name', '=', $paymentType['name'])->first(); + + if ( $record) { + $record->name = $paymentType['name']; + $record->gateway_type_id = ! empty($paymentType['gateway_type_id']) ? $paymentType['gateway_type_id'] : null; + + $record->save(); + } else { PaymentType::create($paymentType); } }