mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
commit
137a1d244f
@ -1 +1 @@
|
||||
5.6.27
|
||||
5.6.28
|
@ -185,6 +185,9 @@ class CheckData extends Command
|
||||
if ($cu->company && $cu->user) {
|
||||
(new CreateCompanyToken($cu->company, $cu->user, 'System'))->handle();
|
||||
}
|
||||
else {
|
||||
// $cu->forceDelete();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -64,9 +64,9 @@ class BillingPortalPurchase extends Component
|
||||
/**
|
||||
* Instance of subscription.
|
||||
*
|
||||
* @var Subscription
|
||||
* @var \App\Models\Subscription $subscription
|
||||
*/
|
||||
public $subscription;
|
||||
public Subscription $subscription;
|
||||
|
||||
/**
|
||||
* Instance of client contact.
|
||||
@ -155,7 +155,7 @@ class BillingPortalPurchase extends Component
|
||||
public $request_data;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
* @var float
|
||||
*/
|
||||
public $price;
|
||||
|
||||
|
@ -31,7 +31,10 @@ class StoreCreditRequest extends Request
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return auth()->user()->can('create', Credit::class);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->can('create', Credit::class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -55,10 +58,13 @@ class StoreCreditRequest extends Request
|
||||
$rules['file'] = $this->file_validation;
|
||||
}
|
||||
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.$user->company()->id;
|
||||
|
||||
// $rules['number'] = new UniqueCreditNumberRule($this->all());
|
||||
$rules['number'] = ['nullable', Rule::unique('credits')->where('company_id', auth()->user()->company()->id)];
|
||||
$rules['number'] = ['nullable', Rule::unique('credits')->where('company_id', $user->company()->id)];
|
||||
$rules['discount'] = 'sometimes|numeric';
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['tax_rate1'] = 'bail|sometimes|numeric';
|
||||
@ -67,7 +73,7 @@ class StoreCreditRequest extends Request
|
||||
$rules['tax_name1'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
if ($this->invoice_id) {
|
||||
$rules['invoice_id'] = new ValidInvoiceCreditRule();
|
||||
|
@ -30,7 +30,10 @@ class UpdateCreditRequest extends Request
|
||||
*/
|
||||
public function authorize() : bool
|
||||
{
|
||||
return auth()->user()->can('edit', $this->credit);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->can('edit', $this->credit);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -40,6 +43,9 @@ class UpdateCreditRequest extends Request
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
if ($this->file('documents') && is_array($this->file('documents'))) {
|
||||
@ -55,7 +61,7 @@ class UpdateCreditRequest extends Request
|
||||
}
|
||||
|
||||
if ($this->number) {
|
||||
$rules['number'] = Rule::unique('credits')->where('company_id', auth()->user()->company()->id)->ignore($this->credit->id);
|
||||
$rules['number'] = Rule::unique('credits')->where('company_id', $user->company()->id)->ignore($this->credit->id);
|
||||
}
|
||||
|
||||
$rules['line_items'] = 'array';
|
||||
@ -67,7 +73,7 @@ class UpdateCreditRequest extends Request
|
||||
$rules['tax_name1'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ class StoreInvoiceRequest extends Request
|
||||
$rules['tax_name1'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -40,6 +40,9 @@ class UpdateInvoiceRequest extends Request
|
||||
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
if ($this->file('documents') && is_array($this->file('documents'))) {
|
||||
@ -57,7 +60,7 @@ class UpdateInvoiceRequest extends Request
|
||||
$rules['id'] = new LockedInvoiceRule($this->invoice);
|
||||
|
||||
if ($this->number) {
|
||||
$rules['number'] = Rule::unique('invoices')->where('company_id', auth()->user()->company()->id)->ignore($this->invoice->id);
|
||||
$rules['number'] = Rule::unique('invoices')->where('company_id', $user->company()->id)->ignore($this->invoice->id);
|
||||
}
|
||||
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
@ -72,10 +75,7 @@ class UpdateInvoiceRequest extends Request
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['status_id'] = 'bail|sometimes|not_in:5'; //do not allow cancelled invoices to be modfified.
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
|
||||
// not needed.
|
||||
// $rules['partial_due_date'] = 'bail|sometimes|required_unless:partial,0,null';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -29,7 +29,10 @@ class StorePurchaseOrderRequest extends Request
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return auth()->user()->can('create', PurchaseOrder::class);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->can('create', PurchaseOrder::class);
|
||||
}
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
@ -38,11 +41,14 @@ class StorePurchaseOrderRequest extends Request
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
$rules['vendor_id'] = 'bail|required|exists:vendors,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||
$rules['vendor_id'] = 'bail|required|exists:vendors,id,company_id,'.$user->company()->id.',is_deleted,0';
|
||||
|
||||
$rules['number'] = ['nullable', Rule::unique('purchase_orders')->where('company_id', auth()->user()->company()->id)];
|
||||
$rules['number'] = ['nullable', Rule::unique('purchase_orders')->where('company_id', $user->company()->id)];
|
||||
$rules['discount'] = 'sometimes|numeric';
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['line_items'] = 'array';
|
||||
@ -60,7 +66,7 @@ class StorePurchaseOrderRequest extends Request
|
||||
}
|
||||
|
||||
$rules['status_id'] = 'nullable|integer|in:1,2,3,4,5';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ class UpdatePurchaseOrderRequest extends Request
|
||||
}
|
||||
|
||||
$rules['status_id'] = 'sometimes|integer|in:1,2,3,4,5';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -30,14 +30,20 @@ class StoreQuoteRequest extends Request
|
||||
*/
|
||||
public function authorize() : bool
|
||||
{
|
||||
return auth()->user()->can('create', Quote::class);
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->can('create', Quote::class);
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.$user->company()->id;
|
||||
|
||||
if ($this->file('documents') && is_array($this->file('documents'))) {
|
||||
$rules['documents.*'] = $this->file_validation;
|
||||
@ -51,11 +57,11 @@ class StoreQuoteRequest extends Request
|
||||
$rules['file'] = $this->file_validation;
|
||||
}
|
||||
|
||||
$rules['number'] = ['nullable', Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)];
|
||||
$rules['number'] = ['nullable', Rule::unique('quotes')->where('company_id', $user->company()->id)];
|
||||
$rules['discount'] = 'sometimes|numeric';
|
||||
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
// $rules['number'] = new UniqueQuoteNumberRule($this->all());
|
||||
$rules['line_items'] = 'array';
|
||||
|
@ -57,7 +57,7 @@ class UpdateQuoteRequest extends Request
|
||||
$rules['line_items'] = 'array';
|
||||
$rules['discount'] = 'sometimes|numeric';
|
||||
$rules['is_amount_discount'] = ['boolean'];
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -40,6 +40,9 @@ class StoreRecurringInvoiceRequest extends Request
|
||||
|
||||
public function rules()
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$rules = [];
|
||||
|
||||
if ($this->file('documents') && is_array($this->file('documents'))) {
|
||||
@ -54,7 +57,7 @@ class StoreRecurringInvoiceRequest extends Request
|
||||
$rules['file'] = $this->file_validation;
|
||||
}
|
||||
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
|
||||
$rules['client_id'] = 'required|exists:clients,id,company_id,'.$user->company()->id;
|
||||
|
||||
$rules['invitations.*.client_contact_id'] = 'distinct';
|
||||
|
||||
@ -71,7 +74,7 @@ class StoreRecurringInvoiceRequest extends Request
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['due_date_days'] = 'bail|sometimes|string';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ class UpdateRecurringInvoiceRequest extends Request
|
||||
$rules['tax_name1'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name2'] = 'bail|sometimes|string|nullable';
|
||||
$rules['tax_name3'] = 'bail|sometimes|string|nullable';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|gt:0';
|
||||
$rules['exchange_rate'] = 'bail|sometimes|numeric';
|
||||
|
||||
return $rules;
|
||||
}
|
||||
@ -132,7 +132,7 @@ class UpdateRecurringInvoiceRequest extends Request
|
||||
unset($input['documents']);
|
||||
}
|
||||
|
||||
if (array_key_exists('exchange_rate', $input) && (is_null($input['exchange_rate']) || $input['exchange_rate'] == 0)) {
|
||||
if (array_key_exists('exchange_rate', $input) && (is_null($input['exchange_rate']) || $input['exchange_rate'] == 0) || !isset($input['exchange_rate'])) {
|
||||
$input['exchange_rate'] = 1;
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ class UpdateRecurringInvoiceRequest extends Request
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function setAutoBillFlag($auto_bill)
|
||||
private function setAutoBillFlag($auto_bill): bool
|
||||
{
|
||||
if ($auto_bill == 'always' || $auto_bill == 'optout') {
|
||||
return true;
|
||||
|
@ -288,7 +288,7 @@ class MatchBankTransactions implements ShouldQueue
|
||||
$this->available_balance = $amount;
|
||||
|
||||
\DB::connection(config('database.default'))->transaction(function () use ($invoices) {
|
||||
$invoices->each(function ($invoice) use ($invoices) {
|
||||
$invoices->each(function ($invoice) {
|
||||
$this->invoice = Invoice::withTrashed()->where('id', $invoice->id)->lockForUpdate()->first();
|
||||
|
||||
$_amount = false;
|
||||
@ -400,7 +400,7 @@ class MatchBankTransactions implements ShouldQueue
|
||||
|
||||
$category = $this->categories->firstWhere('highLevelCategoryId', $this->bt->category_id);
|
||||
|
||||
$ec = ExpenseCategory::where('company_id', $this->bt->company_id)->where('bank_category_id', $this->bt->category_id)->first();
|
||||
$ec = ExpenseCategory::query()->where('company_id', $this->bt->company_id)->where('bank_category_id', $this->bt->category_id)->first();
|
||||
|
||||
if ($ec) {
|
||||
return $ec->id;
|
||||
|
@ -280,7 +280,7 @@ class CompanyImport implements ShouldQueue
|
||||
'errors' => []
|
||||
];
|
||||
|
||||
$_company = Company::find($this->company->id);
|
||||
$_company = Company::query()->find($this->company->id);
|
||||
|
||||
$nmo = new NinjaMailerObject;
|
||||
$nmo->mailable = new ImportCompleted($_company, $data);
|
||||
|
@ -122,11 +122,11 @@ class CreateRawPdf implements ShouldQueue
|
||||
|
||||
$entity_design_id = $this->entity->design_id ? $this->entity->design_id : $this->decodePrimaryKey($this->entity->client->getSetting($entity_design_id));
|
||||
|
||||
$design = Design::withTrashed()->find($entity_design_id);
|
||||
$design = Design::query()->withTrashed()->find($entity_design_id);
|
||||
|
||||
/* Catch all in case migration doesn't pass back a valid design */
|
||||
if (! $design) {
|
||||
$design = Design::find(2);
|
||||
$design = Design::query()->find(2);
|
||||
}
|
||||
|
||||
$html = new HtmlEngine($this->invitation);
|
||||
|
@ -131,7 +131,7 @@ class AdjustProductInventory implements ShouldQueue
|
||||
collect($this->old_invoice)->filter(function ($item) {
|
||||
return $item->type_id == '1';
|
||||
})->each(function ($i) {
|
||||
$p = Product::where('product_key', $i->product_key)->where('company_id', $this->company->id)->first();
|
||||
$p = Product::query()->where('product_key', $i->product_key)->where('company_id', $this->company->id)->first();
|
||||
|
||||
if ($p) {
|
||||
$p->in_stock_quantity += $i->quantity;
|
||||
|
@ -12,37 +12,17 @@ use Illuminate\Foundation\Bus\Dispatchable;
|
||||
class InjectSignature implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* @var \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder
|
||||
*/
|
||||
public $entity;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $signature;
|
||||
|
||||
public $contact_id;
|
||||
|
||||
public $ip;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @param $entity
|
||||
* @param \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder $entity
|
||||
* @param int $contact_id
|
||||
* @param string $signature
|
||||
* @param string $ip
|
||||
*/
|
||||
public function __construct($entity, $contact_id, string $signature, ?string $ip)
|
||||
public function __construct(public \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder $entity, private int $contact_id, private string $signature, private ?string $ip)
|
||||
{
|
||||
$this->entity = $entity;
|
||||
|
||||
$this->contact_id = $contact_id;
|
||||
|
||||
$this->signature = $signature;
|
||||
|
||||
$this->ip = $ip;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -43,16 +43,16 @@ class ClientLedgerBalanceUpdate implements ShouldQueue
|
||||
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
CompanyLedger::where('balance', 0)->where('client_id', $this->client->id)->orderBy('updated_at', 'ASC')->cursor()->each(function ($company_ledger) {
|
||||
CompanyLedger::query()->where('balance', 0)->where('client_id', $this->client->id)->orderBy('updated_at', 'ASC')->cursor()->each(function ($company_ledger) {
|
||||
if ($company_ledger->balance == 0) {
|
||||
$last_record = CompanyLedger::where('client_id', $company_ledger->client_id)
|
||||
$last_record = CompanyLedger::query()->where('client_id', $company_ledger->client_id)
|
||||
->where('company_id', $company_ledger->company_id)
|
||||
->where('balance', '!=', 0)
|
||||
->orderBy('id', 'DESC')
|
||||
->first();
|
||||
|
||||
if (! $last_record) {
|
||||
$last_record = CompanyLedger::where('client_id', $company_ledger->client_id)
|
||||
$last_record = CompanyLedger::query()->where('client_id', $company_ledger->client_id)
|
||||
->where('company_id', $company_ledger->company_id)
|
||||
->orderBy('id', 'DESC')
|
||||
->first();
|
||||
|
@ -51,7 +51,7 @@ class NinjaMailerJob implements ShouldQueue
|
||||
|
||||
public $override;
|
||||
|
||||
/* @var \App\Models\Company $company*/
|
||||
/** @var \App\Models\Company $company | null **/
|
||||
public ?Company $company;
|
||||
|
||||
private $mailer;
|
||||
@ -83,7 +83,7 @@ class NinjaMailerJob implements ShouldQueue
|
||||
MultiDB::setDb($this->nmo->company->db);
|
||||
|
||||
/* Serializing models from other jobs wipes the primary key */
|
||||
$this->company = Company::where('company_key', $this->nmo->company->company_key)->first();
|
||||
$this->company = Company::query()->where('company_key', $this->nmo->company->company_key)->first();
|
||||
|
||||
/* If any pre conditions fail, we return early here */
|
||||
if (!$this->company || $this->preFlightChecksFail()) {
|
||||
@ -552,7 +552,7 @@ class NinjaMailerJob implements ShouldQueue
|
||||
* Logs any errors to the SystemLog
|
||||
*
|
||||
* @param string $errors
|
||||
* @param App\Models\User | App\Models\Client | null $recipient_object
|
||||
* @param \App\Models\User | \App\Models\Client | null $recipient_object
|
||||
* @return void
|
||||
*/
|
||||
private function logMailError($errors, $recipient_object) :void
|
||||
|
@ -84,7 +84,14 @@ class PaymentFailureMailer implements ShouldQueue
|
||||
if (($key = array_search('mail', $methods)) !== false) {
|
||||
unset($methods[$key]);
|
||||
|
||||
$mail_obj = (new PaymentFailureObject($this->client, $this->error, $this->company, $this->amount, null))->build();
|
||||
$use_react_link = false;
|
||||
|
||||
if(isset($company_user->react_settings->react_notification_link) && $company_user->react_settings->react_notification_link) {
|
||||
$use_react_link = true;
|
||||
}
|
||||
|
||||
|
||||
$mail_obj = (new PaymentFailureObject($this->client, $this->error, $this->company, $this->amount, null, $use_react_link))->build();
|
||||
|
||||
$nmo = new NinjaMailerObject;
|
||||
$nmo->mailable = new NinjaMailer($mail_obj);
|
||||
|
@ -42,7 +42,7 @@ class UpdateRecurring implements ShouldQueue
|
||||
|
||||
$this->user->setCompany($this->company);
|
||||
|
||||
RecurringInvoice::where('company_id', $this->company->id)
|
||||
RecurringInvoice::query()->where('company_id', $this->company->id)
|
||||
->whereIn('id', $this->ids)
|
||||
->chunk(100, function ($recurring_invoices) {
|
||||
foreach ($recurring_invoices as $recurring_invoice) {
|
||||
|
@ -1654,8 +1654,8 @@ class Import implements ShouldQueue
|
||||
$modified['company_gateway_id'] = $this->transformId('company_gateways', $resource['company_gateway_id']);
|
||||
|
||||
//$modified['user_id'] = $this->processUserId($resource);
|
||||
|
||||
$cgt = ClientGatewayToken::Create($modified);
|
||||
/** @var \App\Models\ClientGatewayToken $cgt **/
|
||||
$cgt = ClientGatewayToken::create($modified);
|
||||
|
||||
$key = "client_gateway_tokens_{$resource['id']}";
|
||||
|
||||
@ -1684,7 +1684,8 @@ class Import implements ShouldQueue
|
||||
$modified['company_id'] = $this->company->id;
|
||||
$modified['user_id'] = $this->processUserId($resource);
|
||||
|
||||
$task_status = TaskStatus::Create($modified);
|
||||
/** @var \App\Models\TaskStatus $task_status **/
|
||||
$task_status = TaskStatus::create($modified);
|
||||
|
||||
$key = "task_statuses_{$resource['id']}";
|
||||
|
||||
@ -1712,7 +1713,8 @@ class Import implements ShouldQueue
|
||||
$modified['company_id'] = $this->company->id;
|
||||
$modified['user_id'] = $this->processUserId($resource);
|
||||
|
||||
$expense_category = ExpenseCategory::Create($modified);
|
||||
/** @var \App\Models\ExpenseCategory $expense_category **/
|
||||
$expense_category = ExpenseCategory::create($modified);
|
||||
|
||||
$old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id;
|
||||
|
||||
@ -1757,7 +1759,8 @@ class Import implements ShouldQueue
|
||||
$modified['status_id'] = $this->transformId('task_statuses', $resource['status_id']);
|
||||
}
|
||||
|
||||
$task = Task::Create($modified);
|
||||
/** @var \App\Models\Task $task **/
|
||||
$task = Task::create($modified);
|
||||
|
||||
if (array_key_exists('created_at', $modified)) {
|
||||
$task->created_at = Carbon::parse($modified['created_at']);
|
||||
@ -1767,8 +1770,6 @@ class Import implements ShouldQueue
|
||||
$task->updated_at = Carbon::parse($modified['updated_at']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$task->save(['timestamps' => false]);
|
||||
|
||||
$old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id;
|
||||
@ -1802,7 +1803,8 @@ class Import implements ShouldQueue
|
||||
$modified['client_id'] = $this->transformId('clients', $resource['client_id']);
|
||||
}
|
||||
|
||||
$project = Project::Create($modified);
|
||||
/** @var \App\Models\Project $project **/
|
||||
$project = Project::create($modified);
|
||||
|
||||
$key = "projects_{$resource['id']}";
|
||||
|
||||
@ -1871,6 +1873,7 @@ try {
|
||||
|
||||
$modified['updated_at'] = $modified['created_at'];
|
||||
|
||||
/** @var \App\Models\Activity $act **/
|
||||
$act = Activity::make($modified);
|
||||
|
||||
$act->save(['timestamps' => false]);
|
||||
@ -1921,7 +1924,8 @@ nlog("could not import activity: {$e->getMessage()}");
|
||||
$modified['vendor_id'] = $this->transformId('vendors', $resource['vendor_id']);
|
||||
}
|
||||
|
||||
$expense = Expense::Create($modified);
|
||||
/** @var \App\Models\Expense $expense **/
|
||||
$expense = Expense::create($modified);
|
||||
|
||||
if (array_key_exists('created_at', $modified)) {
|
||||
$expense->created_at = Carbon::parse($modified['created_at']);
|
||||
@ -1931,8 +1935,6 @@ nlog("could not import activity: {$e->getMessage()}");
|
||||
$expense->updated_at = Carbon::parse($modified['updated_at']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$expense->save(['timestamps' => false]);
|
||||
|
||||
$old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id;
|
||||
|
@ -44,13 +44,13 @@ class ImportStripeCustomers implements ShouldQueue
|
||||
/**
|
||||
* Execute the job.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
$cgs = CompanyGateway::where('company_id', $this->company->id)
|
||||
$cgs = CompanyGateway::query()
|
||||
->where('company_id', $this->company->id)
|
||||
->where('is_deleted', 0)
|
||||
->whereIn('gateway_key', $this->stripe_keys)
|
||||
->get();
|
||||
|
@ -159,7 +159,7 @@ class ReminderJob implements ShouldQueue
|
||||
}
|
||||
}
|
||||
|
||||
private function addFeeToNewInvoice(Invoice $over_due_invoice, string $reminder_template, array $fees): void
|
||||
private function addFeeToNewInvoice(Invoice $over_due_invoice, string $reminder_template, array $fees)
|
||||
{
|
||||
|
||||
$amount = $fees[0];
|
||||
|
@ -42,13 +42,13 @@ class StripeUpdatePaymentMethods implements ShouldQueue
|
||||
/**
|
||||
* Execute the job.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
$cgs = CompanyGateway::where('company_id', $this->company->id)
|
||||
$cgs = CompanyGateway::query()
|
||||
->where('company_id', $this->company->id)
|
||||
->whereIn('gateway_key', $this->stripe_keys)
|
||||
->get();
|
||||
|
||||
|
@ -51,6 +51,8 @@ class UploadFile implements ShouldQueue
|
||||
|
||||
public $entity;
|
||||
|
||||
public $disk;
|
||||
|
||||
public function __construct($file, $type, $user, $company, $entity, $disk = null, $is_public = false)
|
||||
{
|
||||
$this->file = $file;
|
||||
|
@ -43,7 +43,6 @@ class WebhookHandler implements ShouldQueue
|
||||
/**
|
||||
* Execute the job.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
@ -54,7 +53,8 @@ class WebhookHandler implements ShouldQueue
|
||||
return true;
|
||||
}
|
||||
|
||||
Webhook::where('company_id', $this->company->id)
|
||||
Webhook::query()
|
||||
->where('company_id', $this->company->id)
|
||||
->where('event_id', $this->event_id)
|
||||
->cursor()
|
||||
->each(function ($subscription) {
|
||||
|
@ -39,6 +39,10 @@ class OAuth
|
||||
|
||||
const SOCIAL_APPLE = 8;
|
||||
|
||||
public $provider_instance;
|
||||
|
||||
public $provider_id;
|
||||
|
||||
/**
|
||||
* @param \Laravel\Socialite\Facades\Socialite $socialite_user
|
||||
* @return bool | \App\Models\User | \App\Models\User | null
|
||||
@ -87,6 +91,8 @@ class OAuth
|
||||
return 'microsoft';
|
||||
case self::SOCIAL_APPLE:
|
||||
return 'apple';
|
||||
default:
|
||||
return 'google';
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,6 +115,8 @@ class OAuth
|
||||
return self::SOCIAL_MICROSOFT;
|
||||
case 'apple':
|
||||
return self::SOCIAL_APPLE;
|
||||
default:
|
||||
return self::SOCIAL_GOOGLE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ class MigrationCompleted extends Mailable
|
||||
public function build()
|
||||
{
|
||||
MultiDB::setDb($this->db);
|
||||
$this->company = Company::find($this->company_id);
|
||||
$this->company = Company::query()->find($this->company_id);
|
||||
|
||||
App::forgetInstance('translator');
|
||||
$t = app('translator');
|
||||
|
@ -537,8 +537,8 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
|
||||
foreach ($pms as $pm) {
|
||||
if ($pm['gateway_type_id'] == GatewayType::CREDIT_CARD) {
|
||||
/**@var \App\Models\CompanyGateway $cg */
|
||||
$cg = CompanyGateway::find($pm['company_gateway_id']);
|
||||
|
||||
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
|
||||
|
||||
if ($cg && ! property_exists($cg->fees_and_limits, strval(GatewayType::CREDIT_CARD))) {
|
||||
$fees_and_limits = $cg->fees_and_limits;
|
||||
@ -561,7 +561,7 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
|
||||
foreach ($pms as $pm) {
|
||||
if ($pm['gateway_type_id'] == GatewayType::BACS) {
|
||||
$cg = CompanyGateway::find($pm['company_gateway_id']);
|
||||
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
|
||||
|
||||
if ($cg && ! property_exists($cg->fees_and_limits, GatewayType::BACS)) {
|
||||
$fees_and_limits = $cg->fees_and_limits;
|
||||
@ -587,7 +587,7 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
if ($this->currency()->code == 'USD' && in_array(GatewayType::BANK_TRANSFER, array_column($pms, 'gateway_type_id'))) {
|
||||
foreach ($pms as $pm) {
|
||||
if ($pm['gateway_type_id'] == GatewayType::BANK_TRANSFER) {
|
||||
$cg = CompanyGateway::find($pm['company_gateway_id']);
|
||||
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
|
||||
|
||||
if ($cg && ! property_exists($cg->fees_and_limits, GatewayType::BANK_TRANSFER)) {
|
||||
$fees_and_limits = $cg->fees_and_limits;
|
||||
@ -606,7 +606,7 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
if ($this->currency()->code == 'EUR' && (in_array(GatewayType::BANK_TRANSFER, array_column($pms, 'gateway_type_id')) || in_array(GatewayType::SEPA, array_column($pms, 'gateway_type_id')))) {
|
||||
foreach ($pms as $pm) {
|
||||
if ($pm['gateway_type_id'] == GatewayType::SEPA) {
|
||||
$cg = CompanyGateway::find($pm['company_gateway_id']);
|
||||
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
|
||||
|
||||
if ($cg && $cg->fees_and_limits->{GatewayType::SEPA}->is_enabled) {
|
||||
return $cg;
|
||||
@ -618,7 +618,7 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
if (in_array(GatewayType::DIRECT_DEBIT, array_column($pms, 'gateway_type_id'))) {
|
||||
foreach ($pms as $pm) {
|
||||
if ($pm['gateway_type_id'] == GatewayType::DIRECT_DEBIT) {
|
||||
$cg = CompanyGateway::find($pm['company_gateway_id']);
|
||||
$cg = CompanyGateway::query()->find($pm['company_gateway_id']);
|
||||
|
||||
if ($cg && $cg->fees_and_limits->{GatewayType::DIRECT_DEBIT}->is_enabled) {
|
||||
return $cg;
|
||||
|
@ -67,6 +67,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
* @property bool $is_large
|
||||
* @property int $enable_shop_api
|
||||
* @property string $default_auto_bill
|
||||
* @property string $custom_value1
|
||||
* @property string $custom_value2
|
||||
* @property string $custom_value3
|
||||
* @property string $custom_value4
|
||||
* @property bool $mark_expenses_invoiceable
|
||||
* @property bool $mark_expenses_paid
|
||||
* @property bool $invoice_expense_documents
|
||||
|
@ -167,17 +167,17 @@ class CompanyGateway extends BaseModel
|
||||
->take(50);
|
||||
}
|
||||
|
||||
public function company()
|
||||
public function company(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Company::class);
|
||||
}
|
||||
|
||||
public function client_gateway_tokens()
|
||||
public function client_gateway_tokens(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(ClientGatewayToken::class);
|
||||
}
|
||||
|
||||
public function gateway()
|
||||
public function gateway(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Gateway::class, 'gateway_key', 'key');
|
||||
}
|
||||
@ -190,8 +190,8 @@ class CompanyGateway extends BaseModel
|
||||
/* This is the public entry point into the payment superclass */
|
||||
public function driver(Client $client = null)
|
||||
{
|
||||
// $class = static::driver_class();
|
||||
$class = self::driver_class();
|
||||
// $class = static::driver_class();
|
||||
$class = self::driver_class();
|
||||
|
||||
if (!$class) {
|
||||
return false;
|
||||
|
@ -18,7 +18,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
*
|
||||
* @property int $id
|
||||
* @property string $hash
|
||||
* @property string $fee_total
|
||||
* @property float $fee_total
|
||||
* @property int|null $fee_invoice_id
|
||||
* @property mixed $data
|
||||
* @property int|null $payment_id
|
||||
|
@ -50,12 +50,12 @@ use Illuminate\Support\Facades\Storage;
|
||||
* @property string|null $private_notes
|
||||
* @property string|null $terms
|
||||
* @property string|null $tax_name1
|
||||
* @property string $tax_rate1
|
||||
* @property float $tax_rate1
|
||||
* @property string|null $tax_name2
|
||||
* @property string $tax_rate2
|
||||
* @property float $tax_rate2
|
||||
* @property string|null $tax_name3
|
||||
* @property string $tax_rate3
|
||||
* @property string $total_taxes
|
||||
* @property float $tax_rate3
|
||||
* @property float $total_taxes
|
||||
* @property int $uses_inclusive_taxes
|
||||
* @property string|null $reminder1_sent
|
||||
* @property string|null $reminder2_sent
|
||||
@ -74,11 +74,11 @@ use Illuminate\Support\Facades\Storage;
|
||||
* @property int $custom_surcharge_tax2
|
||||
* @property int $custom_surcharge_tax3
|
||||
* @property int $custom_surcharge_tax4
|
||||
* @property string $exchange_rate
|
||||
* @property string $balance
|
||||
* @property float $exchange_rate
|
||||
* @property float $balance
|
||||
* @property float|null $partial
|
||||
* @property string $amount
|
||||
* @property string $paid_to_date
|
||||
* @property float $amount
|
||||
* @property float $paid_to_date
|
||||
* @property string|null $partial_due_date
|
||||
* @property string|null $last_viewed
|
||||
* @property int|null $deleted_at
|
||||
|
@ -47,17 +47,16 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @property string|null $recurring_product_ids
|
||||
* @property string $name
|
||||
* @property int|null $group_id
|
||||
* @property string $price
|
||||
* @property string $promo_price
|
||||
* @property float $price
|
||||
* @property float $promo_price
|
||||
* @property int $registration_required
|
||||
* @property int $use_inventory_management
|
||||
* @property string|null $optional_product_ids
|
||||
* @property string|null $optional_recurring_product_ids
|
||||
* @property \App\Models\Company $company
|
||||
* @property-read \App\Models\Company $company
|
||||
* @property-read mixed $hashed_id
|
||||
* @property-read \App\Models\GroupSetting|null $group_settings
|
||||
* @property-read \App\Models\User $user
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel company()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude($columns)
|
||||
* @method static \Database\Factories\SubscriptionFactory factory($count = null, $state = [])
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Subscription filter(\App\Filters\QueryFilters $filters)
|
||||
@ -68,6 +67,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scope()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Subscription withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Subscription withoutTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Subscription with($value)
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Subscription extends BaseModel
|
||||
|
@ -31,7 +31,6 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @property-read \App\Models\Company|null $company
|
||||
* @property-read mixed $hashed_id
|
||||
* @property-read \App\Models\User|null $user
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel company()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude($columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Webhook filter(\App\Filters\QueryFilters $filters)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Webhook newModelQuery()
|
||||
|
@ -56,7 +56,11 @@ class BaseDriver extends AbstractPaymentDriver
|
||||
/* The Invitation */
|
||||
public $invitation;
|
||||
|
||||
/* The client */
|
||||
/**
|
||||
* The Client
|
||||
*
|
||||
* @var \App\Models\Client|null $client
|
||||
*/
|
||||
public $client;
|
||||
|
||||
/* Gateway capabilities */
|
||||
|
@ -39,7 +39,7 @@ class PaymentIntentPartiallyFundedWebhook implements ShouldQueue
|
||||
{
|
||||
MultiDB::findAndSetDbByCompanyKey($this->company_key);
|
||||
|
||||
$company = Company::where('company_key', $this->company_key)->first();
|
||||
$company = Company::query()->where('company_key', $this->company_key)->first();
|
||||
|
||||
foreach ($this->stripe_request as $transaction) {
|
||||
$payment_intent = false;
|
||||
@ -65,7 +65,7 @@ class PaymentIntentPartiallyFundedWebhook implements ShouldQueue
|
||||
nlog("paymentintent found but no payment");
|
||||
}
|
||||
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$stripe_driver = $company_gateway->driver()->init();
|
||||
|
||||
$hash = isset($transaction['metadata']['payment_hash']) ? $transaction['metadata']['payment_hash'] : false;
|
||||
|
@ -57,17 +57,15 @@ class PaymentIntentProcessingWebhook implements ShouldQueue
|
||||
{
|
||||
MultiDB::findAndSetDbByCompanyKey($this->company_key);
|
||||
|
||||
$company = Company::where('company_key', $this->company_key)->first();
|
||||
$company = Company::query()->where('company_key', $this->company_key)->first();
|
||||
|
||||
foreach ($this->stripe_request as $transaction) {
|
||||
if (array_key_exists('payment_intent', $transaction)) {
|
||||
/** @var \App\Models\Payment $payment **/
|
||||
$payment = Payment::query()
|
||||
->where('company_id', $company->id)
|
||||
->where('transaction_reference', $transaction['payment_intent'])
|
||||
->first();
|
||||
} else {
|
||||
/** @var \App\Models\Payment $payment **/
|
||||
$payment = Payment::query()
|
||||
->where('company_id', $company->id)
|
||||
->where('transaction_reference', $transaction['id'])
|
||||
@ -97,8 +95,7 @@ class PaymentIntentProcessingWebhook implements ShouldQueue
|
||||
if ($this->payment_completed) {
|
||||
return;
|
||||
}
|
||||
/** @var \App\Models\CompanyGateway $company_gateway **/
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$stripe_driver = $company_gateway->driver()->init();
|
||||
|
||||
$charge_id = false;
|
||||
@ -126,10 +123,8 @@ class PaymentIntentProcessingWebhook implements ShouldQueue
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var \App\Models\Company $company **/
|
||||
$company = Company::where('company_key', $this->company_key)->first();
|
||||
$company = Company::query()->where('company_key', $this->company_key)->first();
|
||||
|
||||
/** @var \App\Models\Payment $payment **/
|
||||
$payment = Payment::query()
|
||||
->where('company_id', $company->id)
|
||||
->where('transaction_reference', $charge['id'])
|
||||
@ -189,7 +184,7 @@ class PaymentIntentProcessingWebhook implements ShouldQueue
|
||||
|
||||
private function updateAchPayment($payment_hash, $client, $meta)
|
||||
{
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$payment_method_type = $meta['gateway_type_id'];
|
||||
$driver = $company_gateway->driver($client)->init()->setPaymentMethod($payment_method_type);
|
||||
|
||||
|
@ -56,7 +56,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
||||
{
|
||||
MultiDB::findAndSetDbByCompanyKey($this->company_key);
|
||||
|
||||
$company = Company::where('company_key', $this->company_key)->first();
|
||||
$company = Company::query()->where('company_key', $this->company_key)->first();
|
||||
|
||||
foreach ($this->stripe_request as $transaction) {
|
||||
if (array_key_exists('payment_intent', $transaction)) {
|
||||
@ -84,7 +84,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
||||
return;
|
||||
}
|
||||
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$stripe_driver = $company_gateway->driver()->init();
|
||||
|
||||
$charge_id = false;
|
||||
@ -196,7 +196,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
||||
|
||||
private function updateAchPayment($payment_hash, $client, $meta)
|
||||
{
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$payment_method_type = $meta['gateway_type_id'];
|
||||
$driver = $company_gateway->driver($client)->init()->setPaymentMethod($payment_method_type);
|
||||
|
||||
@ -267,7 +267,7 @@ class PaymentIntentWebhook implements ShouldQueue
|
||||
|
||||
private function updateCreditCardPayment($payment_hash, $client, $meta)
|
||||
{
|
||||
$company_gateway = CompanyGateway::find($this->company_gateway_id);
|
||||
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
|
||||
$payment_method_type = $meta['gateway_type_id'];
|
||||
$driver = $company_gateway->driver($client)->init()->setPaymentMethod($payment_method_type);
|
||||
|
||||
|
@ -90,7 +90,7 @@ class UpdatePaymentMethods
|
||||
);
|
||||
|
||||
foreach ($bank_methods->data as $method) {
|
||||
$token = ClientGatewayToken::where([
|
||||
$token = ClientGatewayToken::query()->where([
|
||||
'gateway_customer_reference' => $customer->id,
|
||||
'token' => $method->id,
|
||||
'client_id' => $client->id,
|
||||
@ -140,7 +140,7 @@ class UpdatePaymentMethods
|
||||
}
|
||||
|
||||
foreach ($sources->data as $method) {
|
||||
$token_exists = ClientGatewayToken::where([
|
||||
$token_exists = ClientGatewayToken::query()->where([
|
||||
'gateway_customer_reference' => $customer->id,
|
||||
'token' => $method->id,
|
||||
'client_id' => $client->id,
|
||||
@ -176,7 +176,7 @@ class UpdatePaymentMethods
|
||||
|
||||
private function addOrUpdateCard(PaymentMethod $method, $customer_reference, Client $client, $type_id)
|
||||
{
|
||||
$token_exists = ClientGatewayToken::where([
|
||||
$token_exists = ClientGatewayToken::query()->where([
|
||||
'gateway_customer_reference' => $customer_reference,
|
||||
'token' => $method->id,
|
||||
'client_id' => $client->id,
|
||||
|
@ -501,7 +501,8 @@ class StripePaymentDriver extends BaseDriver
|
||||
|
||||
$this->init();
|
||||
|
||||
$client_gateway_token = ClientGatewayToken::whereClientId($this->client->id)
|
||||
$client_gateway_token = ClientGatewayToken::query()
|
||||
->whereClientId($this->client->id)
|
||||
->whereCompanyGatewayId($this->company_gateway->id)
|
||||
->first();
|
||||
|
||||
@ -890,9 +891,11 @@ class StripePaymentDriver extends BaseDriver
|
||||
return Account::all();
|
||||
}
|
||||
|
||||
public function setClientFromCustomer($customer)
|
||||
public function setClientFromCustomer($customer): self
|
||||
{
|
||||
$this->client = ClientGatewayToken::where('gateway_customer_reference', $customer)->client;
|
||||
$this->client = ClientGatewayToken::query()->where('gateway_customer_reference', $customer)->first()->client;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -201,7 +201,7 @@ class ACH
|
||||
|
||||
public function paymentResponse($request)
|
||||
{
|
||||
$token = ClientGatewayToken::find($this->decodePrimaryKey($request->input('source')));
|
||||
$token = ClientGatewayToken::query()->find($this->decodePrimaryKey($request->input('source')));
|
||||
$token_meta = $token->meta;
|
||||
|
||||
if (! property_exists($token_meta, 'state') || $token_meta->state != 'authorized') {
|
||||
|
@ -136,7 +136,7 @@ class InvoiceMigrationRepository extends BaseRepository
|
||||
|
||||
$state['finished_amount'] = $model->amount;
|
||||
|
||||
$model = $model->service()->applyNumber()->save();
|
||||
$model = $model->service()->applyNumber()->setReminder()->save();
|
||||
|
||||
if ($class->name == Invoice::class || $class->name == RecurringInvoice::class) {
|
||||
if (($state['finished_amount'] != $state['starting_amount']) && ($model->status_id != Invoice::STATUS_DRAFT)) {
|
||||
|
@ -137,7 +137,7 @@ class UserRepository extends BaseRepository
|
||||
$cu->forceDelete();
|
||||
}
|
||||
|
||||
event(new UserWasDeleted($user, auth()->user(), $company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
|
||||
event(new UserWasDeleted($user, auth()->user(), auth()->user()->company(), Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
|
||||
|
||||
$user->delete();
|
||||
|
||||
|
@ -33,6 +33,9 @@ class ProcessBankRules extends AbstractService
|
||||
|
||||
protected $invoices;
|
||||
|
||||
/**
|
||||
* @param \App\Models\BankTransaction $bank_transaction
|
||||
*/
|
||||
public function __construct(public BankTransaction $bank_transaction)
|
||||
{
|
||||
}
|
||||
@ -48,14 +51,12 @@ class ProcessBankRules extends AbstractService
|
||||
|
||||
private function matchCredit()
|
||||
{
|
||||
/** @var \Illuminate\Database\Eloquent\Collection<Invoice> $this->invoices */
|
||||
$this->invoices = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
|
||||
->whereIn('status_id', [1,2,3])
|
||||
->where('is_deleted', 0)
|
||||
->get();
|
||||
|
||||
$invoice = $this->invoices->first(function ($value, $key) {
|
||||
/** @var \App\Models\Invoice $value */
|
||||
return str_contains($this->bank_transaction->description, $value->number);
|
||||
});
|
||||
|
||||
|
@ -166,7 +166,6 @@ class ClientService
|
||||
*
|
||||
* @param mixed $pdf The pdf blob
|
||||
* @param array $options The statement options array
|
||||
* @return void
|
||||
*/
|
||||
private function emailStatement($pdf, array $options): void
|
||||
{
|
||||
|
@ -25,6 +25,7 @@ class PaymentMethod
|
||||
|
||||
private $amount;
|
||||
|
||||
/** @var \Illuminate\Support\Collection<CompanyGateway> $gateways **/
|
||||
private $gateways;
|
||||
|
||||
private $payment_methods;
|
||||
@ -78,7 +79,8 @@ class PaymentMethod
|
||||
return array_search($model->id, $transformed_ids); // this closure sorts for us
|
||||
});
|
||||
} else {
|
||||
$this->gateways = CompanyGateway::with('gateway')
|
||||
$this->gateways = CompanyGateway::query()
|
||||
->with('gateway')
|
||||
->where('company_id', $this->client->company_id)
|
||||
->where('gateway_key', '!=', '54faab2ab6e3223dbe848b1686490baa')
|
||||
->whereNull('deleted_at')
|
||||
@ -112,7 +114,8 @@ class PaymentMethod
|
||||
return array_search($model->id, $transformed_ids); // this closure sorts for us
|
||||
});
|
||||
} else {
|
||||
$this->gateways = CompanyGateway::with('gateway')
|
||||
$this->gateways = CompanyGateway::query()
|
||||
->with('gateway')
|
||||
->where('company_id', $this->client->company_id)
|
||||
->where('gateway_key', '54faab2ab6e3223dbe848b1686490baa')
|
||||
->whereNull('deleted_at')
|
||||
@ -171,7 +174,7 @@ class PaymentMethod
|
||||
{
|
||||
foreach ($this->payment_methods as $key => $child_array) {
|
||||
foreach ($child_array as $gateway_id => $gateway_type_id) {
|
||||
$gateway = CompanyGateway::find($gateway_id);
|
||||
$gateway = CompanyGateway::query()->find($gateway_id);
|
||||
|
||||
$fee_label = $gateway->calcGatewayFeeLabel($this->amount, $this->client, $gateway_type_id);
|
||||
|
||||
|
@ -52,7 +52,7 @@ class InstantPayment
|
||||
$is_credit_payment = true;
|
||||
}
|
||||
|
||||
$gateway = CompanyGateway::find($this->request->input('company_gateway_id'));
|
||||
$gateway = CompanyGateway::query()->find($this->request->input('company_gateway_id'));
|
||||
|
||||
/**
|
||||
* find invoices
|
||||
@ -100,7 +100,7 @@ class InstantPayment
|
||||
* Determine the payable amount and the max payable. ie either partial or invoice balance
|
||||
*/
|
||||
|
||||
$payable_amount = Number::roundValue(Number::parseFloat($payable_invoice['amount'], $client->currency()->precision));
|
||||
$payable_amount = Number::roundValue(Number::parseFloat($payable_invoice['amount']), $client->currency()->precision);
|
||||
$invoice_balance = Number::roundValue(($invoice->partial > 0 ? $invoice->partial : $invoice->balance), $client->currency()->precision);
|
||||
|
||||
|
||||
@ -155,7 +155,7 @@ class InstantPayment
|
||||
return $payable_invoice['invoice_id'] == $inv->hashed_id;
|
||||
});
|
||||
|
||||
$payable_amount = Number::roundValue(Number::parseFloat($payable_invoice['amount'], $client->currency()->precision));
|
||||
$payable_amount = Number::roundValue(Number::parseFloat($payable_invoice['amount']), $client->currency()->precision);
|
||||
$invoice_balance = Number::roundValue($invoice->balance, $client->currency()->precision);
|
||||
|
||||
$payable_invoice['due_date'] = $this->formatDate($invoice->due_date, $invoice->client->date_format());
|
||||
@ -273,7 +273,7 @@ class InstantPayment
|
||||
'is_recurring' => $this->request->is_recurring,
|
||||
];
|
||||
|
||||
if ($is_credit_payment || $totals <= 0) {
|
||||
if ($is_credit_payment) {
|
||||
return $this->processCreditPayment($this->request, $data);
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,6 @@ class SendEmail
|
||||
|
||||
/**
|
||||
* Builds the correct template to send.
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
|
@ -194,7 +194,7 @@ class AutoBillInvoice extends AbstractService
|
||||
$current_credit = false;
|
||||
|
||||
foreach ($this->used_credit as $credit) {
|
||||
$current_credit = Credit::find($credit['credit_id']);
|
||||
$current_credit = Credit::query()->find($credit['credit_id']);
|
||||
$payment->credits()
|
||||
->attach($current_credit->id, ['amount' => $credit['amount']]);
|
||||
|
||||
|
@ -302,6 +302,7 @@ class FacturaEInvoice extends AbstractService
|
||||
private function resolvePaymentMethod(\App\Models\Payment $payment): array
|
||||
{
|
||||
$data = [];
|
||||
$method = FacturaePayment::TYPE_CARD;
|
||||
|
||||
match($payment->type_id){
|
||||
PaymentType::BANK_TRANSFER => $method = FacturaePayment::TYPE_TRANSFER ,
|
||||
@ -482,8 +483,8 @@ class FacturaEInvoice extends AbstractService
|
||||
"fax" => "",
|
||||
"website" => substr($company->settings->website, 0, 50),
|
||||
"contactPeople" => substr($company->owner()->present()->name(), 0, 40),
|
||||
"firstName" => $company->owner()->present()->firstName(),
|
||||
"lastName" => $company->owner()->present()->lastName(),
|
||||
"firstSurname" => $company->owner()->present()->firstName(),
|
||||
"lastSurname" => $company->owner()->present()->lastName(),
|
||||
// 'centres' => $this->setFace(),
|
||||
// "cnoCnae" => "04647", // Clasif. Nacional de Act. Económicas
|
||||
// "ineTownCode" => "280796" // Cód. de municipio del INE
|
||||
|
@ -238,7 +238,8 @@ class RefundPayment
|
||||
private function adjustInvoices()
|
||||
{
|
||||
if (isset($this->refund_data['invoices']) && count($this->refund_data['invoices']) > 0) {
|
||||
foreach ($this->refund_data['invoices'] as $refunded_invoice) {
|
||||
foreach ($this->refund_data['invoices'] as $refunded_invoice)
|
||||
{
|
||||
$invoice = Invoice::withTrashed()->find($refunded_invoice['invoice_id']);
|
||||
|
||||
if ($invoice->trashed()) {
|
||||
@ -265,10 +266,10 @@ class RefundPayment
|
||||
|
||||
$invoice->saveQuietly();
|
||||
|
||||
//06-09-2022
|
||||
//08-08-2023
|
||||
$client = $invoice->client
|
||||
->service()
|
||||
->updateBalance($refunded_invoice['amount'])
|
||||
->updateBalanceAndPaidToDate($refunded_invoice['amount'], -1 * $refunded_invoice['amount'])
|
||||
->save();
|
||||
|
||||
if ($invoice->is_deleted) {
|
||||
@ -276,13 +277,6 @@ class RefundPayment
|
||||
}
|
||||
}
|
||||
|
||||
$client = $this->payment->client->fresh();
|
||||
|
||||
if ($client->trashed()) {
|
||||
$client->restore();
|
||||
}
|
||||
|
||||
$client->service()->updatePaidToDate(-1 * $refunded_invoice['amount'])->save();
|
||||
} else {
|
||||
//if we are refunding and no payments have been tagged, then we need to decrement the client->paid_to_date by the total refund amount.
|
||||
|
||||
|
@ -42,7 +42,8 @@ class StubBuilder
|
||||
|
||||
public $entity_type;
|
||||
|
||||
public \App\Models\Client | \App\Models\Vendor $recipient;
|
||||
/** @var Client | Vendor $recipient **/
|
||||
public Client | Vendor $recipient;
|
||||
|
||||
public mixed $contact;
|
||||
|
||||
@ -178,7 +179,7 @@ class StubBuilder
|
||||
|
||||
$design_string = "{$this->entity_type}_design_id";
|
||||
|
||||
$design = DesignModel::withTrashed()->find($this->decodePrimaryKey($html->settings->{$design_string}));
|
||||
$design = DesignModel::query()->withTrashed()->find($this->decodePrimaryKey($html->settings->{$design_string}));
|
||||
|
||||
$template = new PdfMakerDesign(strtolower($design->name));
|
||||
|
||||
|
@ -293,7 +293,7 @@ class ProfitLoss
|
||||
|
||||
foreach ($payment->paymentables as $pivot) {
|
||||
if ($pivot->paymentable_type == 'invoices') {
|
||||
$invoice = Invoice::withTrashed()->find($pivot->paymentable_id);
|
||||
$invoice = Invoice::query()->withTrashed()->find($pivot->paymentable_id);
|
||||
|
||||
$amount_payment_paid += $pivot->amount - $pivot->refunded;
|
||||
$amount_payment_paid_converted += $amount_payment_paid / ($payment->exchange_rate ?: 1);
|
||||
|
@ -213,7 +213,7 @@ class SubscriptionService
|
||||
$email_object->body = ctrans('texts.white_label_body', ['license_key' => $license_key]);
|
||||
$email_object->client_id = $invoice->client_id;
|
||||
$email_object->client_contact_id = $contact->id;
|
||||
$email_object->invitation_key = $invitation->invitation_key;
|
||||
$email_object->invitation_key = $invitation->key;
|
||||
$email_object->invitation_id = $invitation->id;
|
||||
$email_object->entity_id = $invoice->id;
|
||||
$email_object->entity_class = Invoice::class;
|
||||
@ -676,7 +676,7 @@ class SubscriptionService
|
||||
|
||||
$pro_rata_refund_amount = $this->calculateProRataRefund($last_invoice, $old_subscription);
|
||||
} elseif ($last_invoice->balance > 0) {
|
||||
$pro_rata_charge_amount = $this->calculateProRataCharge($last_invoice, $old_subscription);
|
||||
$pro_rata_charge_amount = $this->calculateProRataCharge($last_invoice);
|
||||
nlog("pro rata charge = {$pro_rata_charge_amount}");
|
||||
} else {
|
||||
$pro_rata_refund_amount = $this->calculateProRataRefund($last_invoice, $old_subscription) * -1;
|
||||
@ -740,7 +740,7 @@ class SubscriptionService
|
||||
}
|
||||
|
||||
if ($last_invoice->balance > 0) {
|
||||
$pro_rata_charge_amount = $this->calculateProRataCharge($last_invoice, $old_subscription);
|
||||
$pro_rata_charge_amount = $this->calculateProRataCharge($last_invoice);
|
||||
nlog("pro rata charge = {$pro_rata_charge_amount}");
|
||||
} else {
|
||||
$pro_rata_refund_amount = $this->calculateProRataRefund($last_invoice, $old_subscription) * -1;
|
||||
@ -807,7 +807,7 @@ class SubscriptionService
|
||||
{
|
||||
nlog("handle plan change");
|
||||
|
||||
$old_recurring_invoice = RecurringInvoice::find($this->decodePrimaryKey($payment_hash->data->billing_context->recurring_invoice));
|
||||
$old_recurring_invoice = RecurringInvoice::query()->find($this->decodePrimaryKey($payment_hash->data->billing_context->recurring_invoice));
|
||||
|
||||
if (!$old_recurring_invoice) {
|
||||
return $this->handleRedirect('/client/recurring_invoices/');
|
||||
@ -816,7 +816,7 @@ class SubscriptionService
|
||||
$recurring_invoice = $this->createNewRecurringInvoice($old_recurring_invoice);
|
||||
|
||||
//update the invoice and attach to the recurring invoice!!!!!
|
||||
$invoice = Invoice::find($payment_hash->fee_invoice_id);
|
||||
$invoice = Invoice::query()->find($payment_hash->fee_invoice_id);
|
||||
$invoice->recurring_id = $recurring_invoice->id;
|
||||
$invoice->is_proforma = false;
|
||||
$invoice->save();
|
||||
@ -1243,7 +1243,7 @@ class SubscriptionService
|
||||
/**
|
||||
* Get available upgrades & downgrades for the plan.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
|
||||
* @return \Illuminate\Database\Eloquent\Collection
|
||||
*/
|
||||
public function getPlans()
|
||||
{
|
||||
|
@ -11,16 +11,24 @@
|
||||
|
||||
namespace App\Transformers;
|
||||
|
||||
use App\Models\Activity;
|
||||
use App\Models\Backup;
|
||||
use App\Models\ClientContact;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\Task;
|
||||
use App\Models\User;
|
||||
use App\Models\Quote;
|
||||
use App\Models\Backup;
|
||||
use App\Models\Client;
|
||||
use App\Models\Credit;
|
||||
use App\Models\Vendor;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\Payment;
|
||||
use App\Models\Activity;
|
||||
use App\Models\ClientContact;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\VendorContact;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Models\RecurringInvoice;
|
||||
use App\Transformers\EntityTransformer;
|
||||
use App\Transformers\InvoiceHistoryTransformer;
|
||||
|
||||
class ActivityTransformer extends EntityTransformer
|
||||
{
|
||||
|
@ -13,7 +13,9 @@ namespace App\Transformers;
|
||||
|
||||
use App\Models\Account;
|
||||
use App\Models\BankIntegration;
|
||||
use App\Models\BankTransaction;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Transformers\EntityTransformer;
|
||||
|
||||
/**
|
||||
* Class BankIntegrationTransformer.
|
||||
|
@ -43,7 +43,7 @@ class BankTransactionRuleTransformer extends EntityTransformer
|
||||
];
|
||||
|
||||
/**
|
||||
* @param BankTransaction $bank_integration
|
||||
* @param BankTransactionRule $bank_transaction_rule
|
||||
* @return array
|
||||
*/
|
||||
public function transform(BankTransactionRule $bank_transaction_rule)
|
||||
|
@ -11,9 +11,11 @@
|
||||
|
||||
namespace App\Transformers;
|
||||
|
||||
use App\Models\BankTransaction;
|
||||
use App\Models\Vendor;
|
||||
use App\Models\Company;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Payment;
|
||||
use App\Models\BankTransaction;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
|
||||
/**
|
||||
|
@ -51,6 +51,7 @@ class DocumentTransformer extends EntityTransformer
|
||||
'archived_at' => (int) $document->deleted_at,
|
||||
'created_at' => (int) $document->created_at,
|
||||
'is_deleted' => (bool) false,
|
||||
'is_public' => (bool) $document->is_public,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -94,11 +94,14 @@ class UserTransformer extends EntityTransformer
|
||||
return $this->includeCollection($user->company_users, $transformer, CompanyUser::class);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param User $user
|
||||
*/
|
||||
public function includeCompanyUser(User $user)
|
||||
{
|
||||
if (! $user->company_id && request()->header('X-API-TOKEN')) {
|
||||
$company_token = CompanyToken::where('token', request()->header('X-API-TOKEN'))->first();
|
||||
/** @var \App\Models\User $user */
|
||||
$company_token = CompanyToken::query()->where('token', request()->header('X-API-TOKEN'))->first();
|
||||
$user->company_id = $company_token->company_id;
|
||||
}
|
||||
|
||||
|
@ -15,8 +15,8 @@ return [
|
||||
'require_https' => env('REQUIRE_HTTPS', true),
|
||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||
'app_version' => env('APP_VERSION','5.6.27'),
|
||||
'app_tag' => env('APP_TAG','5.6.27'),
|
||||
'app_version' => env('APP_VERSION','5.6.28'),
|
||||
'app_tag' => env('APP_TAG','5.6.28'),
|
||||
'minimum_client_version' => '5.0.16',
|
||||
'terms_version' => '1.0.1',
|
||||
'api_secret' => env('API_SECRET', ''),
|
||||
|
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('purchase_order_invitations', function (Blueprint $table) {
|
||||
$table->text('signature_ip')->nullable();
|
||||
});
|
||||
|
||||
$xag = \App\Models\Currency::find(116);
|
||||
|
||||
if(!$xag) {
|
||||
|
||||
$xag = new \App\Models\Currency();
|
||||
$xag->id = 116;
|
||||
$xag->code = 'XAG';
|
||||
$xag->name = 'Silver Troy Ounce';
|
||||
$xag->symbol = 'XAG';
|
||||
$xag->thousand_separator = ',';
|
||||
$xag->decimal_separator = '.';
|
||||
$xag->precision = 2;
|
||||
$xag->save();
|
||||
}
|
||||
|
||||
$xau = \App\Models\Currency::find(117);
|
||||
|
||||
if(!$xau) {
|
||||
|
||||
$xau = new \App\Models\Currency();
|
||||
$xau->id = 117;
|
||||
$xau->code = 'XAU';
|
||||
$xau->name = 'Gold Troy Ounce';
|
||||
$xau->symbol = 'XAU';
|
||||
$xau->thousand_separator = ',';
|
||||
$xau->decimal_separator = '.';
|
||||
$xau->precision = 3;
|
||||
$xau->save();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
}
|
||||
};
|
@ -138,6 +138,8 @@ class CurrenciesSeeder extends Seeder
|
||||
['id' => 113, 'name' => 'Swazi lilangeni', 'code' => 'SZL', 'symbol' => 'E', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 114, 'name' => 'BZ Dollar', 'code' => 'BZD', 'symbol' => '$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 115, 'name' => 'Libyan Dinar', 'code' => 'LYD', 'symbol' => 'LD', 'precision' => '3', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 116, 'name' => 'Silver Troy Ounce', 'code' => 'XAG', 'symbol' => 'XAG', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 117, 'name' => 'Gold Troy Ounce', 'code' => 'XAU', 'symbol' => 'XAU', 'precision' => '3', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
|
@ -2404,6 +2404,9 @@ $LANG = array(
|
||||
|
||||
'currency_cuban_peso' => 'Cuban Peso',
|
||||
'currency_bz_dollar' => 'BZ Dollar',
|
||||
'currency_libyan_dinar' => 'Libyan Dinar',
|
||||
'currency_silver_troy_ounce' => 'Silver Troy Ounce',
|
||||
'currency_gold_troy_ounce' => 'Gold Troy Ounce',
|
||||
|
||||
'review_app_help' => 'We hope you\'re enjoying using the app.<br/>If you\'d consider :link we\'d greatly appreciate it!',
|
||||
'writing_a_review' => 'writing a review',
|
||||
@ -5144,4 +5147,4 @@ $LANG = array(
|
||||
|
||||
return $LANG;
|
||||
|
||||
?>
|
||||
?>
|
||||
|
4
public/flutter_service_worker.js
vendored
4
public/flutter_service_worker.js
vendored
@ -6,7 +6,7 @@ const RESOURCES = {
|
||||
"favicon.ico": "51636d3a390451561744c42188ccd628",
|
||||
"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed",
|
||||
"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35",
|
||||
"/": "564587e987ec6f0646905b404f6da8bf",
|
||||
"/": "3d7ac729b457101be99016fa20888e24",
|
||||
"flutter.js": "a85fcf6324d3c4d3ae3be1ae4931e9c5",
|
||||
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
|
||||
"favicon.png": "dca91c54388f52eded692718d5a98b8b",
|
||||
@ -296,7 +296,7 @@ const RESOURCES = {
|
||||
"assets/NOTICES": "6cf3e734da918534f75f16892b0e2c1f",
|
||||
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
|
||||
"version.json": "bf49df736fed3f74ade0dbaebf08de11",
|
||||
"main.dart.js": "c517df351de39a454c7bc0ca5a7225da",
|
||||
"main.dart.js": "12c7b8cc547c3c5d77be5655a87f854e",
|
||||
"canvaskit/canvaskit.js": "97937cb4c2c2073c968525a3e08c86a3",
|
||||
"canvaskit/profiling/canvaskit.js": "c21852696bc1cc82e8894d851c01921a",
|
||||
"canvaskit/profiling/canvaskit.wasm": "371bc4e204443b0d5e774d64a046eb99",
|
||||
|
180505
public/main.dart.js
vendored
180505
public/main.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
176379
public/main.foss.dart.js
vendored
176379
public/main.foss.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
961
public/main.profile.dart.js
vendored
961
public/main.profile.dart.js
vendored
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
||||
<div>
|
||||
<div class="flex flex-col items-end mb-2" x-data>
|
||||
<button wire:loading.attr="disabled" wire:click="downloadPdf" class="bg-gray-100 hover:bg-gray-200 text-gray-800 font-bold px-2 rounded inline-flex" type="button">
|
||||
<span>{{ ctrans('texts.download_pdf') }}</span>
|
||||
<button wire:loading.attr="disabled" wire:click="downloadPdf" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
|
||||
<span class="mr-0">{{ ctrans('texts.download_pdf') }}</span>
|
||||
<div wire:loading wire:target="downloadPdf">
|
||||
<svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
||||
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||
|
Loading…
x
Reference in New Issue
Block a user