php cs fixer

This commit is contained in:
David Bomba 2024-02-13 15:25:18 +11:00
parent bab55e7aa0
commit c5b6938447
106 changed files with 657 additions and 622 deletions

View File

@ -891,7 +891,7 @@ class CheckData extends Command
$this->logMessage("Fixing country for # {$client->id}"); $this->logMessage("Fixing country for # {$client->id}");
}); });
Client::query()->whereNull("settings->currency_id")->cursor()->each(function ($client){ Client::query()->whereNull("settings->currency_id")->cursor()->each(function ($client) {
$settings = $client->settings; $settings = $client->settings;
$settings->currency_id = (string)$client->company->settings->currency_id; $settings->currency_id = (string)$client->company->settings->currency_id;
$client->settings = $settings; $client->settings = $settings;
@ -901,7 +901,7 @@ class CheckData extends Command
}); });
Payment::withTrashed()->where('exchange_rate', 0)->cursor()->each(function ($payment){ Payment::withTrashed()->where('exchange_rate', 0)->cursor()->each(function ($payment) {
$payment->exchange_rate = 1; $payment->exchange_rate = 1;
$payment->saveQuietly(); $payment->saveQuietly();
@ -917,11 +917,11 @@ class CheckData extends Command
$p->currency_id = $p->client->settings->currency_id; $p->currency_id = $p->client->settings->currency_id;
$p->saveQuietly(); $p->saveQuietly();
$this->logMessage("Fixing currency for # {$p->id}"); $this->logMessage("Fixing currency for # {$p->id}");
}); });
Company::whereNull("subdomain") Company::whereNull("subdomain")
->cursor() ->cursor()
->when(Ninja::isHosted()) ->when(Ninja::isHosted())
@ -942,7 +942,7 @@ class CheckData extends Command
$i->partial_due_date = null; $i->partial_due_date = null;
$i->saveQuietly(); $i->saveQuietly();
$this->logMessage("Fixing partial due date for # {$i->id}"); $this->logMessage("Fixing partial due date for # {$i->id}");
}); });

View File

@ -52,9 +52,10 @@ class EncryptNinja extends Command
*/ */
public function handle() public function handle()
{ {
if($this->option('encrypt')) if($this->option('encrypt')) {
return $this->encryptFiles(); return $this->encryptFiles();
}
if($this->option('decrypt')) { if($this->option('decrypt')) {
return $this->decryptFiles(); return $this->decryptFiles();
} }
@ -80,4 +81,4 @@ class EncryptNinja extends Command
Storage::disk('base')->put($file, $decrypted); Storage::disk('base')->put($file, $decrypted);
} }
} }
} }

View File

@ -79,7 +79,7 @@ class OpenApiYaml extends Command
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components.yaml')); Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/examples.yaml')); Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/examples.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/responses.yaml')); Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/responses.yaml'));
$directory = new DirectoryIterator($path . '/components/responses/'); $directory = new DirectoryIterator($path . '/components/responses/');

View File

