mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
commit
12421cef0c
@ -12,6 +12,7 @@
|
|||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
use App;
|
use App;
|
||||||
|
use App\DataMapper\ClientSettings;
|
||||||
use App\Factory\ClientContactFactory;
|
use App\Factory\ClientContactFactory;
|
||||||
use App\Factory\VendorContactFactory;
|
use App\Factory\VendorContactFactory;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
@ -126,7 +127,7 @@ class CheckData extends Command
|
|||||||
|
|
||||||
$errorEmail = config('ninja.error_email');
|
$errorEmail = config('ninja.error_email');
|
||||||
|
|
||||||
if ($errorEmail) {
|
if (strlen($errorEmail) > 1) {
|
||||||
Mail::raw($this->log, function ($message) use ($errorEmail, $database) {
|
Mail::raw($this->log, function ($message) use ($errorEmail, $database) {
|
||||||
$message->to($errorEmail)
|
$message->to($errorEmail)
|
||||||
->from(config('mail.from.address'), config('mail.from.name'))
|
->from(config('mail.from.address'), config('mail.from.name'))
|
||||||
@ -893,6 +894,45 @@ class CheckData extends Command
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function checkClientSettings()
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($this->option('fix') == 'true') {
|
||||||
|
|
||||||
|
Client::query()->whereNull('settings->currency_id')->cursor()->each(function ($client){
|
||||||
|
|
||||||
|
if(is_array($client->settings) && count($client->settings) == 0)
|
||||||
|
{
|
||||||
|
$settings = ClientSettings::defaults();
|
||||||
|
$settings->currency_id = $client->company->settings->currency_id;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$settings = $client->settings;
|
||||||
|
$settings->currency_id = $client->company->settings->currency_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$client->settings = $settings;
|
||||||
|
$client->save();
|
||||||
|
|
||||||
|
$this->logMessage("Fixing currency for # {$client->id}");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Client::query()->whereNull('country_id')->cursor()->each(function ($client){
|
||||||
|
|
||||||
|
$client->country_id = $client->company->settings->country_id;
|
||||||
|
$client->save();
|
||||||
|
|
||||||
|
$this->logMessage("Fixing country for # {$client->id}");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function checkBalanceVsPaidStatus()
|
public function checkBalanceVsPaidStatus()
|
||||||
{
|
{
|
||||||
$this->wrong_paid_status = 0;
|
$this->wrong_paid_status = 0;
|
||||||
|
@ -42,6 +42,15 @@ class ProductFilters extends QueryFilters
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function product_key(string $filter = '') : Builder
|
||||||
|
{
|
||||||
|
if (strlen($filter) == 0) {
|
||||||
|
return $this->builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->builder->where('product_key', $filter);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters the list based on the status
|
* Filters the list based on the status
|
||||||
* archived, active, deleted.
|
* archived, active, deleted.
|
||||||
|
@ -83,9 +83,6 @@ class InvitationController extends Controller
|
|||||||
$invitation = $entity_obj::withTrashed()
|
$invitation = $entity_obj::withTrashed()
|
||||||
->with($entity)
|
->with($entity)
|
||||||
->where('key', $invitation_key)
|
->where('key', $invitation_key)
|
||||||
// ->whereHas($entity, function ($query) {
|
|
||||||
// $query->where('is_deleted',0);
|
|
||||||
// })
|
|
||||||
->with('contact.client')
|
->with('contact.client')
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
@ -520,7 +520,7 @@ class CompanyController extends BaseController
|
|||||||
$nmo->company = $other_company;
|
$nmo->company = $other_company;
|
||||||
$nmo->settings = $other_company->settings;
|
$nmo->settings = $other_company->settings;
|
||||||
$nmo->to_user = auth()->user();
|
$nmo->to_user = auth()->user();
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
$company->delete();
|
$company->delete();
|
||||||
|
|
||||||
|
@ -117,98 +117,6 @@ class LoginController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
public function handleProviderCallbackAndCreate(string $provider)
|
|
||||||
{
|
|
||||||
$socialite_user = Socialite::driver($provider)
|
|
||||||
->stateless()
|
|
||||||
->user();
|
|
||||||
|
|
||||||
if($user = OAuth::handleAuth($socialite_user, $provider))
|
|
||||||
{
|
|
||||||
Auth::login($user, true);
|
|
||||||
|
|
||||||
return redirect($this->redirectTo);
|
|
||||||
}
|
|
||||||
else if(MultiDB::checkUserEmailExists($socialite_user->getEmail()))
|
|
||||||
{
|
|
||||||
Session::flash('error', 'User exists in system, but not with this authentication method'); //todo add translations
|
|
||||||
|
|
||||||
return view('auth.login');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//todo
|
|
||||||
$name = OAuth::splitName($socialite_user->getName());
|
|
||||||
|
|
||||||
$new_account = [
|
|
||||||
'first_name' => $name[0],
|
|
||||||
'last_name' => $name[1],
|
|
||||||
'password' => '',
|
|
||||||
'email' => $socialite_user->getEmail(),
|
|
||||||
'oauth_user_id' => $socialite_user->getId(),
|
|
||||||
'oauth_provider_id' => $provider
|
|
||||||
];
|
|
||||||
|
|
||||||
$account = CreateAccount::dispatchNow($new_account);
|
|
||||||
|
|
||||||
Auth::login($account->default_company->owner(), true);
|
|
||||||
|
|
||||||
$cookie = cookie('db', $account->default_company->db);
|
|
||||||
|
|
||||||
return redirect($this->redirectTo)->withCookie($cookie);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We use this function when OAUTHING via the web interface.
|
|
||||||
*
|
|
||||||
* @return redirect
|
|
||||||
|
|
||||||
public function handleProviderCallback(string $provider)
|
|
||||||
{
|
|
||||||
$socialite_user = Socialite::driver($provider)
|
|
||||||
->stateless()
|
|
||||||
->user();
|
|
||||||
|
|
||||||
if($user = OAuth::handleAuth($socialite_user, $provider))
|
|
||||||
{
|
|
||||||
Auth::login($user, true);
|
|
||||||
|
|
||||||
return redirect($this->redirectTo);
|
|
||||||
}
|
|
||||||
else if(MultiDB::checkUserEmailExists($socialite_user->getEmail()))
|
|
||||||
{
|
|
||||||
Session::flash('error', 'User exists in system, but not with this authentication method'); //todo add translations
|
|
||||||
|
|
||||||
return view('auth.login');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//todo
|
|
||||||
$name = OAuth::splitName($socialite_user->getName());
|
|
||||||
|
|
||||||
$new_account = [
|
|
||||||
'first_name' => $name[0],
|
|
||||||
'last_name' => $name[1],
|
|
||||||
'password' => '',
|
|
||||||
'email' => $socialite_user->getEmail(),
|
|
||||||
'oauth_user_id' => $socialite_user->getId(),
|
|
||||||
'oauth_provider_id' => $provider
|
|
||||||
];
|
|
||||||
|
|
||||||
$account = CreateAccount::dispatchNow($new_account);
|
|
||||||
|
|
||||||
Auth::login($account->default_company->owner(), true);
|
|
||||||
|
|
||||||
$cookie = cookie('db', $account->default_company->db);
|
|
||||||
|
|
||||||
return redirect($this->redirectTo)->withCookie($cookie);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A client side authentication has taken place.
|
* A client side authentication has taken place.
|
||||||
* We now digest the token and confirm authentication with
|
* We now digest the token and confirm authentication with
|
||||||
|
@ -507,6 +507,9 @@ class CreditController extends BaseController
|
|||||||
|
|
||||||
$ids = request()->input('ids');
|
$ids = request()->input('ids');
|
||||||
|
|
||||||
|
if(Ninja::isHosted() && (stripos($action, 'email') !== false) && !auth()->user()->company()->account->account_sms_verified)
|
||||||
|
return response(['message' => 'Please verify your account to send emails.'], 400);
|
||||||
|
|
||||||
$credits = Credit::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
$credits = Credit::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
||||||
|
|
||||||
if (! $credits) {
|
if (! $credits) {
|
||||||
|
@ -564,7 +564,9 @@ class DesignController extends BaseController
|
|||||||
case 'credit':
|
case 'credit':
|
||||||
$company->credits()->update(['design_id' => $design_id]);
|
$company->credits()->update(['design_id' => $design_id]);
|
||||||
break;
|
break;
|
||||||
|
case 'purchase_order':
|
||||||
|
$company->purchase_orders()->update(['design_id' => $design_id]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// code...
|
// code...
|
||||||
break;
|
break;
|
||||||
|
@ -128,6 +128,9 @@ class EmailController extends BaseController
|
|||||||
'body' => $body,
|
'body' => $body,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if(Ninja::isHosted() && !$entity_obj->company->account->account_sms_verified)
|
||||||
|
return response(['message' => 'Please verify your account to send emails.'], 400);
|
||||||
|
|
||||||
if($entity == 'purchaseOrder' || $template == 'purchase_order'){
|
if($entity == 'purchaseOrder' || $template == 'purchase_order'){
|
||||||
return $this->sendPurchaseOrder($entity_obj, $data);
|
return $this->sendPurchaseOrder($entity_obj, $data);
|
||||||
}
|
}
|
||||||
|
@ -551,6 +551,9 @@ class InvoiceController extends BaseController
|
|||||||
|
|
||||||
$ids = request()->input('ids');
|
$ids = request()->input('ids');
|
||||||
|
|
||||||
|
if(Ninja::isHosted() && (stripos($action, 'email') !== false) && !auth()->user()->company()->account->account_sms_verified)
|
||||||
|
return response(['message' => 'Please verify your account to send emails.'], 400);
|
||||||
|
|
||||||
$invoices = Invoice::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
$invoices = Invoice::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
||||||
|
|
||||||
if (! $invoices) {
|
if (! $invoices) {
|
||||||
|
@ -311,7 +311,7 @@ class MigrationController extends BaseController
|
|||||||
$nmo->company = $user->account->companies()->first();
|
$nmo->company = $user->account->companies()->first();
|
||||||
$nmo->settings = $user->account->companies()->first()->settings;
|
$nmo->settings = $user->account->companies()->first()->settings;
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} elseif ($existing_company && $company_count > 10) {
|
} elseif ($existing_company && $company_count > 10) {
|
||||||
@ -320,7 +320,7 @@ class MigrationController extends BaseController
|
|||||||
$nmo->company = $user->account->companies()->first();
|
$nmo->company = $user->account->companies()->first();
|
||||||
$nmo->settings = $user->account->companies()->first()->settings;
|
$nmo->settings = $user->account->companies()->first()->settings;
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -340,7 +340,7 @@ class MigrationController extends BaseController
|
|||||||
$nmo->settings = $user->account->companies()->first();
|
$nmo->settings = $user->account->companies()->first();
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'_id' => Str::uuid(),
|
'_id' => Str::uuid(),
|
||||||
|
@ -489,6 +489,9 @@ class PurchaseOrderController extends BaseController
|
|||||||
|
|
||||||
$ids = request()->input('ids');
|
$ids = request()->input('ids');
|
||||||
|
|
||||||
|
if(Ninja::isHosted() && (stripos($action, 'email') !== false) && !auth()->user()->company()->account->account_sms_verified)
|
||||||
|
return response(['message' => 'Please verify your account to send emails.'], 400);
|
||||||
|
|
||||||
$purchase_orders = PurchaseOrder::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
$purchase_orders = PurchaseOrder::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
||||||
|
|
||||||
if (! $purchase_orders) {
|
if (! $purchase_orders) {
|
||||||
|
@ -518,6 +518,9 @@ class QuoteController extends BaseController
|
|||||||
|
|
||||||
$ids = request()->input('ids');
|
$ids = request()->input('ids');
|
||||||
|
|
||||||
|
if(Ninja::isHosted() && (stripos($action, 'email') !== false) && !auth()->user()->company()->account->account_sms_verified)
|
||||||
|
return response(['message' => 'Please verify your account to send emails.'], 400);
|
||||||
|
|
||||||
$quotes = Quote::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
$quotes = Quote::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get();
|
||||||
|
|
||||||
if (! $quotes) {
|
if (! $quotes) {
|
||||||
@ -691,7 +694,6 @@ class QuoteController extends BaseController
|
|||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file), ['Content-Type' => 'application/pdf']);
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
//return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 'restore':
|
case 'restore':
|
||||||
|
106
app/Http/Controllers/TwilioController.php
Normal file
106
app/Http/Controllers/TwilioController.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\Twilio\ConfirmSmsRequest;
|
||||||
|
use App\Http\Requests\Twilio\GenerateSmsRequest;
|
||||||
|
use App\Libraries\MultiDB;
|
||||||
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Twilio\Rest\Client;
|
||||||
|
|
||||||
|
class TwilioController extends BaseController
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function generate(GenerateSmsRequest $request)
|
||||||
|
{
|
||||||
|
$account = auth()->user()->company()->account;
|
||||||
|
|
||||||
|
if(MultiDB::hasPhoneNumber($request->phone))
|
||||||
|
return response()->json(['message' => 'This phone number has already been verified with another account'], 400);
|
||||||
|
|
||||||
|
$sid = config('ninja.twilio_account_sid');
|
||||||
|
$token = config('ninja.twilio_auth_token');
|
||||||
|
|
||||||
|
$twilio = new Client($sid, $token);
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
$verification = $twilio->verify
|
||||||
|
->v2
|
||||||
|
->services(config('ninja.twilio_verify_sid'))
|
||||||
|
->verifications
|
||||||
|
->create($request->phone, "sms");
|
||||||
|
}
|
||||||
|
catch(\Exception $e) {
|
||||||
|
|
||||||
|
return response()->json(['message' => 'Invalid phone number please use + country code + number ie. +15552343334'], 400);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$account->account_sms_verification_code = $verification->sid;
|
||||||
|
$account->account_sms_verification_number = $request->phone;
|
||||||
|
$account->save();
|
||||||
|
|
||||||
|
return response()->json(['message' => 'Code sent.'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function confirm(ConfirmSmsRequest $request)
|
||||||
|
{
|
||||||
|
|
||||||
|
$account = auth()->user()->company()->account;
|
||||||
|
|
||||||
|
$sid = config('ninja.twilio_account_sid');
|
||||||
|
$token = config('ninja.twilio_auth_token');
|
||||||
|
|
||||||
|
$twilio = new Client($sid, $token);
|
||||||
|
|
||||||
|
$verification_check = $twilio->verify
|
||||||
|
->v2
|
||||||
|
->services(config('ninja.twilio_verify_sid'))
|
||||||
|
->verificationChecks
|
||||||
|
->create([
|
||||||
|
"to" => $account->account_sms_verification_number,
|
||||||
|
"code" => $request->code
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
if($verification_check->status == 'approved'){
|
||||||
|
|
||||||
|
$account->account_sms_verified = true;
|
||||||
|
$account->save();
|
||||||
|
|
||||||
|
return response()->json(['message' => 'SMS verified'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return response()->json(['message' => 'SMS not verified'], 400);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
121
app/Http/Controllers/VendorPortal/DocumentController.php
Normal file
121
app/Http/Controllers/VendorPortal/DocumentController.php
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\VendorPortal;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Requests\VendorPortal\Documents\ShowDocumentRequest;
|
||||||
|
use App\Http\Requests\Document\DownloadMultipleDocumentsRequest;
|
||||||
|
use App\Libraries\MultiDB;
|
||||||
|
use App\Models\Document;
|
||||||
|
use App\Utils\TempFile;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
use Illuminate\Contracts\View\Factory;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Illuminate\View\View;
|
||||||
|
|
||||||
|
class DocumentController extends Controller
|
||||||
|
{
|
||||||
|
use MakesHash;
|
||||||
|
|
||||||
|
public const MODULE_PURCHASE_ORDERS = 16384;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Factory|View
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
return render('documents.index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ShowDocumentRequest $request
|
||||||
|
* @param Document $document
|
||||||
|
* @return Factory|View
|
||||||
|
*/
|
||||||
|
public function show(ShowDocumentRequest $request, Document $document)
|
||||||
|
{
|
||||||
|
return render('documents.vendor_show', [
|
||||||
|
'document' => $document,
|
||||||
|
'settings' => auth()->guard('vendor')->user()->company->settings,
|
||||||
|
'sidebar' => $this->sidebarMenu(),
|
||||||
|
'company' => auth()->guard('vendor')->user()->company,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function sidebarMenu() :array
|
||||||
|
{
|
||||||
|
$enabled_modules = auth()->guard('vendor')->user()->company->enabled_modules;
|
||||||
|
$data = [];
|
||||||
|
|
||||||
|
// TODO: Enable dashboard once it's completed.
|
||||||
|
// $this->settings->enable_client_portal_dashboard
|
||||||
|
// $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity'];
|
||||||
|
|
||||||
|
if (self::MODULE_PURCHASE_ORDERS & $enabled_modules) {
|
||||||
|
$data[] = ['title' => ctrans('texts.purchase_orders'), 'url' => 'vendor.purchase_orders.index', 'icon' => 'file-text'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// $data[] = ['title' => ctrans('texts.documents'), 'url' => 'client.documents.index', 'icon' => 'download'];
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function download(ShowDocumentRequest $request, Document $document)
|
||||||
|
{
|
||||||
|
return Storage::disk($document->disk)->download($document->url, $document->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function publicDownload(string $document_hash)
|
||||||
|
{
|
||||||
|
MultiDB::documentFindAndSetDb($document_hash);
|
||||||
|
|
||||||
|
$document = Document::where('hash', $document_hash)->firstOrFail();
|
||||||
|
|
||||||
|
$headers = [];
|
||||||
|
|
||||||
|
if (request()->input('inline') == 'true') {
|
||||||
|
$headers = array_merge($headers, ['Content-Disposition' => 'inline']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Storage::disk($document->disk)->download($document->url, $document->name, $headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadMultiple(DownloadMultipleDocumentsRequest $request)
|
||||||
|
{
|
||||||
|
$documents = Document::whereIn('id', $this->transformKeys($request->file_hash))
|
||||||
|
->where('company_id', auth()->guard('vendor')->user()->company_id)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$zipFile = new \PhpZip\ZipFile();
|
||||||
|
|
||||||
|
try {
|
||||||
|
foreach ($documents as $document) {
|
||||||
|
$zipFile->addFile(TempFile::path($document->filePath()), $document->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filename = now().'-documents.zip';
|
||||||
|
$filepath = sys_get_temp_dir().'/'.$filename;
|
||||||
|
|
||||||
|
$zipFile->saveAsFile($filepath) // save the archive to a file
|
||||||
|
->close(); // close archive
|
||||||
|
|
||||||
|
return response()->download($filepath, $filename)->deleteFileAfterSend(true);
|
||||||
|
} catch (\PhpZip\Exception\ZipException $e) {
|
||||||
|
// handle exception
|
||||||
|
} finally {
|
||||||
|
$zipFile->close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -52,6 +52,8 @@ class DocumentsTable extends Component
|
|||||||
|
|
||||||
public function render()
|
public function render()
|
||||||
{
|
{
|
||||||
|
$this->updateResources(request()->tab ?: $this->tab);
|
||||||
|
|
||||||
return render('components.livewire.documents-table', [
|
return render('components.livewire.documents-table', [
|
||||||
'documents' => $this->query
|
'documents' => $this->query
|
||||||
->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc')
|
->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc')
|
||||||
|
@ -50,8 +50,9 @@ class QueryLogging
|
|||||||
$timeEnd = microtime(true);
|
$timeEnd = microtime(true);
|
||||||
$time = $timeEnd - $timeStart;
|
$time = $timeEnd - $timeStart;
|
||||||
|
|
||||||
// info("Query count = {$count}");
|
nlog("Query count = {$count}");
|
||||||
|
nlog($queries);
|
||||||
|
|
||||||
if ($count > 175) {
|
if ($count > 175) {
|
||||||
nlog("Query count = {$count}");
|
nlog("Query count = {$count}");
|
||||||
nlog($queries);
|
nlog($queries);
|
||||||
|
38
app/Http/Requests/Twilio/ConfirmSmsRequest.php
Normal file
38
app/Http/Requests/Twilio/ConfirmSmsRequest.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Twilio;
|
||||||
|
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
|
||||||
|
|
||||||
|
class ConfirmSmsRequest extends Request
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize() : bool
|
||||||
|
{
|
||||||
|
return auth()->user()->isAdmin();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
|
||||||
|
return [
|
||||||
|
'code' => 'required',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
39
app/Http/Requests/Twilio/GenerateSmsRequest.php
Normal file
39
app/Http/Requests/Twilio/GenerateSmsRequest.php
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Twilio;
|
||||||
|
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
|
||||||
|
|
||||||
|
class GenerateSmsRequest extends Request
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize() : bool
|
||||||
|
{
|
||||||
|
return auth()->user()->isAdmin();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
|
||||||
|
return [
|
||||||
|
'phone' => 'required|regex:^\+[1-9]\d{1,14}$^',
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Requests\VendorPortal\Documents;
|
||||||
|
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class ShowDocumentRequest extends FormRequest
|
||||||
|
{
|
||||||
|
use MakesHash;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return auth()->guard('vendor')->user()->client_id == $this->document->documentable_id
|
||||||
|
|| $this->document->company_id == auth()->guard('vendor')->user()->company_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -23,6 +23,7 @@ class BlackListRule implements Rule
|
|||||||
'candassociates.com',
|
'candassociates.com',
|
||||||
'vusra.com',
|
'vusra.com',
|
||||||
'fourthgenet.com',
|
'fourthgenet.com',
|
||||||
|
'arxxwalls.com'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -170,7 +170,21 @@ class BaseImport
|
|||||||
{
|
{
|
||||||
$count = 0;
|
$count = 0;
|
||||||
|
|
||||||
|
$is_free_hosted_client = $this->company->account->isFreeHostedClient();
|
||||||
|
$hosted_client_count = $this->company->account->hosted_client_count;
|
||||||
|
|
||||||
foreach ($data as $key => $record) {
|
foreach ($data as $key => $record) {
|
||||||
|
|
||||||
|
if($this->factory_name instanceof ClientFactory && $is_free_hosted_client && ($this->company->clients()->count() > $hosted_client_count))
|
||||||
|
{
|
||||||
|
$this->error_array[$entity_type][] = [
|
||||||
|
$entity_type => $record,
|
||||||
|
'error' => 'Client limit reached',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $count;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$entity = $this->transformer->transform($record);
|
$entity = $this->transformer->transform($record);
|
||||||
// $validator = $this->request_name::runFormRequest($entity);
|
// $validator = $this->request_name::runFormRequest($entity);
|
||||||
@ -581,7 +595,7 @@ class BaseImport
|
|||||||
$nmo->settings = $this->company->settings;
|
$nmo->settings = $this->company->settings;
|
||||||
$nmo->to_user = $this->company->owner();
|
$nmo->to_user = $this->company->owner();
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preTransform(array $data, $entity_type)
|
public function preTransform(array $data, $entity_type)
|
||||||
|
@ -126,7 +126,7 @@ class CreateAccount
|
|||||||
$nmo->settings = $sp035a66->settings;
|
$nmo->settings = $sp035a66->settings;
|
||||||
$nmo->to_user = $sp035a66->owner();
|
$nmo->to_user = $sp035a66->owner();
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
\Modules\Admin\Jobs\Account\NinjaUser::dispatch([], $sp035a66);
|
\Modules\Admin\Jobs\Account\NinjaUser::dispatch([], $sp035a66);
|
||||||
}
|
}
|
||||||
|
@ -237,8 +237,6 @@ class NinjaMailerJob implements ShouldQueue
|
|||||||
|
|
||||||
private function setGmailMailer()
|
private function setGmailMailer()
|
||||||
{
|
{
|
||||||
if(LaravelGmail::check())
|
|
||||||
LaravelGmail::logout();
|
|
||||||
|
|
||||||
$sending_user = $this->nmo->settings->gmail_sending_user_id;
|
$sending_user = $this->nmo->settings->gmail_sending_user_id;
|
||||||
|
|
||||||
@ -265,7 +263,7 @@ class NinjaMailerJob implements ShouldQueue
|
|||||||
|
|
||||||
$google->getClient()->setAccessToken(json_encode($user->oauth_user_token));
|
$google->getClient()->setAccessToken(json_encode($user->oauth_user_token));
|
||||||
|
|
||||||
sleep(rand(2,6));
|
sleep(rand(2,4));
|
||||||
}
|
}
|
||||||
catch(\Exception $e) {
|
catch(\Exception $e) {
|
||||||
$this->logMailError('Gmail Token Invalid', $this->company->clients()->first());
|
$this->logMailError('Gmail Token Invalid', $this->company->clients()->first());
|
||||||
@ -347,6 +345,10 @@ class NinjaMailerJob implements ShouldQueue
|
|||||||
if(class_exists(\Modules\Admin\Jobs\Account\EmailQuality::class))
|
if(class_exists(\Modules\Admin\Jobs\Account\EmailQuality::class))
|
||||||
return (new \Modules\Admin\Jobs\Account\EmailQuality($this->nmo, $this->company))->run();
|
return (new \Modules\Admin\Jobs\Account\EmailQuality($this->nmo, $this->company))->run();
|
||||||
|
|
||||||
|
/* On the hosted platform if the user has not verified their account we fail here */
|
||||||
|
if(Ninja::isHosted() && $this->company->account && !$this->company->account->account_sms_verified)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,6 +419,34 @@ class MultiDB
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $data
|
||||||
|
* @return User|null
|
||||||
|
*/
|
||||||
|
public static function hasPhoneNumber(string $phone) : bool
|
||||||
|
{
|
||||||
|
if (! config('ninja.db.multi_db_enabled'))
|
||||||
|
return Account::where('account_sms_verification_number', $phone)->where('account_sms_verified', true)->exists();
|
||||||
|
|
||||||
|
$current_db = config('database.default');
|
||||||
|
|
||||||
|
foreach (self::$dbs as $db) {
|
||||||
|
|
||||||
|
self::setDB($db);
|
||||||
|
if ($exists = Account::where('account_sms_verification_number', $phone)->where('account_sms_verified', true)->exists()) {
|
||||||
|
self::setDb($current_db);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
self::setDb($current_db);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static function randomSubdomainGenerator()
|
public static function randomSubdomainGenerator()
|
||||||
{
|
{
|
||||||
$current_db = config('database.default');
|
$current_db = config('database.default');
|
||||||
|
@ -45,7 +45,7 @@ class CreateAccountActivity implements ShouldQueue
|
|||||||
$nmo->settings = $event->company->settings;
|
$nmo->settings = $event->company->settings;
|
||||||
$nmo->to_user = $event->user;
|
$nmo->to_user = $event->user;
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ class SendVerificationNotification implements ShouldQueue
|
|||||||
$nmo->company = $event->company;
|
$nmo->company = $event->company;
|
||||||
$nmo->settings = $event->company->settings;
|
$nmo->settings = $event->company->settings;
|
||||||
$nmo->to_user = $event->creating_user;
|
$nmo->to_user = $event->creating_user;
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class UpdateUserLastLogin implements ShouldQueue
|
|||||||
$nmo->company = $user->account->companies->first();
|
$nmo->company = $user->account->companies->first();
|
||||||
$nmo->settings = $user->account->companies->first()->settings;
|
$nmo->settings = $user->account->companies->first()->settings;
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
$user->ip = $ip;
|
$user->ip = $ip;
|
||||||
$user->save();
|
$user->save();
|
||||||
|
@ -129,11 +129,11 @@ class CreditEmailEngine extends BaseEmailEngine
|
|||||||
|
|
||||||
// Storage::url
|
// Storage::url
|
||||||
foreach ($this->credit->documents as $document) {
|
foreach ($this->credit->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->credit->company->documents as $document) {
|
foreach ($this->credit->company->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,62 +137,13 @@ class PurchaseOrderEmailEngine extends BaseEmailEngine
|
|||||||
|
|
||||||
// Storage::url
|
// Storage::url
|
||||||
foreach ($this->purchase_order->documents as $document) {
|
foreach ($this->purchase_order->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->purchase_order->company->documents as $document) {
|
foreach ($this->purchase_order->company->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// $line_items = $this->purchase_order->line_items;
|
|
||||||
|
|
||||||
// foreach($line_items as $item)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// $expense_ids = [];
|
|
||||||
|
|
||||||
// if(property_exists($item, 'expense_id'))
|
|
||||||
// {
|
|
||||||
// $expense_ids[] = $item->expense_id;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if(count($expense_ids) > 0){
|
|
||||||
|
|
||||||
// $expenses = Expense::whereIn('id', $this->transformKeys($expense_ids))
|
|
||||||
// ->where('invoice_documents', 1)
|
|
||||||
// ->cursor()
|
|
||||||
// ->each(function ($expense){
|
|
||||||
|
|
||||||
// foreach($expense->documents as $document)
|
|
||||||
// {
|
|
||||||
// $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// $task_ids = [];
|
|
||||||
|
|
||||||
// if(property_exists($item, 'task_id'))
|
|
||||||
// {
|
|
||||||
// $task_ids[] = $item->task_id;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if(count($task_ids) > 0 && $this->purchase_order->company->purchase_order_task_documents){
|
|
||||||
|
|
||||||
// $tasks = Task::whereIn('id', $this->transformKeys($task_ids))
|
|
||||||
// ->cursor()
|
|
||||||
// ->each(function ($task){
|
|
||||||
|
|
||||||
// foreach($task->documents as $document)
|
|
||||||
// {
|
|
||||||
// $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
@ -128,11 +128,11 @@ class QuoteEmailEngine extends BaseEmailEngine
|
|||||||
|
|
||||||
// Storage::url
|
// Storage::url
|
||||||
foreach ($this->quote->documents as $document) {
|
foreach ($this->quote->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->quote->company->documents as $document) {
|
foreach ($this->quote->company->documents as $document) {
|
||||||
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]);
|
$this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace App\Mail;
|
namespace App\Mail;
|
||||||
|
|
||||||
|
use App\Jobs\Entity\CreateEntityPdf;
|
||||||
use App\Jobs\Invoice\CreateUbl;
|
use App\Jobs\Invoice\CreateUbl;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
@ -23,6 +24,7 @@ use App\Utils\TemplateEngine;
|
|||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class TemplateEmail extends Mailable
|
class TemplateEmail extends Mailable
|
||||||
{
|
{
|
||||||
@ -120,15 +122,36 @@ class TemplateEmail extends Mailable
|
|||||||
});
|
});
|
||||||
|
|
||||||
/*In the hosted platform we need to slow things down a little for Storage to catch up.*/
|
/*In the hosted platform we need to slow things down a little for Storage to catch up.*/
|
||||||
if (Ninja::isHosted()) {
|
|
||||||
sleep(1);
|
if(Ninja::isHosted()){
|
||||||
|
|
||||||
|
$path = false;
|
||||||
|
|
||||||
|
if($this->invitation->invoice)
|
||||||
|
$path = $this->client->invoice_filepath($this->invitation).$this->invitation->invoice->numberFormatter().'.pdf';
|
||||||
|
elseif($this->invitation->quote)
|
||||||
|
$path = $this->client->quote_filepath($this->invitation).$this->invitation->quote->numberFormatter().'.pdf';
|
||||||
|
elseif($this->invitation->credit)
|
||||||
|
$path = $this->client->credit_filepath($this->invitation).$this->invitation->credit->numberFormatter().'.pdf';
|
||||||
|
|
||||||
|
if($path && !Storage::disk(config('filesystems.default'))->exists($path)){
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
if(!Storage::disk(config('filesystems.default'))->exists($path)) {
|
||||||
|
CreateEntityPdf::dispatchSync($this->invitation);
|
||||||
|
sleep(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->build_email->getAttachments() as $file) {
|
foreach ($this->build_email->getAttachments() as $file) {
|
||||||
if (is_string($file)) {
|
if (is_string($file)) {
|
||||||
$this->attach($file);
|
$this->attach($file);
|
||||||
} elseif (is_array($file)) {
|
} elseif (is_array($file)) {
|
||||||
$this->attach($file['path'], ['as' => $file['name'], 'mime' => $file['mime']]);
|
$this->attach($file['path'], ['as' => $file['name'], 'mime' => null]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace App\Mail;
|
namespace App\Mail;
|
||||||
|
|
||||||
use App\Jobs\Invoice\CreateUbl;
|
use App\Jobs\Invoice\CreateUbl;
|
||||||
|
use App\Jobs\Vendor\CreatePurchaseOrderPdf;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@ -24,6 +25,7 @@ use App\Utils\VendorHtmlEngine;
|
|||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Mail\Mailable;
|
use Illuminate\Mail\Mailable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class VendorTemplateEmail extends Mailable
|
class VendorTemplateEmail extends Mailable
|
||||||
{
|
{
|
||||||
@ -114,15 +116,35 @@ class VendorTemplateEmail extends Mailable
|
|||||||
});
|
});
|
||||||
|
|
||||||
/*In the hosted platform we need to slow things down a little for Storage to catch up.*/
|
/*In the hosted platform we need to slow things down a little for Storage to catch up.*/
|
||||||
if (Ninja::isHosted()) {
|
// if (Ninja::isHosted()) {
|
||||||
sleep(1);
|
// sleep(1);
|
||||||
|
// }
|
||||||
|
|
||||||
|
if(Ninja::isHosted()){
|
||||||
|
|
||||||
|
$path = false;
|
||||||
|
|
||||||
|
if($this->invitation->purchase_order)
|
||||||
|
$path = $this->vendor->purchase_order_filepath($this->invitation).$this->invitation->purchase_order->numberFormatter().'.pdf';
|
||||||
|
|
||||||
|
if($path && !Storage::disk(config('filesystems.default'))->exists($path)){
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
if(!Storage::disk(config('filesystems.default'))->exists($path)) {
|
||||||
|
CreatePurchaseOrderPdf::dispatchSync($this->invitation);
|
||||||
|
sleep(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->build_email->getAttachments() as $file) {
|
foreach ($this->build_email->getAttachments() as $file) {
|
||||||
if (is_string($file)) {
|
if (is_string($file)) {
|
||||||
$this->attach($file);
|
$this->attach($file);
|
||||||
} elseif (is_array($file)) {
|
} elseif (is_array($file)) {
|
||||||
$this->attach($file['path'], ['as' => $file['name'], 'mime' => $file['mime']]);
|
$this->attach($file['path'], ['as' => $file['name'], 'mime' => null]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +427,7 @@ class Account extends BaseModel
|
|||||||
$nmo->company = $this->companies()->first();
|
$nmo->company = $this->companies()->first();
|
||||||
$nmo->settings = $this->companies()->first()->settings;
|
$nmo->settings = $this->companies()->first()->settings;
|
||||||
$nmo->to_user = $this->companies()->first()->owner();
|
$nmo->to_user = $this->companies()->first()->owner();
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
Cache::put("throttle_notified:{$this->key}", true, 60 * 24);
|
Cache::put("throttle_notified:{$this->key}", true, 60 * 24);
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ class Account extends BaseModel
|
|||||||
$nmo->company = $this->companies()->first();
|
$nmo->company = $this->companies()->first();
|
||||||
$nmo->settings = $this->companies()->first()->settings;
|
$nmo->settings = $this->companies()->first()->settings;
|
||||||
$nmo->to_user = $this->companies()->first()->owner();
|
$nmo->to_user = $this->companies()->first()->owner();
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo, true);
|
||||||
|
|
||||||
Cache::put("gmail_credentials_notified:{$this->key}", true, 60 * 24);
|
Cache::put("gmail_credentials_notified:{$this->key}", true, 60 * 24);
|
||||||
|
|
||||||
|
@ -340,8 +340,21 @@ class Company extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function country()
|
public function country()
|
||||||
{
|
{
|
||||||
|
$companies = Cache::get('countries');
|
||||||
|
|
||||||
|
if (! $companies) {
|
||||||
|
$this->buildCache(true);
|
||||||
|
|
||||||
|
$companies = Cache::get('countries');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $companies->filter(function ($item) {
|
||||||
|
return $item->id == $this->getSetting('country_id');
|
||||||
|
})->first();
|
||||||
|
|
||||||
// return $this->belongsTo(Country::class);
|
// return $this->belongsTo(Country::class);
|
||||||
return Country::find($this->settings->country_id);
|
// return Country::find($this->settings->country_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function group_settings()
|
public function group_settings()
|
||||||
|
@ -64,7 +64,7 @@ class Vendor extends BaseModel
|
|||||||
protected $touches = [];
|
protected $touches = [];
|
||||||
|
|
||||||
protected $with = [
|
protected $with = [
|
||||||
// 'contacts',
|
'company',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $presenter = VendorPresenter::class;
|
protected $presenter = VendorPresenter::class;
|
||||||
|
@ -76,6 +76,8 @@ class CreditCard implements MethodInterface
|
|||||||
{
|
{
|
||||||
$client = new \stdClass;
|
$client = new \stdClass;
|
||||||
|
|
||||||
|
$country = $this->square_driver->client->country ? $this->square_driver->client->country->iso_3166_2 : $this->square_driver->client->company->country()->iso_3166_2;
|
||||||
|
|
||||||
$client->addressLines = [$this->square_driver->client->address1 ?: '', $this->square_driver->client->address2 ?: ''];
|
$client->addressLines = [$this->square_driver->client->address1 ?: '', $this->square_driver->client->address2 ?: ''];
|
||||||
$client->givenName = $this->square_driver->client->present()->first_name();
|
$client->givenName = $this->square_driver->client->present()->first_name();
|
||||||
$client->familyName = $this->square_driver->client->present()->last_name();
|
$client->familyName = $this->square_driver->client->present()->last_name();
|
||||||
@ -83,7 +85,7 @@ class CreditCard implements MethodInterface
|
|||||||
$client->phone = $this->square_driver->client->phone;
|
$client->phone = $this->square_driver->client->phone;
|
||||||
$client->city = $this->square_driver->client->city;
|
$client->city = $this->square_driver->client->city;
|
||||||
$client->region = $this->square_driver->client->state;
|
$client->region = $this->square_driver->client->state;
|
||||||
$client->country = $this->square_driver->client->country->iso_3166_2;
|
$client->country = $country;
|
||||||
|
|
||||||
return (array) $client;
|
return (array) $client;
|
||||||
}
|
}
|
||||||
@ -202,6 +204,8 @@ class CreditCard implements MethodInterface
|
|||||||
private function createClient()
|
private function createClient()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$country = $this->square_driver->client->country ? $this->square_driver->client->country->iso_3166_2 : $this->square_driver->client->company->country()->iso_3166_2;
|
||||||
|
|
||||||
/* Step two - create the customer */
|
/* Step two - create the customer */
|
||||||
$billing_address = new \Square\Models\Address();
|
$billing_address = new \Square\Models\Address();
|
||||||
$billing_address->setAddressLine1($this->square_driver->client->address1);
|
$billing_address->setAddressLine1($this->square_driver->client->address1);
|
||||||
@ -209,7 +213,7 @@ class CreditCard implements MethodInterface
|
|||||||
$billing_address->setLocality($this->square_driver->client->city);
|
$billing_address->setLocality($this->square_driver->client->city);
|
||||||
$billing_address->setAdministrativeDistrictLevel1($this->square_driver->client->state);
|
$billing_address->setAdministrativeDistrictLevel1($this->square_driver->client->state);
|
||||||
$billing_address->setPostalCode($this->square_driver->client->postal_code);
|
$billing_address->setPostalCode($this->square_driver->client->postal_code);
|
||||||
$billing_address->setCountry($this->square_driver->client->country->iso_3166_2);
|
$billing_address->setCountry($country);
|
||||||
|
|
||||||
$body = new \Square\Models\CreateCustomerRequest();
|
$body = new \Square\Models\CreateCustomerRequest();
|
||||||
$body->setGivenName($this->square_driver->client->present()->name());
|
$body->setGivenName($this->square_driver->client->present()->name());
|
||||||
|
@ -52,7 +52,7 @@ class PurchaseOrderService
|
|||||||
$settings = $this->purchase_order->company->settings;
|
$settings = $this->purchase_order->company->settings;
|
||||||
|
|
||||||
if (! $this->purchase_order->design_id)
|
if (! $this->purchase_order->design_id)
|
||||||
$this->purchase_order->design_id = $this->decodePrimaryKey($settings->invoice_design_id);
|
$this->purchase_order->design_id = $this->decodePrimaryKey($settings->purchase_order_design_id);
|
||||||
|
|
||||||
if (!isset($this->invoice->footer) || empty($this->invoice->footer))
|
if (!isset($this->invoice->footer) || empty($this->invoice->footer))
|
||||||
$this->purchase_order->footer = $settings->purchase_order_footer;
|
$this->purchase_order->footer = $settings->purchase_order_footer;
|
||||||
|
@ -40,13 +40,14 @@ class SendEmail
|
|||||||
if (! $this->reminder_template) {
|
if (! $this->reminder_template) {
|
||||||
$this->reminder_template = $this->quote->calculateTemplate('quote');
|
$this->reminder_template = $this->quote->calculateTemplate('quote');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->quote->service()->markSent()->save();
|
||||||
|
|
||||||
$this->quote->invitations->each(function ($invitation) {
|
$this->quote->invitations->each(function ($invitation) {
|
||||||
if (! $invitation->contact->trashed() && $invitation->contact->email) {
|
if (! $invitation->contact->trashed() && $invitation->contact->email) {
|
||||||
EmailEntity::dispatchSync($invitation, $invitation->company, $this->reminder_template);
|
EmailEntity::dispatch($invitation, $invitation->company, $this->reminder_template);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$this->quote->service()->markSent();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,7 @@ class AccountTransformer extends EntityTransformer
|
|||||||
'is_hosted' => (bool) Ninja::isHosted(),
|
'is_hosted' => (bool) Ninja::isHosted(),
|
||||||
'set_react_as_default_ap' => (bool) $account->set_react_as_default_ap,
|
'set_react_as_default_ap' => (bool) $account->set_react_as_default_ap,
|
||||||
'trial_days_left' => Ninja::isHosted() ? (int) $account->getTrialDays() : 0,
|
'trial_days_left' => Ninja::isHosted() ? (int) $account->getTrialDays() : 0,
|
||||||
|
'account_sms_verified' => (bool) $account->account_sms_verified,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,15 +22,18 @@ use App\Models\RecurringInvoiceInvitation;
|
|||||||
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
use App\Utils\Number;
|
use App\Utils\Number;
|
||||||
|
use App\Utils\Traits\AppSetup;
|
||||||
use App\Utils\Traits\MakesDates;
|
use App\Utils\Traits\MakesDates;
|
||||||
use App\Utils\transformTranslations;
|
use App\Utils\transformTranslations;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
class HtmlEngine
|
class HtmlEngine
|
||||||
{
|
{
|
||||||
use MakesDates;
|
use MakesDates;
|
||||||
|
use AppSetup;
|
||||||
|
|
||||||
public $entity;
|
public $entity;
|
||||||
|
|
||||||
public $invitation;
|
public $invitation;
|
||||||
@ -644,7 +647,27 @@ class HtmlEngine
|
|||||||
|
|
||||||
private function getCountryName() :string
|
private function getCountryName() :string
|
||||||
{
|
{
|
||||||
$country = Country::find($this->settings->country_id);
|
|
||||||
|
$countries = Cache::get('countries');
|
||||||
|
|
||||||
|
if (! $countries) {
|
||||||
|
$this->buildCache(true);
|
||||||
|
|
||||||
|
$countries = Cache::get('countries');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($countries){
|
||||||
|
|
||||||
|
|
||||||
|
$country = $countries->filter(function ($item) {
|
||||||
|
return $item->id == $this->settings->country_id;
|
||||||
|
})->first();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$country = Country::find($this->settings->country_id);
|
||||||
|
|
||||||
if ($country) {
|
if ($country) {
|
||||||
return ctrans('texts.country_' . $country->name);
|
return ctrans('texts.country_' . $country->name);
|
||||||
|
@ -63,6 +63,10 @@ trait CleanLineItems
|
|||||||
if (! array_key_exists('type_id', $item)) {
|
if (! array_key_exists('type_id', $item)) {
|
||||||
$item['type_id'] = '1';
|
$item['type_id'] = '1';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if($item['type_id'] == '2'){
|
||||||
|
// str_replace()
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('id', $item)) {
|
if (array_key_exists('id', $item)) {
|
||||||
|
@ -22,14 +22,17 @@ use App\Models\RecurringInvoiceInvitation;
|
|||||||
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
use App\Utils\Number;
|
use App\Utils\Number;
|
||||||
|
use App\Utils\Traits\AppSetup;
|
||||||
use App\Utils\Traits\MakesDates;
|
use App\Utils\Traits\MakesDates;
|
||||||
use App\Utils\transformTranslations;
|
use App\Utils\transformTranslations;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
class VendorHtmlEngine
|
class VendorHtmlEngine
|
||||||
{
|
{
|
||||||
use MakesDates;
|
use MakesDates;
|
||||||
|
use AppSetup;
|
||||||
|
|
||||||
public $entity;
|
public $entity;
|
||||||
|
|
||||||
@ -483,7 +486,27 @@ class VendorHtmlEngine
|
|||||||
|
|
||||||
private function getCountryName() :string
|
private function getCountryName() :string
|
||||||
{
|
{
|
||||||
$country = Country::find($this->settings->country_id);
|
|
||||||
|
$countries = Cache::get('countries');
|
||||||
|
|
||||||
|
if (! $countries) {
|
||||||
|
$this->buildCache(true);
|
||||||
|
|
||||||
|
$countries = Cache::get('countries');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($countries){
|
||||||
|
|
||||||
|
|
||||||
|
$country = $countries->filter(function ($item) {
|
||||||
|
return $item->id == $this->settings->country_id;
|
||||||
|
})->first();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$country = Country::find($this->settings->country_id);
|
||||||
|
|
||||||
if ($country) {
|
if ($country) {
|
||||||
return ctrans('texts.country_' . $country->name);
|
return ctrans('texts.country_' . $country->name);
|
||||||
|
@ -89,12 +89,14 @@
|
|||||||
"symfony/postmark-mailer": "^6.1",
|
"symfony/postmark-mailer": "^6.1",
|
||||||
"tijsverkoyen/css-to-inline-styles": "^2.2",
|
"tijsverkoyen/css-to-inline-styles": "^2.2",
|
||||||
"turbo124/beacon": "^1.2",
|
"turbo124/beacon": "^1.2",
|
||||||
|
"twilio/sdk": "^6.40",
|
||||||
"webpatser/laravel-countries": "dev-master#75992ad",
|
"webpatser/laravel-countries": "dev-master#75992ad",
|
||||||
"wepay/php-sdk": "^0.3"
|
"wepay/php-sdk": "^0.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"php": "^7.4|^8.0",
|
"php": "^7.4|^8.0",
|
||||||
"barryvdh/laravel-debugbar": "^3.6",
|
"barryvdh/laravel-debugbar": "^3.6",
|
||||||
|
"beyondcode/laravel-query-detector": "^1.6",
|
||||||
"brianium/paratest": "^6.1",
|
"brianium/paratest": "^6.1",
|
||||||
"darkaonline/l5-swagger": "8.1.0",
|
"darkaonline/l5-swagger": "8.1.0",
|
||||||
"fakerphp/faker": "^1.14",
|
"fakerphp/faker": "^1.14",
|
||||||
|
310
composer.lock
generated
310
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ab46b4192bc11b5b812f0959354a8701",
|
"content-hash": "bbd6f8107bd70628ea7527c968ca3c8d",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "afosto/yaac",
|
"name": "afosto/yaac",
|
||||||
@ -378,16 +378,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "aws/aws-sdk-php",
|
"name": "aws/aws-sdk-php",
|
||||||
"version": "3.231.10",
|
"version": "3.231.15",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||||
"reference": "e46b7c5fcb70fadf38079755982cc1d3f0583c41"
|
"reference": "ba379285d24b609a997bd8b40933d3e0a3826dfb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e46b7c5fcb70fadf38079755982cc1d3f0583c41",
|
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ba379285d24b609a997bd8b40933d3e0a3826dfb",
|
||||||
"reference": "e46b7c5fcb70fadf38079755982cc1d3f0583c41",
|
"reference": "ba379285d24b609a997bd8b40933d3e0a3826dfb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -464,9 +464,9 @@
|
|||||||
"support": {
|
"support": {
|
||||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.231.10"
|
"source": "https://github.com/aws/aws-sdk-php/tree/3.231.15"
|
||||||
},
|
},
|
||||||
"time": "2022-07-20T18:17:18+00:00"
|
"time": "2022-07-27T18:59:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
@ -576,16 +576,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "braintree/braintree_php",
|
"name": "braintree/braintree_php",
|
||||||
"version": "6.8.0",
|
"version": "6.9.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/braintree/braintree_php.git",
|
"url": "https://github.com/braintree/braintree_php.git",
|
||||||
"reference": "d5d92080d67ed247b72378e4f47e8c4d0048bddd"
|
"reference": "096984f01c03e47e053703fb159721cb77793587"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/d5d92080d67ed247b72378e4f47e8c4d0048bddd",
|
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/096984f01c03e47e053703fb159721cb77793587",
|
||||||
"reference": "d5d92080d67ed247b72378e4f47e8c4d0048bddd",
|
"reference": "096984f01c03e47e053703fb159721cb77793587",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -619,9 +619,9 @@
|
|||||||
"description": "Braintree PHP Client Library",
|
"description": "Braintree PHP Client Library",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/braintree/braintree_php/issues",
|
"issues": "https://github.com/braintree/braintree_php/issues",
|
||||||
"source": "https://github.com/braintree/braintree_php/tree/6.8.0"
|
"source": "https://github.com/braintree/braintree_php/tree/6.9.0"
|
||||||
},
|
},
|
||||||
"time": "2022-04-01T18:37:18+00:00"
|
"time": "2022-07-25T14:01:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
@ -685,16 +685,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "checkout/checkout-sdk-php",
|
"name": "checkout/checkout-sdk-php",
|
||||||
"version": "2.5.2",
|
"version": "2.5.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/checkout/checkout-sdk-php.git",
|
"url": "https://github.com/checkout/checkout-sdk-php.git",
|
||||||
"reference": "ab1e493ac9aa9c0350f58f069f6157b2a02a7e27"
|
"reference": "d1c012d905cbd1a04869e1d34f2438ac24bf02b6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/checkout/checkout-sdk-php/zipball/ab1e493ac9aa9c0350f58f069f6157b2a02a7e27",
|
"url": "https://api.github.com/repos/checkout/checkout-sdk-php/zipball/d1c012d905cbd1a04869e1d34f2438ac24bf02b6",
|
||||||
"reference": "ab1e493ac9aa9c0350f58f069f6157b2a02a7e27",
|
"reference": "d1c012d905cbd1a04869e1d34f2438ac24bf02b6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -747,9 +747,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/checkout/checkout-sdk-php/issues",
|
"issues": "https://github.com/checkout/checkout-sdk-php/issues",
|
||||||
"source": "https://github.com/checkout/checkout-sdk-php/tree/2.5.2"
|
"source": "https://github.com/checkout/checkout-sdk-php/tree/2.5.3"
|
||||||
},
|
},
|
||||||
"time": "2022-06-30T14:46:15+00:00"
|
"time": "2022-07-27T15:56:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cleverit/ubl_invoice",
|
"name": "cleverit/ubl_invoice",
|
||||||
@ -1323,34 +1323,31 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/event-manager",
|
"name": "doctrine/event-manager",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/event-manager.git",
|
"url": "https://github.com/doctrine/event-manager.git",
|
||||||
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
|
"reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
|
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/eb2ecf80e3093e8f3c2769ac838e27d8ede8e683",
|
||||||
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
|
"reference": "eb2ecf80e3093e8f3c2769ac838e27d8ede8e683",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.1 || ^8.0"
|
"php": "^7.1 || ^8.0"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"doctrine/common": "<2.9@dev"
|
"doctrine/common": "<2.9"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/coding-standard": "^6.0",
|
"doctrine/coding-standard": "^9",
|
||||||
"phpunit/phpunit": "^7.0"
|
"phpstan/phpstan": "~1.4.10 || ^1.5.4",
|
||||||
|
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||||
|
"vimeo/psalm": "^4.22"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.0.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Doctrine\\Common\\": "lib/Doctrine/Common"
|
"Doctrine\\Common\\": "lib/Doctrine/Common"
|
||||||
@ -1397,7 +1394,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/doctrine/event-manager/issues",
|
"issues": "https://github.com/doctrine/event-manager/issues",
|
||||||
"source": "https://github.com/doctrine/event-manager/tree/1.1.x"
|
"source": "https://github.com/doctrine/event-manager/tree/1.1.2"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1413,7 +1410,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-05-29T18:28:51+00:00"
|
"time": "2022-07-27T22:18:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/inflector",
|
"name": "doctrine/inflector",
|
||||||
@ -2044,16 +2041,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "gocardless/gocardless-pro",
|
"name": "gocardless/gocardless-pro",
|
||||||
"version": "4.19.0",
|
"version": "4.20.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/gocardless/gocardless-pro-php.git",
|
"url": "https://github.com/gocardless/gocardless-pro-php.git",
|
||||||
"reference": "ed88cd22b6a790ee37758afa8bf7c9d43caa796c"
|
"reference": "3df49bbc748900fba6cb3de428c21e488b058940"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/gocardless/gocardless-pro-php/zipball/ed88cd22b6a790ee37758afa8bf7c9d43caa796c",
|
"url": "https://api.github.com/repos/gocardless/gocardless-pro-php/zipball/3df49bbc748900fba6cb3de428c21e488b058940",
|
||||||
"reference": "ed88cd22b6a790ee37758afa8bf7c9d43caa796c",
|
"reference": "3df49bbc748900fba6cb3de428c21e488b058940",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2093,9 +2090,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/gocardless/gocardless-pro-php/issues",
|
"issues": "https://github.com/gocardless/gocardless-pro-php/issues",
|
||||||
"source": "https://github.com/gocardless/gocardless-pro-php/tree/v4.19.0"
|
"source": "https://github.com/gocardless/gocardless-pro-php/tree/v4.20.0"
|
||||||
},
|
},
|
||||||
"time": "2022-07-13T14:44:43+00:00"
|
"time": "2022-07-25T09:57:58+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "google/apiclient",
|
"name": "google/apiclient",
|
||||||
@ -2169,16 +2166,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "google/apiclient-services",
|
"name": "google/apiclient-services",
|
||||||
"version": "v0.258.0",
|
"version": "v0.259.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/googleapis/google-api-php-client-services.git",
|
"url": "https://github.com/googleapis/google-api-php-client-services.git",
|
||||||
"reference": "71eb32534aba05e373fe317c1373a9645065881c"
|
"reference": "3f68a8b8f825974bc0318b8f7268a09216d5fee1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/71eb32534aba05e373fe317c1373a9645065881c",
|
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/3f68a8b8f825974bc0318b8f7268a09216d5fee1",
|
||||||
"reference": "71eb32534aba05e373fe317c1373a9645065881c",
|
"reference": "3f68a8b8f825974bc0318b8f7268a09216d5fee1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2207,9 +2204,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
|
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
|
||||||
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.258.0"
|
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.259.0"
|
||||||
},
|
},
|
||||||
"time": "2022-07-18T01:10:11+00:00"
|
"time": "2022-07-24T01:26:12+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "google/auth",
|
"name": "google/auth",
|
||||||
@ -3478,16 +3475,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/framework",
|
"name": "laravel/framework",
|
||||||
"version": "v9.21.3",
|
"version": "v9.22.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/framework.git",
|
"url": "https://github.com/laravel/framework.git",
|
||||||
"reference": "66bfa61e61ffceddb6370b57306c76ead7667622"
|
"reference": "b3b3dd43b9899f23df6d1d3e5390bd4662947a46"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/framework/zipball/66bfa61e61ffceddb6370b57306c76ead7667622",
|
"url": "https://api.github.com/repos/laravel/framework/zipball/b3b3dd43b9899f23df6d1d3e5390bd4662947a46",
|
||||||
"reference": "66bfa61e61ffceddb6370b57306c76ead7667622",
|
"reference": "b3b3dd43b9899f23df6d1d3e5390bd4662947a46",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -3654,7 +3651,7 @@
|
|||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2022-07-20T18:00:32+00:00"
|
"time": "2022-07-26T16:16:33+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/serializable-closure",
|
"name": "laravel/serializable-closure",
|
||||||
@ -3778,28 +3775,28 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/socialite",
|
"name": "laravel/socialite",
|
||||||
"version": "v5.5.2",
|
"version": "v5.5.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/socialite.git",
|
"url": "https://github.com/laravel/socialite.git",
|
||||||
"reference": "68afb03259b82d898c68196cbcacd48596a9dd72"
|
"reference": "9dfc76b31ee041c45a7cae86f23339784abde46d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/68afb03259b82d898c68196cbcacd48596a9dd72",
|
"url": "https://api.github.com/repos/laravel/socialite/zipball/9dfc76b31ee041c45a7cae86f23339784abde46d",
|
||||||
"reference": "68afb03259b82d898c68196cbcacd48596a9dd72",
|
"reference": "9dfc76b31ee041c45a7cae86f23339784abde46d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"guzzlehttp/guzzle": "^6.0|^7.0",
|
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||||
|
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
|
||||||
"illuminate/http": "^6.0|^7.0|^8.0|^9.0",
|
"illuminate/http": "^6.0|^7.0|^8.0|^9.0",
|
||||||
"illuminate/support": "^6.0|^7.0|^8.0|^9.0",
|
"illuminate/support": "^6.0|^7.0|^8.0|^9.0",
|
||||||
"league/oauth1-client": "^1.0",
|
"league/oauth1-client": "^1.10.1",
|
||||||
"php": "^7.2|^8.0"
|
"php": "^7.2|^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
|
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
|
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
|
||||||
"phpunit/phpunit": "^8.0|^9.3"
|
"phpunit/phpunit": "^8.0|^9.3"
|
||||||
@ -3843,7 +3840,7 @@
|
|||||||
"issues": "https://github.com/laravel/socialite/issues",
|
"issues": "https://github.com/laravel/socialite/issues",
|
||||||
"source": "https://github.com/laravel/socialite"
|
"source": "https://github.com/laravel/socialite"
|
||||||
},
|
},
|
||||||
"time": "2022-03-10T15:26:19+00:00"
|
"time": "2022-07-18T13:51:19+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/tinker",
|
"name": "laravel/tinker",
|
||||||
@ -4383,16 +4380,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/flysystem",
|
"name": "league/flysystem",
|
||||||
"version": "3.1.1",
|
"version": "3.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/flysystem.git",
|
"url": "https://github.com/thephpleague/flysystem.git",
|
||||||
"reference": "1a941703dfb649f9b821e7bc425e782f576a805e"
|
"reference": "ed0ecc7f9b5c2f4a9872185846974a808a3b052a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1a941703dfb649f9b821e7bc425e782f576a805e",
|
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/ed0ecc7f9b5c2f4a9872185846974a808a3b052a",
|
||||||
"reference": "1a941703dfb649f9b821e7bc425e782f576a805e",
|
"reference": "ed0ecc7f9b5c2f4a9872185846974a808a3b052a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -4453,7 +4450,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/thephpleague/flysystem/issues",
|
"issues": "https://github.com/thephpleague/flysystem/issues",
|
||||||
"source": "https://github.com/thephpleague/flysystem/tree/3.1.1"
|
"source": "https://github.com/thephpleague/flysystem/tree/3.2.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -4469,20 +4466,20 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-07-18T09:59:40+00:00"
|
"time": "2022-07-26T07:26:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/flysystem-aws-s3-v3",
|
"name": "league/flysystem-aws-s3-v3",
|
||||||
"version": "3.1.1",
|
"version": "3.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||||
"reference": "fa46ce9fbad9bfc73d8b160ffeb2c1793fe9c73b"
|
"reference": "257893ef7398b3c9255b26dff8b0118bb93fc5ff"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/fa46ce9fbad9bfc73d8b160ffeb2c1793fe9c73b",
|
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/257893ef7398b3c9255b26dff8b0118bb93fc5ff",
|
||||||
"reference": "fa46ce9fbad9bfc73d8b160ffeb2c1793fe9c73b",
|
"reference": "257893ef7398b3c9255b26dff8b0118bb93fc5ff",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -4523,7 +4520,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
|
"issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues",
|
||||||
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.1.1"
|
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.2.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -4539,7 +4536,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-07-18T09:31:34+00:00"
|
"time": "2022-07-26T07:22:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/fractal",
|
"name": "league/fractal",
|
||||||
@ -5110,16 +5107,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
"version": "2.7.0",
|
"version": "2.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Seldaek/monolog.git",
|
"url": "https://github.com/Seldaek/monolog.git",
|
||||||
"reference": "5579edf28aee1190a798bfa5be8bc16c563bd524"
|
"reference": "720488632c590286b88b80e62aa3d3d551ad4a50"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/5579edf28aee1190a798bfa5be8bc16c563bd524",
|
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50",
|
||||||
"reference": "5579edf28aee1190a798bfa5be8bc16c563bd524",
|
"reference": "720488632c590286b88b80e62aa3d3d551ad4a50",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5139,11 +5136,10 @@
|
|||||||
"guzzlehttp/psr7": "^2.2",
|
"guzzlehttp/psr7": "^2.2",
|
||||||
"mongodb/mongodb": "^1.8",
|
"mongodb/mongodb": "^1.8",
|
||||||
"php-amqplib/php-amqplib": "~2.4 || ^3",
|
"php-amqplib/php-amqplib": "~2.4 || ^3",
|
||||||
"php-console/php-console": "^3.1.3",
|
|
||||||
"phpspec/prophecy": "^1.15",
|
"phpspec/prophecy": "^1.15",
|
||||||
"phpstan/phpstan": "^0.12.91",
|
"phpstan/phpstan": "^0.12.91",
|
||||||
"phpunit/phpunit": "^8.5.14",
|
"phpunit/phpunit": "^8.5.14",
|
||||||
"predis/predis": "^1.1",
|
"predis/predis": "^1.1 || ^2.0",
|
||||||
"rollbar/rollbar": "^1.3 || ^2 || ^3",
|
"rollbar/rollbar": "^1.3 || ^2 || ^3",
|
||||||
"ruflin/elastica": "^7",
|
"ruflin/elastica": "^7",
|
||||||
"swiftmailer/swiftmailer": "^5.3|^6.0",
|
"swiftmailer/swiftmailer": "^5.3|^6.0",
|
||||||
@ -5163,7 +5159,6 @@
|
|||||||
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
|
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
|
||||||
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
|
"mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
|
||||||
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
|
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
|
||||||
"php-console/php-console": "Allow sending log messages to Google Chrome",
|
|
||||||
"rollbar/rollbar": "Allow sending log messages to Rollbar",
|
"rollbar/rollbar": "Allow sending log messages to Rollbar",
|
||||||
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
|
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
|
||||||
},
|
},
|
||||||
@ -5198,7 +5193,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/Seldaek/monolog/issues",
|
"issues": "https://github.com/Seldaek/monolog/issues",
|
||||||
"source": "https://github.com/Seldaek/monolog/tree/2.7.0"
|
"source": "https://github.com/Seldaek/monolog/tree/2.8.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -5210,7 +5205,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-06-09T08:59:12+00:00"
|
"time": "2022-07-24T11:55:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mtdowling/jmespath.php",
|
"name": "mtdowling/jmespath.php",
|
||||||
@ -5408,16 +5403,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nesbot/carbon",
|
"name": "nesbot/carbon",
|
||||||
"version": "2.59.1",
|
"version": "2.60.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||||
"reference": "a9000603ea337c8df16cc41f8b6be95a65f4d0f5"
|
"reference": "00a259ae02b003c563158b54fb6743252b638ea6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a9000603ea337c8df16cc41f8b6be95a65f4d0f5",
|
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/00a259ae02b003c563158b54fb6743252b638ea6",
|
||||||
"reference": "a9000603ea337c8df16cc41f8b6be95a65f4d0f5",
|
"reference": "00a259ae02b003c563158b54fb6743252b638ea6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5506,7 +5501,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-06-29T21:43:55+00:00"
|
"time": "2022-07-27T15:57:48+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nette/schema",
|
"name": "nette/schema",
|
||||||
@ -7801,16 +7796,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "rmccue/requests",
|
"name": "rmccue/requests",
|
||||||
"version": "v2.0.3",
|
"version": "v2.0.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/WordPress/Requests.git",
|
"url": "https://github.com/WordPress/Requests.git",
|
||||||
"reference": "b290dd974051bf1ead51d1947a5a56357e5b80ff"
|
"reference": "62bf29e0f1080b4f0f499d30adb6a382e70e9686"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/b290dd974051bf1ead51d1947a5a56357e5b80ff",
|
"url": "https://api.github.com/repos/WordPress/Requests/zipball/62bf29e0f1080b4f0f499d30adb6a382e70e9686",
|
||||||
"reference": "b290dd974051bf1ead51d1947a5a56357e5b80ff",
|
"reference": "62bf29e0f1080b4f0f499d30adb6a382e70e9686",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -7878,7 +7873,7 @@
|
|||||||
"issues": "https://github.com/WordPress/Requests/issues",
|
"issues": "https://github.com/WordPress/Requests/issues",
|
||||||
"source": "https://github.com/WordPress/Requests"
|
"source": "https://github.com/WordPress/Requests"
|
||||||
},
|
},
|
||||||
"time": "2022-05-10T08:42:27+00:00"
|
"time": "2022-07-25T09:01:09+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sabre/uri",
|
"name": "sabre/uri",
|
||||||
@ -12124,6 +12119,55 @@
|
|||||||
},
|
},
|
||||||
"time": "2022-06-22T11:22:46+00:00"
|
"time": "2022-06-22T11:22:46+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "twilio/sdk",
|
||||||
|
"version": "6.40.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@github.com:twilio/twilio-php.git",
|
||||||
|
"reference": "86aa13d855f4624d07a5e6e8c0b7f2096d7d856c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/twilio/twilio-php/zipball/86aa13d855f4624d07a5e6e8c0b7f2096d7d856c",
|
||||||
|
"reference": "86aa13d855f4624d07a5e6e8c0b7f2096d7d856c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"guzzlehttp/guzzle": "^6.3 || ^7.0",
|
||||||
|
"phpunit/phpunit": ">=7.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"guzzlehttp/guzzle": "An HTTP client to execute the API requests"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Twilio\\": "src/Twilio/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Twilio API Team",
|
||||||
|
"email": "api@twilio.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A PHP wrapper for Twilio's API",
|
||||||
|
"homepage": "https://github.com/twilio/twilio-php",
|
||||||
|
"keywords": [
|
||||||
|
"api",
|
||||||
|
"sms",
|
||||||
|
"twilio"
|
||||||
|
],
|
||||||
|
"time": "2022-07-21T19:54:34+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "vlucas/phpdotenv",
|
"name": "vlucas/phpdotenv",
|
||||||
"version": "v5.4.1",
|
"version": "v5.4.1",
|
||||||
@ -12707,17 +12751,77 @@
|
|||||||
"time": "2022-07-11T09:26:42+00:00"
|
"time": "2022-07-11T09:26:42+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "brianium/paratest",
|
"name": "beyondcode/laravel-query-detector",
|
||||||
"version": "v6.6.0",
|
"version": "1.6.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/paratestphp/paratest.git",
|
"url": "https://github.com/beyondcode/laravel-query-detector.git",
|
||||||
"reference": "bce7b965a5fe5028a53c3151042ca12777600acd"
|
"reference": "8261d80c71c97e994c1021fe5c3bd2a1c27106fc"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/paratestphp/paratest/zipball/bce7b965a5fe5028a53c3151042ca12777600acd",
|
"url": "https://api.github.com/repos/beyondcode/laravel-query-detector/zipball/8261d80c71c97e994c1021fe5c3bd2a1c27106fc",
|
||||||
"reference": "bce7b965a5fe5028a53c3151042ca12777600acd",
|
"reference": "8261d80c71c97e994c1021fe5c3bd2a1c27106fc",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"laravel/legacy-factories": "^1.0",
|
||||||
|
"orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0",
|
||||||
|
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"BeyondCode\\QueryDetector\\QueryDetectorServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"BeyondCode\\QueryDetector\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Marcel Pociot",
|
||||||
|
"email": "marcel@beyondco.de",
|
||||||
|
"homepage": "https://beyondcode.de",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Laravel N+1 Query Detector",
|
||||||
|
"homepage": "https://github.com/beyondcode/laravel-query-detector",
|
||||||
|
"keywords": [
|
||||||
|
"beyondcode",
|
||||||
|
"laravel-query-detector"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/beyondcode/laravel-query-detector/issues",
|
||||||
|
"source": "https://github.com/beyondcode/laravel-query-detector/tree/1.6.0"
|
||||||
|
},
|
||||||
|
"time": "2022-02-12T16:23:40+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "brianium/paratest",
|
||||||
|
"version": "v6.6.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/paratestphp/paratest.git",
|
||||||
|
"reference": "ae5803ce4558f855c7d955baa2d90b93ec40c4b7"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/paratestphp/paratest/zipball/ae5803ce4558f855c7d955baa2d90b93ec40c4b7",
|
||||||
|
"reference": "ae5803ce4558f855c7d955baa2d90b93ec40c4b7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -12784,7 +12888,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/paratestphp/paratest/issues",
|
"issues": "https://github.com/paratestphp/paratest/issues",
|
||||||
"source": "https://github.com/paratestphp/paratest/tree/v6.6.0"
|
"source": "https://github.com/paratestphp/paratest/tree/v6.6.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -12796,7 +12900,7 @@
|
|||||||
"type": "paypal"
|
"type": "paypal"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-07-12T07:15:58+00:00"
|
"time": "2022-07-22T14:07:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/package-versions-deprecated",
|
"name": "composer/package-versions-deprecated",
|
||||||
@ -13626,16 +13730,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/dusk",
|
"name": "laravel/dusk",
|
||||||
"version": "v6.25.0",
|
"version": "v6.25.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/laravel/dusk.git",
|
"url": "https://github.com/laravel/dusk.git",
|
||||||
"reference": "b4632b7493a187d31afc5c9ddec437c81b16421a"
|
"reference": "cd93e41d610965842e4b61f4691a0a0889737790"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/laravel/dusk/zipball/b4632b7493a187d31afc5c9ddec437c81b16421a",
|
"url": "https://api.github.com/repos/laravel/dusk/zipball/cd93e41d610965842e4b61f4691a0a0889737790",
|
||||||
"reference": "b4632b7493a187d31afc5c9ddec437c81b16421a",
|
"reference": "cd93e41d610965842e4b61f4691a0a0889737790",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -13693,9 +13797,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/laravel/dusk/issues",
|
"issues": "https://github.com/laravel/dusk/issues",
|
||||||
"source": "https://github.com/laravel/dusk/tree/v6.25.0"
|
"source": "https://github.com/laravel/dusk/tree/v6.25.1"
|
||||||
},
|
},
|
||||||
"time": "2022-07-11T11:38:43+00:00"
|
"time": "2022-07-25T13:51:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "maximebf/debugbar",
|
"name": "maximebf/debugbar",
|
||||||
@ -16603,5 +16707,5 @@
|
|||||||
"platform-dev": {
|
"platform-dev": {
|
||||||
"php": "^7.4|^8.0"
|
"php": "^7.4|^8.0"
|
||||||
},
|
},
|
||||||
"plugin-api-version": "2.3.0"
|
"plugin-api-version": "2.1.0"
|
||||||
}
|
}
|
||||||
|
@ -197,4 +197,8 @@ return [
|
|||||||
'ninja_apple_client_id' => env('APPLE_CLIENT_ID', false),
|
'ninja_apple_client_id' => env('APPLE_CLIENT_ID', false),
|
||||||
'ninja_apple_client_secret' => env('APPLE_CLIENT_SECRET',false),
|
'ninja_apple_client_secret' => env('APPLE_CLIENT_SECRET',false),
|
||||||
'ninja_apple_redirect_url' => env('APPLE_REDIRECT_URI',false),
|
'ninja_apple_redirect_url' => env('APPLE_REDIRECT_URI',false),
|
||||||
|
'twilio_account_sid' => env('TWILIO_ACCOUNT_SID',false),
|
||||||
|
'twilio_auth_token' => env('TWILIO_AUTH_TOKEN',false),
|
||||||
|
'twilio_verify_sid' => env('TWILIO_VERIFY_SID',false),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddSmsVerificationToHostedAccount extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('accounts', function (Blueprint $table) {
|
||||||
|
$table->text('account_sms_verification_code')->nullable();
|
||||||
|
$table->text('account_sms_verification_number')->nullable();
|
||||||
|
$table->boolean('account_sms_verified')->default(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
App\Models\Account::query()->update(['account_sms_verified' => true]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -8,10 +8,22 @@
|
|||||||
<meta name="google-signin-client_id" content="{{ config('services.google.client_id') }}">
|
<meta name="google-signin-client_id" content="{{ config('services.google.client_id') }}">
|
||||||
<link rel="manifest" href="manifest.json?v={{ config('ninja.app_version') }}">
|
<link rel="manifest" href="manifest.json?v={{ config('ninja.app_version') }}">
|
||||||
<script src="{{ asset('js/pdf.min.js') }}"></script>
|
<script src="{{ asset('js/pdf.min.js') }}"></script>
|
||||||
|
@if(\App\Utils\Ninja::isHosted())
|
||||||
<script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
|
<script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://alcdn.msauth.net/browser/2.14.2/js/msal-browser.min.js"
|
||||||
|
integrity="sha384-ggh+EF1aSqm+Y4yvv2n17KpurNcZTeYtUZUvhPziElsstmIEubyEB6AIVpKLuZgr"
|
||||||
|
crossorigin="anonymous">
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
pdfjsLib.GlobalWorkerOptions.workerSrc = "{{ asset('js/pdf.worker.min.js') }}";
|
pdfjsLib.GlobalWorkerOptions.workerSrc = "{{ asset('js/pdf.worker.min.js') }}";
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
window.flutterConfiguration = {
|
||||||
|
canvasKitBaseUrl: "/canvaskit/"
|
||||||
|
};
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body style="background-color:#888888;">
|
<body style="background-color:#888888;">
|
||||||
|
|
||||||
@ -153,12 +165,6 @@
|
|||||||
|
|
||||||
<script defer src="{{ $path }}?v={{ config('ninja.app_version') }}" type="application/javascript"></script>
|
<script defer src="{{ $path }}?v={{ config('ninja.app_version') }}" type="application/javascript"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript"
|
|
||||||
src="https://alcdn.msauth.net/browser/2.14.2/js/msal-browser.min.js"
|
|
||||||
integrity="sha384-ggh+EF1aSqm+Y4yvv2n17KpurNcZTeYtUZUvhPziElsstmIEubyEB6AIVpKLuZgr"
|
|
||||||
crossorigin="anonymous">
|
|
||||||
</script>
|
|
||||||
<center style="padding-top: 150px" id="loader">
|
<center style="padding-top: 150px" id="loader">
|
||||||
<div class="loader"></div>
|
<div class="loader"></div>
|
||||||
</center>
|
</center>
|
||||||
|
@ -6,9 +6,13 @@
|
|||||||
<p class="text-lg leading-6 font-medium text-gray-900">{{ ctrans('texts.attachments') }}:</p>
|
<p class="text-lg leading-6 font-medium text-gray-900">{{ ctrans('texts.attachments') }}:</p>
|
||||||
@foreach ($entity->documents as $document)
|
@foreach ($entity->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
@if($entity instanceof App\Models\PurchaseOrder)
|
||||||
|
<a href="{{ route('vendor.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
@else
|
||||||
|
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
@endif
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
|
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
|
||||||
class="text-primary h-6 w-4">
|
class="text-primary h-6 w-4">
|
||||||
@ -25,9 +29,13 @@
|
|||||||
|
|
||||||
@foreach ($entity->company->documents as $document)
|
@foreach ($entity->company->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
|
@if($entity instanceof App\Models\PurchaseOrder)
|
||||||
|
<a href="{{ route('vendor.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
@else
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
@endif
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
|
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
|
||||||
class="text-primary h-6 w-4">
|
class="text-primary h-6 w-4">
|
||||||
|
@ -0,0 +1,95 @@
|
|||||||
|
@extends('portal.ninja2020.layout.vendor_app')
|
||||||
|
@section('meta_title', ctrans('texts.document'))
|
||||||
|
|
||||||
|
@section('body')
|
||||||
|
<div class="container mx-auto">
|
||||||
|
<div class="grid grid-cols-12">
|
||||||
|
<div class="col-span-12 lg:col-span-7 lg:col-start-3">
|
||||||
|
<div class="bg-white shadow overflow-hidden sm:rounded-lg">
|
||||||
|
<div class="px-4 py-5 border-b border-gray-200 sm:px-6">
|
||||||
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
|
{{ ctrans('texts.document') }}
|
||||||
|
</h3>
|
||||||
|
<p class="mt-1 max-w-2xl text-sm leading-5 text-gray-500">
|
||||||
|
{{ ctrans('texts.document_details') }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<dl>
|
||||||
|
<div class="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.name') }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2 flex items-center">
|
||||||
|
{{ Illuminate\Support\Str::limit($document->name, 40) }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.type') }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||||
|
{{ App\Models\Document::$types[$document->type]['mime'] }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div class="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.hash') }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||||
|
{{ $document->hash }}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.size') }}
|
||||||
|
</dt>
|
||||||
|
<dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||||
|
{{ $document->size / 1000 }} kB
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div class="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.width') }}
|
||||||
|
</dt>
|
||||||
|
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||||
|
{{ $document->width }}px
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-white px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||||
|
<dt class="text-sm leading-5 font-medium text-gray-500">
|
||||||
|
{{ ctrans('texts.height') }}
|
||||||
|
</dt>
|
||||||
|
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||||
|
{{ $document->height }}px
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex justify-end my-4">
|
||||||
|
<a href="{{ route('vendor.documents.download', $document->hashed_id) }}" class="button button-link bg-link text-gray-900 inline-flex items-center" download>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-download-cloud">
|
||||||
|
<polyline points="8 17 12 21 16 17"></polyline>
|
||||||
|
<line x1="12" y1="12" x2="12" y2="21"></line>
|
||||||
|
<path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<span class="ml-2">{{ ctrans('texts.download') }}</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="{{ $document->generateUrl() }}" target="_blank" class="button button-primary bg-primary text-white inline-flex items-center">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather">
|
||||||
|
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
|
||||||
|
<polyline points="15 3 21 3 21 9"></polyline>
|
||||||
|
<line x1="10" y1="14" x2="21" y2="3"></line>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<span class="ml-2">{{ ctrans('texts.open_in_new_tab') }}</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
@ -86,6 +86,7 @@ use App\Http\Controllers\TaskStatusController;
|
|||||||
use App\Http\Controllers\TaxRateController;
|
use App\Http\Controllers\TaxRateController;
|
||||||
use App\Http\Controllers\TemplateController;
|
use App\Http\Controllers\TemplateController;
|
||||||
use App\Http\Controllers\TokenController;
|
use App\Http\Controllers\TokenController;
|
||||||
|
use App\Http\Controllers\TwilioController;
|
||||||
use App\Http\Controllers\TwoFactorController;
|
use App\Http\Controllers\TwoFactorController;
|
||||||
use App\Http\Controllers\UserController;
|
use App\Http\Controllers\UserController;
|
||||||
use App\Http\Controllers\VendorController;
|
use App\Http\Controllers\VendorController;
|
||||||
@ -285,6 +286,10 @@ Route::group(['middleware' => ['throttle:100,1', 'api_db', 'token_auth', 'locale
|
|||||||
Route::post('settings/enable_two_factor', [TwoFactorController::class, 'enableTwoFactor']);
|
Route::post('settings/enable_two_factor', [TwoFactorController::class, 'enableTwoFactor']);
|
||||||
Route::post('settings/disable_two_factor', [TwoFactorController::class, 'disableTwoFactor']);
|
Route::post('settings/disable_two_factor', [TwoFactorController::class, 'disableTwoFactor']);
|
||||||
|
|
||||||
|
|
||||||
|
Route::post('verify', [TwilioController::class, 'generate'])->name('verify.generate');
|
||||||
|
Route::post('verify/confirm', [TwilioController::class, 'confirm'])->name('verify.confirm');
|
||||||
|
|
||||||
Route::resource('vendors', VendorController::class); // name = (vendors. index / create / show / update / destroy / edit
|
Route::resource('vendors', VendorController::class); // name = (vendors. index / create / show / update / destroy / edit
|
||||||
Route::post('vendors/bulk', [VendorController::class, 'bulk'])->name('vendors.bulk');
|
Route::post('vendors/bulk', [VendorController::class, 'bulk'])->name('vendors.bulk');
|
||||||
Route::put('vendors/{vendor}/upload', [VendorController::class, 'upload']);
|
Route::put('vendors/{vendor}/upload', [VendorController::class, 'upload']);
|
||||||
|
@ -94,7 +94,7 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'domain_db','check_clie
|
|||||||
|
|
||||||
Route::post('documents/download_multiple', [App\Http\Controllers\ClientPortal\DocumentController::class, 'downloadMultiple'])->name('documents.download_multiple');
|
Route::post('documents/download_multiple', [App\Http\Controllers\ClientPortal\DocumentController::class, 'downloadMultiple'])->name('documents.download_multiple');
|
||||||
Route::get('documents/{document}/download', [App\Http\Controllers\ClientPortal\DocumentController::class, 'download'])->name('documents.download');
|
Route::get('documents/{document}/download', [App\Http\Controllers\ClientPortal\DocumentController::class, 'download'])->name('documents.download');
|
||||||
Route::resource('documents', DocumentController::class)->only(['index', 'show']);
|
Route::resource('documents', App\Http\Controllers\ClientPortal\DocumentController::class)->only(['index', 'show']);
|
||||||
|
|
||||||
Route::get('subscriptions/{recurring_invoice}/plan_switch/{target}', [App\Http\Controllers\ClientPortal\SubscriptionPlanSwitchController::class, 'index'])->name('subscription.plan_switch');
|
Route::get('subscriptions/{recurring_invoice}/plan_switch/{target}', [App\Http\Controllers\ClientPortal\SubscriptionPlanSwitchController::class, 'index'])->name('subscription.plan_switch');
|
||||||
|
|
||||||
|
@ -42,6 +42,10 @@ Route::group(['middleware' => ['auth:vendor', 'vendor_locale', 'domain_db'], 'pr
|
|||||||
Route::get('logout', [VendorContactLoginController::class, 'logout'])->name('logout');
|
Route::get('logout', [VendorContactLoginController::class, 'logout'])->name('logout');
|
||||||
Route::post('purchase_order/upload/{purchase_order}', [UploadController::class,'upload'])->name('upload.store');
|
Route::post('purchase_order/upload/{purchase_order}', [UploadController::class,'upload'])->name('upload.store');
|
||||||
|
|
||||||
|
Route::post('documents/download_multiple', [App\Http\Controllers\VendorPortal\DocumentController::class, 'downloadMultiple'])->name('documents.download_multiple');
|
||||||
|
Route::get('documents/{document}/download', [App\Http\Controllers\VendorPortal\DocumentController::class, 'download'])->name('documents.download');
|
||||||
|
Route::resource('documents', App\Http\Controllers\VendorPortal\DocumentController::class)->only(['index', 'show']);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class ApplePayDomainMerchantUrlTest extends TestCase
|
|||||||
$cg->require_billing_address = true;
|
$cg->require_billing_address = true;
|
||||||
$cg->require_shipping_address = true;
|
$cg->require_shipping_address = true;
|
||||||
$cg->update_details = true;
|
$cg->update_details = true;
|
||||||
$cg->config = encrypt(json_encode($config));
|
$cg->setConfig($config);
|
||||||
$cg->fees_and_limits = '';
|
$cg->fees_and_limits = '';
|
||||||
$cg->save();
|
$cg->save();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user