mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
commit
a10f06796a
@ -1 +1 @@
|
||||
5.5.93
|
||||
5.5.94
|
@ -174,8 +174,10 @@ class CheckData extends Command
|
||||
|
||||
CompanyUser::query()->cursor()->each(function ($cu) {
|
||||
if (CompanyToken::where('user_id', $cu->user_id)->where('company_id', $cu->company_id)->where('is_system', 1)->doesntExist()) {
|
||||
$this->logMessage("Creating missing company token for user # {$cu->user->id} for company id # {$cu->company->id}");
|
||||
(new CreateCompanyToken($cu->company, $cu->user, 'System'))->handle();
|
||||
$this->logMessage("Creating missing company token for user # {$cu->user_id} for company id # {$cu->company_id}");
|
||||
|
||||
if($cu->company && $cu->user)
|
||||
(new CreateCompanyToken($cu->company, $cu->user, 'System'))->handle();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -471,9 +471,12 @@ class CompanySettings extends BaseSettings
|
||||
|
||||
public $client_initiated_payments_minimum = 0;
|
||||
|
||||
public $client_initiated_payments_recurring = false;
|
||||
|
||||
public $sync_invoice_quote_columns = true;
|
||||
|
||||
public static $casts = [
|
||||
'client_initiated_payments_recurring'=> 'bool',
|
||||
'client_initiated_payments' => 'bool',
|
||||
'client_initiated_payments_minimum' => 'float',
|
||||
'sync_invoice_quote_columns' => 'bool',
|
||||
|
37
app/DataMapper/Schedule/ScheduleInvoice.php
Normal file
37
app/DataMapper/Schedule/ScheduleInvoice.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\DataMapper\Schedule;
|
||||
|
||||
class ScheduleInvoice
|
||||
{
|
||||
/**
|
||||
* Defines the template name
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public string $template = 'schedule_invoice';
|
||||
|
||||
/**
|
||||
* Defines the template name
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public string $entity = '';
|
||||
|
||||
/**
|
||||
* Defines the template name
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public string $entity_id = '';
|
||||
|
||||
}
|
@ -16,6 +16,7 @@ use App\Models\Company;
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
|
@ -14,13 +14,17 @@ namespace App\Events\Invoice;
|
||||
use App\Models\Company;
|
||||
use App\Models\Invoice;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
|
||||
/**
|
||||
* Class InvoiceWasCreated.
|
||||
*/
|
||||
class InvoiceWasCreated
|
||||
class InvoiceWasCreated implements ShouldBroadcast
|
||||
{
|
||||
use SerializesModels;
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* @var Invoice
|
||||
@ -44,4 +48,15 @@ class InvoiceWasCreated
|
||||
$this->company = $company;
|
||||
$this->event_vars = $event_vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return PrivateChannel|array
|
||||
*/
|
||||
public function broadcastOn()
|
||||
{
|
||||
return new PrivateChannel('channel-name');
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -276,8 +276,6 @@ class YodleeController extends BaseController
|
||||
{
|
||||
//this is the main hook we use for notifications
|
||||
|
||||
nlog("data refresh");
|
||||
nlog($request->all());
|
||||
|
||||
return response()->json(['message' => 'Success'], 200);
|
||||
|
||||
|
@ -12,11 +12,16 @@
|
||||
|
||||
namespace App\Http\Controllers\ClientPortal;
|
||||
|
||||
use App\Utils\Number;
|
||||
use Illuminate\View\View;
|
||||
use App\DataMapper\InvoiceItem;
|
||||
use App\Factory\InvoiceFactory;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Utils\Traits\MakesDates;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use App\Repositories\InvoiceRepository;
|
||||
use App\Http\Requests\ClientPortal\PrePayments\StorePrePaymentRequest;
|
||||
|
||||
/**
|
||||
* Class PrePaymentController.
|
||||
@ -33,9 +38,80 @@ class PrePaymentController extends Controller
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$data['minimum_amount'] = auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_minimum');
|
||||
$data['title'] = ctrans('texts.amount'). " " .auth()->guard('contact')->user()->client->currency()->code." (".auth()->guard('contact')->user()->client->currency()->symbol . ")";
|
||||
|
||||
$data = [
|
||||
'title' => ctrans('texts.amount'). " " .auth()->guard('contact')->user()->client->currency()->code." (".auth()->guard('contact')->user()->client->currency()->symbol . ")",
|
||||
'allows_recurring' => auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_recurring'),
|
||||
'allows_recurring' => true,
|
||||
'minimum_amount' => auth()->guard('contact')->user()->client->getSetting('client_initiated_payments_minimum'),
|
||||
];
|
||||
|
||||
return $this->render('pre_payments.index', $data);
|
||||
}
|
||||
|
||||
public function process(StorePrePaymentRequest $request)
|
||||
{
|
||||
|
||||
$invoice = InvoiceFactory::create(auth()->guard('contact')->user()->company_id, auth()->guard('contact')->user()->user_id);
|
||||
$invoice->due_date = now()->format('Y-m-d');
|
||||
$invoice->is_proforma = true;
|
||||
$invoice->client_id = auth()->guard('contact')->user()->client_id;
|
||||
|
||||
$line_item = new InvoiceItem();
|
||||
$line_item->cost = (float)$request->amount;
|
||||
$line_item->quantity = 1;
|
||||
$line_item->product_key = ctrans('texts.pre_payment');
|
||||
$line_item->notes = $request->notes;
|
||||
$line_item->type_id = '1';
|
||||
|
||||
$items = [];
|
||||
$items[] = $line_item;
|
||||
$invoice->line_items = $items;
|
||||
$invoice->number = ctrans('texts.pre_payment') . " " . now()->format('Y-m-d : H:i:s');
|
||||
|
||||
$invoice_repo = new InvoiceRepository();
|
||||
|
||||
$data = [
|
||||
'client_id' => $invoice->client_id,
|
||||
'quantity' => 1,
|
||||
'date' => now()->format('Y-m-d'),
|
||||
];
|
||||
|
||||
$invoice = $invoice_repo->save($data, $invoice)
|
||||
->service()
|
||||
->markSent()
|
||||
->fillDefaults()
|
||||
->save();
|
||||
|
||||
$total = $invoice->balance;
|
||||
|
||||
//format totals
|
||||
$formatted_total = Number::formatMoney($invoice->amount, auth()->guard('contact')->user()->client);
|
||||
|
||||
$payment_methods = auth()->guard('contact')->user()->client->service()->getPaymentMethods($request->amount);
|
||||
|
||||
//if there is only one payment method -> lets return straight to the payment page
|
||||
$invoices = collect();
|
||||
$invoices->push($invoice);
|
||||
|
||||
$invoices->map(function ($invoice) {
|
||||
$invoice->balance = Number::formatValue($invoice->balance, $invoice->client->currency());
|
||||
return $invoice;
|
||||
});
|
||||
|
||||
$data = [
|
||||
'settings' => auth()->guard('contact')->user()->client->getMergedSettings(),
|
||||
'invoices' => $invoices,
|
||||
'formatted_total' => $formatted_total,
|
||||
'payment_methods' => $payment_methods,
|
||||
'hashed_ids' => $invoices->pluck('hashed_id'),
|
||||
'total' => $total,
|
||||
'pre_payment' => true,
|
||||
];
|
||||
|
||||
|
||||
return $this->render('invoices.payment', $data);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -11,36 +11,37 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\DataMapper\Analytics\AccountDeleted;
|
||||
use App\DataMapper\CompanySettings;
|
||||
use App\Http\Requests\Company\CreateCompanyRequest;
|
||||
use App\Http\Requests\Company\DefaultCompanyRequest;
|
||||
use App\Http\Requests\Company\DestroyCompanyRequest;
|
||||
use App\Http\Requests\Company\EditCompanyRequest;
|
||||
use App\Http\Requests\Company\ShowCompanyRequest;
|
||||
use App\Http\Requests\Company\StoreCompanyRequest;
|
||||
use App\Http\Requests\Company\UpdateCompanyRequest;
|
||||
use App\Http\Requests\Company\UploadCompanyRequest;
|
||||
use App\Jobs\Company\CreateCompany;
|
||||
use App\Jobs\Company\CreateCompanyPaymentTerms;
|
||||
use App\Jobs\Company\CreateCompanyTaskStatuses;
|
||||
use App\Jobs\Company\CreateCompanyToken;
|
||||
use App\Jobs\Mail\NinjaMailerJob;
|
||||
use App\Jobs\Mail\NinjaMailerObject;
|
||||
use App\Mail\Company\CompanyDeleted;
|
||||
use App\Utils\Ninja;
|
||||
use App\Models\Account;
|
||||
use App\Models\Company;
|
||||
use App\Models\CompanyUser;
|
||||
use App\Repositories\CompanyRepository;
|
||||
use App\Transformers\CompanyTransformer;
|
||||
use App\Transformers\CompanyUserTransformer;
|
||||
use App\Utils\Ninja;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Utils\Traits\SavesDocuments;
|
||||
use App\Utils\Traits\Uploadable;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Utils\Traits\Uploadable;
|
||||
use App\Jobs\Mail\NinjaMailerJob;
|
||||
use App\DataMapper\CompanySettings;
|
||||
use App\Jobs\Company\CreateCompany;
|
||||
use App\Jobs\Mail\NinjaMailerObject;
|
||||
use App\Mail\Company\CompanyDeleted;
|
||||
use App\Utils\Traits\SavesDocuments;
|
||||
use Turbo124\Beacon\Facades\LightLogs;
|
||||
use App\Repositories\CompanyRepository;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Jobs\Company\CreateCompanyToken;
|
||||
use App\Transformers\CompanyTransformer;
|
||||
use App\DataMapper\Analytics\AccountDeleted;
|
||||
use App\Transformers\CompanyUserTransformer;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use App\Jobs\Company\CreateCompanyPaymentTerms;
|
||||
use App\Jobs\Company\CreateCompanyTaskStatuses;
|
||||
use App\Http\Requests\Company\EditCompanyRequest;
|
||||
use App\Http\Requests\Company\ShowCompanyRequest;
|
||||
use App\Http\Requests\Company\StoreCompanyRequest;
|
||||
use App\Http\Requests\Company\CreateCompanyRequest;
|
||||
use App\Http\Requests\Company\UpdateCompanyRequest;
|
||||
use App\Http\Requests\Company\UploadCompanyRequest;
|
||||
use App\Http\Requests\Company\DefaultCompanyRequest;
|
||||
use App\Http\Requests\Company\DestroyCompanyRequest;
|
||||
|
||||
/**
|
||||
* Class CompanyController.
|
||||
@ -486,6 +487,12 @@ class CompanyController extends BaseController
|
||||
$company_user->forceDelete();
|
||||
});
|
||||
|
||||
try {
|
||||
Storage::disk(config('filesystems.default'))->deleteDirectory($company->company_key);
|
||||
}
|
||||
catch(\Exception $e) {
|
||||
}
|
||||
|
||||
$account->delete();
|
||||
|
||||
if (Ninja::isHosted()) {
|
||||
@ -494,7 +501,10 @@ class CompanyController extends BaseController
|
||||
|
||||
LightLogs::create(new AccountDeleted())
|
||||
->increment()
|
||||
->queue();
|
||||
->batch();
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
$company_id = $company->id;
|
||||
|
||||
@ -511,6 +521,12 @@ class CompanyController extends BaseController
|
||||
$nmo->to_user = auth()->user();
|
||||
(new NinjaMailerJob($nmo, true))->handle();
|
||||
|
||||
try {
|
||||
Storage::disk(config('filesystems.default'))->deleteDirectory($company->company_key);
|
||||
} catch(\Exception $e) {
|
||||
}
|
||||
|
||||
|
||||
$company->delete();
|
||||
|
||||
//If we are deleting the default companies, we'll need to make a new company the default.
|
||||
|
@ -38,6 +38,7 @@ class SubdomainController extends BaseController
|
||||
'beta',
|
||||
'prometh',
|
||||
'license',
|
||||
'socket',
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
|
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\ClientPortal\PrePayments;
|
||||
|
||||
use App\Http\ViewComposers\PortalComposer;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class StorePrePaymentRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return auth()->guard('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'notes' => 'required|bail|',
|
||||
'amount' => 'required|bail|',
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@ -138,12 +138,10 @@ class PortalComposer
|
||||
$data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar'];
|
||||
}
|
||||
|
||||
/*
|
||||
if($this->settings->client_initiated_payments) {
|
||||
if(property_exists($this->settings, 'client_initiated_payments') && $this->settings->client_initiated_payments) {
|
||||
$data[] = ['title' => ctrans('texts.pre_payment'), 'url' => 'client.pre_payments.index', 'icon' => 'dollar-sign'];
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ class CreateAccount
|
||||
$sp794f3f->hosted_company_count = config('ninja.quotas.free.max_companies');
|
||||
$sp794f3f->account_sms_verified = true;
|
||||
|
||||
if (in_array($this->getDomain($this->request['email']), ['givmail.com','yopmail.com','gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com', 'aol.com', 'mail.ru','brand-app.biz','proton.me','ema-sofia.eu'])) {
|
||||
if (in_array($this->getDomain($this->request['email']), ['givmail.com','yopmail.com','gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com', 'aol.com', 'mail.ru','brand-app.biz','proton.me','ema-sofia.eu', 'mail.com'])) {
|
||||
$sp794f3f->account_sms_verified = false;
|
||||
}
|
||||
|
||||
|
@ -811,6 +811,10 @@ class Import implements ShouldQueue
|
||||
$modified['updated_at'] = Carbon::parse($modified['updated_at']);
|
||||
}
|
||||
|
||||
if(!array_key_exists('currency_id', $modified) || !$modified['currency_id']) {
|
||||
$modified['currency_id'] = $this->company->settings->currency_id;
|
||||
}
|
||||
|
||||
$vendor = $vendor_repository->save(
|
||||
$modified,
|
||||
VendorFactory::create(
|
||||
|
@ -105,7 +105,7 @@ class WebhookSingle implements ShouldQueue
|
||||
$resource = new Item($this->entity, $transformer, $this->entity->getEntityType());
|
||||
$data = $manager->createData($resource)->toArray();
|
||||
|
||||
$this->postData($subscription, $data, []);
|
||||
$this->postData($subscription, $data, $subscription->headers);
|
||||
}
|
||||
|
||||
private function postData($subscription, $data, $headers = [])
|
||||
|
@ -28,11 +28,13 @@ class PlayStoreRenewSubscription implements ShouldQueue
|
||||
nlog($notification);
|
||||
$in_app_identifier = $event->getSubscriptionIdentifier();
|
||||
|
||||
MultiDB::findAndSetDbByInappTransactionId($in_app_identifier);
|
||||
$parts = explode("..", $in_app_identifier);
|
||||
|
||||
MultiDB::findAndSetDbByInappTransactionId($parts[0]);
|
||||
|
||||
$expirationTime = $event->getSubscription()->getExpiryTime();
|
||||
|
||||
$account = Account::where('inapp_transaction_id', 'like', $in_app_identifier."%")->first();
|
||||
$account = Account::where('inapp_transaction_id', 'like', $parts[0]."%")->first();
|
||||
|
||||
if ($account) {
|
||||
$account->update(['plan_expires' => Carbon::parse($expirationTime)]);
|
||||
|
@ -362,10 +362,10 @@ class PaymentEmailEngine extends BaseEmailEngine
|
||||
|
||||
/**
|
||||
* generateLabelsAndValues
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function generateLabelsAndValues()
|
||||
public function generateLabelsAndValues(): array
|
||||
{
|
||||
$data = [];
|
||||
|
||||
|
@ -130,6 +130,10 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Account whereUtmMedium($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Account whereUtmSource($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Account whereUtmTerm($value)
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankIntegration> $bank_integrations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Company> $companies
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyUser> $company_users
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\User> $users
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Account extends BaseModel
|
||||
|
@ -32,6 +32,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scope()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BankAccount withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BankAccount withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankSubaccount> $bank_subaccounts
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class BankAccount extends BaseModel
|
||||
|
@ -75,6 +75,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BankIntegration whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BankIntegration withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BankIntegration withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankTransaction> $transactions
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class BankIntegration extends BaseModel
|
||||
|
@ -166,6 +166,25 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Client whereWebsite($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Client withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Client withoutTrashed()
|
||||
* @property string $payment_balance
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $company_ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $contacts
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Credit> $credits
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientGatewayToken> $gateway_tokens
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $primary_contact
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Project> $projects
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Quote> $quotes
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringExpense> $recurring_expenses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoice> $recurring_invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\SystemLog> $system_logs
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Task> $tasks
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Client wherePaymentBalance($value)
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Client extends BaseModel implements HasLocalePreference
|
||||
|
@ -123,6 +123,11 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|ClientContact whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|ClientContact withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|ClientContact withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CreditInvitation> $credit_invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\InvoiceInvitation> $invoice_invitations
|
||||
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\QuoteInvitation> $quote_invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoiceInvitation> $recurring_invoice_invitations
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class ClientContact extends Authenticatable implements HasLocalePreference
|
||||
|
@ -282,6 +282,50 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUseCommaAsDecimalPlace($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUseQuoteTermsOnConversion($value)
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $all_activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $all_documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankIntegration> $bank_integrations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankTransactionRule> $bank_transaction_rules
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankTransaction> $bank_transactions
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $client_contacts
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientGatewayToken> $client_gateway_tokens
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Client> $clients
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyGateway> $company_gateways
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyUser> $company_users
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $contacts
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Credit> $credits
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Design> $designs
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ExpenseCategory> $expense_categories
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\GroupSetting> $group_settings
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\GroupSetting> $groups
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PaymentTerm> $payment_terms
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Project> $projects
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PurchaseOrder> $purchase_orders
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Quote> $quotes
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringExpense> $recurring_expenses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoice> $recurring_invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Scheduler> $schedulers
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Subscription> $subscriptions
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\SystemLog> $system_log_relation
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\SystemLog> $system_logs
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Scheduler> $task_schedulers
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\TaskStatus> $task_statuses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Task> $tasks
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\TaxRate> $tax_rates
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens_hashed
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Design> $user_designs
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PaymentTerm> $user_payment_terms
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\User> $users
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Vendor> $vendors
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Webhook> $webhooks
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Company extends BaseModel
|
||||
|
@ -92,6 +92,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyGateway whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyGateway withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyGateway withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientGatewayToken> $client_gateway_tokens
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class CompanyGateway extends BaseModel
|
||||
|
@ -67,6 +67,9 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyUser whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyUser withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|CompanyUser withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $token
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\User> $users
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class CompanyUser extends Pivot
|
||||
|
@ -185,6 +185,13 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Credit whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Credit withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Credit withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $company_ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CreditInvitation> $invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Credit extends BaseModel
|
||||
|
@ -130,6 +130,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Expense whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Expense withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Expense withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Expense extends BaseModel
|
||||
|
@ -28,6 +28,7 @@ namespace App\Models;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GatewayType whereAlias($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GatewayType whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GatewayType whereName($value)
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PaymentType> $payment_methods
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class GatewayType extends StaticModel
|
||||
|
@ -54,6 +54,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GroupSetting whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GroupSetting withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|GroupSetting withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Client> $clients
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class GroupSetting extends StaticModel
|
||||
|
@ -203,6 +203,15 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Invoice whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Invoice withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Invoice withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $company_ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Credit> $credits
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\InvoiceInvitation> $invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Task> $tasks
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Invoice extends BaseModel
|
||||
|
@ -13,6 +13,43 @@ namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
/**
|
||||
* App\Models\License
|
||||
*
|
||||
* @property int $id
|
||||
* @property int|null $created_at
|
||||
* @property int|null $updated_at
|
||||
* @property int|null $deleted_at
|
||||
* @property string|null $first_name
|
||||
* @property string|null $last_name
|
||||
* @property string|null $email
|
||||
* @property string|null $license_key
|
||||
* @property int|null $is_claimed
|
||||
* @property string|null $transaction_reference
|
||||
* @property int|null $product_id
|
||||
* @property int|null $recurring_invoice_id
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel company()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|StaticModel exclude($columns)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License newModelQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License onlyTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereDeletedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereEmail($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereFirstName($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereIsClaimed($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereLastName($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereLicenseKey($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereProductId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereRecurringInvoiceId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereTransactionReference($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License whereUpdatedAt($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|License withoutTrashed()
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class License extends StaticModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
@ -132,6 +132,11 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Payment whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Payment withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Payment withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $company_ledger
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Credit> $credits
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Paymentable> $paymentables
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Payment extends BaseModel
|
||||
|
@ -96,6 +96,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Product whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Product withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Product withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Product extends BaseModel
|
||||
|
@ -72,6 +72,8 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Project whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Project withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Project withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Task> $tasks
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Project extends BaseModel
|
||||
|
@ -28,6 +28,7 @@ use App\Utils\Traits\MakesHash;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Proposal newQuery()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Proposal query()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scope()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Proposal extends BaseModel
|
||||
|
@ -180,6 +180,12 @@ use Illuminate\Support\Facades\Storage;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|PurchaseOrder whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|PurchaseOrder withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|PurchaseOrder withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PurchaseOrderInvitation> $invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class PurchaseOrder extends BaseModel
|
||||
|
@ -181,6 +181,10 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Quote whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Quote withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Quote withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\QuoteInvitation> $invitations
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Quote extends BaseModel
|
||||
|
@ -139,6 +139,7 @@ use Illuminate\Support\Carbon;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringExpense whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringExpense withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringExpense withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class RecurringExpense extends BaseModel
|
||||
|
@ -177,6 +177,11 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringInvoice whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringInvoice withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringInvoice withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoiceInvitation> $invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class RecurringInvoice extends BaseModel
|
||||
|
@ -171,6 +171,11 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringQuote whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringQuote withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|RecurringQuote withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Backup> $history
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringQuoteInvitation> $invitations
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Quote> $quotes
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class RecurringQuote extends BaseModel
|
||||
|
@ -91,6 +91,7 @@ use Illuminate\Support\Carbon;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Task whereUserId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Task withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Task withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Task extends BaseModel
|
||||
|
@ -139,6 +139,13 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User whereVerifiedPhoneNumber($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|User withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Client> $clients
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Company> $companies
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyUser> $company_users
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $contacts
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class User extends Authenticatable implements MustVerifyEmail
|
||||
|
@ -104,6 +104,10 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Vendor whereWebsite($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Vendor withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|Vendor withoutTrashed()
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\VendorContact> $contacts
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\VendorContact> $primary_contact
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class Vendor extends BaseModel
|
||||
|
@ -110,6 +110,8 @@ use Laracasts\Presenter\PresentableTrait;
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|VendorContact whereVendorId($value)
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|VendorContact withTrashed()
|
||||
* @method static \Illuminate\Database\Eloquent\Builder|VendorContact withoutTrashed()
|
||||
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection<int, \Illuminate\Notifications\DatabaseNotification> $notifications
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PurchaseOrderInvitation> $purchase_order_invitations
|
||||
* @mixin \Eloquent
|
||||
*/
|
||||
class VendorContact extends Authenticatable implements HasLocalePreference
|
||||
|
@ -24,7 +24,6 @@ class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
private int $default_rate_limit = 5000;
|
||||
/**
|
||||
* Define your route model bindings, pattern filters, etc.
|
||||
*
|
||||
|
@ -83,6 +83,9 @@ class InvoiceRepository extends BaseRepository
|
||||
*/
|
||||
public function restore($invoice) :Invoice
|
||||
{
|
||||
if($invoice->is_proforma)
|
||||
return $invoice;
|
||||
|
||||
//if we have just archived, only perform a soft restore
|
||||
if (! $invoice->is_deleted) {
|
||||
parent::restore($invoice);
|
||||
|
@ -214,7 +214,7 @@ class InstantPayment
|
||||
$credit_totals = 0;
|
||||
}
|
||||
|
||||
$hash_data = ['invoices' => $payable_invoices->toArray(), 'credits' => $credit_totals, 'amount_with_fee' => max(0, (($invoice_totals + $fee_totals) - $credit_totals))];
|
||||
$hash_data = ['invoices' => $payable_invoices->toArray(), 'credits' => $credit_totals, 'amount_with_fee' => max(0, (($invoice_totals + $fee_totals) - $credit_totals)), 'pre_payment' => $this->request->pre_payment];
|
||||
|
||||
if ($this->request->query('hash')) {
|
||||
$hash_data['billing_context'] = Cache::get($this->request->query('hash'));
|
||||
|
@ -168,6 +168,12 @@ class EmailDefaults
|
||||
*/
|
||||
private function setBody(): self
|
||||
{
|
||||
|
||||
if ($this->template == 'email.template.custom') {
|
||||
$this->email->email_object->body = (str_replace('$body', $this->email->email_object->body, $this->email->email_object->settings->email_style_custom));
|
||||
return $this;
|
||||
}
|
||||
|
||||
if ($this->email->email_object->body) {
|
||||
// A Custom Message has been set in the email screen.
|
||||
return $this;
|
||||
@ -179,10 +185,6 @@ class EmailDefaults
|
||||
$this->email->email_object->body = EmailTemplateDefaults::getDefaultTemplate($this->email->email_object->email_template_body, $this->locale);
|
||||
}
|
||||
|
||||
if ($this->template == 'email.template.custom') {
|
||||
$this->email->email_object->body = (str_replace('$body', $this->email->email_object->body, $this->email->email_object->settings->email_style_custom));
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ class EmailMailable extends Mailable
|
||||
* @return \Illuminate\Mail\Mailables\Envelope
|
||||
*/
|
||||
public function envelope()
|
||||
{nlog($this->email_object->cc);
|
||||
{
|
||||
return new Envelope(
|
||||
subject: $this->email_object->subject,
|
||||
tags: [$this->email_object->company_key],
|
||||
|
@ -82,10 +82,22 @@ class UpdateInvoicePayment
|
||||
->save();
|
||||
|
||||
if ($invoice->is_proforma) {
|
||||
if (strlen($invoice->number) > 1 && str_starts_with($invoice->number, "####")) {
|
||||
$invoice->number = '';
|
||||
|
||||
//keep proforma's hidden
|
||||
if(property_exists($this->payment_hash->data, 'pre_payment') && $this->payment_hash->data->pre_payment == "1"){
|
||||
|
||||
$invoice->payments()->each(function ($p) {
|
||||
$p->pivot->forceDelete();
|
||||
});
|
||||
|
||||
$invoice->is_deleted = true;
|
||||
$invoice->deleted_at = now();
|
||||
$invoice->saveQuietly();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (strlen($invoice->number) > 1 && str_starts_with($invoice->number, "####"))
|
||||
$invoice->number = '';
|
||||
|
||||
$invoice->is_proforma = false;
|
||||
|
||||
|
@ -683,8 +683,6 @@ class HtmlEngine
|
||||
$data['labels'][$key.'_label'] = $value['label'];
|
||||
}
|
||||
|
||||
// nlog($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@ -12,27 +12,28 @@
|
||||
|
||||
namespace App\Utils;
|
||||
|
||||
use App\DataMapper\EmailTemplateDefaults;
|
||||
use App\Mail\Engine\PaymentEmailEngine;
|
||||
use App\Models\Client;
|
||||
use App\Models\ClientContact;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\InvoiceInvitation;
|
||||
use App\Models\Payment;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\PurchaseOrderInvitation;
|
||||
use App\Models\Quote;
|
||||
use App\Models\QuoteInvitation;
|
||||
use App\Models\Vendor;
|
||||
use App\Models\VendorContact;
|
||||
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Utils\Traits\MakesInvoiceHtml;
|
||||
use App\Utils\Traits\MakesTemplateData;
|
||||
use DB;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use App\Models\Quote;
|
||||
use App\Models\Client;
|
||||
use App\Models\Vendor;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\Payment;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Models\ClientContact;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\VendorContact;
|
||||
use App\Services\Pdf\PdfMock;
|
||||
use App\Models\QuoteInvitation;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use App\Models\InvoiceInvitation;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use App\Utils\Traits\MakesInvoiceHtml;
|
||||
use App\Mail\Engine\PaymentEmailEngine;
|
||||
use App\Models\PurchaseOrderInvitation;
|
||||
use App\Utils\Traits\MakesTemplateData;
|
||||
use App\DataMapper\EmailTemplateDefaults;
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
|
||||
|
||||
class TemplateEngine
|
||||
{
|
||||
@ -96,7 +97,19 @@ class TemplateEngine
|
||||
if (strlen($this->entity) > 1 && strlen($this->entity_id) > 1) {
|
||||
$class = 'App\Models\\' . ucfirst(Str::camel($this->entity));
|
||||
$this->entity_obj = $class::withTrashed()->where('id', $this->decodePrimaryKey($this->entity_id))->company()->first();
|
||||
} else {
|
||||
}
|
||||
elseif(stripos($this->template, 'quote') !== false && $quote = Quote::whereHas('invitations')->withTrashed()->company()->first()){
|
||||
$this->entity = 'quote';
|
||||
$this->entity_obj = $quote;
|
||||
}
|
||||
elseif(stripos($this->template, 'purchase') !== false && $purchase_order = PurchaseOrder::whereHas('invitations')->withTrashed()->company()->first()){
|
||||
$this->entity = 'purchase_order';
|
||||
$this->entity_obj = $purchase_order;
|
||||
}
|
||||
elseif ($invoice = Invoice::whereHas('invitations')->withTrashed()->company()->first()){
|
||||
$this->entity_obj = $invoice;
|
||||
}
|
||||
else {
|
||||
$this->mockEntity();
|
||||
}
|
||||
|
||||
@ -183,6 +196,7 @@ class TemplateEngine
|
||||
|
||||
private function entityValues($contact)
|
||||
{
|
||||
|
||||
if (in_array($this->entity, ['purchaseOrder', 'purchase_order'])) {
|
||||
$this->labels_and_values = (new VendorHtmlEngine($this->entity_obj->invitations->first()))->generateLabelsAndValues();
|
||||
} elseif ($this->entity == 'payment') {
|
||||
@ -323,6 +337,8 @@ class TemplateEngine
|
||||
'user_id' => auth()->user()->id,
|
||||
'company_id' => auth()->user()->company()->id,
|
||||
'client_id' => $client->id,
|
||||
'amount' => '10',
|
||||
'balance' => '10',
|
||||
]);
|
||||
|
||||
$invitation = InvoiceInvitation::factory()->create([
|
||||
@ -391,6 +407,7 @@ class TemplateEngine
|
||||
$this->entity_obj->load('client');
|
||||
$client->setRelation('company', auth()->user()->company());
|
||||
$client->load('company');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,7 +511,7 @@ class VendorHtmlEngine
|
||||
$data['values'][$key] = $value['value'];
|
||||
$data['labels'][$key.'_label'] = $value['label'];
|
||||
}
|
||||
nlog($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@
|
||||
"omnipay/paypal": "^3.0",
|
||||
"payfast/payfast-php-sdk": "^1.1",
|
||||
"pragmarx/google2fa": "^8.0",
|
||||
"turbo124/predis": "1.1.11",
|
||||
"pusher/pusher-php-server": "^7.2",
|
||||
"razorpay/razorpay": "2.*",
|
||||
"sentry/sentry-laravel": "^3",
|
||||
"setasign/fpdf": "^1.8",
|
||||
@ -88,6 +88,7 @@
|
||||
"symfony/mailgun-mailer": "^6.1",
|
||||
"symfony/postmark-mailer": "^6.1",
|
||||
"turbo124/beacon": "^1.4",
|
||||
"turbo124/predis": "1.1.11",
|
||||
"twilio/sdk": "^6.40",
|
||||
"webpatser/laravel-countries": "dev-master#75992ad",
|
||||
"wepay/php-sdk": "^0.3"
|
||||
|
149
composer.lock
generated
149
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "5aa22a61531e67324395d207a7c94e27",
|
||||
"content-hash": "9f936d7b92dfacb4e28eda9197563c32",
|
||||
"packages": [
|
||||
{
|
||||
"name": "afosto/yaac",
|
||||
@ -6369,6 +6369,92 @@
|
||||
},
|
||||
"time": "2020-10-15T08:29:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/sodium_compat",
|
||||
"version": "v1.19.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/sodium_compat.git",
|
||||
"reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/cb15e403ecbe6a6cc515f855c310eb6b1872a933",
|
||||
"reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"paragonie/random_compat": ">=1",
|
||||
"php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
|
||||
"ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"autoload.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"ISC"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com"
|
||||
},
|
||||
{
|
||||
"name": "Frank Denis",
|
||||
"email": "jedisct1@pureftpd.org"
|
||||
}
|
||||
],
|
||||
"description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
|
||||
"keywords": [
|
||||
"Authentication",
|
||||
"BLAKE2b",
|
||||
"ChaCha20",
|
||||
"ChaCha20-Poly1305",
|
||||
"Chapoly",
|
||||
"Curve25519",
|
||||
"Ed25519",
|
||||
"EdDSA",
|
||||
"Edwards-curve Digital Signature Algorithm",
|
||||
"Elliptic Curve Diffie-Hellman",
|
||||
"Poly1305",
|
||||
"Pure-PHP cryptography",
|
||||
"RFC 7748",
|
||||
"RFC 8032",
|
||||
"Salpoly",
|
||||
"Salsa20",
|
||||
"X25519",
|
||||
"XChaCha20-Poly1305",
|
||||
"XSalsa20-Poly1305",
|
||||
"Xchacha20",
|
||||
"Xsalsa20",
|
||||
"aead",
|
||||
"cryptography",
|
||||
"ecdh",
|
||||
"elliptic curve",
|
||||
"elliptic curve cryptography",
|
||||
"encryption",
|
||||
"libsodium",
|
||||
"php",
|
||||
"public-key cryptography",
|
||||
"secret-key cryptography",
|
||||
"side-channel resistant"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/paragonie/sodium_compat/issues",
|
||||
"source": "https://github.com/paragonie/sodium_compat/tree/v1.19.0"
|
||||
},
|
||||
"time": "2022-09-26T03:40:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "payfast/payfast-php-sdk",
|
||||
"version": "v1.1.4",
|
||||
@ -7645,6 +7731,67 @@
|
||||
},
|
||||
"time": "2023-01-29T21:24:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pusher/pusher-php-server",
|
||||
"version": "7.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pusher/pusher-http-php.git",
|
||||
"reference": "4ace4873873b06c25cecb2dd6d9fdcbf2f20b640"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/4ace4873873b06c25cecb2dd6d9fdcbf2f20b640",
|
||||
"reference": "4ace4873873b06c25cecb2dd6d9fdcbf2f20b640",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"paragonie/sodium_compat": "^1.6",
|
||||
"php": "^7.3|^8.0",
|
||||
"psr/log": "^1.0|^2.0|^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"overtrue/phplint": "^2.3",
|
||||
"phpunit/phpunit": "^9.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Pusher\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Library for interacting with the Pusher REST API",
|
||||
"keywords": [
|
||||
"events",
|
||||
"messaging",
|
||||
"php-pusher-server",
|
||||
"publish",
|
||||
"push",
|
||||
"pusher",
|
||||
"real time",
|
||||
"real-time",
|
||||
"realtime",
|
||||
"rest",
|
||||
"trigger"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/pusher/pusher-http-php/issues",
|
||||
"source": "https://github.com/pusher/pusher-http-php/tree/7.2.2"
|
||||
},
|
||||
"time": "2022-12-20T19:52:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
"version": "3.0.3",
|
||||
|
@ -14,8 +14,8 @@ return [
|
||||
'require_https' => env('REQUIRE_HTTPS', true),
|
||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||
'app_version' => '5.5.93',
|
||||
'app_tag' => '5.5.93',
|
||||
'app_version' => '5.5.94',
|
||||
'app_tag' => '5.5.94',
|
||||
'minimum_client_version' => '5.0.16',
|
||||
'terms_version' => '1.0.1',
|
||||
'api_secret' => env('API_SECRET', ''),
|
||||
|
@ -110,6 +110,7 @@ class RandomDataSeeder extends Seeder
|
||||
'account_id' => $account->id,
|
||||
'name' => 'test token',
|
||||
'token' => \Illuminate\Support\Str::random(64),
|
||||
'is_system' => 1
|
||||
]);
|
||||
|
||||
$user->companies()->attach($company->id, [
|
||||
@ -157,6 +158,7 @@ class RandomDataSeeder extends Seeder
|
||||
'account_id' => $account->id,
|
||||
'name' => 'test token',
|
||||
'token' => \Illuminate\Support\Str::random(64),
|
||||
'is_system' => 1,
|
||||
]);
|
||||
|
||||
$user->companies()->attach($company->id, [
|
||||
@ -200,6 +202,7 @@ class RandomDataSeeder extends Seeder
|
||||
'account_id' => $account->id,
|
||||
'name' => 'test token',
|
||||
'token' => \Illuminate\Support\Str::random(64),
|
||||
'is_system' => 1,
|
||||
]);
|
||||
|
||||
|
||||
|
@ -5021,6 +5021,7 @@ $LANG = array(
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'pre_payment' => 'Pre Payment',
|
||||
'client_remaining_cycles_helper' => 'The number of times this invoice will be generated',
|
||||
);
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
<input type="hidden" name="company_gateway_id" id="company_gateway_id">
|
||||
<input type="hidden" name="payment_method_id" id="payment_method_id">
|
||||
<input type="hidden" name="signature">
|
||||
<input type="hidden" name="pre_payment" value="{{ isset($pre_payment) ? $pre_payment : false }}">
|
||||
|
||||
<div class="container mx-auto">
|
||||
<div class="grid grid-cols-6 gap-4">
|
||||
@ -110,7 +111,6 @@
|
||||
type="text"
|
||||
class="input mt-0 mr-4 relative"
|
||||
name="payable_invoices[{{$key}}][amount]"
|
||||
dusk="underpayment-input"
|
||||
value="{{ $invoice->partial > 0 ? $invoice->partial : $invoice->balance }}"/>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -14,6 +14,18 @@
|
||||
</div>
|
||||
<div>
|
||||
<dl>
|
||||
|
||||
@if(!empty($payment->status_id) && !is_null($payment->status_id))
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
{{ ctrans('texts.status') }}
|
||||
</dt>
|
||||
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
{!! \App\Models\Payment::badgeForStatus($payment->status_id) !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(!empty($payment->clientPaymentDate()) && !is_null($payment->clientPaymentDate()))
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
@ -72,14 +84,6 @@
|
||||
@endif
|
||||
|
||||
@if(!empty($payment->status_id) && !is_null($payment->status_id))
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
{{ ctrans('texts.status') }}
|
||||
</dt>
|
||||
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
{!! \App\Models\Payment::badgeForStatus($payment->status_id) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($payment->refunded > 0)
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
@ -91,6 +95,18 @@
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($payment->applied != $payment->amount)
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
{{ ctrans('texts.remaining') }}
|
||||
</dt>
|
||||
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
{{ \App\Utils\Number::formatMoney($payment->amount - $payment->applied, $payment->client) }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@endif
|
||||
</dl>
|
||||
</div>
|
||||
@ -107,6 +123,7 @@
|
||||
<div>
|
||||
<dl>
|
||||
@foreach($payment->invoices as $invoice)
|
||||
@if(!$invoice->is_proforma)
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
{{ ctrans('texts.invoice_number') }}
|
||||
@ -119,6 +136,7 @@
|
||||
- {{ \App\Utils\Number::formatMoney($payment->invoices->where('id', $invoice->id)->sum('pivot.amount') - $payment->invoices->where('id', $invoice->id)->sum('pivot.refunded'), $payment->client) }}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</dl>
|
||||
</div>
|
||||
|
101
resources/views/portal/ninja2020/pre_payments/index.blade.php
Normal file
101
resources/views/portal/ninja2020/pre_payments/index.blade.php
Normal file
@ -0,0 +1,101 @@
|
||||
@extends('portal.ninja2020.layout.app')
|
||||
@section('meta_title', ctrans('texts.pre_payment'))
|
||||
|
||||
@push('head')
|
||||
<style>
|
||||
[x-cloak] { display: none; }
|
||||
</style>
|
||||
@endpush
|
||||
@section('body')
|
||||
<form action="{{ route('client.pre_payments.process') }}" method="post" id="payment-form" onkeypress="return event.keyCode != 13;">
|
||||
@csrf
|
||||
<input type="hidden" name="company_gateway_id" id="company_gateway_id">
|
||||
<input type="hidden" name="payment_method_id" id="payment_method_id">
|
||||
<input type="hidden" name="signature">
|
||||
|
||||
<div class="container mx-auto">
|
||||
<div class="grid grid-cols-6 gap-4">
|
||||
<div class="col-span-6 md:col-start-2 md:col-span-4">
|
||||
<div class="flex justify-end">
|
||||
</div>
|
||||
|
||||
<div class="mb-4 overflow-hidden bg-white shadow sm:rounded-lg">
|
||||
<div class="px-4 py-5 border-b border-gray-200 sm:px-6">
|
||||
<h3 class="text-lg font-medium leading-6 text-gray-900">
|
||||
{{ ctrans('texts.payment') }}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.payment_details')])
|
||||
<textarea name="notes" class="focus:shadow-soft-primary-outline min-h-unset text-sm leading-5.6 ease-soft block h-auto w-full appearance-none rounded-lg border border-solid border-gray-300 bg-white bg-clip-padding px-3 py-2 font-normal text-gray-700 outline-none transition-all placeholder:text-gray-500 focus:border-fuchsia-300 focus:outline-none"></textarea>
|
||||
|
||||
@if($errors->has('notes'))
|
||||
<p class="mt-2 text-red-900 border-red-300 px-2 py-1 bg-gray-100">{{ $errors->first('notes') }}</p>
|
||||
@endif
|
||||
@endcomponent
|
||||
|
||||
|
||||
@component('portal.ninja2020.components.general.card-element', ['title' => $title])
|
||||
<input
|
||||
type="text"
|
||||
class="input mt-0 mr-4 relative"
|
||||
name="amount"
|
||||
placeholder="{{ $minimum_amount }}"
|
||||
min="{{ $minimum_amount }}"/>
|
||||
|
||||
@if($errors->has('amount'))
|
||||
<p class="mt-2 text-red-900 border-red-300 px-2 py-1 bg-gray-100">{{ $errors->first('amount') }}</p>
|
||||
@endif
|
||||
|
||||
@endcomponent
|
||||
|
||||
@if($allows_recurring)
|
||||
<div x-data="{ show: false }">
|
||||
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.enable_recurring')])
|
||||
<input x-on:click="show = !show" id="is_recurring" aria-describedby="recurring-description" name="is_recurring" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600">
|
||||
@endcomponent
|
||||
|
||||
<div x-cloak x-show="show">
|
||||
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.cycles_remaining')])
|
||||
<select name="remaining_cycles" class="form-select input w-full bg-white">
|
||||
<option value="-1" selected>{{ ctrans('texts.freq_indefinitely')}}</option>
|
||||
@for($i = 1; $i < 60; $i++)
|
||||
<option value={{$i}}>{{$i}}</option>
|
||||
@endfor
|
||||
</select>
|
||||
<span class="py-2">
|
||||
<label for="remaining_cycles" class="col-form-label text-center col-lg-3 text-gray-900">{{ ctrans ('texts.client_remaining_cycles_helper')}}</label>
|
||||
</span>
|
||||
@endcomponent
|
||||
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.frequency')])
|
||||
<select name="frequency_id" class="form-select input w-full bg-white">
|
||||
<option value="1">{{ ctrans('texts.freq_daily') }}</option>
|
||||
<option value="2">{{ ctrans('texts.freq_weekly') }}</option>
|
||||
<option value="3">{{ ctrans('texts.freq_two_weeks') }}</option>
|
||||
<option value="4">{{ ctrans('texts.freq_four_weeks') }}</option>
|
||||
<option value="5">{{ ctrans('texts.freq_monthly') }}</option>
|
||||
<option value="6">{{ ctrans('texts.freq_two_months') }}</option>
|
||||
<option value="7">{{ ctrans('texts.freq_three_months') }}</option>
|
||||
<option value="8">{{ ctrans('texts.') }}</option>
|
||||
<option value="9">{{ ctrans('texts.') }}</option>
|
||||
<option value="10">{{ ctrans('texts.') }}</option>
|
||||
<option value="11">{{ ctrans('texts.') }}</option>
|
||||
<option value="12">{{ ctrans('texts.') }}</option>
|
||||
</select>
|
||||
@endcomponent
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
<div class="px-4 py-3 bg-gray-50 text-right sm:px-6" x-data="{ buttonDisabled: false }">
|
||||
<button class="button button-primary bg-primary"x-on:click="buttonDisabled = true" x-bind:disabled="buttonDisabled">{{ ctrans('texts.pay_now') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@endsection
|
@ -76,6 +76,40 @@
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="mt-4 overflow-hidden bg-white shadow sm:rounded-lg">
|
||||
<div class="px-4 py-5 border-b border-gray-200 sm:px-6">
|
||||
<h3 class="text-lg font-medium leading-6 text-gray-900">
|
||||
{{ ctrans('texts.invoices') }}
|
||||
</h3>
|
||||
</div>
|
||||
<div>
|
||||
<dl>
|
||||
@foreach($invoice->invoices as $inv)
|
||||
<div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
||||
<dt class="text-sm font-medium leading-5 text-gray-500">
|
||||
{{ ctrans('texts.invoice_number') }}
|
||||
</dt>
|
||||
<div class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
|
||||
<a class="button-link text-primary"
|
||||
href="{{ route('client.invoice.show', ['invoice' => $inv->hashed_id])}}">
|
||||
{{ $inv->number }}
|
||||
</a>
|
||||
- {{ \App\Utils\Number::formatMoney($inv->amount, $invoice->client) }}
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@if($invoice->subscription && $invoice->subscription?->allow_cancellation)
|
||||
{{-- INV2-591 --}}
|
||||
{{-- @if(false) --}}
|
||||
|
@ -68,7 +68,7 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'domain_db','check_clie
|
||||
Route::get('payments/{payment}', [App\Http\Controllers\ClientPortal\PaymentController::class, 'show'])->name('payments.show');
|
||||
|
||||
Route::get('pre_payments', [PrePaymentController::class, 'index'])->name('pre_payments.index')->middleware('portal_enabled');
|
||||
Route::get('pre_payments/process', [PrePaymentController::class, 'process'])->name('pre_payments.process')->middleware('portal_enabled');
|
||||
Route::post('pre_payments/process', [PrePaymentController::class, 'process'])->name('pre_payments.process')->middleware('portal_enabled');
|
||||
|
||||
Route::get('profile/{client_contact}/edit', [App\Http\Controllers\ClientPortal\ProfileController::class, 'edit'])->name('profile.edit');
|
||||
Route::put('profile/{client_contact}/edit', [App\Http\Controllers\ClientPortal\ProfileController::class, 'update'])->name('profile.update');
|
||||
|
Loading…
x
Reference in New Issue
Block a user