mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Merge branch 'v5-develop' into v5-stable
This commit is contained in:
commit
b2aca30453
4
.github/workflows/phpunit.yml
vendored
4
.github/workflows/phpunit.yml
vendored
@ -49,6 +49,10 @@ jobs:
|
|||||||
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Add hosts to /etc/hosts
|
||||||
|
run: |
|
||||||
|
sudo echo "127.0.0.1 ninja.test" | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
- name: Start mysql service
|
- name: Start mysql service
|
||||||
run: |
|
run: |
|
||||||
sudo /etc/init.d/mysql start
|
sudo /etc/init.d/mysql start
|
||||||
|
@ -1 +1 @@
|
|||||||
5.2.14
|
5.2.15
|
@ -91,6 +91,8 @@ class CreateAccount extends Command
|
|||||||
$account = Account::factory()->create();
|
$account = Account::factory()->create();
|
||||||
$company = Company::factory()->create([
|
$company = Company::factory()->create([
|
||||||
'account_id' => $account->id,
|
'account_id' => $account->id,
|
||||||
|
'portal_domain' => config('ninja.app_url'),
|
||||||
|
'portal_mode' => 'domain',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$account->default_company_id = $company->id;
|
$account->default_company_id = $company->id;
|
||||||
|
51
app/DataMapper/Analytics/LivePreview.php
Normal file
51
app/DataMapper/Analytics/LivePreview.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\DataMapper\Analytics;
|
||||||
|
|
||||||
|
use Turbo124\Beacon\ExampleMetric\GenericCounter;
|
||||||
|
|
||||||
|
class LivePreview extends GenericCounter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The type of Sample.
|
||||||
|
*
|
||||||
|
* Monotonically incrementing counter
|
||||||
|
*
|
||||||
|
* - counter
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $type = 'counter';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the counter.
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $name = 'live_preview.created';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The datetime of the counter measurement.
|
||||||
|
*
|
||||||
|
* date("Y-m-d H:i:s")
|
||||||
|
*
|
||||||
|
* @var DateTime
|
||||||
|
*/
|
||||||
|
public $datetime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The increment amount... should always be
|
||||||
|
* set to 0.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $metric = 0;
|
||||||
|
}
|
@ -187,7 +187,7 @@ class Handler extends ExceptionHandler
|
|||||||
} elseif ($exception instanceof NotFoundHttpException && $request->expectsJson()) {
|
} elseif ($exception instanceof NotFoundHttpException && $request->expectsJson()) {
|
||||||
return response()->json(['message'=>'Route does not exist'], 404);
|
return response()->json(['message'=>'Route does not exist'], 404);
|
||||||
} elseif ($exception instanceof MethodNotAllowedHttpException && $request->expectsJson()) {
|
} elseif ($exception instanceof MethodNotAllowedHttpException && $request->expectsJson()) {
|
||||||
return response()->json(['message'=>'Method not support for this route'], 404);
|
return response()->json(['message'=>'Method not supported for this route'], 404);
|
||||||
} elseif ($exception instanceof ValidationException && $request->expectsJson()) {
|
} elseif ($exception instanceof ValidationException && $request->expectsJson()) {
|
||||||
nlog($exception->validator->getMessageBag());
|
nlog($exception->validator->getMessageBag());
|
||||||
return response()->json(['message' => 'The given data was invalid.', 'errors' => $exception->validator->getMessageBag()], 422);
|
return response()->json(['message' => 'The given data was invalid.', 'errors' => $exception->validator->getMessageBag()], 422);
|
||||||
|
@ -28,6 +28,10 @@ class CloneQuoteToInvoiceFactory
|
|||||||
unset($quote_array['invoice_id']);
|
unset($quote_array['invoice_id']);
|
||||||
unset($quote_array['id']);
|
unset($quote_array['id']);
|
||||||
unset($quote_array['invitations']);
|
unset($quote_array['invitations']);
|
||||||
|
unset($quote_array['terms']);
|
||||||
|
unset($quote_array['public_notes']);
|
||||||
|
unset($quote_array['footer']);
|
||||||
|
unset($quote_array['design_id']);
|
||||||
|
|
||||||
foreach ($quote_array as $key => $value) {
|
foreach ($quote_array as $key => $value) {
|
||||||
$invoice->{$key} = $value;
|
$invoice->{$key} = $value;
|
||||||
|
@ -92,9 +92,11 @@ class ClientFilters extends QueryFilters
|
|||||||
return $this->builder->where(function ($query) use ($filter) {
|
return $this->builder->where(function ($query) use ($filter) {
|
||||||
$query->where('clients.name', 'like', '%'.$filter.'%')
|
$query->where('clients.name', 'like', '%'.$filter.'%')
|
||||||
->orWhere('clients.id_number', 'like', '%'.$filter.'%')
|
->orWhere('clients.id_number', 'like', '%'.$filter.'%')
|
||||||
->orWhere('client_contacts.first_name', 'like', '%'.$filter.'%')
|
->orWhereHas('contacts', function ($query) use($filter){
|
||||||
->orWhere('client_contacts.last_name', 'like', '%'.$filter.'%')
|
$query->where('first_name', 'like', '%'.$filter.'%');
|
||||||
->orWhere('client_contacts.email', 'like', '%'.$filter.'%')
|
$query->orWhere('last_name', 'like', '%'.$filter.'%');
|
||||||
|
$query->orWhere('email', 'like', '%'.$filter.'%');
|
||||||
|
})
|
||||||
->orWhere('clients.custom_value1', 'like', '%'.$filter.'%')
|
->orWhere('clients.custom_value1', 'like', '%'.$filter.'%')
|
||||||
->orWhere('clients.custom_value2', 'like', '%'.$filter.'%')
|
->orWhere('clients.custom_value2', 'like', '%'.$filter.'%')
|
||||||
->orWhere('clients.custom_value3', 'like', '%'.$filter.'%')
|
->orWhere('clients.custom_value3', 'like', '%'.$filter.'%')
|
||||||
|
@ -38,9 +38,11 @@ class ExpenseFilters extends QueryFilters
|
|||||||
return $this->builder->where(function ($query) use ($filter) {
|
return $this->builder->where(function ($query) use ($filter) {
|
||||||
$query->where('expenses.name', 'like', '%'.$filter.'%')
|
$query->where('expenses.name', 'like', '%'.$filter.'%')
|
||||||
->orWhere('expenses.id_number', 'like', '%'.$filter.'%')
|
->orWhere('expenses.id_number', 'like', '%'.$filter.'%')
|
||||||
->orWhere('expense_contacts.first_name', 'like', '%'.$filter.'%')
|
->orWhereHas('contacts', function ($query) use($filter){
|
||||||
->orWhere('expense_contacts.last_name', 'like', '%'.$filter.'%')
|
$query->where('expense_contacts.first_name', 'like', '%'.$filter.'%');
|
||||||
->orWhere('expense_contacts.email', 'like', '%'.$filter.'%')
|
$query->orWhere('expense_contacts.last_name', 'like', '%'.$filter.'%');
|
||||||
|
$query->orWhere('expense_contacts.email', 'like', '%'.$filter.'%');
|
||||||
|
})
|
||||||
->orWhere('expenses.custom_value1', 'like', '%'.$filter.'%')
|
->orWhere('expenses.custom_value1', 'like', '%'.$filter.'%')
|
||||||
->orWhere('expenses.custom_value2', 'like', '%'.$filter.'%')
|
->orWhere('expenses.custom_value2', 'like', '%'.$filter.'%')
|
||||||
->orWhere('expenses.custom_value3', 'like', '%'.$filter.'%')
|
->orWhere('expenses.custom_value3', 'like', '%'.$filter.'%')
|
||||||
|
@ -13,6 +13,7 @@ namespace App\Filters;
|
|||||||
|
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ use Illuminate\Support\Carbon;
|
|||||||
*/
|
*/
|
||||||
class InvoiceFilters extends QueryFilters
|
class InvoiceFilters extends QueryFilters
|
||||||
{
|
{
|
||||||
|
use MakesHash;
|
||||||
/**
|
/**
|
||||||
* Filter based on client status.
|
* Filter based on client status.
|
||||||
*
|
*
|
||||||
@ -65,6 +67,18 @@ class InvoiceFilters extends QueryFilters
|
|||||||
return $this->builder;
|
return $this->builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function client_id(string $client_id = '') :Builder
|
||||||
|
{
|
||||||
|
if (strlen($client_id) == 0) {
|
||||||
|
return $this->builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->builder->where('client_id', $this->decodePrimaryKey($client_id));
|
||||||
|
|
||||||
|
return $this->builder;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function number(string $number) :Builder
|
public function number(string $number) :Builder
|
||||||
{
|
{
|
||||||
return $this->builder->where('number', $number);
|
return $this->builder->where('number', $number);
|
||||||
@ -96,6 +110,7 @@ class InvoiceFilters extends QueryFilters
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters the list based on the status
|
* Filters the list based on the status
|
||||||
* archived, active, deleted - legacy from V1.
|
* archived, active, deleted - legacy from V1.
|
||||||
|
@ -38,9 +38,11 @@ class VendorFilters extends QueryFilters
|
|||||||
return $this->builder->where(function ($query) use ($filter) {
|
return $this->builder->where(function ($query) use ($filter) {
|
||||||
$query->where('vendors.name', 'like', '%'.$filter.'%')
|
$query->where('vendors.name', 'like', '%'.$filter.'%')
|
||||||
->orWhere('vendors.id_number', 'like', '%'.$filter.'%')
|
->orWhere('vendors.id_number', 'like', '%'.$filter.'%')
|
||||||
->orWhere('vendor_contacts.first_name', 'like', '%'.$filter.'%')
|
->orWhereHas('contacts', function ($query) use($filter){
|
||||||
->orWhere('vendor_contacts.last_name', 'like', '%'.$filter.'%')
|
$query->where('vendor_contacts.first_name', 'like', '%'.$filter.'%');
|
||||||
->orWhere('vendor_contacts.email', 'like', '%'.$filter.'%')
|
$query->orWhere('vendor_contacts.last_name', 'like', '%'.$filter.'%');
|
||||||
|
$query->orWhere('vendor_contacts.email', 'like', '%'.$filter.'%');
|
||||||
|
})
|
||||||
->orWhere('vendors.custom_value1', 'like', '%'.$filter.'%')
|
->orWhere('vendors.custom_value1', 'like', '%'.$filter.'%')
|
||||||
->orWhere('vendors.custom_value2', 'like', '%'.$filter.'%')
|
->orWhere('vendors.custom_value2', 'like', '%'.$filter.'%')
|
||||||
->orWhere('vendors.custom_value3', 'like', '%'.$filter.'%')
|
->orWhere('vendors.custom_value3', 'like', '%'.$filter.'%')
|
||||||
|
@ -163,6 +163,6 @@ class ActivityController extends BaseController
|
|||||||
|
|
||||||
return response()->streamDownload(function () use ($pdf) {
|
return response()->streamDownload(function () use ($pdf) {
|
||||||
echo $pdf;
|
echo $pdf;
|
||||||
}, $filename);
|
}, $filename, ['Content-Type' => 'application/pdf']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ class InvoiceController extends Controller
|
|||||||
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);;
|
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);;
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// enable output of HTTP headers
|
// enable output of HTTP headers
|
||||||
|
@ -96,7 +96,7 @@ class QuoteController extends Controller
|
|||||||
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// enable output of HTTP headers
|
// enable output of HTTP headers
|
||||||
|
@ -104,8 +104,13 @@ class ConnectedAccountController extends BaseController
|
|||||||
$refresh_token = '';
|
$refresh_token = '';
|
||||||
$token = '';
|
$token = '';
|
||||||
|
|
||||||
|
$email = $google->harvestEmail($user);
|
||||||
|
|
||||||
|
if(auth()->user()->email != $email && MultiDB::checkUserEmailExists($email))
|
||||||
|
return response()->json(['message' => ctrans('texts.email_already_register')], 400);
|
||||||
|
|
||||||
$connected_account = [
|
$connected_account = [
|
||||||
'email' => $google->harvestEmail($user),
|
'email' => $email,
|
||||||
'oauth_user_id' => $google->harvestSubField($user),
|
'oauth_user_id' => $google->harvestSubField($user),
|
||||||
'oauth_provider_id' => 'google',
|
'oauth_provider_id' => 'google',
|
||||||
'email_verified_at' =>now()
|
'email_verified_at' =>now()
|
||||||
|
@ -544,7 +544,7 @@ class CreditController extends BaseController
|
|||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
break;
|
break;
|
||||||
case 'archive':
|
case 'archive':
|
||||||
$this->credit_repository->archive($credit);
|
$this->credit_repository->archive($credit);
|
||||||
@ -596,8 +596,8 @@ class CreditController extends BaseController
|
|||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
// return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -131,8 +131,8 @@ class EmailController extends BaseController
|
|||||||
|
|
||||||
$entity_obj->service()->markSent()->save();
|
$entity_obj->service()->markSent()->save();
|
||||||
|
|
||||||
EmailEntity::dispatch($invitation->fresh(), $invitation->company, $template, $data)
|
EmailEntity::dispatch($invitation->fresh(), $invitation->company, $template, $data);
|
||||||
->delay(now()->addSeconds(30));
|
// ->delay(now()->addSeconds(45));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,16 +672,11 @@ class InvoiceController extends BaseController
|
|||||||
break;
|
break;
|
||||||
case 'download':
|
case 'download':
|
||||||
|
|
||||||
// $file = $invoice->pdf_file_path();
|
|
||||||
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
|
|
||||||
$file = $invoice->service()->getInvoicePdf();
|
$file = $invoice->service()->getInvoicePdf();
|
||||||
|
|
||||||
// return response()->download(Storage::get($file), basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -805,11 +800,9 @@ class InvoiceController extends BaseController
|
|||||||
|
|
||||||
$file = $invoice->service()->getInvoicePdf($contact);
|
$file = $invoice->service()->getInvoicePdf($contact);
|
||||||
|
|
||||||
// return response()->download(Storage::get($file), basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -861,10 +854,9 @@ class InvoiceController extends BaseController
|
|||||||
|
|
||||||
$file = $invoice->service()->getInvoiceDeliveryNote($invoice, $invoice->invitations->first()->contact);
|
$file = $invoice->service()->getInvoiceDeliveryNote($invoice, $invoice->invitations->first()->contact);
|
||||||
|
|
||||||
// return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,11 +11,26 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\DataMapper\Analytics\LivePreview;
|
||||||
|
use App\Factory\CreditFactory;
|
||||||
|
use App\Factory\InvoiceFactory;
|
||||||
|
use App\Factory\QuoteFactory;
|
||||||
|
use App\Factory\RecurringInvoiceFactory;
|
||||||
|
use App\Http\Requests\Invoice\StoreInvoiceRequest;
|
||||||
|
use App\Http\Requests\Preview\PreviewInvoiceRequest;
|
||||||
use App\Jobs\Util\PreviewPdf;
|
use App\Jobs\Util\PreviewPdf;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
use App\Models\ClientContact;
|
use App\Models\ClientContact;
|
||||||
|
use App\Models\Credit;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use App\Models\InvoiceInvitation;
|
use App\Models\InvoiceInvitation;
|
||||||
|
use App\Models\Quote;
|
||||||
|
use App\Models\RecurringInvoice;
|
||||||
|
use App\Repositories\CreditRepository;
|
||||||
|
use App\Repositories\InvoiceRepository;
|
||||||
|
use App\Repositories\QuoteRepository;
|
||||||
|
use App\Repositories\RecurringInvoiceRepository;
|
||||||
|
use App\Services\PdfMaker\Design as PdfMakerDesign;
|
||||||
use App\Services\PdfMaker\Design;
|
use App\Services\PdfMaker\Design;
|
||||||
use App\Services\PdfMaker\PdfMaker;
|
use App\Services\PdfMaker\PdfMaker;
|
||||||
use App\Utils\HostedPDF\NinjaPdf;
|
use App\Utils\HostedPDF\NinjaPdf;
|
||||||
@ -28,6 +43,7 @@ use Illuminate\Support\Facades\App;
|
|||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Lang;
|
use Illuminate\Support\Facades\Lang;
|
||||||
use Illuminate\Support\Facades\Response;
|
use Illuminate\Support\Facades\Response;
|
||||||
|
use Turbo124\Beacon\Facades\LightLogs;
|
||||||
|
|
||||||
class PreviewController extends BaseController
|
class PreviewController extends BaseController
|
||||||
{
|
{
|
||||||
@ -149,6 +165,136 @@ class PreviewController extends BaseController
|
|||||||
return $this->blankEntity();
|
return $this->blankEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function live(PreviewInvoiceRequest $request)
|
||||||
|
{
|
||||||
|
if($request->input('entity') == 'invoice'){
|
||||||
|
$repo = new InvoiceRepository();
|
||||||
|
$factory = InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||||
|
$class = Invoice::class;
|
||||||
|
}
|
||||||
|
elseif($request->input('entity') == 'quote'){
|
||||||
|
$repo = new QuoteRepository();
|
||||||
|
$factory = QuoteFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||||
|
$class = Quote::class;
|
||||||
|
|
||||||
|
}
|
||||||
|
elseif($request->input('entity') == 'credit'){
|
||||||
|
$repo = new CreditRepository();
|
||||||
|
$factory = CreditFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||||
|
$class = Credit::class;
|
||||||
|
}
|
||||||
|
elseif($request->input('entity') == 'recurring_invoice'){
|
||||||
|
$repo = new RecurringInvoiceRepository();
|
||||||
|
$factory = RecurringInvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id);
|
||||||
|
$class = RecurringInvoice::class;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
DB::connection(config('database.default'))->beginTransaction();
|
||||||
|
|
||||||
|
if($request->has('entity_id')){
|
||||||
|
|
||||||
|
$entity_obj = $class::withTrashed()->whereId($this->decodePrimaryKey($request->input('entity_id')))->company()->first();
|
||||||
|
$entity_obj = $repo->save($request->all(), $entity_obj);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$entity_obj = $repo->save($request->all(), $factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
$entity_obj->load('client');
|
||||||
|
|
||||||
|
App::forgetInstance('translator');
|
||||||
|
$t = app('translator');
|
||||||
|
App::setLocale($entity_obj->client->contacts()->first()->preferredLocale());
|
||||||
|
$t->replace(Ninja::transformTranslations($entity_obj->client->getMergedSettings()));
|
||||||
|
|
||||||
|
$html = new HtmlEngine($entity_obj->invitations()->first());
|
||||||
|
|
||||||
|
$design = \App\Models\Design::find($entity_obj->design_id);
|
||||||
|
|
||||||
|
/* Catch all in case migration doesn't pass back a valid design */
|
||||||
|
if(!$design)
|
||||||
|
$design = Design::find(2);
|
||||||
|
|
||||||
|
if ($design->is_custom) {
|
||||||
|
$options = [
|
||||||
|
'custom_partials' => json_decode(json_encode($design->design), true)
|
||||||
|
];
|
||||||
|
$template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options);
|
||||||
|
} else {
|
||||||
|
$template = new PdfMakerDesign(strtolower($design->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
$variables = $html->generateLabelsAndValues();
|
||||||
|
|
||||||
|
$state = [
|
||||||
|
'template' => $template->elements([
|
||||||
|
'client' => $entity_obj->client,
|
||||||
|
'entity' => $entity_obj,
|
||||||
|
'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables,
|
||||||
|
'$product' => $design->design->product,
|
||||||
|
'variables' => $variables,
|
||||||
|
]),
|
||||||
|
'variables' => $variables,
|
||||||
|
'options' => [
|
||||||
|
'all_pages_header' => $entity_obj->client->getSetting('all_pages_header'),
|
||||||
|
'all_pages_footer' => $entity_obj->client->getSetting('all_pages_footer'),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
$maker = new PdfMaker($state);
|
||||||
|
|
||||||
|
$maker
|
||||||
|
->design($template)
|
||||||
|
->build();
|
||||||
|
|
||||||
|
DB::connection(config('database.default'))->rollBack();
|
||||||
|
|
||||||
|
if (request()->query('html') == 'true') {
|
||||||
|
return $maker->getCompiledHTML;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(\Exception $e){
|
||||||
|
|
||||||
|
DB::connection(config('database.default'))->rollBack();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//if phantom js...... inject here..
|
||||||
|
if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') {
|
||||||
|
return (new Phantom)->convertHtmlToPdf($maker->getCompiledHTML(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja'){
|
||||||
|
return (new NinjaPdf())->build($maker->getCompiledHTML(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company());
|
||||||
|
|
||||||
|
|
||||||
|
if(Ninja::isHosted())
|
||||||
|
{
|
||||||
|
LightLogs::create(new LivePreview())
|
||||||
|
->increment()
|
||||||
|
->batch();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$response = Response::make($file_path, 200);
|
||||||
|
$response->header('Content-Type', 'application/pdf');
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private function blankEntity()
|
private function blankEntity()
|
||||||
{
|
{
|
||||||
App::forgetInstance('translator');
|
App::forgetInstance('translator');
|
||||||
|
@ -682,7 +682,7 @@ class QuoteController extends BaseController
|
|||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
//return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
//return response()->download($file, basename($file), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
||||||
|
|
||||||
@ -736,11 +736,10 @@ class QuoteController extends BaseController
|
|||||||
$quote = $invitation->quote;
|
$quote = $invitation->quote;
|
||||||
|
|
||||||
$file = $quote->service()->getQuotePdf($contact);
|
$file = $quote->service()->getQuotePdf($contact);
|
||||||
nlog($file);
|
|
||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
// return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
// return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true);
|
||||||
}
|
}
|
||||||
|
@ -505,7 +505,7 @@ class RecurringInvoiceController extends BaseController
|
|||||||
|
|
||||||
return response()->streamDownload(function () use($file) {
|
return response()->streamDownload(function () use($file) {
|
||||||
echo Storage::get($file);
|
echo Storage::get($file);
|
||||||
}, basename($file));
|
}, basename($file), ['Content-Type' => 'application/pdf']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,8 +69,6 @@ class SetupController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($check['system_health'] === false) {
|
if ($check['system_health'] === false) {
|
||||||
nlog($check);
|
|
||||||
|
|
||||||
return response('Oops, something went wrong. Check your logs.'); /* We should never reach this block, but just in case. */
|
return response('Oops, something went wrong. Check your logs.'); /* We should never reach this block, but just in case. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ class SubdomainController extends BaseController
|
|||||||
'docs',
|
'docs',
|
||||||
'client_domain',
|
'client_domain',
|
||||||
'custom_domain',
|
'custom_domain',
|
||||||
|
'preview',
|
||||||
|
'invoiceninja',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
|
@ -42,6 +42,9 @@ class UrlSetDb
|
|||||||
|
|
||||||
$hashed_db = $hashids->decode($segments[0]);
|
$hashed_db = $hashids->decode($segments[0]);
|
||||||
|
|
||||||
|
if(!is_array($hashed_db))
|
||||||
|
return response()->json(['message' => 'Invalid confirmation code'], 403);
|
||||||
|
|
||||||
MultiDB::setDB(MultiDB::DB_PREFIX.str_pad($hashed_db[0], 2, '0', STR_PAD_LEFT));
|
MultiDB::setDB(MultiDB::DB_PREFIX.str_pad($hashed_db[0], 2, '0', STR_PAD_LEFT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class StoreCompanyGatewayRequest extends Request
|
|||||||
public function rules()
|
public function rules()
|
||||||
{
|
{
|
||||||
$rules = [
|
$rules = [
|
||||||
'gateway_key' => 'required',
|
'gateway_key' => 'required|alpha_num',
|
||||||
'fees_and_limits' => new ValidCompanyGatewayFeesAndLimitsRule(),
|
'fees_and_limits' => new ValidCompanyGatewayFeesAndLimitsRule(),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -45,9 +45,8 @@ class StoreCompanyGatewayRequest extends Request
|
|||||||
{
|
{
|
||||||
$input = $this->all();
|
$input = $this->all();
|
||||||
|
|
||||||
$gateway = Gateway::where('key', $input['gateway_key'])->first();
|
|
||||||
|
if($gateway = Gateway::where('key', $input['gateway_key'])->first())
|
||||||
if($gateway);
|
|
||||||
{
|
{
|
||||||
|
|
||||||
$default_gateway_fields = json_decode($gateway->fields);
|
$default_gateway_fields = json_decode($gateway->fields);
|
||||||
|
60
app/Http/Requests/Preview/PreviewInvoiceRequest.php
Normal file
60
app/Http/Requests/Preview/PreviewInvoiceRequest.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Preview;
|
||||||
|
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
use App\Http\ValidationRules\Project\ValidProjectForClient;
|
||||||
|
use App\Models\Invoice;
|
||||||
|
use App\Utils\Traits\CleanLineItems;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class PreviewInvoiceRequest extends Request
|
||||||
|
{
|
||||||
|
use MakesHash;
|
||||||
|
use CleanLineItems;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize() : bool
|
||||||
|
{
|
||||||
|
return auth()->user()->can('create', Invoice::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$rules = [];
|
||||||
|
|
||||||
|
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
||||||
|
|
||||||
|
$rules['number'] = ['nullable'];
|
||||||
|
|
||||||
|
return $rules;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareForValidation()
|
||||||
|
{
|
||||||
|
$input = $this->all();
|
||||||
|
|
||||||
|
$input = $this->decodePrimaryKeys($input);
|
||||||
|
|
||||||
|
$input['line_items'] = isset($input['line_items']) ? $this->cleanItems($input['line_items']) : [];
|
||||||
|
$input['amount'] = 0;
|
||||||
|
$input['balance'] = 0;
|
||||||
|
$input['number'] = ctrans('texts.live_preview') . " #". rand(0,1000);
|
||||||
|
|
||||||
|
$this->replace($input);
|
||||||
|
}
|
||||||
|
}
|
@ -112,6 +112,10 @@ class NinjaMailerJob implements ShouldQueue
|
|||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
|
// if($e instanceof GuzzleHttp\Exception\ClientException){
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
nlog("error failed with {$e->getMessage()}");
|
nlog("error failed with {$e->getMessage()}");
|
||||||
|
|
||||||
if($this->nmo->entity)
|
if($this->nmo->entity)
|
||||||
@ -193,8 +197,6 @@ class NinjaMailerJob implements ShouldQueue
|
|||||||
return $this->setMailDriver();
|
return $this->setMailDriver();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now that our token is refreshed and valid we can boot the
|
* Now that our token is refreshed and valid we can boot the
|
||||||
* mail driver at runtime and also set the token which will persist
|
* mail driver at runtime and also set the token which will persist
|
||||||
|
@ -238,6 +238,10 @@ class Import implements ShouldQueue
|
|||||||
/*After a migration first some basic jobs to ensure the system is up to date*/
|
/*After a migration first some basic jobs to ensure the system is up to date*/
|
||||||
VersionCheck::dispatch();
|
VersionCheck::dispatch();
|
||||||
|
|
||||||
|
$account = $this->company->account;
|
||||||
|
$account->default_company_id = $this->company->id;
|
||||||
|
$account->save();
|
||||||
|
|
||||||
//company size check
|
//company size check
|
||||||
if ($this->company->invoices()->count() > 1000 || $this->company->products()->count() > 1000 || $this->company->clients()->count() > 1000) {
|
if ($this->company->invoices()->count() > 1000 || $this->company->products()->count() > 1000 || $this->company->clients()->count() > 1000) {
|
||||||
$this->company->is_large = true;
|
$this->company->is_large = true;
|
||||||
@ -531,6 +535,7 @@ class Import implements ShouldQueue
|
|||||||
$modified = $resource;
|
$modified = $resource;
|
||||||
unset($modified['id']);
|
unset($modified['id']);
|
||||||
unset($modified['password']); //cant import passwords.
|
unset($modified['password']); //cant import passwords.
|
||||||
|
unset($modified['confirmation_code']); //cant import passwords.
|
||||||
|
|
||||||
$user = $user_repository->save($modified, $this->fetchUser($resource['email']), true, true);
|
$user = $user_repository->save($modified, $this->fetchUser($resource['email']), true, true);
|
||||||
$user->email_verified_at = now();
|
$user->email_verified_at = now();
|
||||||
|
@ -174,8 +174,8 @@ class ReminderJob implements ShouldQueue
|
|||||||
/**Refresh Invoice values*/
|
/**Refresh Invoice values*/
|
||||||
$invoice = $invoice->calc()->getInvoice();
|
$invoice = $invoice->calc()->getInvoice();
|
||||||
|
|
||||||
$invoice->client->service()->updateBalance($this->invoice->balance - $temp_invoice_balance)->save();
|
$invoice->client->service()->updateBalance($invoice->balance - $temp_invoice_balance)->save();
|
||||||
$invoice->ledger()->updateInvoiceBalance($this->invoice->balance - $temp_invoice_balance, "Late Fee Adjustment for invoice {$this->invoice->number}");
|
$invoice->ledger()->updateInvoiceBalance($invoice->balance - $temp_invoice_balance, "Late Fee Adjustment for invoice {$invoice->number}");
|
||||||
|
|
||||||
return $invoice;
|
return $invoice;
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ class CreatedSubscriptionActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
||||||
|
|
||||||
$fields->subscription_id = $event->subscription->id;
|
$fields->subscription_id = $event->subscription->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class CreatedTaskActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
||||||
|
|
||||||
$fields->task_id = $event->task->id;
|
$fields->task_id = $event->task->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class CreatedVendorActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
||||||
|
|
||||||
$fields->vendor_id = $event->vendor->id;
|
$fields->vendor_id = $event->vendor->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class CreditArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
||||||
|
|
||||||
$fields->payment_id = $event->credit->id;
|
$fields->payment_id = $event->credit->id;
|
||||||
$fields->client_id = $event->credit->client_id;
|
$fields->client_id = $event->credit->client_id;
|
||||||
|
@ -43,7 +43,7 @@ class DeleteClientActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->client->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->client->user_id;
|
||||||
|
|
||||||
$fields->client_id = $event->client->id;
|
$fields->client_id = $event->client->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class DeleteCreditActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
||||||
|
|
||||||
$fields->client_id = $event->credit->client_id;
|
$fields->client_id = $event->credit->client_id;
|
||||||
$fields->credit_id = $event->credit->id;
|
$fields->credit_id = $event->credit->id;
|
||||||
|
@ -43,7 +43,7 @@ class PaymentDeletedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$payment = $event->payment;
|
$payment = $event->payment;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
||||||
|
|
||||||
$invoices = $payment->invoices;
|
$invoices = $payment->invoices;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ class PaymentRefundedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
||||||
|
|
||||||
$fields->client_id = $event->payment->id;
|
$fields->client_id = $event->payment->id;
|
||||||
$fields->client_id = $event->payment->client_id;
|
$fields->client_id = $event->payment->client_id;
|
||||||
|
@ -43,7 +43,7 @@ class PaymentVoidedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
||||||
|
|
||||||
$fields->client_id = $event->payment->id;
|
$fields->client_id = $event->payment->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -45,7 +45,7 @@ class QuoteUpdatedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
||||||
|
|
||||||
$fields->quote_id = $quote->id;
|
$fields->quote_id = $quote->id;
|
||||||
$fields->client_id = $quote->client_id;
|
$fields->client_id = $quote->client_id;
|
||||||
|
@ -45,7 +45,7 @@ class SubscriptionArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
||||||
|
|
||||||
$fields->subscription_id = $subscription->id;
|
$fields->subscription_id = $subscription->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class SubscriptionDeletedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
||||||
|
|
||||||
$fields->subscription_id = $event->subscription->id;
|
$fields->subscription_id = $event->subscription->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class SubscriptionRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
||||||
|
|
||||||
$fields->subscription_id = $event->subscription->id;
|
$fields->subscription_id = $event->subscription->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -45,7 +45,7 @@ class SubscriptionUpdatedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->subscription->user_id;
|
||||||
|
|
||||||
$fields->subscription_id = $subscription->id;
|
$fields->subscription_id = $subscription->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -45,7 +45,7 @@ class TaskArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
||||||
|
|
||||||
$fields->task_id = $task->id;
|
$fields->task_id = $task->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class TaskRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
||||||
|
|
||||||
$fields->task_id = $event->task->id;
|
$fields->task_id = $event->task->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -45,7 +45,7 @@ class TaskUpdatedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->task->user_id;
|
||||||
|
|
||||||
$fields->task_id = $task->id;
|
$fields->task_id = $task->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class UpdatedCreditActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
||||||
|
|
||||||
$fields->credit_id = $event->credit->id;
|
$fields->credit_id = $event->credit->id;
|
||||||
$fields->client_id = $event->credit->client_id;
|
$fields->client_id = $event->credit->client_id;
|
||||||
|
@ -45,7 +45,7 @@ class VendorArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
||||||
|
|
||||||
$fields->vendor_id = $vendor->id;
|
$fields->vendor_id = $vendor->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class VendorDeletedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
||||||
|
|
||||||
$fields->vendor_id = $event->vendor->id;
|
$fields->vendor_id = $event->vendor->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -43,7 +43,7 @@ class VendorRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->vendor->user_id;
|
||||||
|
|
||||||
$fields->vendor_id = $event->vendor->id;
|
$fields->vendor_id = $event->vendor->id;
|
||||||
$fields->user_id = $user_id;
|
$fields->user_id = $user_id;
|
||||||
|
@ -38,7 +38,7 @@ class CreditCreatedNotification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$first_notification_sent = true;
|
// $first_notification_sent = true;
|
||||||
|
|
||||||
$credit = $event->credit;
|
$credit = $event->credit;
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ class CreditCreatedNotification implements ShouldQueue
|
|||||||
$methods = $this->findUserNotificationTypes($credit->invitations()->first(), $company_user, 'credit', ['all_notifications', 'credit_created', 'credit_created_all']);
|
$methods = $this->findUserNotificationTypes($credit->invitations()->first(), $company_user, 'credit', ['all_notifications', 'credit_created', 'credit_created_all']);
|
||||||
|
|
||||||
/* If one of the methods is email then we fire the EntitySentMailer */
|
/* If one of the methods is email then we fire the EntitySentMailer */
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ class CreditCreatedNotification implements ShouldQueue
|
|||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo);
|
||||||
|
|
||||||
/* This prevents more than one notification being sent */
|
/* This prevents more than one notification being sent */
|
||||||
$first_notification_sent = false;
|
// $first_notification_sent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override the methods in the Notification Class */
|
/* Override the methods in the Notification Class */
|
||||||
|
@ -38,7 +38,7 @@ class CreditEmailedNotification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$first_notification_sent = true;
|
// $first_notification_sent = true;
|
||||||
|
|
||||||
$credit = $event->invitation->credit;
|
$credit = $event->invitation->credit;
|
||||||
$credit->last_sent_date = now();
|
$credit->last_sent_date = now();
|
||||||
@ -56,14 +56,15 @@ class CreditEmailedNotification implements ShouldQueue
|
|||||||
|
|
||||||
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'credit', ['all_notifications', 'credit_sent', 'credit_sent_all']);
|
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'credit', ['all_notifications', 'credit_sent', 'credit_sent_all']);
|
||||||
|
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
|
// if (($key = array_search('mail', $methods))) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo);
|
||||||
|
|
||||||
$first_notification_sent = false;
|
// $first_notification_sent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// $notification->method = $methods;
|
// $notification->method = $methods;
|
||||||
|
@ -43,9 +43,11 @@ class CreditRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->credit->user_id;
|
||||||
|
|
||||||
$fields->credit_id = $event->credit->id;
|
$fields->credit_id = $event->credit->id;
|
||||||
$fields->client_id = $event->credit->client_id;
|
$fields->client_id = $event->credit->client_id;
|
||||||
$fields->user_id = $event->credit->user_id;
|
$fields->user_id = $user_id;
|
||||||
$fields->company_id = $event->credit->company_id;
|
$fields->company_id = $event->credit->company_id;
|
||||||
$fields->activity_type_id = Activity::RESTORE_CREDIT;
|
$fields->activity_type_id = Activity::RESTORE_CREDIT;
|
||||||
|
|
||||||
|
@ -43,7 +43,9 @@ class CreditViewedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->user_id = $event->invitation->user_id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->company_id = $event->invitation->company_id;
|
$fields->company_id = $event->invitation->company_id;
|
||||||
$fields->activity_type_id = Activity::VIEW_CREDIT;
|
$fields->activity_type_id = Activity::VIEW_CREDIT;
|
||||||
$fields->client_id = $event->invitation->credit->client_id;
|
$fields->client_id = $event->invitation->credit->client_id;
|
||||||
|
@ -43,9 +43,11 @@ class CreateInvoiceActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::CREATE_INVOICE;
|
$fields->activity_type_id = Activity::CREATE_INVOICE;
|
||||||
|
|
||||||
|
@ -45,9 +45,12 @@ class InvoiceArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
|
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::ARCHIVE_INVOICE;
|
$fields->activity_type_id = Activity::ARCHIVE_INVOICE;
|
||||||
|
|
||||||
|
@ -43,9 +43,11 @@ class InvoiceCancelledActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::CANCELLED_INVOICE;
|
$fields->activity_type_id = Activity::CANCELLED_INVOICE;
|
||||||
|
|
||||||
|
@ -52,17 +52,15 @@ class InvoiceCreatedNotification implements ShouldQueue
|
|||||||
|
|
||||||
/* The User */
|
/* The User */
|
||||||
$user = $company_user->user;
|
$user = $company_user->user;
|
||||||
|
|
||||||
/* This is only here to handle the alternate message channels - ie Slack */
|
/* This is only here to handle the alternate message channels - ie Slack */
|
||||||
// $notification = new EntitySentNotification($event->invitation, 'invoice');
|
// $notification = new EntitySentNotification($event->invitation, 'invoice');
|
||||||
|
|
||||||
/* Returns an array of notification methods */
|
/* Returns an array of notification methods */
|
||||||
$methods = $this->findUserNotificationTypes($invoice->invitations()->first(), $company_user, 'invoice', ['all_notifications', 'invoice_created', 'invoice_created_all']);
|
$methods = $this->findUserNotificationTypes($invoice->invitations()->first(), $company_user, 'invoice', ['all_notifications', 'invoice_created', 'invoice_created_all']);
|
||||||
|
|
||||||
/* If one of the methods is email then we fire the EntitySentMailer */
|
/* If one of the methods is email then we fire the EntitySentMailer */
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
// if (($key = array_search('mail', $methods))) {
|
||||||
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
|
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
|
|
||||||
@ -70,6 +68,7 @@ class InvoiceCreatedNotification implements ShouldQueue
|
|||||||
|
|
||||||
/* This prevents more than one notification being sent */
|
/* This prevents more than one notification being sent */
|
||||||
$first_notification_sent = false;
|
$first_notification_sent = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override the methods in the Notification Class */
|
/* Override the methods in the Notification Class */
|
||||||
|
@ -43,9 +43,11 @@ class InvoiceDeletedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::DELETE_INVOICE;
|
$fields->activity_type_id = Activity::DELETE_INVOICE;
|
||||||
|
|
||||||
|
@ -43,8 +43,10 @@ class InvoiceEmailActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invitation->invoice->id;
|
$fields->invoice_id = $event->invitation->invoice->id;
|
||||||
$fields->user_id = $event->invitation->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invitation->invoice->company_id;
|
$fields->company_id = $event->invitation->invoice->company_id;
|
||||||
$fields->client_contact_id = $event->invitation->invoice->client_contact_id;
|
$fields->client_contact_id = $event->invitation->invoice->client_contact_id;
|
||||||
$fields->client_id = $event->invitation->invoice->client_id;
|
$fields->client_id = $event->invitation->invoice->client_id;
|
||||||
|
@ -48,9 +48,12 @@ class InvoiceEmailFailedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
|
|
||||||
$fields->invoice_id = $event->invitation->invoice->id;
|
$fields->invoice_id = $event->invitation->invoice->id;
|
||||||
$fields->client_id = $event->invitation->invoice->client_id;
|
$fields->client_id = $event->invitation->invoice->client_id;
|
||||||
$fields->user_id = $event->invitation->invoice->user_id;
|
|
||||||
$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;
|
||||||
|
@ -63,10 +63,9 @@ class InvoiceEmailedNotification implements ShouldQueue
|
|||||||
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent', 'invoice_sent_all']);
|
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent', 'invoice_sent_all']);
|
||||||
|
|
||||||
/* If one of the methods is email then we fire the EntitySentMailer */
|
/* If one of the methods is email then we fire the EntitySentMailer */
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
|
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo);
|
||||||
|
@ -58,7 +58,7 @@ class InvoiceFailedEmailNotification
|
|||||||
|
|
||||||
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent', 'invoice_sent_all']);
|
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'invoice', ['all_notifications', 'invoice_sent', 'invoice_sent_all']);
|
||||||
|
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
$nmo->to_user = $user;
|
$nmo->to_user = $user;
|
||||||
|
@ -44,8 +44,10 @@ class InvoicePaidActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::PAID_INVOICE;
|
$fields->activity_type_id = Activity::PAID_INVOICE;
|
||||||
$fields->payment_id = $event->payment->id;
|
$fields->payment_id = $event->payment->id;
|
||||||
|
@ -42,8 +42,10 @@ class InvoiceReminderEmailActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invitation->invoice->id;
|
$fields->invoice_id = $event->invitation->invoice->id;
|
||||||
$fields->user_id = $event->invitation->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invitation->invoice->company_id;
|
$fields->company_id = $event->invitation->invoice->company_id;
|
||||||
$fields->client_contact_id = $event->invitation->invoice->client_contact_id;
|
$fields->client_contact_id = $event->invitation->invoice->client_contact_id;
|
||||||
$fields->activity_type_id = $event->reminder;
|
$fields->activity_type_id = $event->reminder;
|
||||||
|
@ -43,9 +43,11 @@ class InvoiceRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::RESTORE_INVOICE;
|
$fields->activity_type_id = Activity::RESTORE_INVOICE;
|
||||||
|
|
||||||
|
@ -43,9 +43,11 @@ class InvoiceReversedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::REVERSED_INVOICE;
|
$fields->activity_type_id = Activity::REVERSED_INVOICE;
|
||||||
|
|
||||||
|
@ -43,7 +43,10 @@ class InvoiceViewedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->user_id = $event->invitation->user_id;
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->company_id = $event->invitation->company_id;
|
$fields->company_id = $event->invitation->company_id;
|
||||||
$fields->activity_type_id = Activity::VIEW_INVOICE;
|
$fields->activity_type_id = Activity::VIEW_INVOICE;
|
||||||
$fields->client_id = $event->invitation->invoice->client_id;
|
$fields->client_id = $event->invitation->invoice->client_id;
|
||||||
|
@ -43,8 +43,10 @@ class UpdateInvoiceActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->client_id = $event->invoice->client_id;
|
$fields->client_id = $event->invoice->client_id;
|
||||||
$fields->user_id = $event->invoice->user_id;
|
|
||||||
$fields->company_id = $event->invoice->company_id;
|
$fields->company_id = $event->invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::UPDATE_INVOICE;
|
$fields->activity_type_id = Activity::UPDATE_INVOICE;
|
||||||
$fields->invoice_id = $event->invoice->id;
|
$fields->invoice_id = $event->invoice->id;
|
||||||
|
@ -43,9 +43,11 @@ class PaymentRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->payment->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->payment_id = $event->payment->id;
|
$fields->payment_id = $event->payment->id;
|
||||||
$fields->client_id = $event->payment->client_id;
|
$fields->client_id = $event->payment->client_id;
|
||||||
$fields->user_id = $event->payment->user_id;
|
|
||||||
$fields->company_id = $event->payment->company_id;
|
$fields->company_id = $event->payment->company_id;
|
||||||
$fields->activity_type_id = Activity::RESTORE_PAYMENT;
|
$fields->activity_type_id = Activity::RESTORE_PAYMENT;
|
||||||
|
|
||||||
|
@ -43,9 +43,11 @@ class QuoteApprovedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->quote_id = $event->quote->id;
|
$fields->quote_id = $event->quote->id;
|
||||||
$fields->client_id = $event->quote->client_id;
|
$fields->client_id = $event->quote->client_id;
|
||||||
$fields->user_id = $event->quote->user_id;
|
|
||||||
$fields->client_contact_id = $event->contact->id;
|
$fields->client_contact_id = $event->contact->id;
|
||||||
$fields->company_id = $event->quote->company_id;
|
$fields->company_id = $event->quote->company_id;
|
||||||
$fields->activity_type_id = Activity::APPROVE_QUOTE;
|
$fields->activity_type_id = Activity::APPROVE_QUOTE;
|
||||||
|
@ -43,9 +43,11 @@ class QuoteArchivedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->quote_id = $event->quote->id;
|
$fields->quote_id = $event->quote->id;
|
||||||
$fields->client_id = $event->quote->client_id;
|
$fields->client_id = $event->quote->client_id;
|
||||||
$fields->user_id = $event->quote->user_id;
|
|
||||||
$fields->company_id = $event->quote->company_id;
|
$fields->company_id = $event->quote->company_id;
|
||||||
$fields->activity_type_id = Activity::ARCHIVE_QUOTE;
|
$fields->activity_type_id = Activity::ARCHIVE_QUOTE;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class QuoteCreatedNotification implements ShouldQueue
|
|||||||
$methods = $this->findUserNotificationTypes($quote->invitations()->first(), $company_user, 'quote', ['all_notifications', 'quote_created', 'quote_created_all']);
|
$methods = $this->findUserNotificationTypes($quote->invitations()->first(), $company_user, 'quote', ['all_notifications', 'quote_created', 'quote_created_all']);
|
||||||
|
|
||||||
/* If one of the methods is email then we fire the EntitySentMailer */
|
/* If one of the methods is email then we fire the EntitySentMailer */
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,9 +43,11 @@ class QuoteDeletedActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->quote_id = $event->quote->id;
|
$fields->quote_id = $event->quote->id;
|
||||||
$fields->client_id = $event->quote->client_id;
|
$fields->client_id = $event->quote->client_id;
|
||||||
$fields->user_id = $event->quote->user_id;
|
|
||||||
$fields->company_id = $event->quote->company_id;
|
$fields->company_id = $event->quote->company_id;
|
||||||
$fields->activity_type_id = Activity::DELETE_QUOTE;
|
$fields->activity_type_id = Activity::DELETE_QUOTE;
|
||||||
|
|
||||||
|
@ -43,9 +43,13 @@ class QuoteEmailActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->invitation->quote->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
|
|
||||||
$fields->quote_id = $event->invitation->quote->id;
|
$fields->quote_id = $event->invitation->quote->id;
|
||||||
$fields->client_id = $event->invitation->quote->client_id;
|
$fields->client_id = $event->invitation->quote->client_id;
|
||||||
$fields->user_id = $event->invitation->quote->user_id;
|
|
||||||
$fields->company_id = $event->invitation->quote->company_id;
|
$fields->company_id = $event->invitation->quote->company_id;
|
||||||
$fields->client_contact_id = $event->invitation->quote->client_contact_id;
|
$fields->client_contact_id = $event->invitation->quote->client_contact_id;
|
||||||
$fields->client_id = $event->invitation->quote->client_id;
|
$fields->client_id = $event->invitation->quote->client_id;
|
||||||
|
@ -38,7 +38,7 @@ class QuoteEmailedNotification implements ShouldQueue
|
|||||||
{
|
{
|
||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$first_notification_sent = true;
|
// $first_notification_sent = true;
|
||||||
|
|
||||||
$quote = $event->invitation->quote;
|
$quote = $event->invitation->quote;
|
||||||
$quote->last_sent_date = now();
|
$quote->last_sent_date = now();
|
||||||
@ -57,7 +57,7 @@ class QuoteEmailedNotification implements ShouldQueue
|
|||||||
|
|
||||||
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'quote', ['all_notifications', 'quote_sent', 'quote_sent_all']);
|
$methods = $this->findUserNotificationTypes($event->invitation, $company_user, 'quote', ['all_notifications', 'quote_sent', 'quote_sent_all']);
|
||||||
|
|
||||||
if (($key = array_search('mail', $methods)) !== false && $first_notification_sent === true) {
|
if (($key = array_search('mail', $methods)) !== false) {
|
||||||
unset($methods[$key]);
|
unset($methods[$key]);
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ class QuoteEmailedNotification implements ShouldQueue
|
|||||||
|
|
||||||
NinjaMailerJob::dispatch($nmo);
|
NinjaMailerJob::dispatch($nmo);
|
||||||
|
|
||||||
$first_notification_sent = false;
|
// $first_notification_sent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// $notification->method = $methods;
|
// $notification->method = $methods;
|
||||||
|
@ -43,7 +43,10 @@ class QuoteRestoredActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->quote_id = $event->quote->id;
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->quote->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->client_id = $event->quote->client_id;
|
$fields->client_id = $event->quote->client_id;
|
||||||
$fields->user_id = $event->quote->user_id;
|
$fields->user_id = $event->quote->user_id;
|
||||||
$fields->company_id = $event->quote->company_id;
|
$fields->company_id = $event->quote->company_id;
|
||||||
|
@ -43,9 +43,11 @@ class CreateRecurringInvoiceActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->recurring_invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
||||||
$fields->client_id = $event->recurring_invoice->client_id;
|
$fields->client_id = $event->recurring_invoice->client_id;
|
||||||
$fields->user_id = $event->recurring_invoice->user_id;
|
|
||||||
$fields->company_id = $event->recurring_invoice->company_id;
|
$fields->company_id = $event->recurring_invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::CREATE_RECURRING_INVOICE;
|
$fields->activity_type_id = Activity::CREATE_RECURRING_INVOICE;
|
||||||
|
|
||||||
|
@ -44,10 +44,11 @@ class RecurringInvoiceArchivedActivity implements ShouldQueue
|
|||||||
$event->recurring_invoice->service()->deletePdf();
|
$event->recurring_invoice->service()->deletePdf();
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->recurring_invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
||||||
$fields->client_id = $event->recurring_invoice->client_id;
|
$fields->client_id = $event->recurring_invoice->client_id;
|
||||||
$fields->user_id = $event->recurring_invoice->user_id;
|
|
||||||
$fields->company_id = $event->recurring_invoice->company_id;
|
$fields->company_id = $event->recurring_invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::ARCHIVE_RECURRING_INVOICE;
|
$fields->activity_type_id = Activity::ARCHIVE_RECURRING_INVOICE;
|
||||||
|
|
||||||
|
@ -42,10 +42,11 @@ class RecurringInvoiceDeletedActivity implements ShouldQueue
|
|||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->recurring_invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
||||||
$fields->client_id = $event->recurring_invoice->client_id;
|
$fields->client_id = $event->recurring_invoice->client_id;
|
||||||
$fields->user_id = $event->recurring_invoice->user_id;
|
|
||||||
$fields->company_id = $event->recurring_invoice->company_id;
|
$fields->company_id = $event->recurring_invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::DELETE_RECURRING_INVOICE;
|
$fields->activity_type_id = Activity::DELETE_RECURRING_INVOICE;
|
||||||
|
|
||||||
|
@ -42,10 +42,11 @@ class RecurringInvoiceRestoredActivity implements ShouldQueue
|
|||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->recurring_invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
||||||
$fields->client_id = $event->recurring_invoice->client_id;
|
$fields->client_id = $event->recurring_invoice->client_id;
|
||||||
$fields->user_id = $event->recurring_invoice->user_id;
|
|
||||||
$fields->company_id = $event->recurring_invoice->company_id;
|
$fields->company_id = $event->recurring_invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::RESTORE_RECURRING_INVOICE;
|
$fields->activity_type_id = Activity::RESTORE_RECURRING_INVOICE;
|
||||||
|
|
||||||
|
@ -42,9 +42,10 @@ class UpdateRecurringInvoiceActivity implements ShouldQueue
|
|||||||
MultiDB::setDB($event->company->db);
|
MultiDB::setDB($event->company->db);
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->recurring_invoice->user_id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->client_id = $event->recurring_invoice->client_id;
|
$fields->client_id = $event->recurring_invoice->client_id;
|
||||||
$fields->user_id = $event->recurring_invoice->user_id;
|
|
||||||
$fields->company_id = $event->recurring_invoice->company_id;
|
$fields->company_id = $event->recurring_invoice->company_id;
|
||||||
$fields->activity_type_id = Activity::UPDATE_RECURRING_INVOICE;
|
$fields->activity_type_id = Activity::UPDATE_RECURRING_INVOICE;
|
||||||
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
$fields->recurring_invoice_id = $event->recurring_invoice->id;
|
||||||
|
@ -43,7 +43,9 @@ class ArchivedUserActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->user_id = $event->creating_user->id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->creating_user->id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->notes = $event->creating_user->present()->name . " Archived User " . $event->user->present()->name();
|
$fields->notes = $event->creating_user->present()->name . " Archived User " . $event->user->present()->name();
|
||||||
|
|
||||||
$fields->company_id = $event->company->id;
|
$fields->company_id = $event->company->id;
|
||||||
|
@ -43,7 +43,9 @@ class CreatedUserActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->user_id = $event->creating_user->id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->creating_user->id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->notes = $event->creating_user->present()->name() . " Created the user " . $event->user->present()->name();
|
$fields->notes = $event->creating_user->present()->name() . " Created the user " . $event->user->present()->name();
|
||||||
$fields->company_id = $event->company->id;
|
$fields->company_id = $event->company->id;
|
||||||
$fields->activity_type_id = Activity::CREATE_USER;
|
$fields->activity_type_id = Activity::CREATE_USER;
|
||||||
|
@ -48,7 +48,10 @@ class DeletedUserActivity implements ShouldQueue
|
|||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
|
||||||
$fields->user_id = $event->creating_user->id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->creating_user->id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
|
|
||||||
$fields->notes = $event->creating_user->present()->name() . " Deleted the user " . $event->user->present()->name();
|
$fields->notes = $event->creating_user->present()->name() . " Deleted the user " . $event->user->present()->name();
|
||||||
$fields->company_id = $event->company->id;
|
$fields->company_id = $event->company->id;
|
||||||
$fields->activity_type_id = Activity::DELETE_USER;
|
$fields->activity_type_id = Activity::DELETE_USER;
|
||||||
|
@ -42,8 +42,9 @@ class RestoredUserActivity implements ShouldQueue
|
|||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->creating_user->id;
|
||||||
|
|
||||||
$fields->user_id = $event->user->id;
|
$fields->user_id = $user_id;
|
||||||
$fields->notes = $event->creating_user->present()->name() . " Restored user " . $event->user->present()->name();
|
$fields->notes = $event->creating_user->present()->name() . " Restored user " . $event->user->present()->name();
|
||||||
|
|
||||||
$fields->company_id = $event->company->id;
|
$fields->company_id = $event->company->id;
|
||||||
|
@ -42,7 +42,9 @@ class UpdatedUserActivity implements ShouldQueue
|
|||||||
MultiDB::setDb($event->company->db);
|
MultiDB::setDb($event->company->db);
|
||||||
|
|
||||||
$fields = new stdClass;
|
$fields = new stdClass;
|
||||||
$fields->user_id = $event->creating_user->id;
|
$user_id = array_key_exists('user_id', $event->event_vars) ? $event->event_vars['user_id'] : $event->creating_user->id;
|
||||||
|
|
||||||
|
$fields->user_id = $user_id;
|
||||||
$fields->notes = $event->creating_user->present()->name() . " Updated user " . $event->user->present()->name();
|
$fields->notes = $event->creating_user->present()->name() . " Updated user " . $event->user->present()->name();
|
||||||
|
|
||||||
$fields->company_id = $event->company->id;
|
$fields->company_id = $event->company->id;
|
||||||
|
@ -23,7 +23,7 @@ class EntityCreatedObject
|
|||||||
|
|
||||||
public $entity;
|
public $entity;
|
||||||
|
|
||||||
public $contact;
|
public $client;
|
||||||
|
|
||||||
public $company;
|
public $company;
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ class EntityCreatedObject
|
|||||||
/* Set customized translations _NOW_ */
|
/* Set customized translations _NOW_ */
|
||||||
$t->replace(Ninja::transformTranslations($this->entity->company->settings));
|
$t->replace(Ninja::transformTranslations($this->entity->company->settings));
|
||||||
|
|
||||||
$this->contact = $this->entity->invitations()->first()->contact;
|
$this->client = $this->entity->client;
|
||||||
$this->company = $this->entity->company;
|
$this->company = $this->entity->company;
|
||||||
|
|
||||||
$this->setTemplate();
|
$this->setTemplate();
|
||||||
@ -100,7 +100,7 @@ class EntityCreatedObject
|
|||||||
ctrans(
|
ctrans(
|
||||||
$this->template_subject,
|
$this->template_subject,
|
||||||
[
|
[
|
||||||
'client' => $this->contact->present()->name(),
|
'client' => $this->client->present()->name(),
|
||||||
'invoice' => $this->entity->number,
|
'invoice' => $this->entity->number,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@ -112,7 +112,7 @@ class EntityCreatedObject
|
|||||||
$this->template_body,
|
$this->template_body,
|
||||||
[
|
[
|
||||||
'amount' => $this->getAmount(),
|
'amount' => $this->getAmount(),
|
||||||
'client' => $this->contact->present()->name(),
|
'client' => $this->client->present()->name(),
|
||||||
'invoice' => $this->entity->number,
|
'invoice' => $this->entity->number,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -121,7 +121,7 @@ class EntitySentObject
|
|||||||
ctrans(
|
ctrans(
|
||||||
$this->template_subject,
|
$this->template_subject,
|
||||||
[
|
[
|
||||||
'client' => $this->contact->present()->name(),
|
'client' => $this->contact->client->present()->name(),
|
||||||
'invoice' => $this->entity->number,
|
'invoice' => $this->entity->number,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@ -133,7 +133,7 @@ class EntitySentObject
|
|||||||
$this->template_body,
|
$this->template_body,
|
||||||
[
|
[
|
||||||
'amount' => $this->getAmount(),
|
'amount' => $this->getAmount(),
|
||||||
'client' => $this->contact->present()->name(),
|
'client' => $this->contact->client->present()->name(),
|
||||||
'invoice' => $this->entity->number,
|
'invoice' => $this->entity->number,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -107,7 +107,6 @@ class TemplateEmail extends Mailable
|
|||||||
$message->invitation = $this->invitation;
|
$message->invitation = $this->invitation;
|
||||||
});
|
});
|
||||||
|
|
||||||
//hosted | plan check here
|
|
||||||
foreach ($this->build_email->getAttachments() as $file) {
|
foreach ($this->build_email->getAttachments() as $file) {
|
||||||
|
|
||||||
if(is_string($file))
|
if(is_string($file))
|
||||||
|
@ -19,13 +19,13 @@ class TestMailServer extends Mailable
|
|||||||
{
|
{
|
||||||
// use Queueable, SerializesModels;
|
// use Queueable, SerializesModels;
|
||||||
|
|
||||||
public $message;
|
public $support_messages;
|
||||||
|
|
||||||
public $from_email;
|
public $from_email;
|
||||||
|
|
||||||
public function __construct($message, $from_email)
|
public function __construct($support_messages, $from_email)
|
||||||
{
|
{
|
||||||
$this->message = $message;
|
$this->support_messages = $support_messages;
|
||||||
$this->from_email = $from_email;
|
$this->from_email = $from_email;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ class TestMailServer extends Mailable
|
|||||||
return $this->from(config('mail.from.address'), config('mail.from.name'))
|
return $this->from(config('mail.from.address'), config('mail.from.name'))
|
||||||
->subject(ctrans('texts.email'))
|
->subject(ctrans('texts.email'))
|
||||||
->markdown('email.support.message', [
|
->markdown('email.support.message', [
|
||||||
'message' => $this->message,
|
'support_message' => $this->support_messages,
|
||||||
'system_info' => '',
|
'system_info' => '',
|
||||||
'laravel_log' => [],
|
'laravel_log' => [],
|
||||||
]);
|
]);
|
||||||
|
@ -229,7 +229,7 @@ class Client extends BaseModel implements HasLocalePreference
|
|||||||
|
|
||||||
public function system_logs()
|
public function system_logs()
|
||||||
{
|
{
|
||||||
return $this->hasMany(SystemLog::class);
|
return $this->hasMany(SystemLog::class)->orderBy('id', 'desc');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function timezone()
|
public function timezone()
|
||||||
|
@ -87,10 +87,10 @@ class Gateway extends StaticModel
|
|||||||
case 20:
|
case 20:
|
||||||
case 56:
|
case 56:
|
||||||
return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true],
|
return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true],
|
||||||
GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable']],
|
GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable','charge.succeeded']],
|
||||||
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
|
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
|
||||||
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
|
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
|
||||||
GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable']]]; //Stripe
|
GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded']]]; //Stripe
|
||||||
break;
|
break;
|
||||||
case 39:
|
case 39:
|
||||||
return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]]; //Checkout
|
return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true]]; //Checkout
|
||||||
|
@ -452,7 +452,7 @@ class Invoice extends BaseModel
|
|||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case 'when_sent':
|
case 'when_sent':
|
||||||
return $this->status_id == self::STATUS_DRAFT;
|
return $this->status_id == self::STATUS_SENT;
|
||||||
break;
|
break;
|
||||||
case 'when_paid':
|
case 'when_paid':
|
||||||
return $this->status_id == self::STATUS_PAID || $this->status_id == self::STATUS_PARTIAL;
|
return $this->status_id == self::STATUS_PAID || $this->status_id == self::STATUS_PARTIAL;
|
||||||
@ -477,19 +477,19 @@ class Invoice extends BaseModel
|
|||||||
{
|
{
|
||||||
switch ($reminder_template) {
|
switch ($reminder_template) {
|
||||||
case 'invoice':
|
case 'invoice':
|
||||||
event(new InvoiceWasEmailed($invitation, $invitation->company, Ninja::eventVars(), $template));
|
event(new InvoiceWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $template));
|
||||||
break;
|
break;
|
||||||
case 'reminder1':
|
case 'reminder1':
|
||||||
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(), Activity::INVOICE_REMINDER1_SENT));
|
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER1_SENT));
|
||||||
break;
|
break;
|
||||||
case 'reminder2':
|
case 'reminder2':
|
||||||
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(), Activity::INVOICE_REMINDER2_SENT));
|
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER2_SENT));
|
||||||
break;
|
break;
|
||||||
case 'reminder3':
|
case 'reminder3':
|
||||||
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(), Activity::INVOICE_REMINDER3_SENT));
|
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER3_SENT));
|
||||||
break;
|
break;
|
||||||
case 'reminder_endless':
|
case 'reminder_endless':
|
||||||
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(), Activity::INVOICE_REMINDER_ENDLESS_SENT));
|
event(new InvoiceReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), Activity::INVOICE_REMINDER_ENDLESS_SENT));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
# code...
|
# code...
|
||||||
|
@ -27,9 +27,9 @@ class CompanyPresenter extends EntityPresenter
|
|||||||
|
|
||||||
return $this->settings->name ?: ctrans('texts.untitled_account');
|
return $this->settings->name ?: ctrans('texts.untitled_account');
|
||||||
|
|
||||||
//return $this->entity->name ?: ctrans('texts.untitled_account');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function logo($settings = null)
|
public function logo($settings = null)
|
||||||
{
|
{
|
||||||
if (! $settings) {
|
if (! $settings) {
|
||||||
@ -45,6 +45,24 @@ class CompanyPresenter extends EntityPresenter
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test for using base64 encoding
|
||||||
|
*/
|
||||||
|
public function logo_base64($settings = null)
|
||||||
|
{
|
||||||
|
if (! $settings) {
|
||||||
|
$settings = $this->entity->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strlen($settings->company_logo) >= 1 && (strpos($settings->company_logo, 'http') !== false))
|
||||||
|
return "data:image/png;base64, ". base64_encode(file_get_contents($settings->company_logo));
|
||||||
|
else if(strlen($settings->company_logo) >= 1)
|
||||||
|
return "data:image/png;base64, ". base64_encode(file_get_contents(url('') . $settings->company_logo));
|
||||||
|
else
|
||||||
|
return "data:image/png;base64, ". base64_encode(file_get_contents(asset('images/new_logo.png')));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function address($settings = null)
|
public function address($settings = null)
|
||||||
{
|
{
|
||||||
$str = '';
|
$str = '';
|
||||||
|
@ -128,6 +128,49 @@ class CheckoutComPaymentDriver extends BaseDriver
|
|||||||
return 'gateways.checkout.credit_card.pay';
|
return 'gateways.checkout.credit_card.pay';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getClientRequiredFields(): array
|
||||||
|
{
|
||||||
|
$fields = [];
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_client_name) {
|
||||||
|
$fields[] = ['name' => 'client_name', 'label' => ctrans('texts.client_name'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_contact_name) {
|
||||||
|
$fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_contact_email) {
|
||||||
|
$fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_client_phone) {
|
||||||
|
$fields[] = ['name' => 'client_phone', 'label' => ctrans('texts.client_phone'), 'type' => 'tel', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_billing_address) {
|
||||||
|
$fields[] = ['name' => 'client_address_line_1', 'label' => ctrans('texts.address1'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_city', 'label' => ctrans('texts.city'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_state', 'label' => ctrans('texts.state'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_country_id', 'label' => ctrans('texts.country'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->company_gateway->require_postal_code) {
|
||||||
|
$fields[] = ['name' => 'client_postal_code', 'label' => ctrans('texts.postal_code'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->company_gateway->require_shipping_address) {
|
||||||
|
$fields[] = ['name' => 'client_shipping_address_line_1', 'label' => ctrans('texts.shipping_address1'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_shipping_city', 'label' => ctrans('texts.shipping_city'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_shipping_state', 'label' => ctrans('texts.shipping_state'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_shipping_postal_code', 'label' => ctrans('texts.shipping_postal_code'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
$fields[] = ['name' => 'client_shipping_country_id', 'label' => ctrans('texts.shipping_country'), 'type' => 'text', 'validation' => 'required'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
public function authorizeView($data)
|
public function authorizeView($data)
|
||||||
{
|
{
|
||||||
return $this->payment_method->authorizeView($data);
|
return $this->payment_method->authorizeView($data);
|
||||||
|
@ -105,7 +105,7 @@ class ACH
|
|||||||
|
|
||||||
$this->stripe->init();
|
$this->stripe->init();
|
||||||
|
|
||||||
$bank_account = Customer::retrieveSource($request->customer, $request->source, $this->stripe->stripe_connect_auth);
|
$bank_account = Customer::retrieveSource($request->customer, ['source' => $request->source], $this->stripe->stripe_connect_auth);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$bank_account->verify(['amounts' => request()->transactions]);
|
$bank_account->verify(['amounts' => request()->transactions]);
|
||||||
|
@ -142,6 +142,9 @@ class ACH
|
|||||||
}
|
}
|
||||||
catch(\Exception $e){
|
catch(\Exception $e){
|
||||||
|
|
||||||
|
nlog("we pay exception");
|
||||||
|
nlog($e->getMessage());
|
||||||
|
|
||||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER])
|
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER])
|
||||||
->with('error', $e->getMessage());
|
->with('error', $e->getMessage());
|
||||||
|
|
||||||
@ -194,7 +197,7 @@ class ACH
|
|||||||
$token = ClientGatewayToken::find($this->decodePrimaryKey($request->input('source')));
|
$token = ClientGatewayToken::find($this->decodePrimaryKey($request->input('source')));
|
||||||
$token_meta = $token->meta;
|
$token_meta = $token->meta;
|
||||||
|
|
||||||
if($token_meta->state != "authorized")
|
if(!property_exists($token_meta, 'state') || $token_meta->state != "authorized")
|
||||||
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]);
|
return redirect()->route('client.payment_methods.verification', ['payment_method' => $token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]);
|
||||||
|
|
||||||
$app_fee = (config('ninja.wepay.fee_ach_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed');
|
$app_fee = (config('ninja.wepay.fee_ach_multiplier') * $this->wepay_payment_driver->payment_hash->data->amount_with_fee) + config('ninja.wepay.fee_fixed');
|
||||||
|
@ -51,11 +51,11 @@ class ActivityRepository extends BaseRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($token_id = $this->getTokenId($event_vars)) {
|
if ($token_id = $this->getTokenId($event_vars)) {
|
||||||
$fields->token_id = $token_id;
|
$activity->token_id = $token_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fields->ip = $event_vars['ip'];
|
$activity->ip = $event_vars['ip'];
|
||||||
$fields->is_system = $event_vars['is_system'];
|
$activity->is_system = $event_vars['is_system'];
|
||||||
|
|
||||||
$activity->save();
|
$activity->save();
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ class BaseRepository
|
|||||||
$model->partial = min($model->amount, $model->balance);
|
$model->partial = min($model->amount, $model->balance);
|
||||||
|
|
||||||
/* Update product details if necessary */
|
/* Update product details if necessary */
|
||||||
if ($model->company->update_products)
|
if ($model->company->update_products && $model->id)
|
||||||
UpdateOrCreateProduct::dispatch($model->line_items, $model, $model->company);
|
UpdateOrCreateProduct::dispatch($model->line_items, $model, $model->company);
|
||||||
|
|
||||||
/* Perform model specific tasks */
|
/* Perform model specific tasks */
|
||||||
|
@ -40,6 +40,7 @@ class ConvertQuote
|
|||||||
$invoice->fresh();
|
$invoice->fresh();
|
||||||
|
|
||||||
$invoice->service()
|
$invoice->service()
|
||||||
|
->fillDefaults()
|
||||||
// ->markSent()
|
// ->markSent()
|
||||||
// ->createInvitations()
|
// ->createInvitations()
|
||||||
->save();
|
->save();
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user