Merge pull request #5201 from turbo124/v5-develop

Working on Google OAuth
This commit is contained in:
David Bomba 2021-03-21 20:56:27 +11:00 committed by GitHub
commit e565355e90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 82 additions and 11 deletions

View File

@ -101,6 +101,7 @@ class CreateSingleAccount extends Command
$company = Company::factory()->create([ $company = Company::factory()->create([
'account_id' => $account->id, 'account_id' => $account->id,
'slack_webhook_url' => config('ninja.notification.slack'), 'slack_webhook_url' => config('ninja.notification.slack'),
'default_password_timeout' => 30*60000,
]); ]);
$account->default_company_id = $company->id; $account->default_company_id = $company->id;

View File

@ -35,12 +35,18 @@ class WebhookConfiguration
*/ */
public $post_purchase_body = ''; public $post_purchase_body = '';
/**
* @var string
*/
public $post_purchase_rest_method = 'POST';
/** /**
* @var array * @var array
*/ */
public static $casts = [ public static $casts = [
'return_url' => 'string', 'return_url' => 'string',
'post_purchase_url' => 'string', 'post_purchase_url' => 'string',
'post_purchase_rest_method' => 'string',
'post_purchase_headers' => 'array', 'post_purchase_headers' => 'array',
'post_purchase_body' => 'object', 'post_purchase_body' => 'object',
]; ];

View File

@ -104,7 +104,6 @@ class ConnectedAccountController extends BaseController
} }
$connected_account = [ $connected_account = [
'password' => '',
'email' => $google->harvestEmail($user), 'email' => $google->harvestEmail($user),
'oauth_user_id' => $google->harvestSubField($user), 'oauth_user_id' => $google->harvestSubField($user),
'oauth_user_token' => $token, 'oauth_user_token' => $token,
@ -116,12 +115,9 @@ class ConnectedAccountController extends BaseController
auth()->user()->update($connected_account); auth()->user()->update($connected_account);
auth()->user()->email_verified_at = now(); auth()->user()->email_verified_at = now();
auth()->user()->save(); auth()->user()->save();
//$ct = CompanyUser::whereUserId(auth()->user()->id);
//return $this->listResponse($ct);
return $this->itemResponse(auth()->user()); return $this->itemResponse(auth()->user());
// return $this->listResponse(auth()->user());
} }
return response() return response()

View File

@ -13,17 +13,25 @@ namespace App\Services\BillingSubscription;
use App\DataMapper\InvoiceItem; use App\DataMapper\InvoiceItem;
use App\Factory\InvoiceFactory; use App\Factory\InvoiceFactory;
use App\Jobs\Util\SystemLogger;
use App\Models\BillingSubscription; use App\Models\BillingSubscription;
use App\Models\ClientSubscription; use App\Models\ClientSubscription;
use App\Models\PaymentHash; use App\Models\PaymentHash;
use App\Models\Product; use App\Models\Product;
use App\Models\SystemLog;
use App\Repositories\InvoiceRepository; use App\Repositories\InvoiceRepository;
use App\Utils\Traits\MakesHash;
use GuzzleHttp\RequestOptions;
class BillingSubscriptionService class BillingSubscriptionService
{ {
use MakesHash;
/** @var BillingSubscription */ /** @var BillingSubscription */
private $billing_subscription; private $billing_subscription;
private $client_subscription;
public function __construct(BillingSubscription $billing_subscription) public function __construct(BillingSubscription $billing_subscription)
{ {
$this->billing_subscription = $billing_subscription; $this->billing_subscription = $billing_subscription;
@ -74,6 +82,10 @@ class BillingSubscriptionService
} }
/**
* Creates the required line items for the invoice
* for the billing subscription.
*/
private function createLineItems($data): array private function createLineItems($data): array
{ {
$line_items = []; $line_items = [];
@ -108,11 +120,14 @@ class BillingSubscriptionService
return $line_items; return $line_items;
} }
/**
* If a coupon is entered (and is valid)
* then we apply the coupon discount with a line item.
*/
private function createPromoLine($data) private function createPromoLine($data)
{ {
$product = $this->billing_subscription->product; $product = $this->billing_subscription->product;
$discounted_amount = 0; $discounted_amount = 0;
$discount = 0; $discount = 0;
$amount = $data['quantity'] * $product->cost; $amount = $data['quantity'] * $product->cost;
@ -142,27 +157,79 @@ class BillingSubscriptionService
} }
private function convertInvoiceToRecurring() private function convertInvoiceToRecurring($payment_hash)
{ {
//The first invoice is a plain invoice - the second is fired on the recurring schedule. //The first invoice is a plain invoice - the second is fired on the recurring schedule.
} }
public function createClientSubscription($payment_hash, $recurring_invoice_id = null) public function createClientSubscription($payment_hash)
{ {
//create the client sub record //create the client subscription record
//are we in a trial phase?
//has money been paid?
//is this a recurring or one off subscription.
//?trial enabled?
$cs = new ClientSubscription(); $cs = new ClientSubscription();
$cs->subscription_id = $this->billing_subscription->id; $cs->subscription_id = $this->billing_subscription->id;
$cs->company_id = $this->billing_subscription->company_id; $cs->company_id = $this->billing_subscription->company_id;
// client_id //if is_trial
//$cs->trial_started = time();
//$cs->trial_duration = time() + duration period in seconds
//trials will not have any monies paid.
//if a payment has been made
//$cs->invoice_id = xx
//if is_recurring
//create recurring invoice from invoice
$recurring_invoice = $this->convertInvoiceToRecurring($payment_hash);
$recurring_invoice->frequency_id = $this->billing_subscription->frequency_id;
$recurring_invoice->next_send_date = $recurring_invoice->nextDateByFrequency(now()->format('Y-m-d'));
//$cs->recurring_invoice_id = $recurring_invoice->id;
//?set the recurring invoice as active - set the date here also based on the frequency?
//$cs->quantity = xx
// client_id
//$cs->client_id = xx
$cs->save(); $cs->save();
$this->client_subscription = $cs;
} }
public function triggerWebhook($payment_hash) public function triggerWebhook($payment_hash)
{ {
//hit the webhook to after a successful onboarding //hit the webhook to after a successful onboarding
//$client = xxxxxxx
//todo webhook
$body = [
'billing_subscription' => $this->billing_subscription,
'client_subscription' => $this->client_subscription,
// 'client' => $client->toArray(),
];
$client = new \GuzzleHttp\Client(['headers' => $this->billing_subscription->webhook_configuration->post_purchase_headers]);
$response = $client->{$this->billing_subscription->webhook_configuration->post_purchase_rest_method}($this->billing_subscription->post_purchase_url,[
RequestOptions::JSON => ['body' => $body]
]);
SystemLogger::dispatch(
$body,
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_RESPONSE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
//$client,
);
} }
public function fireNotifications() public function fireNotifications()

View File

@ -37,6 +37,7 @@ class CompanyFactory extends Factory
'db' => config('database.default'), 'db' => config('database.default'),
'settings' => CompanySettings::defaults(), 'settings' => CompanySettings::defaults(),
'is_large' => false, 'is_large' => false,
'default_password_timeout' => 30*60000,
'enabled_modules' => config('ninja.enabled_modules'), 'enabled_modules' => config('ninja.enabled_modules'),
'custom_fields' => (object) [ 'custom_fields' => (object) [
//'invoice1' => 'Custom Date|date', //'invoice1' => 'Custom Date|date',