diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 81772a8beed4..a69893e728bf 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -433,6 +433,8 @@ class BaseController extends Controller $data['hash'] = md5(public_path('main.dart.js')); + $this->buildCache(); + return view('index.index', $data); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 679f5cef0c7a..b7f4db0c3774 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -55,7 +55,7 @@ class Kernel extends HttpKernel 'throttle:60,1', 'bindings', 'query_logging', - \App\Http\Middleware\StartupCheck::class, + //\App\Http\Middleware\StartupCheck::class, \App\Http\Middleware\Cors::class, ], 'contact' => [ @@ -71,7 +71,7 @@ class Kernel extends HttpKernel \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\StartupCheck::class, + //\App\Http\Middleware\StartupCheck::class, \App\Http\Middleware\QueryLogging::class, ], 'shop' => [ diff --git a/app/Http/Middleware/StartupCheck.php b/app/Http/Middleware/StartupCheck.php index 78b93c87f942..48f2517fdeb7 100644 --- a/app/Http/Middleware/StartupCheck.php +++ b/app/Http/Middleware/StartupCheck.php @@ -31,7 +31,7 @@ class StartupCheck { /** * Handle an incoming request. - * + * @deprecated * @param Request $request * @param Closure $next * @@ -46,6 +46,7 @@ class StartupCheck foreach ($cached_tables as $name => $class) { if ($request->has('clear_cache') || ! Cache::has($name)) { + // check that the table exists in case the migration is pending if (! Schema::hasTable((new $class())->getTable())) { continue; diff --git a/app/PaymentDrivers/CheckoutComPaymentDriver.php b/app/PaymentDrivers/CheckoutComPaymentDriver.php index 644885a42998..bf6b4aa42a30 100644 --- a/app/PaymentDrivers/CheckoutComPaymentDriver.php +++ b/app/PaymentDrivers/CheckoutComPaymentDriver.php @@ -53,6 +53,8 @@ class CheckoutComPaymentDriver extends BaseDriver /** Instance of \Checkout\CheckoutApi */ public $gateway; + public $payment_method; //the gateway type id + public static $methods = [ GatewayType::CREDIT_CARD => '', ]; @@ -100,6 +102,9 @@ class CheckoutComPaymentDriver extends BaseDriver */ public function viewForType($gateway_type_id) { + + $this->payment_method = $gateway_type_id; + if ($gateway_type_id == GatewayType::CREDIT_CARD) { return 'gateways.checkout.credit_card'; } @@ -355,13 +360,43 @@ class CheckoutComPaymentDriver extends BaseDriver public function saveCard($state) { + //some cards just can't be tokenized.... + if(!$state['payment_response']->source['id']) + return; + + // [id] => src_hck5nsv3fljehbam2cvdm7fioa + // [type] => card + // [expiry_month] => 10 + // [expiry_year] => 2022 + // [scheme] => Visa + // [last4] => 4242 + // [fingerprint] => 688192847DB9AE8A26C53776D036D5B8AD2CEAF1D5A8F5475F542B021041EFA1 + // [bin] => 424242 + // [card_type] => Credit + // [card_category] => Consumer + // [issuer] => JPMORGAN CHASE BANK NA + // [issuer_country] => US + // [product_id] => A + // [product_type] => Visa Traditional + // [avs_check] => S + // [cvv_check] => Y + // [payouts] => 1 + // [fast_funds] => d + + $payment_meta = new \stdClass; + $payment_meta->exp_month = (string)$state['payment_response']->source['expiry_month']; + $payment_meta->exp_year = (string)$state['payment_response']->source['expiry_year']; + $payment_meta->brand = (string)$state['payment_response']->source['scheme']; + $payment_meta->last4 = (string)$state['payment_response']->source['last4']; + $payment_meta->type = $this->payment_method; + $company_gateway_token = new ClientGatewayToken(); $company_gateway_token->company_id = $this->client->company->id; $company_gateway_token->client_id = $this->client->id; $company_gateway_token->token = $state['payment_response']->source['id']; $company_gateway_token->company_gateway_id = $this->company_gateway->id; $company_gateway_token->gateway_type_id = $state['payment_method_id']; - $company_gateway_token->meta = $state['payment_response']->source; + $company_gateway_token->meta = $payment_meta; $company_gateway_token->save(); if ($this->client->gateway_tokens->count() == 1) { diff --git a/app/Transformers/ClientGatewayTokenTransformer.php b/app/Transformers/ClientGatewayTokenTransformer.php index f084768bc2bc..1507d73a6ad8 100644 --- a/app/Transformers/ClientGatewayTokenTransformer.php +++ b/app/Transformers/ClientGatewayTokenTransformer.php @@ -35,11 +35,33 @@ class ClientGatewayTokenTransformer extends EntityTransformer 'gateway_type_id' => (string) $cgt->gateway_type_id ?: '', 'company_gateway_id' => (string) $this->encodePrimaryKey($cgt->company_gateway_id) ?: '', 'is_default' => (bool) $cgt->is_default, - 'meta' => $cgt->meta, + 'meta' => $this->typeCastMeta($cgt->meta), 'created_at' => (int) $cgt->created_at, 'updated_at' => (int) $cgt->updated_at, 'archived_at' => (int) $cgt->deleted_at, 'is_deleted' => (bool) $cgt->is_deleted, ]; } + + private function typeCastMeta($meta) + { + $casted = new \stdClass; + + if(property_exists($meta, 'exp_month')) + $casted->exp_month = (string)$meta->exp_month; + + if(property_exists($meta, 'exp_year')) + $casted->exp_year = (string)$meta->exp_year; + + if(property_exists($meta, 'brand')) + $casted->brand = (string)$meta->brand; + + if(property_exists($meta, 'last4')) + $casted->last4 = (string)$meta->last4; + + if(property_exists($meta, 'type')) + $casted->type = (int)$meta->type; + + return $casted; + } } diff --git a/app/Utils/Traits/AppSetup.php b/app/Utils/Traits/AppSetup.php index 358e4bc645f8..a1f5280e66ac 100644 --- a/app/Utils/Traits/AppSetup.php +++ b/app/Utils/Traits/AppSetup.php @@ -11,8 +11,11 @@ namespace App\Utils\Traits; +use App\DataMapper\EmailTemplateDefaults; use App\Utils\Ninja; use App\Utils\SystemHealth; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Schema; trait AppSetup { @@ -26,4 +29,79 @@ trait AppSetup return $check['system_health'] == 'true'; } + + public function buildCache() + { + $cached_tables = config('ninja.cached_tables'); + + foreach ($cached_tables as $name => $class) { + if (request()->has('clear_cache') || ! Cache::has($name)) { + + // check that the table exists in case the migration is pending + if (! Schema::hasTable((new $class())->getTable())) { + continue; + } + if ($name == 'payment_terms') { + $orderBy = 'num_days'; + } elseif ($name == 'fonts') { + $orderBy = 'sort_order'; + } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) { + $orderBy = 'name'; + } else { + $orderBy = 'id'; + } + $tableData = $class::orderBy($orderBy)->get(); + if ($tableData->count()) { + Cache::forever($name, $tableData); + } + } + } + + /*Build template cache*/ + if (request()->has('clear_cache') || ! Cache::has('templates')) + $this->buildTemplates(); + } + + + private function buildTemplates($name = 'templates') + { + $data = [ + + 'invoice' => [ + 'subject' => EmailTemplateDefaults::emailInvoiceSubject(), + 'body' => EmailTemplateDefaults::emailInvoiceTemplate(), + ], + + 'quote' => [ + 'subject' => EmailTemplateDefaults::emailQuoteSubject(), + 'body' => EmailTemplateDefaults::emailQuoteTemplate(), + ], + 'payment' => [ + 'subject' => EmailTemplateDefaults::emailPaymentSubject(), + 'body' => EmailTemplateDefaults::emailPaymentTemplate(), + ], + 'reminder1' => [ + 'subject' => EmailTemplateDefaults::emailReminder1Subject(), + 'body' => EmailTemplateDefaults::emailReminder1Template(), + ], + 'reminder2' => [ + 'subject' => EmailTemplateDefaults::emailReminder2Subject(), + 'body' => EmailTemplateDefaults::emailReminder2Template(), + ], + 'reminder3' => [ + 'subject' => EmailTemplateDefaults::emailReminder3Subject(), + 'body' => EmailTemplateDefaults::emailReminder3Template(), + ], + 'reminder_endless' => [ + 'subject' => EmailTemplateDefaults::emailReminderEndlessSubject(), + 'body' => EmailTemplateDefaults::emailReminderEndlessTemplate(), + ], + 'statement' => [ + 'subject' => EmailTemplateDefaults::emailStatementSubject(), + 'body' => EmailTemplateDefaults::emailStatementTemplate(), + ], + ]; + + Cache::forever($name, $data); + } }