@ -494,7 +494,7 @@ class CompanySettings extends BaseSettings
public $payment_email_all_contacts = false; public $payment_email_all_contacts = false;
public $show_pdfhtml_on_mobile = true; public $show_pdfhtml_on_mobile = true;
public static $casts = [ public static $casts = [
'show_pdfhtml_on_mobile' => 'bool', 'show_pdfhtml_on_mobile' => 'bool',
'payment_email_all_contacts' => 'bool', 'payment_email_all_contacts' => 'bool',

View File

@ -105,8 +105,8 @@ class Handler extends ExceptionHandler
if (Ninja::isHosted()) { if (Ninja::isHosted()) {
// if($exception instanceof ThrottleRequestsException && class_exists(\Modules\Admin\Events\ThrottledExceptionRaised::class)) { // if($exception instanceof ThrottleRequestsException && class_exists(\Modules\Admin\Events\ThrottledExceptionRaised::class)) {
// $uri = urldecode(request()->getRequestUri()); // $uri = urldecode(request()->getRequestUri());
// event(new \Modules\Admin\Events\ThrottledExceptionRaised(auth()->user()?->account?->key, $uri, request()->ip())); // event(new \Modules\Admin\Events\ThrottledExceptionRaised(auth()->user()?->account?->key, $uri, request()->ip()));
// } // }
Integration::configureScope(function (Scope $scope): void { Integration::configureScope(function (Scope $scope): void {

View File

@ -451,17 +451,19 @@ class BaseExport
{ {
if (isset($this->input['client_id']) && $this->input['client_id'] != 'all') { if (isset($this->input['client_id']) && $this->input['client_id'] != 'all') {
if(!is_int($this->input['client_id'])) if(!is_int($this->input['client_id'])) {
$this->input['client_id'] = $this->decodePrimaryKey($this->input['client_id']); $this->input['client_id'] = $this->decodePrimaryKey($this->input['client_id']);
}
$client = Client::withTrashed()->find($this->input['client_id']); $client = Client::withTrashed()->find($this->input['client_id']);
if(!$client) if(!$client) {
return $query; return $query;
}
$this->client_description = $client->present()->name; $this->client_description = $client->present()->name;
return $query->where('client_id', $this->input['client_id']); return $query->where('client_id', $this->input['client_id']);
} elseif(isset($this->input['clients']) && count($this->input['clients']) > 0) { } elseif(isset($this->input['clients']) && count($this->input['clients']) > 0) {
$this->client_description = 'Multiple Clients'; $this->client_description = 'Multiple Clients';
@ -844,64 +846,69 @@ class BaseExport
} }
protected function addClientFilter($query, $clients): Builder protected function addClientFilter($query, $clients): Builder
{ {
if(is_string($clients)) if(is_string($clients)) {
$clients = explode(',', $clients); $clients = explode(',', $clients);
}
$transformed_clients = $this->transformKeys($clients); $transformed_clients = $this->transformKeys($clients);
nlog($clients); nlog($clients);
nlog($transformed_clients); nlog($transformed_clients);
if(count($transformed_clients) > 0) if(count($transformed_clients) > 0) {
$query->whereIn('client_id', $transformed_clients); $query->whereIn('client_id', $transformed_clients);
}
return $query; return $query;
} }
protected function addVendorFilter($query, $vendors): Builder protected function addVendorFilter($query, $vendors): Builder
{ {
if(is_string($vendors)) { if(is_string($vendors)) {
$vendors = explode(',', $vendors); $vendors = explode(',', $vendors);
} }
$transformed_vendors = $this->transformKeys($vendors); $transformed_vendors = $this->transformKeys($vendors);
if(count($transformed_vendors) > 0) if(count($transformed_vendors) > 0) {
$query->whereIn('vendor_id', $transformed_vendors); $query->whereIn('vendor_id', $transformed_vendors);
}
return $query; return $query;
} }
protected function addProjectFilter($query, $projects): Builder protected function addProjectFilter($query, $projects): Builder
{ {
if(is_string($projects)) { if(is_string($projects)) {
$projects = explode(',', $projects); $projects = explode(',', $projects);
} }
$transformed_projects = $this->transformKeys($projects); $transformed_projects = $this->transformKeys($projects);
if(count($transformed_projects) > 0) if(count($transformed_projects) > 0) {
$query->whereIn('project_id', $transformed_projects); $query->whereIn('project_id', $transformed_projects);
}
return $query; return $query;
} }
protected function addCategoryFilter($query, $expense_categories): Builder protected function addCategoryFilter($query, $expense_categories): Builder
{ {
if(is_string($expense_categories)) { if(is_string($expense_categories)) {
$expense_categories = explode(',', $expense_categories); $expense_categories = explode(',', $expense_categories);
} }
$transformed_expense_categories = $this->transformKeys($expense_categories); $transformed_expense_categories = $this->transformKeys($expense_categories);
if(count($transformed_expense_categories) > 0)
if(count($transformed_expense_categories) > 0) {
$query->whereIn('category_id', $transformed_expense_categories); $query->whereIn('category_id', $transformed_expense_categories);
}
return $query; return $query;
} }
@ -1299,12 +1306,12 @@ class BaseExport
public function queueDocuments(Builder $query) public function queueDocuments(Builder $query)
{ {
nlog("queue docs pls"); nlog("queue docs pls");
if($query->getModel() instanceof Document) if($query->getModel() instanceof Document) {
$documents = $query->pluck('id')->toArray(); $documents = $query->pluck('id')->toArray();
else{ } else {
$documents = $query->cursor() $documents = $query->cursor()
->map(function ($entity){ ->map(function ($entity) {
return $entity->documents()->pluck('id')->toArray(); return $entity->documents()->pluck('id')->toArray();
})->flatten() })->flatten()
->toArray(); ->toArray();
} }
@ -1315,11 +1322,13 @@ class BaseExport
$user = $this->company->owner(); $user = $this->company->owner();
if(auth()->user() && auth()->user()->account_id == $this->company->account_id) if(auth()->user() && auth()->user()->account_id == $this->company->account_id) {
$user = auth()->user(); $user = auth()->user();
}
if($this->input['user_id'] ?? false) if($this->input['user_id'] ?? false) {
$user = User::where('id', $this->input['user_id'])->where('account_id', $this->company->account_id)->first(); $user = User::where('id', $this->input['user_id'])->where('account_id', $this->company->account_id)->first();
}
ZipDocuments::dispatch($documents, $this->company, $user); ZipDocuments::dispatch($documents, $this->company, $user);
} }

View File

@ -106,7 +106,7 @@ class CreditExport extends BaseExport
->where('is_deleted', 0); ->where('is_deleted', 0);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -77,7 +77,7 @@ class DocumentExport extends BaseExport
$query = Document::query()->where('company_id', $this->company->id); $query = Document::query()->where('company_id', $this->company->id);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -23,7 +23,6 @@ use League\Csv\Writer;
class ExpenseExport extends BaseExport class ExpenseExport extends BaseExport
{ {
private $expense_transformer; private $expense_transformer;
private Decorator $decorator; private Decorator $decorator;
@ -103,7 +102,7 @@ class ExpenseExport extends BaseExport
if(isset($this->input['categories'])) { if(isset($this->input['categories'])) {
$query = $this->addCategoryFilter($query, $this->input['categories']); $query = $this->addCategoryFilter($query, $this->input['categories']);
} }
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }
@ -206,23 +205,21 @@ class ExpenseExport extends BaseExport
if($expense->calculate_tax_by_amount) { if($expense->calculate_tax_by_amount) {
$total_tax_amount = round($expense->tax_amount1 + $expense->tax_amount2 + $expense->tax_amount3, $precision); $total_tax_amount = round($expense->tax_amount1 + $expense->tax_amount2 + $expense->tax_amount3, $precision);
} } else {
else {
if($expense->uses_inclusive_taxes) {
if($expense->uses_inclusive_taxes){ $total_tax_amount = ($this->calcInclusiveLineTax($expense->tax_rate1 ?? 0, $expense->amount, $precision)) + ($this->calcInclusiveLineTax($expense->tax_rate2 ?? 0, $expense->amount, $precision)) + ($this->calcInclusiveLineTax($expense->tax_rate3 ?? 0, $expense->amount, $precision));
$total_tax_amount = ($this->calcInclusiveLineTax($expense->tax_rate1 ?? 0, $expense->amount,$precision)) + ($this->calcInclusiveLineTax($expense->tax_rate2 ?? 0, $expense->amount,$precision)) + ($this->calcInclusiveLineTax($expense->tax_rate3 ?? 0, $expense->amount,$precision));
$entity['expense.net_amount'] = round(($expense->amount - round($total_tax_amount, $precision)), $precision); $entity['expense.net_amount'] = round(($expense->amount - round($total_tax_amount, $precision)), $precision);
} } else {
else{ $total_tax_amount = ($expense->amount * (($expense->tax_rate1 ?? 0) / 100)) + ($expense->amount * (($expense->tax_rate2 ?? 0) / 100)) + ($expense->amount * (($expense->tax_rate3 ?? 0) / 100));
$total_tax_amount = ($expense->amount * (($expense->tax_rate1 ?? 0)/100)) + ($expense->amount * (($expense->tax_rate2 ?? 0)/100)) + ($expense->amount * (($expense->tax_rate3 ?? 0)/100));
$entity['expense.net_amount'] = round(($expense->amount + round($total_tax_amount, $precision)), $precision); $entity['expense.net_amount'] = round(($expense->amount + round($total_tax_amount, $precision)), $precision);
} }
} }
$entity['expense.tax_amount'] = round($total_tax_amount, $precision); $entity['expense.tax_amount'] = round($total_tax_amount, $precision);
return $entity; return $entity;
} }
private function calcInclusiveLineTax($tax_rate, $amount, $precision): float private function calcInclusiveLineTax($tax_rate, $amount, $precision): float

View File

@ -76,7 +76,7 @@ class InvoiceItemExport extends BaseExport
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
$query = $this->applyFilters($query); $query = $this->applyFilters($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -60,7 +60,7 @@ class PaymentExport extends BaseExport
->where('is_deleted', 0); ->where('is_deleted', 0);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -77,7 +77,7 @@ class ProductExport extends BaseExport
->where('is_deleted', 0); ->where('is_deleted', 0);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -107,7 +107,7 @@ class PurchaseOrderExport extends BaseExport
->where('is_deleted', 0); ->where('is_deleted', 0);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -69,7 +69,7 @@ class QuoteItemExport extends BaseExport
->where('is_deleted', 0); ->where('is_deleted', 0);
$query = $this->addDateRange($query); $query = $this->addDateRange($query);
if($this->input['document_email_attachment'] ?? false) { if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query); $this->queueDocuments($query);
} }

View File

@ -165,8 +165,7 @@ class ClientFilters extends QueryFilters
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc'; $dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
if($sort_col[0] == 'number') if($sort_col[0] == 'number') {
{
return $this->builder->orderByRaw('ABS(number) ' . $dir); return $this->builder->orderByRaw('ABS(number) ' . $dir);
} }

View File

@ -318,13 +318,12 @@ class InvoiceFilters extends QueryFilters
if ($sort_col[0] == 'client_id') { if ($sort_col[0] == 'client_id') {
return $this->builder->orderBy(\App\Models\Client::select ('name') return $this->builder->orderBy(\App\Models\Client::select('name')
->whereColumn('clients.id', 'invoices.client_id'), $dir); ->whereColumn('clients.id', 'invoices.client_id'), $dir);
} }
if($sort_col[0] == 'number') if($sort_col[0] == 'number') {
{
return $this->builder->orderByRaw('ABS(number) ' . $dir); return $this->builder->orderByRaw('ABS(number) ' . $dir);
} }

View File

@ -59,7 +59,7 @@ class ProjectFilters extends QueryFilters
public function sort(string $sort = ''): Builder public function sort(string $sort = ''): Builder
{ {
$sort_col = explode('|', $sort); $sort_col = explode('|', $sort);
if (!is_array($sort_col) || count($sort_col) != 2) { if (!is_array($sort_col) || count($sort_col) != 2) {
return $this->builder; return $this->builder;
} }

View File

@ -70,8 +70,9 @@ class TransactionTransformer implements BankRevenueInterface
{ {
$data = []; $data = [];
if (!array_key_exists('transactions', $transactionResponse) || !array_key_exists('booked', $transactionResponse["transactions"])) if (!array_key_exists('transactions', $transactionResponse) || !array_key_exists('booked', $transactionResponse["transactions"])) {
throw new \Exception('invalid dataset'); throw new \Exception('invalid dataset');
}
foreach ($transactionResponse["transactions"]["booked"] as $transaction) { foreach ($transactionResponse["transactions"]["booked"] as $transaction) {
$data[] = $this->transformTransaction($transaction); $data[] = $this->transformTransaction($transaction);
@ -83,11 +84,11 @@ class TransactionTransformer implements BankRevenueInterface
{ {
// depending on institution, the result can be different, so we load the first available unique id // depending on institution, the result can be different, so we load the first available unique id
$transactionId = ''; $transactionId = '';
if (array_key_exists('transactionId', $transaction)) if (array_key_exists('transactionId', $transaction)) {
$transactionId = $transaction["transactionId"]; $transactionId = $transaction["transactionId"];
else if (array_key_exists('internalTransactionId', $transaction)) } elseif (array_key_exists('internalTransactionId', $transaction)) {
$transactionId = $transaction["internalTransactionId"]; $transactionId = $transaction["internalTransactionId"];
else { } else {
nlog(`Invalid Input for nordigen transaction transformer: ` . $transaction); nlog(`Invalid Input for nordigen transaction transformer: ` . $transaction);
throw new \Exception('invalid dataset: missing transactionId - Please report this error to the developer'); throw new \Exception('invalid dataset: missing transactionId - Please report this error to the developer');
} }
@ -96,23 +97,25 @@ class TransactionTransformer implements BankRevenueInterface
// description could be in varios places // description could be in varios places
$description = ''; $description = '';
if (array_key_exists('remittanceInformationStructured', $transaction)) if (array_key_exists('remittanceInformationStructured', $transaction)) {
$description = $transaction["remittanceInformationStructured"]; $description = $transaction["remittanceInformationStructured"];
else if (array_key_exists('remittanceInformationStructuredArray', $transaction)) } elseif (array_key_exists('remittanceInformationStructuredArray', $transaction)) {
$description = implode('\n', $transaction["remittanceInformationStructuredArray"]); $description = implode('\n', $transaction["remittanceInformationStructuredArray"]);
else if (array_key_exists('remittanceInformationUnstructured', $transaction)) } elseif (array_key_exists('remittanceInformationUnstructured', $transaction)) {
$description = $transaction["remittanceInformationUnstructured"]; $description = $transaction["remittanceInformationUnstructured"];
else if (array_key_exists('remittanceInformationUnstructuredArray', $transaction)) } elseif (array_key_exists('remittanceInformationUnstructuredArray', $transaction)) {
$description = implode('\n', $transaction["remittanceInformationUnstructuredArray"]); $description = implode('\n', $transaction["remittanceInformationUnstructuredArray"]);
else } else {
Log::warning("Missing description for the following transaction: " . json_encode($transaction)); Log::warning("Missing description for the following transaction: " . json_encode($transaction));
}
// enrich description with currencyExchange informations // enrich description with currencyExchange informations
if (array_key_exists('currencyExchange', $transaction)) if (array_key_exists('currencyExchange', $transaction)) {
foreach ($transaction["currencyExchange"] as $exchangeRate) { foreach ($transaction["currencyExchange"] as $exchangeRate) {
$targetAmount = round($amount * (float) $exchangeRate["exchangeRate"], 2); $targetAmount = round($amount * (float) $exchangeRate["exchangeRate"], 2);
$description .= '\nexchangeRate: ' . $amount . " " . $exchangeRate["sourceCurrency"] . " = " . $targetAmount . " " . $exchangeRate["targetCurrency"] . " (" . $exchangeRate["quotationDate"] . ")"; $description .= '\nexchangeRate: ' . $amount . " " . $exchangeRate["sourceCurrency"] . " = " . $targetAmount . " " . $exchangeRate["targetCurrency"] . " (" . $exchangeRate["quotationDate"] . ")";
} }
}
// participant data // participant data
$participant = array_key_exists('debtorAccount', $transaction) && array_key_exists('iban', $transaction["debtorAccount"]) ? $participant = array_key_exists('debtorAccount', $transaction) && array_key_exists('iban', $transaction["debtorAccount"]) ?
@ -153,8 +156,9 @@ class TransactionTransformer implements BankRevenueInterface
return $item->code == $code; return $item->code == $code;
})->first(); })->first();
if ($currency) if ($currency) {
return $currency->id; return $currency->id;
}
return 1; return 1;

View File

@ -62,7 +62,7 @@ class ActivityController extends BaseController
$system = ctrans('texts.system'); $system = ctrans('texts.system');
$data = $activities->cursor()->map(function ($activity) { $data = $activities->cursor()->map(function ($activity) {
/** @var \App\Models\Activity $activity */ /** @var \App\Models\Activity $activity */
return $activity->activity_string(); return $activity->activity_string();

View File

@ -112,8 +112,9 @@ class BankTransactionController extends BaseController
$this->bank_transaction_repo->convert_matched($bank_transactions); $this->bank_transaction_repo->convert_matched($bank_transactions);
} else { } else {
$bank_transactions->each(function ($bank_transaction, $key) use ($action, $user) { $bank_transactions->each(function ($bank_transaction, $key) use ($action, $user) {
if($user->can('edit', $bank_transaction)) if($user->can('edit', $bank_transaction)) {
$this->bank_transaction_repo->{$action}($bank_transaction); $this->bank_transaction_repo->{$action}($bank_transaction);
}
}); });
} }

View File

@ -412,19 +412,19 @@ class ClientController extends BaseController
} }
public function documents(ClientDocumentsRequest $request, Client $client) public function documents(ClientDocumentsRequest $request, Client $client)
{ {
$this->entity_type = Document::class; $this->entity_type = Document::class;
$this->entity_transformer = DocumentTransformer::class; $this->entity_transformer = DocumentTransformer::class;
$documents = Document::query() $documents = Document::query()
->company() ->company()
->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class], function ($query) use($client) { ->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class], function ($query) use ($client) {
$query->where('client_id', $client->id); $query->where('client_id', $client->id);
}) })
->orWhereHasMorph('documentable', [Client::class], function ($query) use ($client){ ->orWhereHasMorph('documentable', [Client::class], function ($query) use ($client) {
$query->where('id', $client->id); $query->where('id', $client->id);
}); });

View File

@ -353,7 +353,7 @@ class ClientGatewayTokenController extends BaseController
*/ */
public function store(StoreClientGatewayTokenRequest $request) public function store(StoreClientGatewayTokenRequest $request)
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -73,12 +73,13 @@ class DocumentController extends Controller
{ {
$hash = Cache::pull($hash); $hash = Cache::pull($hash);
if(!$hash) if(!$hash) {
abort(404); abort(404);
}
MultiDB::setDb($hash['db']); MultiDB::setDb($hash['db']);
/** @var \App\Models\Document $document **/ /** @var \App\Models\Document $document **/
$document = Document::where('hash', $hash['doc_hash'])->firstOrFail(); $document = Document::where('hash', $hash['doc_hash'])->firstOrFail();

View File

@ -58,4 +58,3 @@ class EmailPreferencesController extends Controller
return back()->with('message', ctrans('texts.updated_settings')); return back()->with('message', ctrans('texts.updated_settings'));
} }
} }

View File

@ -70,7 +70,7 @@ class InvoiceController extends Controller
} }
$variables = ($invitation && auth()->guard('contact')->user()->client->getSetting('show_accept_invoice_terms')) ? (new HtmlEngine($invitation))->generateLabelsAndValues() : false; $variables = ($invitation && auth()->guard('contact')->user()->client->getSetting('show_accept_invoice_terms')) ? (new HtmlEngine($invitation))->generateLabelsAndValues() : false;
$data = [ $data = [
'invoice' => $invoice, 'invoice' => $invoice,
'invitation' => $invitation ?: $invoice->invitations->first(), 'invitation' => $invitation ?: $invoice->invitations->first(),
@ -224,8 +224,9 @@ class InvoiceController extends Controller
$settings = auth()->guard('contact')->user()->client->getMergedSettings(); $settings = auth()->guard('contact')->user()->client->getMergedSettings();
$variables = false; $variables = false;
if(($invitation = $invoices->first()->invitations()->first() ?? false) && $settings->show_accept_invoice_terms) if(($invitation = $invoices->first()->invitations()->first() ?? false) && $settings->show_accept_invoice_terms) {
$variables = (new HtmlEngine($invitation))->generateLabelsAndValues(); $variables = (new HtmlEngine($invitation))->generateLabelsAndValues();
}
$data = [ $data = [
'settings' => $settings, 'settings' => $settings,

View File

@ -147,7 +147,7 @@ class PaymentMethodController extends Controller
$payment_method->is_deleted = true; $payment_method->is_deleted = true;
$payment_method->delete(); $payment_method->delete();
$payment_method->save(); $payment_method->save();
} catch (Exception $e) { } catch (Exception $e) {
nlog($e->getMessage()); nlog($e->getMessage());

View File

@ -215,7 +215,7 @@ class QuoteController extends Controller
->withSuccess('Quote(s) approved successfully.'); ->withSuccess('Quote(s) approved successfully.');
} }
$variables = false; $variables = false;
if($invitation = $quotes->first()->invitations()->first() ?? false) { if($invitation = $quotes->first()->invitations()->first() ?? false) {

View File

@ -149,7 +149,7 @@ class CompanyGatewayController extends BaseController
*/ */
public function create(CreateCompanyGatewayRequest $request) public function create(CreateCompanyGatewayRequest $request)
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -64,7 +64,7 @@ class CompanyLedgerController extends BaseController
*/ */
public function index(ShowCompanyLedgerRequest $request) public function index(ShowCompanyLedgerRequest $request)
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -121,7 +121,7 @@ class ConnectedAccountController extends BaseController
'email_verified_at' => now() 'email_verified_at' => now()
]; ];
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -128,7 +128,7 @@ class ExpenseCategoryController extends BaseController
*/ */
public function create(CreateExpenseCategoryRequest $request) public function create(CreateExpenseCategoryRequest $request)
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -21,7 +21,7 @@ class HostedMigrationController extends Controller
{ {
public function checkStatus(Request $request) public function checkStatus(Request $request)
{ {
if ($request->header('X-API-HOSTED-SECRET') != config('ninja.ninja_hosted_secret')) { if ($request->header('X-API-HOSTED-SECRET') != config('ninja.ninja_hosted_secret')) {
return; return;
} }
@ -29,19 +29,20 @@ class HostedMigrationController extends Controller
MultiDB::findAndSetDbByCompanyKey($request->company_key); MultiDB::findAndSetDbByCompanyKey($request->company_key);
$c = Company::where('company_key', $request->company_key)->first(); $c = Company::where('company_key', $request->company_key)->first();
if(!$c || $c->is_disabled) if(!$c || $c->is_disabled) {
return response()->json(['message' => 'ok'], 200); return response()->json(['message' => 'ok'], 200);
}
// if(\App\Models\Invoice::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2))->first()) // if(\App\Models\Invoice::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2))->first())
// return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400); // return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400);
// if(\App\Models\Client::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2))->first()) // if(\App\Models\Client::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2))->first())
// return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400);
// if(\App\Models\Quote::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2)))
// return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400); // return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400);
// if(\App\Models\RecurringInvoice::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2))) // if(\App\Models\Quote::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2)))
// return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400);
// if(\App\Models\RecurringInvoice::query()->where('company_id', $c->id)->where('created_at', '>', now()->subMonths(2)))
// return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400); // return response()->json(['message' => 'New data exists, are you sure? Please log in here https://app.invoicing.co and delete the company if you really need to migrate again.'], 400);
return response()->json(['message' => 'You have already activated this company on v5!!!!!! This migration may be a BAD idea. Contact us contact@invoiceninja.com to confirm this action.'], 400); return response()->json(['message' => 'You have already activated this company on v5!!!!!! This migration may be a BAD idea. Contact us contact@invoiceninja.com to confirm this action.'], 400);

View File

@ -22,18 +22,22 @@ class MailgunWebhookController extends BaseController
{ {
private $invitation; private $invitation;
public function __construct() {} public function __construct()
{
}
public function webhook(Request $request) public function webhook(Request $request)
{ {
$input = $request->all(); $input = $request->all();
if (\abs(\time() - $request['signature']['timestamp']) > 15) if (\abs(\time() - $request['signature']['timestamp']) > 15) {
return response()->json(['message' => 'Success'], 200); return response()->json(['message' => 'Success'], 200);
}
if(\hash_equals(\hash_hmac('sha256', $input['signature']['timestamp'] . $input['signature']['token'], config('services.mailgun.webhook_signing_key')), $input['signature']['signature'])) if(\hash_equals(\hash_hmac('sha256', $input['signature']['timestamp'] . $input['signature']['token'], config('services.mailgun.webhook_signing_key')), $input['signature']['signature'])) {
ProcessMailgunWebhook::dispatch($request->all())->delay(10); ProcessMailgunWebhook::dispatch($request->all())->delay(10);
}
return response()->json(['message' => 'Success.'], 200); return response()->json(['message' => 'Success.'], 200);
} }

View File

@ -520,7 +520,7 @@ class PaymentController extends BaseController
if($action == 'template' && $user->can('view', $payments->first())) { if($action == 'template' && $user->can('view', $payments->first())) {
$hash_or_response = request()->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); $hash_or_response = request()->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid();
TemplateAction::dispatch( TemplateAction::dispatch(
$payments->pluck('hashed_id')->toArray(), $payments->pluck('hashed_id')->toArray(),
$request->template_id, $request->template_id,

View File

@ -316,8 +316,8 @@ class PreviewPurchaseOrderController extends BaseController
return; return;
} }
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();
//if phantom js...... inject here.. //if phantom js...... inject here..
if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') { if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') {

View File

@ -181,7 +181,7 @@ class ProductController extends BaseController
*/ */
public function store(StoreProductRequest $request) public function store(StoreProductRequest $request)
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -399,7 +399,7 @@ class QuoteController extends BaseController
$quote->service() $quote->service()
->triggeredActions($request); ->triggeredActions($request);
event(new QuoteWasUpdated($quote, $quote->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); event(new QuoteWasUpdated($quote, $quote->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
return $this->itemResponse($quote); return $this->itemResponse($quote);

View File

@ -86,7 +86,7 @@ class StripeConnectController extends BaseController
]); ]);
nlog($response); nlog($response);
} catch (\Exception $e) { } catch (\Exception $e) {
return view('auth.connect.access_denied'); return view('auth.connect.access_denied');
} }

View File

@ -84,7 +84,7 @@ class TwoFactorController extends BaseController
public function disableTwoFactor() public function disableTwoFactor()
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -499,7 +499,7 @@ class VendorController extends BaseController
$ids = request()->input('ids'); $ids = request()->input('ids');
$vendors = Vendor::withTrashed()->find($this->transformKeys($ids)); $vendors = Vendor::withTrashed()->find($this->transformKeys($ids));
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -27,7 +27,7 @@ class CreatePaymentMethodRequest extends FormRequest
->filter(function ($method) use (&$available_methods) { ->filter(function ($method) use (&$available_methods) {
$available_methods[] = $method['gateway_type_id']; $available_methods[] = $method['gateway_type_id'];
}); });
if (in_array($this->query('method'), $available_methods)) { if (in_array($this->query('method'), $available_methods)) {
return true; return true;
} }

View File

@ -32,7 +32,7 @@ class StoreExpenseCategoryRequest extends Request
public function rules() public function rules()
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -26,7 +26,7 @@ class UpdateExpenseCategoryRequest extends Request
*/ */
public function authorize(): bool public function authorize(): bool
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();
@ -35,7 +35,7 @@ class UpdateExpenseCategoryRequest extends Request
public function rules() public function rules()
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -198,18 +198,22 @@ class Request extends FormRequest
} }
} }
if(isset($input['public_notes'])) if(isset($input['public_notes'])) {
$input['public_notes'] = str_replace("</sc","<-", $input['public_notes']); $input['public_notes'] = str_replace("</sc", "<-", $input['public_notes']);
}
if(isset($input['footer'])) if(isset($input['footer'])) {
$input['footer'] = str_replace("</sc", "<-", $input['footer']); $input['footer'] = str_replace("</sc", "<-", $input['footer']);
}
if(isset($input['terms']))
if(isset($input['terms'])) {
$input['terms'] = str_replace("</sc", "<-", $input['terms']); $input['terms'] = str_replace("</sc", "<-", $input['terms']);
}
if(isset($input['private_notes']))
if(isset($input['private_notes'])) {
$input['private_notes'] = str_replace("</sc", "<-", $input['private_notes']); $input['private_notes'] = str_replace("</sc", "<-", $input['private_notes']);
}
return $input; return $input;
} }

View File

@ -39,11 +39,11 @@ class CanAddUserRule implements Rule
return true; return true;
} }
/* /*
Check that we have sufficient quota to allow this to happen Check that we have sufficient quota to allow this to happen
@ 31-01-2024 - changed query to use email instead of user_id @ 31-01-2024 - changed query to use email instead of user_id
$count = CompanyUser::query() $count = CompanyUser::query()
->where('company_user.account_id', $user->account_id) ->where('company_user.account_id', $user->account_id)
->join('users', 'users.id', '=', 'company_user.user_id') ->join('users', 'users.id', '=', 'company_user.user_id')
@ -69,7 +69,7 @@ class CanAddUserRule implements Rule
*/ */
public function message() public function message()
{ {
/** @var \App\Models\User $user */ /** @var \App\Models\User $user */
$user = auth()->user(); $user = auth()->user();

View File

@ -88,10 +88,9 @@ class PaymentAppliedValidAmount implements Rule
nlog($inv->amount); nlog($inv->amount);
nlog($invoice['amount']); nlog($invoice['amount']);
if($inv->status_id == Invoice::STATUS_DRAFT && $inv->amount >= $invoice['amount']){ if($inv->status_id == Invoice::STATUS_DRAFT && $inv->amount >= $invoice['amount']) {
} } elseif ($inv->balance < $invoice['amount']) {
elseif ($inv->balance < $invoice['amount']) {
$this->message = 'Amount cannot be greater than invoice balance'; $this->message = 'Amount cannot be greater than invoice balance';
return false; return false;

View File

@ -152,7 +152,7 @@ class BaseImport
} }
} }
return $bestDelimiter ?? ','; return $bestDelimiter ?? ',';
} }

View File

@ -117,10 +117,8 @@ class Wave extends BaseImport implements ImportInterface
$this->transformer = new InvoiceTransformer($this->company); $this->transformer = new InvoiceTransformer($this->company);
foreach($data as $key => $invoice) foreach($data as $key => $invoice) {
{ if(!isset($invoice['Invoice Number']) || empty($invoice['Invoice Number'])) {
if(!isset($invoice['Invoice Number']) || empty($invoice['Invoice Number']))
{
unset($data[$key]); unset($data[$key]);
} }
} }

View File

@ -72,13 +72,13 @@ class CompanyExport implements ShouldQueue
$this->file_name = date('Y-m-d') . '_' . str_replace([" ", "/"], ["_",""], $this->company->present()->name() . '_' . $this->company->company_key . '.json'); $this->file_name = date('Y-m-d') . '_' . str_replace([" ", "/"], ["_",""], $this->company->present()->name() . '_' . $this->company->company_key . '.json');
$this->writer = new File($this->file_name); $this->writer = new File($this->file_name);
set_time_limit(0); set_time_limit(0);
$this->writer->value('app_version', config('ninja.app_version')); $this->writer->value('app_version', config('ninja.app_version'));
$this->writer->value('storage_url', Storage::url('')); $this->writer->value('storage_url', Storage::url(''));
$this->export_data['activities'] = $this->company->all_activities->map(function ($activity) { $this->export_data['activities'] = $this->company->all_activities->map(function ($activity) {
$activity = $this->transformArrayOfKeys($activity, [ $activity = $this->transformArrayOfKeys($activity, [
'user_id', 'user_id',
@ -104,9 +104,9 @@ $this->writer->value('storage_url', Storage::url(''));
})->makeHidden(['id'])->all(); })->makeHidden(['id'])->all();
$x = $this->writer->collection('activities'); $x = $this->writer->collection('activities');
$x->addItems($this->export_data['activities']); $x->addItems($this->export_data['activities']);
$this->export_data = null; $this->export_data = null;
$this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user) { $this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user) {
@ -116,9 +116,9 @@ $this->export_data = null;
$x = $this->writer->collection('users'); $x = $this->writer->collection('users');
$x->addItems($this->export_data['users']); $x->addItems($this->export_data['users']);
$this->export_data = null; $this->export_data = null;
$this->export_data['client_contacts'] = $this->company->client_contacts->map(function ($client_contact) { $this->export_data['client_contacts'] = $this->company->client_contacts->map(function ($client_contact) {
@ -140,9 +140,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('client_contacts'); $x = $this->writer->collection('client_contacts');
$x->addItems($this->export_data['client_contacts']); $x->addItems($this->export_data['client_contacts']);
$this->export_data = null; $this->export_data = null;
$this->export_data['client_gateway_tokens'] = $this->company->client_gateway_tokens->map(function ($client_gateway_token) { $this->export_data['client_gateway_tokens'] = $this->company->client_gateway_tokens->map(function ($client_gateway_token) {
$client_gateway_token = $this->transformArrayOfKeys($client_gateway_token, ['company_id', 'client_id', 'company_gateway_id']); $client_gateway_token = $this->transformArrayOfKeys($client_gateway_token, ['company_id', 'client_id', 'company_gateway_id']);
@ -151,9 +151,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('client_gateway_tokens'); $x = $this->writer->collection('client_gateway_tokens');
$x->addItems($this->export_data['client_gateway_tokens']); $x->addItems($this->export_data['client_gateway_tokens']);
$this->export_data = null; $this->export_data = null;
$this->export_data['clients'] = $this->company->clients()->orderBy('number', 'DESC')->cursor()->map(function ($client) { $this->export_data['clients'] = $this->company->clients()->orderBy('number', 'DESC')->cursor()->map(function ($client) {
$client = $this->transformArrayOfKeys($client, ['company_id', 'user_id', 'assigned_user_id', 'group_settings_id']); $client = $this->transformArrayOfKeys($client, ['company_id', 'user_id', 'assigned_user_id', 'group_settings_id']);
@ -162,18 +162,18 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('clients'); $x = $this->writer->collection('clients');
$x->addItems($this->export_data['clients']); $x->addItems($this->export_data['clients']);
$this->export_data = null; $this->export_data = null;
// $this->export_data['company'] = $this->company->toArray(); // $this->export_data['company'] = $this->company->toArray();
// $this->export_data['company']['company_key'] = $this->createHash(); // $this->export_data['company']['company_key'] = $this->createHash();
$this->writer->value('company', $this->company->toJson(), encode: false); $this->writer->value('company', $this->company->toJson(), encode: false);
// $x = $this->writer->collection('company'); // $x = $this->writer->collection('company');
// $x->addItems($this->export_data['company']); // $x->addItems($this->export_data['company']);
// $this->export_data = null; // $this->export_data = null;
$this->export_data['company_gateways'] = $this->company->company_gateways()->withTrashed()->cursor()->map(function ($company_gateway) { $this->export_data['company_gateways'] = $this->company->company_gateways()->withTrashed()->cursor()->map(function ($company_gateway) {
@ -184,11 +184,11 @@ $this->writer->value('company', $this->company->toJson(), encode: false);
})->all(); })->all();
$x = $this->writer->collection('company_gateways'); $x = $this->writer->collection('company_gateways');
$x->addItems($this->export_data['company_gateways']); $x->addItems($this->export_data['company_gateways']);
$this->export_data = null; $this->export_data = null;
$this->export_data['company_tokens'] = $this->company->tokens->map(function ($token) { $this->export_data['company_tokens'] = $this->company->tokens->map(function ($token) {
@ -198,9 +198,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('company_tokens'); $x = $this->writer->collection('company_tokens');
$x->addItems($this->export_data['company_tokens']); $x->addItems($this->export_data['company_tokens']);
$this->export_data = null; $this->export_data = null;
$this->export_data['company_ledger'] = $this->company->ledger->map(function ($ledger) { $this->export_data['company_ledger'] = $this->company->ledger->map(function ($ledger) {
@ -210,20 +210,20 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('company_ledger'); $x = $this->writer->collection('company_ledger');
$x->addItems($this->export_data['company_ledger']); $x->addItems($this->export_data['company_ledger']);
$this->export_data = null; $this->export_data = null;
$this->export_data['company_users'] = $this->company->company_users()->without(['user','account'])->cursor()->map(function ($company_user) { $this->export_data['company_users'] = $this->company->company_users()->without(['user','account'])->cursor()->map(function ($company_user) {
$company_user = $this->transformArrayOfKeys($company_user, ['company_id', 'account_id', 'user_id']); $company_user = $this->transformArrayOfKeys($company_user, ['company_id', 'account_id', 'user_id']);
return $company_user; return $company_user;
})->all(); })->all();
$x = $this->writer->collection('company_users'); $x = $this->writer->collection('company_users');
$x->addItems($this->export_data['company_users']); $x->addItems($this->export_data['company_users']);
$this->export_data = null; $this->export_data = null;
$this->export_data['credits'] = $this->company->credits()->orderBy('number', 'DESC')->cursor()->map(function ($credit) { $this->export_data['credits'] = $this->company->credits()->orderBy('number', 'DESC')->cursor()->map(function ($credit) {
@ -233,9 +233,9 @@ $this->export_data = null;
return $credit->makeVisible(['id']); return $credit->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('credits'); $x = $this->writer->collection('credits');
$x->addItems($this->export_data['credits']); $x->addItems($this->export_data['credits']);
$this->export_data = null; $this->export_data = null;
$this->export_data['credit_invitations'] = CreditInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($credit) { $this->export_data['credit_invitations'] = CreditInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($credit) {
@ -244,18 +244,18 @@ $this->export_data = null;
return $credit->makeVisible(['id']); return $credit->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('credit_invitations'); $x = $this->writer->collection('credit_invitations');
$x->addItems($this->export_data['credit_invitations']); $x->addItems($this->export_data['credit_invitations']);
$this->export_data = null; $this->export_data = null;
$this->export_data['designs'] = $this->company->user_designs->makeHidden(['id'])->all(); $this->export_data['designs'] = $this->company->user_designs->makeHidden(['id'])->all();
$x = $this->writer->collection('designs'); $x = $this->writer->collection('designs');
$x->addItems($this->export_data['designs']); $x->addItems($this->export_data['designs']);
$this->export_data = null; $this->export_data = null;
$this->export_data['documents'] = $this->company->all_documents->map(function ($document) { $this->export_data['documents'] = $this->company->all_documents->map(function ($document) {
@ -265,9 +265,9 @@ $this->export_data = null;
return $document->makeVisible(['id']); return $document->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('documents'); $x = $this->writer->collection('documents');
$x->addItems($this->export_data['documents']); $x->addItems($this->export_data['documents']);
$this->export_data = null; $this->export_data = null;
$this->export_data['expense_categories'] = $this->company->expense_categories()->cursor()->map(function ($expense_category) { $this->export_data['expense_categories'] = $this->company->expense_categories()->cursor()->map(function ($expense_category) {
$expense_category = $this->transformArrayOfKeys($expense_category, ['user_id', 'company_id']); $expense_category = $this->transformArrayOfKeys($expense_category, ['user_id', 'company_id']);
@ -275,9 +275,9 @@ $this->export_data = null;
return $expense_category->makeVisible(['id']); return $expense_category->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('expense_categories'); $x = $this->writer->collection('expense_categories');
$x->addItems($this->export_data['expense_categories']); $x->addItems($this->export_data['expense_categories']);
$this->export_data = null; $this->export_data = null;
$this->export_data['expenses'] = $this->company->expenses()->orderBy('number', 'DESC')->cursor()->map(function ($expense) { $this->export_data['expenses'] = $this->company->expenses()->orderBy('number', 'DESC')->cursor()->map(function ($expense) {
@ -288,9 +288,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('expenses'); $x = $this->writer->collection('expenses');
$x->addItems($this->export_data['expenses']); $x->addItems($this->export_data['expenses']);
$this->export_data = null; $this->export_data = null;
$this->export_data['group_settings'] = $this->company->group_settings->map(function ($gs) { $this->export_data['group_settings'] = $this->company->group_settings->map(function ($gs) {
@ -299,10 +299,10 @@ $this->export_data = null;
return $gs->makeVisible(['id']); return $gs->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('group_settings'); $x = $this->writer->collection('group_settings');
$x->addItems($this->export_data['group_settings']); $x->addItems($this->export_data['group_settings']);
$this->export_data = null; $this->export_data = null;
$this->export_data['invoices'] = $this->company->invoices()->orderBy('number', 'DESC')->cursor()->map(function ($invoice) { $this->export_data['invoices'] = $this->company->invoices()->orderBy('number', 'DESC')->cursor()->map(function ($invoice) {
@ -318,9 +318,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('invoices'); $x = $this->writer->collection('invoices');
$x->addItems($this->export_data['invoices']); $x->addItems($this->export_data['invoices']);
$this->export_data = null; $this->export_data = null;
$this->export_data['invoice_invitations'] = InvoiceInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($invoice) { $this->export_data['invoice_invitations'] = InvoiceInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($invoice) {
$invoice = $this->transformArrayOfKeys($invoice, ['company_id', 'user_id', 'client_contact_id', 'invoice_id']); $invoice = $this->transformArrayOfKeys($invoice, ['company_id', 'user_id', 'client_contact_id', 'invoice_id']);
@ -329,9 +329,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('invoice_invitations'); $x = $this->writer->collection('invoice_invitations');
$x->addItems($this->export_data['invoice_invitations']); $x->addItems($this->export_data['invoice_invitations']);
$this->export_data = null; $this->export_data = null;
$this->export_data['payment_terms'] = $this->company->user_payment_terms->map(function ($term) { $this->export_data['payment_terms'] = $this->company->user_payment_terms->map(function ($term) {
@ -340,10 +340,10 @@ $this->export_data = null;
return $term; return $term;
})->makeHidden(['id'])->all(); })->makeHidden(['id'])->all();
$x = $this->writer->collection('payment_terms'); $x = $this->writer->collection('payment_terms');
$x->addItems($this->export_data['payment_terms']); $x->addItems($this->export_data['payment_terms']);
$this->export_data = null; $this->export_data = null;
$this->export_data['payments'] = $this->company->payments()->orderBy('number', 'DESC')->cursor()->map(function ($payment) { $this->export_data['payments'] = $this->company->payments()->orderBy('number', 'DESC')->cursor()->map(function ($payment) {
@ -357,9 +357,9 @@ $this->export_data = null;
$x = $this->writer->collection('payments'); $x = $this->writer->collection('payments');
$x->addItems($this->export_data['payments']); $x->addItems($this->export_data['payments']);
$this->export_data = null; $this->export_data = null;
$this->export_data['products'] = $this->company->products->map(function ($product) { $this->export_data['products'] = $this->company->products->map(function ($product) {
@ -370,9 +370,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('products'); $x = $this->writer->collection('products');
$x->addItems($this->export_data['products']); $x->addItems($this->export_data['products']);
$this->export_data = null; $this->export_data = null;
$this->export_data['projects'] = $this->company->projects()->orderBy('number', 'DESC')->cursor()->map(function ($project) { $this->export_data['projects'] = $this->company->projects()->orderBy('number', 'DESC')->cursor()->map(function ($project) {
@ -383,9 +383,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('projects'); $x = $this->writer->collection('projects');
$x->addItems($this->export_data['projects']); $x->addItems($this->export_data['projects']);
$this->export_data = null; $this->export_data = null;
$this->export_data['quotes'] = $this->company->quotes()->orderBy('number', 'DESC')->cursor()->map(function ($quote) { $this->export_data['quotes'] = $this->company->quotes()->orderBy('number', 'DESC')->cursor()->map(function ($quote) {
@ -395,10 +395,10 @@ $this->export_data = null;
return $quote->makeVisible(['id']); return $quote->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('quotes'); $x = $this->writer->collection('quotes');
$x->addItems($this->export_data['quotes']); $x->addItems($this->export_data['quotes']);
$this->export_data = null; $this->export_data = null;
$this->export_data['quote_invitations'] = QuoteInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($quote) { $this->export_data['quote_invitations'] = QuoteInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($quote) {
@ -408,9 +408,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('quote_invitations'); $x = $this->writer->collection('quote_invitations');
$x->addItems($this->export_data['quote_invitations']); $x->addItems($this->export_data['quote_invitations']);
$this->export_data = null; $this->export_data = null;
$this->export_data['recurring_expenses'] = $this->company->recurring_expenses()->orderBy('number', 'DESC')->cursor()->map(function ($expense) { $this->export_data['recurring_expenses'] = $this->company->recurring_expenses()->orderBy('number', 'DESC')->cursor()->map(function ($expense) {
@ -422,9 +422,9 @@ $this->export_data = null;
$x = $this->writer->collection('recurring_expenses'); $x = $this->writer->collection('recurring_expenses');
$x->addItems($this->export_data['recurring_expenses']); $x->addItems($this->export_data['recurring_expenses']);
$this->export_data = null; $this->export_data = null;
$this->export_data['recurring_invoices'] = $this->company->recurring_invoices()->orderBy('number', 'DESC')->cursor()->map(function ($ri) { $this->export_data['recurring_invoices'] = $this->company->recurring_invoices()->orderBy('number', 'DESC')->cursor()->map(function ($ri) {
@ -434,10 +434,10 @@ $this->export_data = null;
return $ri->makeVisible(['id']); return $ri->makeVisible(['id']);
})->all(); })->all();
$x = $this->writer->collection('recurring_invoices'); $x = $this->writer->collection('recurring_invoices');
$x->addItems($this->export_data['recurring_invoices']); $x->addItems($this->export_data['recurring_invoices']);
$this->export_data = null; $this->export_data = null;
$this->export_data['recurring_invoice_invitations'] = RecurringInvoiceInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($ri) { $this->export_data['recurring_invoice_invitations'] = RecurringInvoiceInvitation::query()->where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($ri) {
@ -447,9 +447,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('recurring_invoice_invitations'); $x = $this->writer->collection('recurring_invoice_invitations');
$x->addItems($this->export_data['recurring_invoice_invitations']); $x->addItems($this->export_data['recurring_invoice_invitations']);
$this->export_data = null; $this->export_data = null;
@ -467,9 +467,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('subscriptions'); $x = $this->writer->collection('subscriptions');
$x->addItems($this->export_data['subscriptions']); $x->addItems($this->export_data['subscriptions']);
$this->export_data = null; $this->export_data = null;
$this->export_data['system_logs'] = $this->company->system_logs->map(function ($log) { $this->export_data['system_logs'] = $this->company->system_logs->map(function ($log) {
$log->client_id = $this->encodePrimaryKey($log->client_id); $log->client_id = $this->encodePrimaryKey($log->client_id);
@ -479,9 +479,9 @@ $this->export_data = null;
})->makeHidden(['id'])->all(); })->makeHidden(['id'])->all();
$x = $this->writer->collection('system_logs'); $x = $this->writer->collection('system_logs');
$x->addItems($this->export_data['system_logs']); $x->addItems($this->export_data['system_logs']);
$this->export_data = null; $this->export_data = null;
$this->export_data['tasks'] = $this->company->tasks()->orderBy('number', 'DESC')->cursor()->map(function ($task) { $this->export_data['tasks'] = $this->company->tasks()->orderBy('number', 'DESC')->cursor()->map(function ($task) {
@ -493,9 +493,9 @@ $this->export_data = null;
$x = $this->writer->collection('tasks'); $x = $this->writer->collection('tasks');
$x->addItems($this->export_data['tasks']); $x->addItems($this->export_data['tasks']);
$this->export_data = null; $this->export_data = null;
$this->export_data['task_statuses'] = $this->company->task_statuses->map(function ($status) { $this->export_data['task_statuses'] = $this->company->task_statuses->map(function ($status) {
@ -508,9 +508,9 @@ $this->export_data = null;
$x = $this->writer->collection('task_statuses'); $x = $this->writer->collection('task_statuses');
$x->addItems($this->export_data['task_statuses']); $x->addItems($this->export_data['task_statuses']);
$this->export_data = null; $this->export_data = null;
$this->export_data['tax_rates'] = $this->company->tax_rates->map(function ($rate) { $this->export_data['tax_rates'] = $this->company->tax_rates->map(function ($rate) {
@ -522,9 +522,9 @@ $this->export_data = null;
$x = $this->writer->collection('tax_rates'); $x = $this->writer->collection('tax_rates');
$x->addItems($this->export_data['tax_rates']); $x->addItems($this->export_data['tax_rates']);
$this->export_data = null; $this->export_data = null;
$this->export_data['vendors'] = $this->company->vendors()->orderBy('number', 'DESC')->cursor()->map(function ($vendor) { $this->export_data['vendors'] = $this->company->vendors()->orderBy('number', 'DESC')->cursor()->map(function ($vendor) {
@ -532,10 +532,10 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('vendors'); $x = $this->writer->collection('vendors');
$x->addItems($this->export_data['vendors']); $x->addItems($this->export_data['vendors']);
$this->export_data = null; $this->export_data = null;
$this->export_data['vendor_contacts'] = VendorContact::where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($vendor) { $this->export_data['vendor_contacts'] = VendorContact::where('company_id', $this->company->id)->withTrashed()->cursor()->map(function ($vendor) {
@ -547,9 +547,9 @@ $this->export_data = null;
$x = $this->writer->collection('vendor_contacts'); $x = $this->writer->collection('vendor_contacts');
$x->addItems($this->export_data['vendor_contacts']); $x->addItems($this->export_data['vendor_contacts']);
$this->export_data = null; $this->export_data = null;
$this->export_data['webhooks'] = $this->company->webhooks->map(function ($hook) { $this->export_data['webhooks'] = $this->company->webhooks->map(function ($hook) {
@ -560,9 +560,9 @@ $this->export_data = null;
})->makeHidden(['id'])->all(); })->makeHidden(['id'])->all();
$x = $this->writer->collection('webhooks'); $x = $this->writer->collection('webhooks');
$x->addItems($this->export_data['webhooks']); $x->addItems($this->export_data['webhooks']);
$this->export_data = null; $this->export_data = null;
$this->export_data['purchase_orders'] = $this->company->purchase_orders()->orderBy('number', 'DESC')->cursor()->map(function ($purchase_order) { $this->export_data['purchase_orders'] = $this->company->purchase_orders()->orderBy('number', 'DESC')->cursor()->map(function ($purchase_order) {
@ -578,9 +578,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('purchase_orders'); $x = $this->writer->collection('purchase_orders');
$x->addItems($this->export_data['purchase_orders']); $x->addItems($this->export_data['purchase_orders']);
$this->export_data = null; $this->export_data = null;
@ -591,9 +591,9 @@ $this->export_data = null;
})->all(); })->all();
$x = $this->writer->collection('purchase_order_invitations'); $x = $this->writer->collection('purchase_order_invitations');
$x->addItems($this->export_data['purchase_order_invitations']); $x->addItems($this->export_data['purchase_order_invitations']);
$this->export_data = null; $this->export_data = null;
$this->export_data['bank_integrations'] = $this->company->bank_integrations()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($bank_integration) { $this->export_data['bank_integrations'] = $this->company->bank_integrations()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($bank_integration) {
$bank_integration = $this->transformArrayOfKeys($bank_integration, ['account_id','company_id', 'user_id']); $bank_integration = $this->transformArrayOfKeys($bank_integration, ['account_id','company_id', 'user_id']);
@ -601,9 +601,9 @@ $this->export_data = null;
return $bank_integration->makeVisible(['id','user_id','company_id','account_id','hashed_id']); return $bank_integration->makeVisible(['id','user_id','company_id','account_id','hashed_id']);
})->all(); })->all();
$x = $this->writer->collection('bank_integrations'); $x = $this->writer->collection('bank_integrations');
$x->addItems($this->export_data['bank_integrations']); $x->addItems($this->export_data['bank_integrations']);
$this->export_data = null; $this->export_data = null;
$this->export_data['bank_transactions'] = $this->company->bank_transactions()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($bank_transaction) { $this->export_data['bank_transactions'] = $this->company->bank_transactions()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($bank_transaction) {
$bank_transaction = $this->transformArrayOfKeys($bank_transaction, ['company_id', 'user_id','bank_integration_id','expense_id','ninja_category_id','vendor_id']); $bank_transaction = $this->transformArrayOfKeys($bank_transaction, ['company_id', 'user_id','bank_integration_id','expense_id','ninja_category_id','vendor_id']);
@ -611,9 +611,9 @@ $this->export_data = null;
return $bank_transaction->makeVisible(['id','user_id','company_id']); return $bank_transaction->makeVisible(['id','user_id','company_id']);
})->all(); })->all();
$x = $this->writer->collection('bank_transactions'); $x = $this->writer->collection('bank_transactions');
$x->addItems($this->export_data['bank_transactions']); $x->addItems($this->export_data['bank_transactions']);
$this->export_data = null; $this->export_data = null;
$this->export_data['schedulers'] = $this->company->schedulers()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($scheduler) { $this->export_data['schedulers'] = $this->company->schedulers()->withTrashed()->orderBy('id', 'ASC')->cursor()->map(function ($scheduler) {
$scheduler = $this->transformArrayOfKeys($scheduler, ['company_id', 'user_id']); $scheduler = $this->transformArrayOfKeys($scheduler, ['company_id', 'user_id']);
@ -621,14 +621,14 @@ $this->export_data = null;
return $scheduler->makeVisible(['id','user_id','company_id']); return $scheduler->makeVisible(['id','user_id','company_id']);
})->all(); })->all();
$x = $this->writer->collection('schedulers'); $x = $this->writer->collection('schedulers');
$x->addItems($this->export_data['schedulers']); $x->addItems($this->export_data['schedulers']);
$this->export_data = null; $this->export_data = null;
//write to tmp and email to owner(); //write to tmp and email to owner();
$this->writer->end(); $this->writer->end();
$this->zipAndSend(); $this->zipAndSend();
@ -680,20 +680,20 @@ $this->writer->end();
$zip->close(); $zip->close();
Storage::disk(config('filesystems.default'))->put('backups/'.str_replace(".json", ".zip",$this->file_name), file_get_contents($zip_path)); Storage::disk(config('filesystems.default'))->put('backups/'.str_replace(".json", ".zip", $this->file_name), file_get_contents($zip_path));
if(file_exists($zip_path)) { if(file_exists($zip_path)) {
unlink($zip_path); unlink($zip_path);
} }
if(file_exists($this->file_name)){ if(file_exists($this->file_name)) {
unlink($this->file_name); unlink($this->file_name);
} }
if(Ninja::isSelfHost()) { if(Ninja::isSelfHost()) {
$storage_path = 'backups/'.str_replace(".json", ".zip",$this->file_name); $storage_path = 'backups/'.str_replace(".json", ".zip", $this->file_name);
} else { } else {
$storage_path = Storage::disk(config('filesystems.default'))->path('backups/'.str_replace(".json", ".zip",$this->file_name)); $storage_path = Storage::disk(config('filesystems.default'))->path('backups/'.str_replace(".json", ".zip", $this->file_name));
} }
$url = Cache::get($this->hash); $url = Cache::get($this->hash);

View File

@ -338,7 +338,7 @@ class CompanyImport implements ShouldQueue
private function unzipFile() private function unzipFile()
{ {
$path = TempFile::filePath(Storage::disk(config('filesystems.default'))->get($this->file_location), basename($this->file_location)); $path = TempFile::filePath(Storage::disk(config('filesystems.default'))->get($this->file_location), basename($this->file_location));
$zip = new ZipArchive(); $zip = new ZipArchive();
$res = $zip->open($path); $res = $zip->open($path);
$file_path = sys_get_temp_dir().'/'.sha1(microtime()); $file_path = sys_get_temp_dir().'/'.sha1(microtime());
@ -357,7 +357,7 @@ class CompanyImport implements ShouldQueue
} }
$file_path = "{$file_path}/backup.json"; $file_path = "{$file_path}/backup.json";
nlog($file_path); nlog($file_path);
if (! file_exists($file_path)) { if (! file_exists($file_path)) {

View File

@ -99,10 +99,9 @@ class NinjaMailerJob implements ShouldQueue
} }
$this->nmo->mailable->replyTo($this->nmo->settings->reply_to_email, $reply_to_name); $this->nmo->mailable->replyTo($this->nmo->settings->reply_to_email, $reply_to_name);
}elseif(isset($this->nmo->invitation->user)){ } elseif(isset($this->nmo->invitation->user)) {
$this->nmo->mailable->replyTo($this->nmo->invitation->user->email, $this->nmo->invitation->user->present()->name()); $this->nmo->mailable->replyTo($this->nmo->invitation->user->email, $this->nmo->invitation->user->present()->name());
} } else {
else {
$this->nmo->mailable->replyTo($this->company->owner()->email, $this->company->owner()->present()->name()); $this->nmo->mailable->replyTo($this->company->owner()->email, $this->company->owner()->present()->name());
} }
@ -135,7 +134,7 @@ class NinjaMailerJob implements ShouldQueue
} }
$mailable = $this->nmo->mailable; $mailable = $this->nmo->mailable;
/** May need to re-build it here */ /** May need to re-build it here */
if(Ninja::isHosted() && method_exists($mailable, 'build')) { if(Ninja::isHosted() && method_exists($mailable, 'build')) {
$mailable->build(); $mailable->build();
@ -269,14 +268,14 @@ class NinjaMailerJob implements ShouldQueue
if(Ninja::isHosted() && $this->company->account->isPaid() && $this->nmo->settings->email_sending_method == 'default') { if(Ninja::isHosted() && $this->company->account->isPaid() && $this->nmo->settings->email_sending_method == 'default') {
//check if outlook. //check if outlook.
try{ try {
$email = $this->nmo->to_user->email; $email = $this->nmo->to_user->email;
$domain = explode("@", $email)[1] ?? ""; $domain = explode("@", $email)[1] ?? "";
$dns = dns_get_record($domain, DNS_MX); $dns = dns_get_record($domain, DNS_MX);
$server = $dns[0]["target"]; $server = $dns[0]["target"];
if(stripos($server, "outlook.com") !== false){ if(stripos($server, "outlook.com") !== false) {
$this->mailer = 'postmark'; $this->mailer = 'postmark';
$this->client_postmark_secret = config('services.postmark-outlook.token'); $this->client_postmark_secret = config('services.postmark-outlook.token');
@ -286,8 +285,7 @@ class NinjaMailerJob implements ShouldQueue
return $this; return $this;
} }
} } catch(\Exception $e) {
catch(\Exception $e){
nlog($e->getMessage()); nlog($e->getMessage());
} }
} }
@ -409,7 +407,7 @@ class NinjaMailerJob implements ShouldQueue
private function setHostedMailgunMailer() private function setHostedMailgunMailer()
{ {
if (property_exists($this->nmo->settings, 'email_from_name') && strlen($this->nmo->settings->email_from_name) > 1) { if (property_exists($this->nmo->settings, 'email_from_name') && strlen($this->nmo->settings->email_from_name) > 1) {
$email_from_name = $this->nmo->settings->email_from_name; $email_from_name = $this->nmo->settings->email_from_name;
} else { } else {

View File

@ -16,7 +16,6 @@ namespace App\Jobs\Mail;
*/ */
class NinjaMailerObject class NinjaMailerObject
{ {
/* @var Illuminate\Mail\Mailable */ /* @var Illuminate\Mail\Mailable */
public $mailable; public $mailable;

View File

@ -34,7 +34,10 @@ use App\Notifications\Ninja\EmailBounceNotification;
class ProcessMailgunWebhook implements ShouldQueue class ProcessMailgunWebhook implements ShouldQueue
{ {
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; use Dispatchable;
use InteractsWithQueue;
use Queueable;
use SerializesModels;
public $tries = 1; public $tries = 1;
@ -89,8 +92,9 @@ class ProcessMailgunWebhook implements ShouldQueue
{ {
nlog($this->request); nlog($this->request);
if(!$this->request['event-data']['tags'][0]) if(!$this->request['event-data']['tags'][0]) {
return; return;
}
MultiDB::findAndSetDbByCompanyKey($this->request['event-data']['tags'][0]); MultiDB::findAndSetDbByCompanyKey($this->request['event-data']['tags'][0]);
$company = Company::where('company_key', $this->request['event-data']['tags'][0])->first(); $company = Company::where('company_key', $this->request['event-data']['tags'][0])->first();
@ -112,7 +116,7 @@ class ProcessMailgunWebhook implements ShouldQueue
if (isset($this->request['event-details']['delivery-status']['message'])) { if (isset($this->request['event-details']['delivery-status']['message'])) {
$this->invitation->email_error = $this->request['event-details']['delivery-status']['message']; $this->invitation->email_error = $this->request['event-details']['delivery-status']['message'];
} }
switch ($this->request['event-data']['event']) { switch ($this->request['event-data']['event']) {
case 'delivered': case 'delivered':
return $this->processDelivery(); return $this->processDelivery();
@ -128,50 +132,50 @@ class ProcessMailgunWebhook implements ShouldQueue
} }
} }
/* /*
{ {
"signature": { "signature": {
"token": "7f388cf8096aa0bca1477aee9d91e156c61f8fa8282c7f1c0c", "token": "7f388cf8096aa0bca1477aee9d91e156c61f8fa8282c7f1c0c",
"timestamp": "1705376308", "timestamp": "1705376308",
"signature": "a22b7c3dd4861e27a1664cef3611a1954c0665cfcaca9b8f35ee216243a4ce3f" "signature": "a22b7c3dd4861e27a1664cef3611a1954c0665cfcaca9b8f35ee216243a4ce3f"
}, },
"event-data": { "event-data": {
"id": "Ase7i2zsRYeDXztHGENqRA", "id": "Ase7i2zsRYeDXztHGENqRA",
"timestamp": 1521243339.873676, "timestamp": 1521243339.873676,
"log-level": "info", "log-level": "info",
"event": "opened", "event": "opened",
"message": { "message": {
"headers": { "headers": {
"message-id": "20130503182626.18666.16540@mail.invoicing.co" "message-id": "20130503182626.18666.16540@mail.invoicing.co"
}
},
"recipient": "alice@example.com",
"recipient-domain": "example.com",
"ip": "50.56.129.169",
"geolocation": {
"country": "US",
"region": "CA",
"city": "San Francisco"
},
"client-info": {
"client-os": "Linux",
"device-type": "desktop",
"client-name": "Chrome",
"client-type": "browser",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"
},
"campaigns": [],
"tags": [
"my_tag_1",
"my_tag_2"
],
"user-variables": {
"my_var_1": "Mailgun Variable #1",
"my-var-2": "awesome"
}
} }
},
"recipient": "alice@example.com",
"recipient-domain": "example.com",
"ip": "50.56.129.169",
"geolocation": {
"country": "US",
"region": "CA",
"city": "San Francisco"
},
"client-info": {
"client-os": "Linux",
"device-type": "desktop",
"client-name": "Chrome",
"client-type": "browser",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"
},
"campaigns": [],
"tags": [
"my_tag_1",
"my_tag_2"
],
"user-variables": {
"my_var_1": "Mailgun Variable #1",
"my-var-2": "awesome"
} }
} */
}
*/
private function processOpen() private function processOpen()
{ {
$this->invitation->opened_date = now(); $this->invitation->opened_date = now();
@ -180,8 +184,9 @@ class ProcessMailgunWebhook implements ShouldQueue
$sl = $this->getSystemLog($this->request['MessageID']); $sl = $this->getSystemLog($this->request['MessageID']);
/** Prevents Gmail tracking from firing inappropriately */ /** Prevents Gmail tracking from firing inappropriately */
if($this->request['signature']['timestamp'] < $sl->log['signature']['timestamp'] + 3) if($this->request['signature']['timestamp'] < $sl->log['signature']['timestamp'] + 3) {
return; return;
}
$event = [ $event = [
'bounce_id' => '', 'bounce_id' => '',
@ -201,74 +206,74 @@ class ProcessMailgunWebhook implements ShouldQueue
} }
/* /*
{ {
"signature": { "signature": {
"token": "70b91a64ed0f1bdf90fb9c6ea7e3c31d5792a3d0945ffc20fe", "token": "70b91a64ed0f1bdf90fb9c6ea7e3c31d5792a3d0945ffc20fe",
"timestamp": "1705376276", "timestamp": "1705376276",
"signature": "ba96f841fc236e1bf5840b02fad512d0bd15b0731b5e6b154764c7a05f7ee999" "signature": "ba96f841fc236e1bf5840b02fad512d0bd15b0731b5e6b154764c7a05f7ee999"
},
"event-data": {
"id": "CPgfbmQMTCKtHW6uIWtuVe",
"timestamp": 1521472262.908181,
"log-level": "info",
"event": "delivered",
"delivery-status": {
"tls": true,
"mx-host": "smtp-in.example.com",
"code": 250,
"description": "",
"session-seconds": 0.4331989288330078,
"utf8": true,
"attempt-no": 1,
"message": "OK",
"certificate-verified": true
},
"flags": {
"is-routed": false,
"is-authenticated": true,
"is-system-test": false,
"is-test-mode": false
},
"envelope": {
"transport": "smtp",
"sender": "bob@mail.invoicing.co",
"sending-ip": "209.61.154.250",
"targets": "alice@example.com"
},
"message": {
"headers": {
"to": "Alice <alice@example.com>",
"message-id": "20130503182626.18666.16540@mail.invoicing.co",
"from": "Bob <bob@mail.invoicing.co>",
"subject": "Test delivered webhook"
}, },
"attachments": [], "event-data": {
"size": 111 "id": "CPgfbmQMTCKtHW6uIWtuVe",
}, "timestamp": 1521472262.908181,
"recipient": "alice@example.com", "log-level": "info",
"recipient-domain": "example.com", "event": "delivered",
"storage": { "delivery-status": {
"url": "https://se.api.mailgun.net/v3/domains/mail.invoicing.co/messages/message_key", "tls": true,
"key": "message_key" "mx-host": "smtp-in.example.com",
}, "code": 250,
"campaigns": [], "description": "",
"tags": [ "session-seconds": 0.4331989288330078,
"my_tag_1", "utf8": true,
"my_tag_2" "attempt-no": 1,
], "message": "OK",
"user-variables": { "certificate-verified": true
"my_var_1": "Mailgun Variable #1", },
"my-var-2": "awesome" "flags": {
"is-routed": false,
"is-authenticated": true,
"is-system-test": false,
"is-test-mode": false
},
"envelope": {
"transport": "smtp",
"sender": "bob@mail.invoicing.co",
"sending-ip": "209.61.154.250",
"targets": "alice@example.com"
},
"message": {
"headers": {
"to": "Alice <alice@example.com>",
"message-id": "20130503182626.18666.16540@mail.invoicing.co",
"from": "Bob <bob@mail.invoicing.co>",
"subject": "Test delivered webhook"
},
"attachments": [],
"size": 111
},
"recipient": "alice@example.com",
"recipient-domain": "example.com",
"storage": {
"url": "https://se.api.mailgun.net/v3/domains/mail.invoicing.co/messages/message_key",
"key": "message_key"
},
"campaigns": [],
"tags": [
"my_tag_1",
"my_tag_2"
],
"user-variables": {
"my_var_1": "Mailgun Variable #1",
"my-var-2": "awesome"
}
}
} }
} */
}
*/
private function processDelivery() private function processDelivery()
{ {
$this->invitation->email_status = 'delivered'; $this->invitation->email_status = 'delivered';
$this->invitation->save(); $this->invitation->save();
$sl = $this->getSystemLog($this->request['MessageID']); $sl = $this->getSystemLog($this->request['MessageID']);
if($sl) { if($sl) {
@ -384,47 +389,47 @@ class ProcessMailgunWebhook implements ShouldQueue
} }
/* /*
{ {
"signature": { "signature": {
"token": "d7be371deef49c8b187119df295e3eb17fd1974d513a4be2cb", "token": "d7be371deef49c8b187119df295e3eb17fd1974d513a4be2cb",
"timestamp": "1705376380", "timestamp": "1705376380",
"signature": "52f31c75b492d67be906423279e0effe563e28790ee65ba23a1b30006df649df" "signature": "52f31c75b492d67be906423279e0effe563e28790ee65ba23a1b30006df649df"
},
"event-data": {
"id": "-Agny091SquKnsrW2NEKUA",
"timestamp": 1521233123.501324,
"log-level": "warn",
"event": "complained",
"envelope": {
"sending-ip": "173.193.210.33"
},
"flags": {
"is-test-mode": false
},
"message": {
"headers": {
"to": "Alice <alice@example.com>",
"message-id": "20110215055645.25246.63817@mail.invoicing.co",
"from": "Bob <bob@mail.invoicing.co>",
"subject": "Test complained webhook"
}, },
"attachments": [], "event-data": {
"size": 111 "id": "-Agny091SquKnsrW2NEKUA",
}, "timestamp": 1521233123.501324,
"recipient": "alice@example.com", "log-level": "warn",
"campaigns": [], "event": "complained",
"tags": [ "envelope": {
"my_tag_1", "sending-ip": "173.193.210.33"
"my_tag_2" },
], "flags": {
"user-variables": { "is-test-mode": false
"my_var_1": "Mailgun Variable #1", },
"my-var-2": "awesome" "message": {
"headers": {
"to": "Alice <alice@example.com>",
"message-id": "20110215055645.25246.63817@mail.invoicing.co",
"from": "Bob <bob@mail.invoicing.co>",
"subject": "Test complained webhook"
},
"attachments": [],
"size": 111
},
"recipient": "alice@example.com",
"campaigns": [],
"tags": [
"my_tag_1",
"my_tag_2"
],
"user-variables": {
"my_var_1": "Mailgun Variable #1",
"my-var-2": "awesome"
}
}
} }
} */
}
*/
private function processSpamComplaint() private function processSpamComplaint()
{ {
$this->invitation->email_status = 'spam'; $this->invitation->email_status = 'spam';

View File

@ -56,7 +56,7 @@ class TaskScheduler implements ShouldQueue
->where('next_run', '<=', now()) ->where('next_run', '<=', now())
->cursor() ->cursor()
->each(function ($scheduler) { ->each(function ($scheduler) {
nlog("Doing job {$scheduler->name}"); nlog("Doing job {$scheduler->name}");
try { try {
@ -81,7 +81,7 @@ class TaskScheduler implements ShouldQueue
->where('next_run', '<=', now()) ->where('next_run', '<=', now())
->cursor() ->cursor()
->each(function ($scheduler) { ->each(function ($scheduler) {
nlog("Doing job {$scheduler->name}"); nlog("Doing job {$scheduler->name}");
try { try {

View File

@ -106,7 +106,7 @@ class EmailPayment implements ShouldQueue
(new NinjaMailerJob($nmo))->handle(); (new NinjaMailerJob($nmo))->handle();
event(new PaymentWasEmailed($this->payment, $this->payment->company, $this->contact, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); event(new PaymentWasEmailed($this->payment, $this->payment->company, $this->contact, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
} }
private function emailAllContacts($email_builder): void private function emailAllContacts($email_builder): void

View File

@ -1144,7 +1144,7 @@ class Import implements ShouldQueue
); );
$key = "invoices_{$resource['id']}"; $key = "invoices_{$resource['id']}";
nlog($invoice->id); nlog($invoice->id);
$this->ids['invoices'][$key] = [ $this->ids['invoices'][$key] = [
@ -1409,7 +1409,7 @@ class Import implements ShouldQueue
} }
nlog($payment->id); nlog($payment->id);
$old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id; $old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id;
$this->ids['payments'] = [ $this->ids['payments'] = [
@ -1528,8 +1528,8 @@ class Import implements ShouldQueue
} }
} }
// throw new Exception("Resource invoice/quote document not available."); // throw new Exception("Resource invoice/quote document not available.");
} }
if (array_key_exists('expense_id', $resource) && $resource['expense_id'] && array_key_exists('expenses', $this->ids)) { if (array_key_exists('expense_id', $resource) && $resource['expense_id'] && array_key_exists('expenses', $this->ids)) {
@ -2078,7 +2078,7 @@ class Import implements ShouldQueue
nlog(print_r($exception->getMessage(), 1)); nlog(print_r($exception->getMessage(), 1));
// if (Ninja::isHosted()) { // if (Ninja::isHosted()) {
app('sentry')->captureException($exception); app('sentry')->captureException($exception);
// } // }
} }

View File

@ -38,7 +38,7 @@ class ReminderJob implements ShouldQueue
use SerializesModels; use SerializesModels;
use MakesReminders; use MakesReminders;
use MakesDates; use MakesDates;
public $tries = 1; public $tries = 1;
public function __construct() public function __construct()

View File

@ -59,7 +59,7 @@ class InvoiceEmailFailedActivity implements ShouldQueue
$fields->company_id = $event->invitation->invoice->company_id; $fields->company_id = $event->invitation->invoice->company_id;
$fields->activity_type_id = Activity::EMAIL_INVOICE_FAILED; $fields->activity_type_id = Activity::EMAIL_INVOICE_FAILED;
$fields->notes = $event->message ?? ''; $fields->notes = $event->message ?? '';
$this->activity_repo->save($fields, $event->invitation->invoice, $event->event_vars); $this->activity_repo->save($fields, $event->invitation->invoice, $event->event_vars);
} }
} }

View File

@ -37,8 +37,9 @@ class InvoiceFailedEmailNotification
{ {
MultiDB::setDb($event->company->db); MultiDB::setDb($event->company->db);
if(Cache::has("invoice_failed_email_notification_{$event->invitation->key}")) if(Cache::has("invoice_failed_email_notification_{$event->invitation->key}")) {
return; return;
}
$invoice = $event->invitation->invoice; $invoice = $event->invitation->invoice;

View File

@ -326,7 +326,7 @@ class BillingPortalPurchase extends Component
$this->contact = $contact; $this->contact = $contact;
if ($contact->showRff()) { if ($contact->showRff()) {
return $this->rff(); return $this->rff();
} }
Auth::guard('contact')->loginUsingId($contact->id, true); Auth::guard('contact')->loginUsingId($contact->id, true);

View File

@ -131,7 +131,7 @@ class PdfSlot extends Component
$this->settings = $this->entity->client ? $this->entity->client->getMergedSettings() : $this->entity->company->settings; $this->settings = $this->entity->client ? $this->entity->client->getMergedSettings() : $this->entity->company->settings;
$this->html_entity_option = $this->entity->client ? $this->entity->client->getSetting('show_pdfhtml_on_mobile') : $this->entity->company->getSetting('show_pdfhtml_on_mobile'); $this->html_entity_option = $this->entity->client ? $this->entity->client->getSetting('show_pdfhtml_on_mobile') : $this->entity->company->getSetting('show_pdfhtml_on_mobile');
$this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_columns); $this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_columns);
$this->show_line_total = in_array('$product.line_total', $this->settings->pdf_variables->product_columns); $this->show_line_total = in_array('$product.line_total', $this->settings->pdf_variables->product_columns);
$this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_columns); $this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_columns);

View File

@ -76,13 +76,13 @@ class EntityCreatedObject
$mail_obj->text_view = 'email.template.text'; $mail_obj->text_view = 'email.template.text';
$content = ctrans( $content = ctrans(
$this->template_body, $this->template_body,
[ [
'amount' => $mail_obj->amount, 'amount' => $mail_obj->amount,
'vendor' => $this->entity->vendor->present()->name(), 'vendor' => $this->entity->vendor->present()->name(),
'purchase_order' => $this->entity->number, 'purchase_order' => $this->entity->number,
] ]
); );
$mail_obj->data = [ $mail_obj->data = [
'title' => $mail_obj->subject, 'title' => $mail_obj->subject,

View File

@ -132,15 +132,15 @@ class EntityFailedSendObject
$html_variables = (new HtmlEngine($this->invitation))->makeValues(); $html_variables = (new HtmlEngine($this->invitation))->makeValues();
$signature = str_replace(array_keys($html_variables), array_values($html_variables), $signature); $signature = str_replace(array_keys($html_variables), array_values($html_variables), $signature);
$content = ctrans( $content = ctrans(
$this->template_body, $this->template_body,
[ [
'amount' => $this->getAmount(), 'amount' => $this->getAmount(),
'client' => $this->contact->present()->name(), 'client' => $this->contact->present()->name(),
'invoice' => $this->entity->number, 'invoice' => $this->entity->number,
'error' => $this->message_content ?? '', 'error' => $this->message_content ?? '',
'contact' => $this->contact->present()->name(), 'contact' => $this->contact->present()->name(),
] ]
); );
$data = [ $data = [
"title" => $this->getSubject(), "title" => $this->getSubject(),

View File

@ -12,6 +12,7 @@
namespace App\Mail\Admin; namespace App\Mail\Admin;
use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailable;
//@deprecated? //@deprecated?
class EntityNotificationMailer extends Mailable class EntityNotificationMailer extends Mailable
{ {

View File

@ -85,8 +85,8 @@ class EntityPaidObject
$invoice_texts = substr($invoice_texts, 0, -1); $invoice_texts = substr($invoice_texts, 0, -1);
$content = ctrans( $content = ctrans(
'texts.notification_payment_paid', 'texts.notification_payment_paid',
['amount' => $amount, ['amount' => $amount,
'client' => $this->payment->client->present()->name(), 'client' => $this->payment->client->present()->name(),
'invoice' => $invoice_texts, 'invoice' => $invoice_texts,
] ]

View File

@ -98,7 +98,7 @@ class EntitySentObject
$mail_obj->markdown = 'email.admin.generic'; $mail_obj->markdown = 'email.admin.generic';
$mail_obj->tag = $this->company->company_key; $mail_obj->tag = $this->company->company_key;
} }
$mail_obj->text_view = 'email.template.text'; $mail_obj->text_view = 'email.template.text';
return $mail_obj; return $mail_obj;
@ -186,7 +186,7 @@ class EntitySentObject
{ {
$settings = $this->entity->client->getMergedSettings(); $settings = $this->entity->client->getMergedSettings();
$content = $this->getMessage(); $content = $this->getMessage();
return [ return [
'title' => $this->getSubject(), 'title' => $this->getSubject(),
'content' => $content, 'content' => $content,

View File

@ -98,13 +98,13 @@ class EntityViewedObject
} }
$content = ctrans( $content = ctrans(
"texts.notification_{$this->entity_type}_viewed", "texts.notification_{$this->entity_type}_viewed",
[ [
'amount' => $this->getAmount(), 'amount' => $this->getAmount(),
'client' => $this->contact->present()->name(), 'client' => $this->contact->present()->name(),
'invoice' => $this->entity->number, 'invoice' => $this->entity->number,
] ]
); );
$data = [ $data = [
'title' => $this->getSubject(), 'title' => $this->getSubject(),

View File

@ -60,12 +60,12 @@ class InventoryNotificationObject
private function getData() private function getData()
{ {
$content = ctrans( $content = ctrans(
'texts.inventory_notification_body', 'texts.inventory_notification_body',
['amount' => $this->getAmount(), ['amount' => $this->getAmount(),
'product' => $this->product->product_key.': '.$this->product->notes, 'product' => $this->product->product_key.': '.$this->product->notes,
] ]
); );
$data = [ $data = [
'title' => $this->getSubject(), 'title' => $this->getSubject(),
'content' => $content, 'content' => $content,

View File

@ -75,14 +75,14 @@ class PaymentFailureObject
{ {
$signature = $this->client->getSetting('email_signature'); $signature = $this->client->getSetting('email_signature');
$content = ctrans( $content = ctrans(
'texts.notification_invoice_payment_failed', 'texts.notification_invoice_payment_failed',
[ [
'client' => $this->client->present()->name(), 'client' => $this->client->present()->name(),
'invoice' => $this->getDescription(), 'invoice' => $this->getDescription(),
'amount' => Number::formatMoney($this->amount, $this->client), 'amount' => Number::formatMoney($this->amount, $this->client),
] ]
); );
$data = [ $data = [
'title' => ctrans( 'title' => ctrans(
'texts.payment_failed_subject', 'texts.payment_failed_subject',

View File

@ -74,14 +74,14 @@ class PurchaseOrderAcceptedObject
$settings = $this->company->settings; $settings = $this->company->settings;
$content = ctrans( $content = ctrans(
'texts.notification_purchase_order_accepted', 'texts.notification_purchase_order_accepted',
[ [
'amount' => $this->getAmount(), 'amount' => $this->getAmount(),
'vendor' => $this->purchase_order->vendor->present()->name(), 'vendor' => $this->purchase_order->vendor->present()->name(),
'purchase_order' => $this->purchase_order->number, 'purchase_order' => $this->purchase_order->number,
] ]
); );
$data = [ $data = [
'title' => $this->getSubject(), 'title' => $this->getSubject(),
'content' => $content, 'content' => $content,

View File

@ -73,13 +73,13 @@ class QuoteApprovedObject
{ {
$settings = $this->quote->client->getMergedSettings(); $settings = $this->quote->client->getMergedSettings();
$content = ctrans( $content = ctrans(
'texts.notification_quote_approved', 'texts.notification_quote_approved',
[ [
'amount' => $this->getAmount(), 'amount' => $this->getAmount(),
'client' => $this->quote->client->present()->name(), 'client' => $this->quote->client->present()->name(),
'invoice' => $this->quote->number, 'invoice' => $this->quote->number,
] ]
); );
$data = [ $data = [
'title' => $this->getSubject(), 'title' => $this->getSubject(),

View File

@ -73,13 +73,13 @@ class QuoteExpiredObject
{ {
$settings = $this->quote->client->getMergedSettings(); $settings = $this->quote->client->getMergedSettings();
$content = ctrans( $content = ctrans(
'texts.notification_quote_expired', 'texts.notification_quote_expired',
[ [
'amount' => $this->getAmount(), 'amount' => $this->getAmount(),
'client' => $this->quote->client->present()->name(), 'client' => $this->quote->client->present()->name(),
'invoice' => $this->quote->number, 'invoice' => $this->quote->number,
] ]
); );
$data = [ $data = [
'title' => $this->getSubject(), 'title' => $this->getSubject(),

View File

@ -125,7 +125,7 @@ class BaseEmailEngine implements EngineInterface
{ {
if (! empty($this->variables)) { if (! empty($this->variables)) {
$text = str_replace(['$paymentLink', '$viewButton', '$view_button', '$viewLink', '$view_link'], '$view_url', $text); $text = str_replace(['$paymentLink', '$viewButton', '$view_button', '$viewLink', '$view_link'], '$view_url', $text);
$text = str_replace(array_keys($this->variables), array_values($this->variables), $text); $text = str_replace(array_keys($this->variables), array_values($this->variables), $text);
$text = str_replace(array_keys($this->variables), array_values($this->variables), $text); $text = str_replace(array_keys($this->variables), array_values($this->variables), $text);

View File

@ -134,9 +134,9 @@ class InvoiceEmailEngine extends BaseEmailEngine
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->invoice->numberFormatter().'.pdf']]); $this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->invoice->numberFormatter().'.pdf']]);
} }
// $hash = Str::uuid(); // $hash = Str::uuid();
// $url = \Illuminate\Support\Facades\URL::temporarySignedRoute('protected_download', now()->addHour(), ['hash' => $hash]); // $url = \Illuminate\Support\Facades\URL::temporarySignedRoute('protected_download', now()->addHour(), ['hash' => $hash]);
// Cache::put($hash, $url, now()->addHour()); // Cache::put($hash, $url, now()->addHour());
//attach third party documents //attach third party documents
if ($this->client->getSetting('document_email_attachment') !== false && $this->invoice->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) { if ($this->client->getSetting('document_email_attachment') !== false && $this->invoice->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
@ -155,7 +155,7 @@ class InvoiceEmailEngine extends BaseEmailEngine
// Storage::url // Storage::url
$this->invoice->documents()->where('is_public', true)->cursor()->each(function ($document) { $this->invoice->documents()->where('is_public', true)->cursor()->each(function ($document) {
if ($document->size > $this->max_attachment_size) { if ($document->size > $this->max_attachment_size) {
$hash = Str::random(64); $hash = Str::random(64);
Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7)); Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7));
@ -193,9 +193,9 @@ class InvoiceEmailEngine extends BaseEmailEngine
->each(function ($expense) { ->each(function ($expense) {
$expense->documents()->where('is_public', true)->cursor()->each(function ($document) { $expense->documents()->where('is_public', true)->cursor()->each(function ($document) {
if ($document->size > $this->max_attachment_size) { if ($document->size > $this->max_attachment_size) {
$hash = Str::random(64); $hash = Str::random(64);
Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7)); Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7));
$this->setAttachmentLinks(["<a class='doc_links' href='" . URL::signedRoute('documents.hashed_download', ['hash' => $hash]) ."'>". $document->name ."</a>"]); $this->setAttachmentLinks(["<a class='doc_links' href='" . URL::signedRoute('documents.hashed_download', ['hash' => $hash]) ."'>". $document->name ."</a>"]);
} else { } else {
@ -217,9 +217,9 @@ class InvoiceEmailEngine extends BaseEmailEngine
->each(function ($task) { ->each(function ($task) {
$task->documents()->where('is_public', true)->cursor()->each(function ($document) { $task->documents()->where('is_public', true)->cursor()->each(function ($document) {
if ($document->size > $this->max_attachment_size) { if ($document->size > $this->max_attachment_size) {
$hash = Str::random(64); $hash = Str::random(64);
Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7)); Cache::put($hash, ['db' => $this->invoice->company->db, 'doc_hash' => $document->hash], now()->addDays(7));
$this->setAttachmentLinks(["<a class='doc_links' href='" . URL::signedRoute('documents.hashed_download', ['hash' => $hash]) ."'>". $document->name ."</a>"]); $this->setAttachmentLinks(["<a class='doc_links' href='" . URL::signedRoute('documents.hashed_download', ['hash' => $hash]) ."'>". $document->name ."</a>"]);
} else { } else {

View File

@ -125,7 +125,7 @@ class QuoteEmailEngine extends BaseEmailEngine
// Storage::url // Storage::url
$this->quote->documents()->where('is_public', true)->cursor()->each(function ($document) { $this->quote->documents()->where('is_public', true)->cursor()->each(function ($document) {
if ($document->size > $this->max_attachment_size) { if ($document->size > $this->max_attachment_size) {
$hash = Str::random(64); $hash = Str::random(64);
Cache::put($hash, ['db' => $this->quote->company->db, 'doc_hash' => $document->hash], now()->addDays(7)); Cache::put($hash, ['db' => $this->quote->company->db, 'doc_hash' => $document->hash], now()->addDays(7));
@ -137,7 +137,7 @@ class QuoteEmailEngine extends BaseEmailEngine
$this->quote->company->documents()->where('is_public', true)->cursor()->each(function ($document) { $this->quote->company->documents()->where('is_public', true)->cursor()->each(function ($document) {
if ($document->size > $this->max_attachment_size) { if ($document->size > $this->max_attachment_size) {
$hash = Str::random(64); $hash = Str::random(64);
Cache::put($hash, ['db' => $this->quote->company->db, 'doc_hash' => $document->hash], now()->addDays(7)); Cache::put($hash, ['db' => $this->quote->company->db, 'doc_hash' => $document->hash], now()->addDays(7));

View File

@ -19,7 +19,6 @@ use Illuminate\Support\Facades\App;
class UserLoggedIn extends Mailable class UserLoggedIn extends Mailable
{ {
/** /**
* Create a new message instance. * Create a new message instance.
* *

View File

@ -316,7 +316,7 @@ class BaseModel extends Model
return "data:application/pdf;base64,".base64_encode((new CreateRawPdf($invitation))->handle()); return "data:application/pdf;base64,".base64_encode((new CreateRawPdf($invitation))->handle());
} }
/** /**
* Takes a entity prop as first argument * Takes a entity prop as first argument
* along with an array of variables and performs * along with an array of variables and performs
@ -328,9 +328,10 @@ class BaseModel extends Model
*/ */
public function parseHtmlVariables(string $field, array $variables): string public function parseHtmlVariables(string $field, array $variables): string
{ {
if(!$this->{$field}) if(!$this->{$field}) {
return ''; return '';
}
$section = strtr($this->{$field}, $variables['labels']); $section = strtr($this->{$field}, $variables['labels']);
return strtr($section, $variables['values']); return strtr($section, $variables['values']);

View File

@ -254,7 +254,7 @@ class ClientContact extends Authenticatable implements HasLocalePreference
{ {
return $this->hasMany(CreditInvitation::class); return $this->hasMany(CreditInvitation::class);
} }
public function sendPasswordResetNotification($token) public function sendPasswordResetNotification($token)
{ {
$this->token = $token; $this->token = $token;

View File

@ -201,7 +201,8 @@ class CompanyUser extends Pivot
* @return bool * @return bool
*/ */
public function portalType(): bool public function portalType(): bool
{ nlog(isset($this->react_settings->react_notification_link) && $this->react_settings->react_notification_link); {
nlog(isset($this->react_settings->react_notification_link) && $this->react_settings->react_notification_link);
return isset($this->react_settings->react_notification_link) && $this->react_settings->react_notification_link; return isset($this->react_settings->react_notification_link) && $this->react_settings->react_notification_link;
} }

View File

@ -101,7 +101,7 @@ class InvoiceInvitation extends BaseModel
{ {
return 'invoice'; return 'invoice';
} }
public function entityType() public function entityType()
{ {
return Invoice::class; return Invoice::class;

View File

@ -325,8 +325,9 @@ class Payment extends BaseModel
return '<h6><span class="badge badge-danger">'.ctrans('texts.payment_status_3').'</span></h6>'; return '<h6><span class="badge badge-danger">'.ctrans('texts.payment_status_3').'</span></h6>';
case self::STATUS_COMPLETED: case self::STATUS_COMPLETED:
if($this->amount > $this->applied) if($this->amount > $this->applied) {
return '<h6><span class="badge badge-info">' . ctrans('texts.partially_unapplied') . '</span></h6>'; return '<h6><span class="badge badge-info">' . ctrans('texts.partially_unapplied') . '</span></h6>';
}
return '<h6><span class="badge badge-info">'.ctrans('texts.payment_status_4').'</span></h6>'; return '<h6><span class="badge badge-info">'.ctrans('texts.payment_status_4').'</span></h6>';
case self::STATUS_PARTIALLY_REFUNDED: case self::STATUS_PARTIALLY_REFUNDED:

View File

@ -231,7 +231,7 @@ class CreditCard implements MethodInterface
try { try {
$response = $this->checkout->gateway->getPaymentsClient()->requestPayment($paymentRequest); $response = $this->checkout->gateway->getPaymentsClient()->requestPayment($paymentRequest);
if($this->checkout->company_gateway->update_details && isset($response['customer'])) { if($this->checkout->company_gateway->update_details && isset($response['customer'])) {
$this->checkout->updateCustomer($response['customer']['id'] ?? ''); $this->checkout->updateCustomer($response['customer']['id'] ?? '');
} }

View File

@ -213,9 +213,10 @@ class CheckoutComPaymentDriver extends BaseDriver
public function refund(Payment $payment, $amount, $return_client_response = false) public function refund(Payment $payment, $amount, $return_client_response = false)
{ {
$this->init(); $this->init();
if($this->company_gateway->update_details) if($this->company_gateway->update_details) {
$this->updateCustomer(); $this->updateCustomer();
}
$request = new RefundRequest(); $request = new RefundRequest();
$request->reference = "{$payment->transaction_reference} ".now(); $request->reference = "{$payment->transaction_reference} ".now();
@ -332,11 +333,12 @@ class CheckoutComPaymentDriver extends BaseDriver
public function updateCustomer($customer_id = null) public function updateCustomer($customer_id = null)
{ {
if(!$customer_id) if(!$customer_id) {
return; return;
}
try { try {
$request = new CustomerRequest(); $request = new CustomerRequest();
$phone = new Phone(); $phone = new Phone();
@ -387,7 +389,7 @@ class CheckoutComPaymentDriver extends BaseDriver
$this->payment_hash = $payment_hash; $this->payment_hash = $payment_hash;
$this->init(); $this->init();
$paymentRequest = $this->bootTokenRequest($cgt->token); $paymentRequest = $this->bootTokenRequest($cgt->token);
$paymentRequest->amount = $this->convertToCheckoutAmount($amount, $this->client->getCurrencyCode()); $paymentRequest->amount = $this->convertToCheckoutAmount($amount, $this->client->getCurrencyCode());
$paymentRequest->reference = '#'.$invoice->number.' - '.now(); $paymentRequest->reference = '#'.$invoice->number.' - '.now();

View File

@ -91,7 +91,7 @@ class GoCardlessPaymentDriver extends BaseDriver
if ($this->client->currency()->code === 'GBP') { if ($this->client->currency()->code === 'GBP') {
$types[] = GatewayType::INSTANT_BANK_PAY; $types[] = GatewayType::INSTANT_BANK_PAY;
} }
return $types; return $types;
} }

View File

@ -272,10 +272,9 @@ class PayPalPPCPPaymentDriver extends BaseDriver
//capture //capture
$orderID = $response['orderID']; $orderID = $response['orderID'];
if($this->company_gateway->require_shipping_address) if($this->company_gateway->require_shipping_address) {
{
$shipping_data = $shipping_data =
[[ [[
"op" => "replace", "op" => "replace",
"path" => "/purchase_units/@reference_id=='default'/shipping/address", "path" => "/purchase_units/@reference_id=='default'/shipping/address",
@ -288,7 +287,7 @@ class PayPalPPCPPaymentDriver extends BaseDriver
"country_code" => $this->client->present()->shipping_country_code(), "country_code" => $this->client->present()->shipping_country_code(),
], ],
]]; ]];
$r = $this->gatewayRequest("/v2/checkout/orders/{$orderID}", 'patch', $shipping_data); $r = $this->gatewayRequest("/v2/checkout/orders/{$orderID}", 'patch', $shipping_data);
} }
@ -497,7 +496,7 @@ class PayPalPPCPPaymentDriver extends BaseDriver
"country_code" => $this->client->present()->shipping_country_code(), "country_code" => $this->client->present()->shipping_country_code(),
], ],
] ]
: null; : null;
} }

View File

@ -42,7 +42,7 @@ class PayPalRestPaymentDriver extends BaseDriver
private string $paypal_payment_method = ''; private string $paypal_payment_method = '';
private ?int $gateway_type_id = null; private ?int $gateway_type_id = null;
protected mixed $access_token = null; protected mixed $access_token = null;
protected ?Carbon $token_expiry = null; protected ?Carbon $token_expiry = null;
@ -451,7 +451,7 @@ class PayPalRestPaymentDriver extends BaseDriver
"country_code" => $this->client->present()->shipping_country_code(), "country_code" => $this->client->present()->shipping_country_code(),
], ],
] ]
: null; : null;
} }

View File

@ -33,7 +33,7 @@ class MultiDBProvider extends ServiceProvider
*/ */
public function register() public function register()
{ {
$this->app['events']->listen( $this->app['events']->listen(
JobProcessing::class, JobProcessing::class,
function ($event) { function ($event) {

View File

@ -85,14 +85,14 @@ class ClientContactRepository extends BaseRepository
if (array_key_exists('password', $contact) && strlen($contact['password']) > 1 && strlen($update_contact->email) > 3) { //updating on a blank contact email will cause large table scanning if (array_key_exists('password', $contact) && strlen($contact['password']) > 1 && strlen($update_contact->email) > 3) { //updating on a blank contact email will cause large table scanning
$update_contact->password = Hash::make($contact['password']); $update_contact->password = Hash::make($contact['password']);
ClientContact::withTrashed() ClientContact::withTrashed()
->where('company_id', $client->company_id) ->where('company_id', $client->company_id)
->where('client_id', $client->id) ->where('client_id', $client->id)
->where('email', $update_contact->email)->cursor() ->where('email', $update_contact->email)->cursor()
->each(function ($saveable_contact) use ($update_contact){ ->each(function ($saveable_contact) use ($update_contact) {
$saveable_contact->password = $update_contact->password; $saveable_contact->password = $update_contact->password;
$saveable_contact->save(); $saveable_contact->save();
}); });
} }
if (array_key_exists('email', $contact)) { if (array_key_exists('email', $contact)) {

View File

@ -26,7 +26,8 @@ use Illuminate\Database\QueryException;
class ClientService class ClientService
{ {
use MakesDates, GeneratesCounter; use MakesDates;
use GeneratesCounter;
private string $client_start_date; private string $client_start_date;
@ -153,9 +154,10 @@ class ClientService
{ {
$x = 1; $x = 1;
if(isset($this->client->number)) if(isset($this->client->number)) {
return $this; return $this;
}
do { do {
try { try {
$this->client->number = $this->getNextClientNumber($this->client); $this->client->number = $this->getNextClientNumber($this->client);

View File

@ -45,7 +45,7 @@ class InstantPayment
public function run() public function run()
{ {
nlog($this->request->all()); nlog($this->request->all());
$cc = auth()->guard('contact')->user(); $cc = auth()->guard('contact')->user();
$cc->first_name = $this->request->contact_first_name; $cc->first_name = $this->request->contact_first_name;

View File

@ -465,7 +465,7 @@ class Email implements ShouldQueue
private function setHostedMailgunMailer() private function setHostedMailgunMailer()
{ {
if (property_exists($this->email_object->settings, 'email_from_name') && strlen($this->email_object->settings->email_from_name) > 1) { if (property_exists($this->email_object->settings, 'email_from_name') && strlen($this->email_object->settings->email_from_name) > 1) {
$email_from_name = $this->email_object->settings->email_from_name; $email_from_name = $this->email_object->settings->email_from_name;
} else { } else {
@ -477,7 +477,7 @@ class Email implements ShouldQueue
} }
/** /**
* Sets the mail driver to use and applies any specific configuration * Sets the mail driver to use and applies any specific configuration
* the the mailable * the the mailable
@ -495,7 +495,7 @@ class Email implements ShouldQueue
if(Ninja::isHosted() && $this->company->account->isPaid() && $this->email_object->settings->email_sending_method == 'default') { if(Ninja::isHosted() && $this->company->account->isPaid() && $this->email_object->settings->email_sending_method == 'default') {
try { try {
$address_object = reset($this->email_object->to); $address_object = reset($this->email_object->to);
$email = $address_object->address ?? ''; $email = $address_object->address ?? '';
$domain = explode("@", $email)[1] ?? ""; $domain = explode("@", $email)[1] ?? "";

View File

@ -211,17 +211,15 @@ class EmailDefaults
$reply_to_email = $this->email->company->owner()->email; $reply_to_email = $this->email->company->owner()->email;
$reply_to_name = $this->email->company->owner()->present()->name(); $reply_to_name = $this->email->company->owner()->present()->name();
if(str_contains($this->email->email_object->settings->reply_to_email, "@")){ if(str_contains($this->email->email_object->settings->reply_to_email, "@")) {
$reply_to_email = $this->email->email_object->settings->reply_to_email; $reply_to_email = $this->email->email_object->settings->reply_to_email;
} } elseif(isset($this->email->email_object->invitation->user)) {
elseif(isset($this->email->email_object->invitation->user)) {
$reply_to_email = $this->email->email_object->invitation->user->email; $reply_to_email = $this->email->email_object->invitation->user->email;
} }
if(strlen($this->email->email_object->settings->reply_to_name) > 3) { if(strlen($this->email->email_object->settings->reply_to_name) > 3) {
$reply_to_name =$this->email->email_object->settings->reply_to_name; $reply_to_name = $this->email->email_object->settings->reply_to_name;
} } elseif(isset($this->email->email_object->invitation->user)) {
elseif(isset($this->email->email_object->invitation->user)) {
$reply_to_name = $this->email->email_object->invitation->user->present()->name(); $reply_to_name = $this->email->email_object->invitation->user->present()->name();
} }

View File

@ -84,8 +84,8 @@ class EmailMailable extends Mailable
'company' => $this->email_object->company, 'company' => $this->email_object->company,
'greeting' => '', 'greeting' => '',
'links' => array_merge($this->email_object->links, $links->toArray()), 'links' => array_merge($this->email_object->links, $links->toArray()),
'email_preferences' => (Ninja::isHosted() && in_array($this->email_object->settings->email_sending_method, ['default', 'mailgun']) && $this->email_object->invitation) 'email_preferences' => (Ninja::isHosted() && in_array($this->email_object->settings->email_sending_method, ['default', 'mailgun']) && $this->email_object->invitation)
? URL::signedRoute('client.email_preferences', ['entity' => $this->email_object->invitation->getEntityString(), 'invitation_key' => $this->email_object->invitation->key]) ? URL::signedRoute('client.email_preferences', ['entity' => $this->email_object->invitation->getEntityString(), 'invitation_key' => $this->email_object->invitation->key])
: false, : false,
] ]
); );

View File

@ -330,7 +330,7 @@ class AutoBillInvoice extends AbstractService
$query->where('is_deleted', 0) $query->where('is_deleted', 0)
->where('deleted_at', null); ->where('deleted_at', null);
})->orderBy('is_default', 'DESC') })->orderBy('is_default', 'DESC')
->get(); ->get();
// $gateway_tokens = $this->client // $gateway_tokens = $this->client
// ->gateway_tokens() // ->gateway_tokens()

View File

@ -34,7 +34,6 @@ use CleverIt\UBL\Invoice\Price;
class RoEInvoice extends AbstractService class RoEInvoice extends AbstractService
{ {
public function __construct(public Invoice $invoice) public function __construct(public Invoice $invoice)
{ {
} }

View File

@ -18,7 +18,9 @@ use Illuminate\Database\QueryException;
class SendEmail class SendEmail
{ {
public function __construct(public Payment $payment, public ?ClientContact $contact) {} public function __construct(public Payment $payment, public ?ClientContact $contact)
{
}
/** /**
* Builds the correct template to send. * Builds the correct template to send.

View File

@ -65,7 +65,7 @@ class EmailReport
$data['end_date'] = $start_end_dates[1]; $data['end_date'] = $start_end_dates[1];
$data['date_range'] = $data['date_range'] ?? 'all'; $data['date_range'] = $data['date_range'] ?? 'all';
$data['report_keys'] = $data['report_keys'] ?? []; $data['report_keys'] = $data['report_keys'] ?? [];
$export = false; $export = false;
match($this->scheduler->parameters['report_name']) { match($this->scheduler->parameters['report_name']) {

View File

@ -24,7 +24,7 @@ use App\Repositories\InvoiceRepository;
use App\Repositories\SubscriptionRepository; use App\Repositories\SubscriptionRepository;
class ChangePlanInvoice extends AbstractService class ChangePlanInvoice extends AbstractService
{ {
protected \App\Services\Subscription\SubscriptionStatus $status; protected \App\Services\Subscription\SubscriptionStatus $status;
public function __construct(protected RecurringInvoice $recurring_invoice, public Subscription $target, public string $hash) public function __construct(protected RecurringInvoice $recurring_invoice, public Subscription $target, public string $hash)
@ -46,14 +46,15 @@ class ChangePlanInvoice extends AbstractService
$invoice = $this->generateInvoice($refund); $invoice = $this->generateInvoice($refund);
if($refund >= $new_charge){ if($refund >= $new_charge) {
$invoice = $invoice->markPaid()->save(); $invoice = $invoice->markPaid()->save();
//generate new recurring invoice at this point as we know the user has succeeded with their upgrade. //generate new recurring invoice at this point as we know the user has succeeded with their upgrade.
} }
if($refund > $new_charge) if($refund > $new_charge) {
return $this->generateCredit($refund - $new_charge); return $this->generateCredit($refund - $new_charge);
}
return $invoice; return $invoice;
} }
@ -125,4 +126,4 @@ class ChangePlanInvoice extends AbstractService
return $invoice; return $invoice;
} }
} }

View File

@ -20,8 +20,7 @@ use App\Factory\RecurringInvoiceFactory;
use App\Repositories\SubscriptionRepository; use App\Repositories\SubscriptionRepository;
class InvoiceToRecurring extends AbstractService class InvoiceToRecurring extends AbstractService
{ {
protected \App\Services\Subscription\SubscriptionStatus $status; protected \App\Services\Subscription\SubscriptionStatus $status;
public function __construct(protected int $client_id, public Subscription $subscription, public array $bundle = []) public function __construct(protected int $client_id, public Subscription $subscription, public array $bundle = [])
@ -67,4 +66,4 @@ class InvoiceToRecurring extends AbstractService
return false; return false;
} }
} }

View File

@ -31,25 +31,25 @@ use App\Services\Subscription\ChangePlanInvoice;
class PaymentLinkService class PaymentLinkService
{ {
use MakesHash; use MakesHash;
public const WHITE_LABEL = 4316; public const WHITE_LABEL = 4316;
public function __construct(public Subscription $subscription) public function __construct(public Subscription $subscription)
{ {
} }
/** /**
* CompletePurchase * CompletePurchase
* *
* Perform the initial purchase of a one time * Perform the initial purchase of a one time
* or recurring product * or recurring product
* *
* @param PaymentHash $payment_hash * @param PaymentHash $payment_hash
* @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null
*/ */
public function completePurchase(PaymentHash $payment_hash): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null public function completePurchase(PaymentHash $payment_hash): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse|null
{ {
if (!property_exists($payment_hash->data, 'billing_context')) { if (!property_exists($payment_hash->data, 'billing_context')) {
throw new \Exception("Illegal entrypoint into method, payload must contain billing context"); throw new \Exception("Illegal entrypoint into method, payload must contain billing context");
} }
@ -134,7 +134,7 @@ class PaymentLinkService
*/ */
public function isEligible(ClientContact $contact): array public function isEligible(ClientContact $contact): array
{ {
$context = [ $context = [
'context' => 'is_eligible', 'context' => 'is_eligible',
'subscription' => $this->subscription->hashed_id, 'subscription' => $this->subscription->hashed_id,
@ -187,7 +187,7 @@ class PaymentLinkService
} }
$recurring_invoice = (new InvoiceToRecurring($client_contact->client_id, $this->subscription, $bundle))->run(); $recurring_invoice = (new InvoiceToRecurring($client_contact->client_id, $this->subscription, $bundle))->run();
$recurring_invoice->next_send_date = now()->addSeconds($this->subscription->trial_duration); $recurring_invoice->next_send_date = now()->addSeconds($this->subscription->trial_duration);
$recurring_invoice->next_send_date_client = now()->addSeconds($this->subscription->trial_duration); $recurring_invoice->next_send_date_client = now()->addSeconds($this->subscription->trial_duration);
$recurring_invoice->backup = 'is_trial'; $recurring_invoice->backup = 'is_trial';
@ -221,21 +221,21 @@ class PaymentLinkService
return $this->handleRedirect('/client/recurring_invoices/' . $recurring_invoice->hashed_id); return $this->handleRedirect('/client/recurring_invoices/' . $recurring_invoice->hashed_id);
} }
/** /**
* calculateUpdatePriceV2 * calculateUpdatePriceV2
* *
* Need to change the naming of the method * Need to change the naming of the method
* *
* @param RecurringInvoice $recurring_invoice - The Current Recurring Invoice for the subscription. * @param RecurringInvoice $recurring_invoice - The Current Recurring Invoice for the subscription.
* @param Subscription $target - The new target subscription to move to * @param Subscription $target - The new target subscription to move to
* @return float - the upgrade price * @return float - the upgrade price
*/ */
public function calculateUpgradePriceV2(RecurringInvoice $recurring_invoice, Subscription $target): ?float public function calculateUpgradePriceV2(RecurringInvoice $recurring_invoice, Subscription $target): ?float
{ {
return (new UpgradePrice($recurring_invoice, $target))->run()->upgrade_price; return (new UpgradePrice($recurring_invoice, $target))->run()->upgrade_price;
} }
/** /**
* When changing plans, we need to generate a pro rata invoice * When changing plans, we need to generate a pro rata invoice
* *
@ -244,11 +244,11 @@ class PaymentLinkService
*/ */
public function createChangePlanInvoice($data): Invoice | Credit public function createChangePlanInvoice($data): Invoice | Credit
{ {
$recurring_invoice = $data['recurring_invoice']; $recurring_invoice = $data['recurring_invoice'];
$old_subscription = $data['subscription']; $old_subscription = $data['subscription'];
$target_subscription = $data['target']; $target_subscription = $data['target'];
$hash = $data['hash']; $hash = $data['hash'];
return (new ChangePlanInvoice($recurring_invoice, $target_subscription, $hash))->run(); return (new ChangePlanInvoice($recurring_invoice, $target_subscription, $hash))->run();
} }
@ -319,7 +319,7 @@ class PaymentLinkService
$old_recurring_invoice->service()->stop()->save(); $old_recurring_invoice->service()->stop()->save();
$recurring_invoice = (new InvoiceToRecurring($old_recurring_invoice->client_id, $this->subscription, []))->run(); $recurring_invoice = (new InvoiceToRecurring($old_recurring_invoice->client_id, $this->subscription, []))->run();
$recurring_invoice->service() $recurring_invoice->service()
->start() ->start()
->save(); ->save();
@ -361,7 +361,7 @@ class PaymentLinkService
/** /**
* Handles redirecting the user * Handles redirecting the user
*/ */
private function handleRedirect($default_redirect): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse private function handleRedirect($default_redirect): \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
{ {
if (array_key_exists('return_url', $this->subscription->webhook_configuration) && strlen($this->subscription->webhook_configuration['return_url']) >= 1) { if (array_key_exists('return_url', $this->subscription->webhook_configuration) && strlen($this->subscription->webhook_configuration['return_url']) >= 1) {
return method_exists(redirect(), "send") ? redirect($this->subscription->webhook_configuration['return_url'])->send() : redirect($this->subscription->webhook_configuration['return_url']); return method_exists(redirect(), "send") ? redirect($this->subscription->webhook_configuration['return_url'])->send() : redirect($this->subscription->webhook_configuration['return_url']);
@ -466,4 +466,4 @@ class PaymentLinkService
return array_merge($body, ['message' => $e->getMessage(), 'status_code' => 500]); return array_merge($body, ['message' => $e->getMessage(), 'status_code' => 500]);
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More