mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Refactor for quickbooks
This commit is contained in:
parent
f8e06d7ca3
commit
c231c9186f
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Requests\Quickbooks\AuthorizedQuickbooksRequest;
|
||||
use \Closure;
|
||||
use App\Utils\Ninja;
|
||||
use App\Models\Company;
|
||||
@ -18,98 +19,31 @@ use App\Services\Import\Quickbooks\QuickbooksService;
|
||||
|
||||
class ImportQuickbooksController extends BaseController
|
||||
{
|
||||
// protected QuickbooksService $service;
|
||||
|
||||
private $import_entities = [
|
||||
private array $import_entities = [
|
||||
'client' => 'Customer',
|
||||
'invoice' => 'Invoice',
|
||||
'product' => 'Item',
|
||||
'payment' => 'Payment'
|
||||
];
|
||||
|
||||
// public function __construct(QuickbooksService $service) {
|
||||
// parent::__construct();
|
||||
|
||||
// $this->service = $service;
|
||||
// $this->middleware(
|
||||
// function (Request $request, Closure $next) {
|
||||
|
||||
// // Check for the required query parameters
|
||||
// if (!$request->has(['code', 'state', 'realmId'])) {
|
||||
// return abort(400,'Unauthorized');
|
||||
// }
|
||||
|
||||
// $rules = [
|
||||
// 'state' => [
|
||||
// 'required',
|
||||
// 'valid' => function ($attribute, $value, $fail) {
|
||||
// if (!Cache::has($value)) {
|
||||
// $fail('The state is invalid.');
|
||||
// }
|
||||
// },
|
||||
// ]
|
||||
// ];
|
||||
// // Custom error messages
|
||||
// $messages = [
|
||||
// 'state.required' => 'The state is required.',
|
||||
// 'state.valid' => 'state token not valid'
|
||||
// ];
|
||||
// // Perform the validation
|
||||
// $validator = Validator::make($request->all(), $rules, $messages);
|
||||
// if ($validator->fails()) {
|
||||
// // If validation fails, redirect back with errors and input
|
||||
// return redirect('/')
|
||||
// ->withErrors($validator)
|
||||
// ->withInput();
|
||||
// }
|
||||
|
||||
// $token = Cache::pull($request->state);
|
||||
// $request->merge(['company' => Cache::get($token) ]);
|
||||
|
||||
// return $next($request);
|
||||
// }
|
||||
// )->only('onAuthorized');
|
||||
// $this->middleware(
|
||||
// function ( Request $request, Closure $next) {
|
||||
// $rules = [
|
||||
// 'token' => [
|
||||
// 'required',
|
||||
// 'valid' => function ($attribute, $value, $fail) {
|
||||
// if (!Cache::has($value) || (!Company::where('company_key', (Cache::get($value))['company_key'])->exists() )) {
|
||||
// $fail('The company is invalid.');
|
||||
// }
|
||||
// },
|
||||
// ]
|
||||
// ];
|
||||
// // Custom error messages
|
||||
// $messages = [
|
||||
// 'token.required' => 'The token is required.',
|
||||
// 'token.valid' => 'Token note valid!'
|
||||
// ];
|
||||
// // Perform the validation
|
||||
// $validator = Validator::make(['token' => $request->token ], $rules, $messages);
|
||||
// if ($validator->fails()) {
|
||||
// return redirect()
|
||||
// ->back()
|
||||
// ->withErrors($validator)
|
||||
// ->withInput();
|
||||
// }
|
||||
|
||||
// //If validation passes, proceed to the next middleware/controller
|
||||
// return $next($request);
|
||||
// }
|
||||
// )->only('authorizeQuickbooks');
|
||||
// }
|
||||
|
||||
public function onAuthorized(Request $request)
|
||||
public function onAuthorized(AuthorizedQuickbooksRequest $request)
|
||||
{
|
||||
$realm = $request->query('realmId');
|
||||
$company_key = $request->input('company.company_key');
|
||||
$company_id = $request->input('company.id');
|
||||
$tokens = ($auth_service = $this->service->getOAuth())->accessToken($request->query('code'), $realm);
|
||||
$auth_service->saveTokens($company_key, ['realm' => $realm] + $tokens);
|
||||
|
||||
return response(200);
|
||||
MultiDB::findAndSetDbByCompanyKey($request->getTokenContent()['company_key']);
|
||||
$company = $request->getCompany();
|
||||
$qb = new QuickbooksService($company);
|
||||
|
||||
$realm = $request->query('realmId');
|
||||
$access_token_object = $qb->getAuth()->accessToken($request->query('code'), $realm);
|
||||
nlog($access_token_object);
|
||||
$company->quickbooks = $access_token_object;
|
||||
$company->save();
|
||||
// $company_key = $request->input('company.company_key');
|
||||
// $company_id = $request->input('company.id');
|
||||
// $auth_service->saveTokens($company_key, ['realm' => $realm] + $tokens);
|
||||
|
||||
return response()->json(['message' => 'Success'], 200);
|
||||
}
|
||||
|
||||
/**
|
||||
|
69
app/Http/Requests/Quickbooks/AuthorizedQuickbooksRequest.php
Normal file
69
app/Http/Requests/Quickbooks/AuthorizedQuickbooksRequest.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Http\Requests\Quickbooks;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AuthorizedQuickbooksRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return is_array($this->getTokenContent());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'code' => 'required|string',
|
||||
'state' => 'required|string',
|
||||
'realmId' => 'required|string',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve one-time token instance.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTokenContent()
|
||||
{
|
||||
$token = Cache::get($this->state);
|
||||
|
||||
$data = Cache::get($token);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getContact()
|
||||
{
|
||||
return User::findOrFail($this->getTokenContent()['user_id']);
|
||||
}
|
||||
|
||||
public function getCompany()
|
||||
{
|
||||
return Company::where('company_key', $this->getTokenContent()['company_key'])->firstOrFail();
|
||||
}
|
||||
}
|
@ -28,7 +28,7 @@ final class SdkWrapper implements QuickbooksInterface
|
||||
return ($this->sdk->getOAuth2LoginHelper())->getState();
|
||||
}
|
||||
|
||||
public function getAccessToken() : array
|
||||
public function getAccessToken()
|
||||
{
|
||||
return $this->getTokens();
|
||||
}
|
||||
@ -44,15 +44,17 @@ final class SdkWrapper implements QuickbooksInterface
|
||||
return $this->getTokens();
|
||||
}
|
||||
|
||||
private function getTokens() : array {
|
||||
private function getTokens()
|
||||
{
|
||||
|
||||
$token =($this->sdk->getOAuth2LoginHelper())->getAccessToken();
|
||||
$access_token = $token->getAccessToken();
|
||||
$refresh_token = $token->getRefreshToken();
|
||||
$access_token_expires = $token->getAccessTokenExpiresAt();
|
||||
$refresh_token_expires = $token->getRefreshTokenExpiresAt();
|
||||
return $token
|
||||
// $access_token = $token->getAccessToken();
|
||||
// $refresh_token = $token->getRefreshToken();
|
||||
// $access_token_expires = $token->getAccessTokenExpiresAt();
|
||||
// $refresh_token_expires = $token->getRefreshTokenExpiresAt();
|
||||
|
||||
return compact('access_token', 'refresh_token','access_token_expires', 'refresh_token_expires');
|
||||
// return compact('access_token', 'refresh_token','access_token_expires', 'refresh_token_expires');
|
||||
}
|
||||
|
||||
public function refreshToken(): array
|
||||
|
Loading…
x
Reference in New Issue
Block a user