diff --git a/app/Abstracts/BulkAction.php b/app/Abstracts/BulkAction.php index c89c91264..2cdaeb72e 100644 --- a/app/Abstracts/BulkAction.php +++ b/app/Abstracts/BulkAction.php @@ -123,8 +123,6 @@ abstract class BulkAction foreach ($items as $item) { $item->delete(); } - - Artisan::call('cache:clear'); } public function disableContacts($request) diff --git a/app/Abstracts/Model.php b/app/Abstracts/Model.php index 1f1779c5c..951a5963f 100644 --- a/app/Abstracts/Model.php +++ b/app/Abstracts/Model.php @@ -3,6 +3,7 @@ namespace App\Abstracts; use App\Scopes\Company; +use App\Traits\Tenants; use GeneaLabs\LaravelModelCaching\Traits\Cachable; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletes; @@ -11,7 +12,9 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; abstract class Model extends Eloquent { - use Cachable, SearchString, SoftDeletes, Sortable; + use Cachable, SearchString, SoftDeletes, Sortable, Tenants; + + protected $tenantable = true; protected $dates = ['deleted_at']; diff --git a/app/Abstracts/Report.php b/app/Abstracts/Report.php index 9b16044a3..d4206499f 100644 --- a/app/Abstracts/Report.php +++ b/app/Abstracts/Report.php @@ -329,7 +329,7 @@ abstract class Report event(new RowsShowing($this)); } - public function setTotals($items, $date_field, $check_type = false, $table = 'default') + public function setTotals($items, $date_field, $check_type = false, $table = 'default', $with_tax = true) { foreach ($items as $item) { // Make groups extensible @@ -347,7 +347,7 @@ abstract class Report continue; } - $amount = $item->getAmountConvertedToDefault(); + $amount = $item->getAmountConvertedToDefault(false, $with_tax); $type = (($item instanceof Invoice) || (($item instanceof Transaction) && ($item->type == 'income'))) ? 'income' : 'expense'; diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 23f1ab7a0..6a4c03cbf 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -23,11 +23,11 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { // Not installed yet - if (!env('APP_INSTALLED')) { + if (!config('app.installed')) { return; } - $schedule_time = env('APP_SCHEDULE_TIME', '09:00'); + $schedule_time = config('app.schedule_time'); $schedule->command('reminder:invoice')->dailyAt($schedule_time); $schedule->command('reminder:bill')->dailyAt($schedule_time); diff --git a/app/Console/Stubs/Modules/composer.stub b/app/Console/Stubs/Modules/composer.stub index 4178306e0..f4fc9f271 100644 --- a/app/Console/Stubs/Modules/composer.stub +++ b/app/Console/Stubs/Modules/composer.stub @@ -1,25 +1,16 @@ { - "name": "$VENDOR$/$LOWER_NAME$", - "description": "", - "authors": [ - { - "name": "$AUTHOR_NAME$", - "email": "$AUTHOR_EMAIL$" - } - ], - "autoload": { - "psr-4": { - "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\": "" - } + "require": { + }, - "extra": { - "laravel": { - "providers": [ - "$MODULE_NAMESPACE$\\$STUDLY_NAME$\\Providers\\Main" - ], - "aliases": { - - } - } + "replace": { + "guzzlehttp/guzzle": "*", + "guzzlehttp/psr7": "*", + "laravel/framework": "*", + "symfony/http-foundation": "*" + }, + "scripts": { + "test": [ + "composer install --prefer-dist --no-interaction --no-scripts --no-suggest --no-progress --no-ansi" + ] } } diff --git a/app/Console/Stubs/Modules/listeners/install.stub b/app/Console/Stubs/Modules/listeners/install.stub index a7276dd59..a762c4e8f 100644 --- a/app/Console/Stubs/Modules/listeners/install.stub +++ b/app/Console/Stubs/Modules/listeners/install.stub @@ -5,7 +5,7 @@ namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners; use App\Events\Module\Installed as Event; use App\Traits\Permissions; -class InstallModule +class FinishInstallation { use Permissions; diff --git a/app/Console/Stubs/Modules/providers/event.stub b/app/Console/Stubs/Modules/providers/event.stub index 351f46e75..90a59814f 100644 --- a/app/Console/Stubs/Modules/providers/event.stub +++ b/app/Console/Stubs/Modules/providers/event.stub @@ -3,7 +3,7 @@ namespace $MODULE_NAMESPACE$\$STUDLY_NAME$\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider; -use $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners\InstallModule; +use $MODULE_NAMESPACE$\$STUDLY_NAME$\Listeners\FinishInstallation; class Event extends Provider { @@ -14,7 +14,7 @@ class Event extends Provider */ protected $listen = [ \App\Events\Module\Installed::class => [ - InstallModule::class, + FinishInstallation::class, ], ]; } diff --git a/app/Events/Common/GlobalSearched.php b/app/Events/Common/GlobalSearched.php new file mode 100644 index 000000000..11134ce81 --- /dev/null +++ b/app/Events/Common/GlobalSearched.php @@ -0,0 +1,22 @@ +search = $search; + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index e24768d9f..4092f98d8 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -54,7 +54,7 @@ class Handler extends ExceptionHandler */ public function render($request, Throwable $exception) { - if (env('APP_DEBUG') === false) { + if (config('app.debug') === false) { return $this->handleExceptions($request, $exception); } diff --git a/app/Exports/Purchases/Payments.php b/app/Exports/Purchases/Payments.php index 4a903ad17..dba57e593 100644 --- a/app/Exports/Purchases/Payments.php +++ b/app/Exports/Purchases/Payments.php @@ -9,7 +9,7 @@ class Payments extends Export { public function collection() { - $model = Model::with(['account', 'bill', 'category', 'contact'])->type('expense')->usingSearchString(request('search')); + $model = Model::with(['account', 'bill', 'category', 'contact'])->expense()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Purchases/Sheets/BillTransactions.php b/app/Exports/Purchases/Sheets/BillTransactions.php index be3eb613e..40af135a9 100644 --- a/app/Exports/Purchases/Sheets/BillTransactions.php +++ b/app/Exports/Purchases/Sheets/BillTransactions.php @@ -9,7 +9,7 @@ class BillTransactions extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'bill'])->type('expense')->isDocument()->usingSearchString(request('search')); + $model = Model::with(['account', 'category', 'contact', 'bill'])->expense()->isDocument()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('document_id', (array) $this->ids); diff --git a/app/Exports/Sales/Revenues.php b/app/Exports/Sales/Revenues.php index 47f9f384f..edf74c71b 100644 --- a/app/Exports/Sales/Revenues.php +++ b/app/Exports/Sales/Revenues.php @@ -9,7 +9,7 @@ class Revenues extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'invoice'])->type('income')->usingSearchString(request('search')); + $model = Model::with(['account', 'category', 'contact', 'invoice'])->income()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('id', (array) $this->ids); diff --git a/app/Exports/Sales/Sheets/InvoiceTransactions.php b/app/Exports/Sales/Sheets/InvoiceTransactions.php index cdb3ab71c..2855d8f06 100644 --- a/app/Exports/Sales/Sheets/InvoiceTransactions.php +++ b/app/Exports/Sales/Sheets/InvoiceTransactions.php @@ -9,7 +9,7 @@ class InvoiceTransactions extends Export { public function collection() { - $model = Model::with(['account', 'category', 'contact', 'invoice'])->type('income')->isDocument()->usingSearchString(request('search')); + $model = Model::with(['account', 'category', 'contact', 'invoice'])->income()->isDocument()->usingSearchString(request('search')); if (!empty($this->ids)) { $model->whereIn('document_id', (array) $this->ids); diff --git a/app/Http/Controllers/Auth/Login.php b/app/Http/Controllers/Auth/Login.php index dde57b182..d9a188986 100644 --- a/app/Http/Controllers/Auth/Login.php +++ b/app/Http/Controllers/Auth/Login.php @@ -115,7 +115,7 @@ class Login extends Controller auth()->logout(); // Session destroy is required if stored in database - if (env('SESSION_DRIVER') == 'database') { + if (config('session.driver') == 'database') { $request = app('Illuminate\Http\Request'); $request->session()->getHandler()->destroy($request->session()->getId()); } diff --git a/app/Http/Controllers/Banking/Reconciliations.php b/app/Http/Controllers/Banking/Reconciliations.php index 1309127f0..81f0f8229 100644 --- a/app/Http/Controllers/Banking/Reconciliations.php +++ b/app/Http/Controllers/Banking/Reconciliations.php @@ -11,6 +11,7 @@ use App\Jobs\Banking\UpdateReconciliation; use App\Models\Banking\Account; use App\Models\Banking\Reconciliation; use App\Models\Banking\Transaction; +use Date; class Reconciliations extends Controller { @@ -48,8 +49,8 @@ class Reconciliations extends Controller $accounts = Account::enabled()->pluck('name', 'id'); $account_id = request('account_id', setting('default.account')); - $started_at = request('started_at', '0000-00-00'); - $ended_at = request('ended_at', '0000-00-00'); + $started_at = request('started_at', Date::now()->firstOfMonth()->toDateString()); + $ended_at = request('ended_at', Date::now()->endOfMonth()->toDateString()); $account = Account::find($account_id); diff --git a/app/Http/Controllers/Common/Dashboards.php b/app/Http/Controllers/Common/Dashboards.php index 9e35852ba..c3f245197 100644 --- a/app/Http/Controllers/Common/Dashboards.php +++ b/app/Http/Controllers/Common/Dashboards.php @@ -47,38 +47,33 @@ class Dashboards extends Controller * * @return Response */ - public function show(Dashboard $dashboard) + public function show($dashboard_id = null) { - $dashboard_id = session('dashboard_id', 0); + $dashboard_id = $dashboard_id ?? session('dashboard_id'); - if ($dashboard) { - $dashboard_id = $dashboard->id; + if (empty($dashboard_id)) { + $dashboard_id = user()->dashboards()->enabled()->pluck('id')->first(); } - // Change Dashboard - if (request()->get('dashboard_id', 0)) { - $dashboard_id = request()->get('dashboard_id'); - - session(['dashboard_id' => $dashboard_id]); + if (!empty($dashboard_id)) { + $dashboard = Dashboard::find($dashboard_id); } - $dashboards = user()->dashboards()->enabled()->get(); - - if (!$dashboard_id) { - $dashboard_id = $dashboards->pluck('id')->first(); + if (empty($dashboard)) { + $dashboard = $this->dispatch(new CreateDashboard([ + 'company_id' => session('company_id'), + 'name' => trans_choice('general.dashboards', 1), + 'with_widgets' => true, + ])); } - // Dashboard - $dashboard = Dashboard::find($dashboard_id); - - // Widgets $widgets = Widget::where('dashboard_id', $dashboard->id)->orderBy('sort', 'asc')->get()->filter(function ($widget) { return Widgets::canRead($widget->class); }); $financial_start = $this->getFinancialStart()->format('Y-m-d'); - return view('common.dashboards.show', compact('dashboards', 'dashboard', 'widgets', 'financial_start')); + return view('common.dashboards.show', compact('dashboard', 'widgets', 'financial_start')); } /** diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php index 4df3edf2c..2f4af197e 100644 --- a/app/Http/Controllers/Common/Items.php +++ b/app/Http/Controllers/Common/Items.php @@ -50,7 +50,7 @@ class Items extends Controller */ public function create() { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); @@ -129,7 +129,7 @@ class Items extends Controller */ public function edit(Item $item) { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Http/Controllers/Common/Search.php b/app/Http/Controllers/Common/Search.php index 21fb486a5..4e514aa48 100644 --- a/app/Http/Controllers/Common/Search.php +++ b/app/Http/Controllers/Common/Search.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Common; use App\Abstracts\Http\Controller; +use App\Events\Common\GlobalSearched; use App\Models\Banking\Account; use App\Models\Banking\Transaction; use App\Models\Common\Contact; @@ -19,53 +20,53 @@ class Search extends Controller */ public function index() { - $results = array(); + $search = new \stdClass(); + $search->results = []; + $search->keyword = request('keyword'); - $keyword = request('keyword'); - - $accounts = Account::enabled()->usingSearchString($keyword)->get(); + $accounts = Account::enabled()->usingSearchString($search->keyword)->get(); if ($accounts->count()) { foreach ($accounts as $account) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $account->id, 'name' => $account->name, 'type' => trans_choice('general.accounts', 1), 'color' => '#55588b', - 'href' => url('banking/accounts/' . $account->id . '/edit'), + 'href' => route('accounts.edit', $account->id), ]; } } - $items = Item::enabled()->usingSearchString($keyword)->get(); + $items = Item::enabled()->usingSearchString($search->keyword)->get(); if ($items->count()) { foreach ($items as $item) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $item->id, 'name' => $item->name, 'type' => trans_choice('general.items', 1), 'color' => '#efad32', - 'href' => url('common/items/' . $item->id . '/edit'), + 'href' => route('items.edit', $item->id), ]; } } - $invoices = Invoice::usingSearchString($keyword)->get(); + $invoices = Invoice::usingSearchString($search->keyword)->get(); if ($invoices->count()) { foreach ($invoices as $invoice) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $invoice->id, 'name' => $invoice->invoice_number . ' - ' . $invoice->contact_name, 'type' => trans_choice('general.invoices', 1), 'color' => '#6da252', - 'href' => url('sales/invoices/' . $invoice->id), + 'href' => route('invoices.show', $invoice->id), ]; } }/* - $income_transactions = Transaction::type('income')->usingSearchString($keyword)->get(); + $income_transactions = Transaction::income()->usingSearchString($keyword)->get(); if ($income_transactions->count()) { foreach ($income_transactions as $transaction) { @@ -79,35 +80,35 @@ class Search extends Controller } }*/ - $customers = Contact::customer()->enabled()->usingSearchString($keyword)->get(); + $customers = Contact::customer()->enabled()->usingSearchString($search->keyword)->get(); if ($customers->count()) { foreach ($customers as $customer) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $customer->id, 'name' => $customer->name, 'type' => trans_choice('general.customers', 1), 'color' => '#328aef', - 'href' => url('sales/customers/' . $customer->id), + 'href' => route('customers.show', $customer->id), ]; } } - $bills = Bill::usingSearchString($keyword)->get(); + $bills = Bill::usingSearchString($search->keyword)->get(); if ($bills->count()) { foreach ($bills as $bill) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $bill->id, 'name' => $bill->bill_number . ' - ' . $bill->contact_name, 'type' => trans_choice('general.bills', 1), 'color' => '#ef3232', - 'href' => url('purchases/bills/' . $bill->id), + 'href' => route('bills.show', $bill->id), ]; } } /* - $payments = Transaction::type('expense')->usingSearchString($keyword)->get(); + $payments = Transaction::expense()->usingSearchString($keyword)->get(); if ($revenues->count()) { foreach ($revenues as $revenue) { @@ -121,20 +122,22 @@ class Search extends Controller } }*/ - $vendors = Contact::vendor()->enabled()->usingSearchString($keyword)->get(); + $vendors = Contact::vendor()->enabled()->usingSearchString($search->keyword)->get(); if ($vendors->count()) { foreach ($vendors as $vendor) { - $results[] = (object)[ + $search->results[] = (object) [ 'id' => $vendor->id, 'name' => $vendor->name, 'type' => trans_choice('general.vendors', 1), 'color' => '#efef32', - 'href' => url('purchases/vendors/' . $vendor->id), + 'href' => route('vendors.show', $vendor->id), ]; } } - return response()->json((object) $results); + event(new GlobalSearched($search)); + + return response()->json((object) $search->results); } } diff --git a/app/Http/Controllers/Install/Database.php b/app/Http/Controllers/Install/Database.php index fb15816fa..aa5ecff3a 100644 --- a/app/Http/Controllers/Install/Database.php +++ b/app/Http/Controllers/Install/Database.php @@ -27,8 +27,10 @@ class Database extends Controller */ public function store(Request $request) { + $connection = config('database.default','mysql'); + $host = $request['hostname']; - $port = env('DB_PORT', '3306'); + $port = config("database.connections.$connection.port", '3306'); $database = $request['database']; $username = $request['username']; $password = $request['password']; diff --git a/app/Http/Controllers/Modals/Items.php b/app/Http/Controllers/Modals/Items.php index 8eb73ca7c..176d8a743 100644 --- a/app/Http/Controllers/Modals/Items.php +++ b/app/Http/Controllers/Modals/Items.php @@ -30,7 +30,7 @@ class Items extends Controller */ public function create(IRequest $request) { - $categories = Category::type('item')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::item()->enabled()->orderBy('name')->pluck('name', 'id'); $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id'); diff --git a/app/Http/Controllers/Modules/Item.php b/app/Http/Controllers/Modules/Item.php index 4b842ad7e..38c9b6519 100644 --- a/app/Http/Controllers/Modules/Item.php +++ b/app/Http/Controllers/Modules/Item.php @@ -84,19 +84,19 @@ class Item extends Controller // Download $steps[] = [ 'text' => trans('modules.installation.download', ['module' => $name]), - 'url' => url('apps/download') + 'url' => route('apps.download') ]; // Unzip $steps[] = [ 'text' => trans('modules.installation.unzip', ['module' => $name]), - 'url' => url('apps/unzip') + 'url' => route('apps.unzip') ]; // Download $steps[] = [ 'text' => trans('modules.installation.install', ['module' => $name]), - 'url' => url('apps/install') + 'url' => route('apps.install') ]; return response()->json([ @@ -269,11 +269,9 @@ class Item extends Controller public function reviews($alias, Request $request) { - $page = $request['page']; - $data = [ 'query' => [ - 'page' => ($page) ? $page : 1, + 'page' => $request->get('page', 1), ] ]; @@ -284,7 +282,7 @@ class Item extends Controller return response()->json([ 'success' => true, 'error' => false, - 'data' => null, + 'data' => $reviews, 'message' => null, 'html' => $html, ]); diff --git a/app/Http/Controllers/Modules/Tiles.php b/app/Http/Controllers/Modules/Tiles.php index f7601605c..4cca6ac8a 100644 --- a/app/Http/Controllers/Modules/Tiles.php +++ b/app/Http/Controllers/Modules/Tiles.php @@ -146,7 +146,7 @@ class Tiles extends Controller ] ]; - $title = trans('modules.search'); + $title = trans('general.search'); $modules = $this->getSearchModules($data); $installed = Module::all()->pluck('enabled', 'alias')->toArray(); diff --git a/app/Http/Controllers/Portal/Invoices.php b/app/Http/Controllers/Portal/Invoices.php index 24cb48447..a843bb564 100644 --- a/app/Http/Controllers/Portal/Invoices.php +++ b/app/Http/Controllers/Portal/Invoices.php @@ -27,7 +27,7 @@ class Invoices extends Controller ->accrued()->where('contact_id', user()->contact->id) ->collect(['invoice_number'=> 'desc']); - $categories = collect(Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id')); + $categories = collect(Category::income()->enabled()->orderBy('name')->pluck('name', 'id')); $statuses = $this->getInvoiceStatuses(); diff --git a/app/Http/Controllers/Portal/Payments.php b/app/Http/Controllers/Portal/Payments.php index dc1525473..df42e1a55 100644 --- a/app/Http/Controllers/Portal/Payments.php +++ b/app/Http/Controllers/Portal/Payments.php @@ -16,7 +16,7 @@ class Payments extends Controller */ public function index() { - $payments = Transaction::type('income')->where('contact_id', '=', user()->contact->id)->paginate(); + $payments = Transaction::income()->where('contact_id', '=', user()->contact->id)->paginate(); $payment_methods = Modules::getPaymentMethods('all'); diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index 4660f5753..bf3061883 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -41,7 +41,7 @@ class Bills extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $statuses = $this->getBillStatuses(); @@ -67,7 +67,7 @@ class Bills extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -106,7 +106,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $number = $this->getNextBillNumber(); @@ -202,7 +202,7 @@ class Bills extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); return view('purchases.bills.edit', compact('bill', 'vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Purchases/Payments.php b/app/Http/Controllers/Purchases/Payments.php index cbf50467e..95cdd672a 100644 --- a/app/Http/Controllers/Purchases/Payments.php +++ b/app/Http/Controllers/Purchases/Payments.php @@ -30,11 +30,11 @@ class Payments extends Controller */ public function index() { - $payments = Transaction::type('expense')->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); + $payments = Transaction::expense()->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); @@ -68,7 +68,7 @@ class Payments extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -156,7 +156,7 @@ class Payments extends Controller $vendors = Contact::vendor()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::expense()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Purchases/Vendors.php b/app/Http/Controllers/Purchases/Vendors.php index 17a0829db..59340a7d3 100644 --- a/app/Http/Controllers/Purchases/Vendors.php +++ b/app/Http/Controllers/Purchases/Vendors.php @@ -78,7 +78,7 @@ class Vendors extends Controller } // Handle payments - $transactions = Transaction::where('contact_id', $vendor->id)->type('expense')->get(); + $transactions = Transaction::where('contact_id', $vendor->id)->expense()->get(); $counts['transactions'] = $transactions->count(); diff --git a/app/Http/Controllers/Sales/Customers.php b/app/Http/Controllers/Sales/Customers.php index f52e241ae..1857b9f30 100644 --- a/app/Http/Controllers/Sales/Customers.php +++ b/app/Http/Controllers/Sales/Customers.php @@ -76,7 +76,7 @@ class Customers extends Controller } // Handle transactions - $transactions = Transaction::where('contact_id', $customer->id)->type('income')->get(); + $transactions = Transaction::where('contact_id', $customer->id)->income()->get(); $counts['transactions'] = $transactions->count(); diff --git a/app/Http/Controllers/Sales/Invoices.php b/app/Http/Controllers/Sales/Invoices.php index aaf7834a0..7af09cee0 100644 --- a/app/Http/Controllers/Sales/Invoices.php +++ b/app/Http/Controllers/Sales/Invoices.php @@ -42,7 +42,7 @@ class Invoices extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $statuses = $this->getInvoiceStatuses(); @@ -68,7 +68,7 @@ class Invoices extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -109,7 +109,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $number = $this->getNextInvoiceNumber(); @@ -205,7 +205,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->orderBy('name')->get(); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); return view('sales.invoices.edit', compact('invoice', 'customers', 'currencies', 'currency', 'items', 'taxes', 'categories')); } diff --git a/app/Http/Controllers/Sales/Revenues.php b/app/Http/Controllers/Sales/Revenues.php index b0146538c..5eed29da2 100644 --- a/app/Http/Controllers/Sales/Revenues.php +++ b/app/Http/Controllers/Sales/Revenues.php @@ -30,11 +30,11 @@ class Revenues extends Controller */ public function index() { - $revenues = Transaction::type('income')->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); + $revenues = Transaction::income()->with(['account', 'category', 'contact'])->isNotTransfer()->collect(['paid_at'=> 'desc']); $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $accounts = Account::enabled()->orderBy('name')->pluck('name', 'id'); @@ -68,7 +68,7 @@ class Revenues extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); @@ -156,7 +156,7 @@ class Revenues extends Controller $customers = Contact::customer()->enabled()->orderBy('name')->pluck('name', 'id'); - $categories = Category::type('income')->enabled()->orderBy('name')->pluck('name', 'id'); + $categories = Category::income()->enabled()->orderBy('name')->pluck('name', 'id'); $payment_methods = Modules::getPaymentMethods(); diff --git a/app/Http/Controllers/Settings/Modules.php b/app/Http/Controllers/Settings/Modules.php index b70c751a1..51d5caf70 100644 --- a/app/Http/Controllers/Settings/Modules.php +++ b/app/Http/Controllers/Settings/Modules.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Settings; use App\Abstracts\Http\Controller; use App\Models\Setting\Setting; +use App\Utilities\Modules as Utility; use App\Http\Requests\Setting\Module as Request; class Modules extends Controller @@ -54,9 +55,10 @@ class Modules extends Controller setting()->set($alias . '.' . $key, $value); } - // Save all settings setting()->save(); + Utility::clearPaymentMethodsCache(); + $message = trans('messages.success.updated', ['type' => trans_choice('general.settings', 2)]); $response = [ diff --git a/app/Http/ViewComposers/Modules.php b/app/Http/ViewComposers/Modules.php index b141ea342..e2ab3df0c 100644 --- a/app/Http/ViewComposers/Modules.php +++ b/app/Http/ViewComposers/Modules.php @@ -22,11 +22,11 @@ class Modules if (setting('apps.api_key')) { $categories = Cache::remember('modules.categories.' . language()->getShortCode(), Date::now()->addHour(6), function () { return collect($this->getCategories())->pluck('name', 'slug') - ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ''); + ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '*'); }); } else { $categories = collect([ - '' => trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), + '*' => trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ]); } diff --git a/app/Http/ViewComposers/Notifications.php b/app/Http/ViewComposers/Notifications.php index da0d56f10..cb7b5ba80 100644 --- a/app/Http/ViewComposers/Notifications.php +++ b/app/Http/ViewComposers/Notifications.php @@ -19,7 +19,7 @@ class Notifications public function compose(View $view) { // No need to add suggestions in console - if (app()->runningInConsole() || !env('APP_INSTALLED') || !user()) { + if (app()->runningInConsole() || !config('app.installed') || !user()) { return; } diff --git a/app/Http/ViewComposers/Suggestions.php b/app/Http/ViewComposers/Suggestions.php index 25c568e34..011c3c843 100644 --- a/app/Http/ViewComposers/Suggestions.php +++ b/app/Http/ViewComposers/Suggestions.php @@ -20,7 +20,7 @@ class Suggestions public function compose(View $view) { // No need to add suggestions in console - if (app()->runningInConsole() || !env('APP_INSTALLED')) { + if (app()->runningInConsole() || !config('app.installed')) { return; } @@ -31,22 +31,18 @@ class Suggestions if ($path) { $suggestions = $this->getSuggestions($path); - + if ($suggestions) { $suggestion_modules = $suggestions->modules; - + foreach ($suggestion_modules as $key => $module) { $installed = Module::where('company_id', session('company_id'))->where('alias', $module->alias)->first(); if ($installed) { - unset($suggestion_modules[$key]); + continue; } - } - if ($suggestion_modules) { - shuffle($suggestion_modules); - - $modules[] = $suggestion_modules[0]; + $modules[] = $module; } } } diff --git a/app/Jobs/Auth/CreatePermission.php b/app/Jobs/Auth/CreatePermission.php index e3c166ab5..d25030879 100644 --- a/app/Jobs/Auth/CreatePermission.php +++ b/app/Jobs/Auth/CreatePermission.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Permission; -use Artisan; class CreatePermission extends Job { @@ -29,8 +28,6 @@ class CreatePermission extends Job { $permission = Permission::create($this->request->all()); - Artisan::call('cache:clear'); - return $permission; } } diff --git a/app/Jobs/Auth/CreateRole.php b/app/Jobs/Auth/CreateRole.php index 44004d674..6ec20d1b9 100644 --- a/app/Jobs/Auth/CreateRole.php +++ b/app/Jobs/Auth/CreateRole.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Role; -use Artisan; class CreateRole extends Job { @@ -33,8 +32,6 @@ class CreateRole extends Job $role->permissions()->attach($this->request->get('permissions')); } - Artisan::call('cache:clear'); - return $role; } } diff --git a/app/Jobs/Auth/CreateUser.php b/app/Jobs/Auth/CreateUser.php index 239d0a8f2..7d2edd902 100644 --- a/app/Jobs/Auth/CreateUser.php +++ b/app/Jobs/Auth/CreateUser.php @@ -44,21 +44,23 @@ class CreateUser extends Job $user->permissions()->attach($this->request->get('permissions')); } - $user->roles()->attach($this->request->get('roles')); - - $user->companies()->attach($this->request->get('companies')); - - Artisan::call('cache:clear'); - - // Add User Dashboard - foreach ($user->companies as $company) { - Artisan::call('user:seed', [ - 'user' => $user->id, - 'company' => $company->id, - ]); + if ($this->request->has('roles')) { + $user->roles()->attach($this->request->get('roles')); } - Artisan::call('cache:clear'); + if ($this->request->has('companies')) { + $user->companies()->attach($this->request->get('companies')); + } + + // Add User Dashboard + if (!empty($user->companies)) { + foreach ($user->companies as $company) { + Artisan::call('user:seed', [ + 'user' => $user->id, + 'company' => $company->id, + ]); + } + } return $user; } diff --git a/app/Jobs/Auth/DeletePermission.php b/app/Jobs/Auth/DeletePermission.php index b1eaff559..af007048f 100644 --- a/app/Jobs/Auth/DeletePermission.php +++ b/app/Jobs/Auth/DeletePermission.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeletePermission extends Job { @@ -28,8 +27,6 @@ class DeletePermission extends Job { $this->permission->delete(); - Artisan::call('cache:clear'); - return true; } } diff --git a/app/Jobs/Auth/DeleteRole.php b/app/Jobs/Auth/DeleteRole.php index 63bf496a4..25018e2e3 100644 --- a/app/Jobs/Auth/DeleteRole.php +++ b/app/Jobs/Auth/DeleteRole.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeleteRole extends Job { @@ -28,7 +27,7 @@ class DeleteRole extends Job { $this->role->delete(); - Artisan::call('cache:clear'); + $this->role->flushCache(); return true; } diff --git a/app/Jobs/Auth/DeleteUser.php b/app/Jobs/Auth/DeleteUser.php index 50db814fd..f34a0d707 100644 --- a/app/Jobs/Auth/DeleteUser.php +++ b/app/Jobs/Auth/DeleteUser.php @@ -3,7 +3,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; -use Artisan; class DeleteUser extends Job { @@ -30,7 +29,7 @@ class DeleteUser extends Job $this->user->delete(); - Artisan::call('cache:clear'); + $this->user->flushCache(); return true; } diff --git a/app/Jobs/Auth/UpdatePermission.php b/app/Jobs/Auth/UpdatePermission.php index f77219898..632631e1f 100644 --- a/app/Jobs/Auth/UpdatePermission.php +++ b/app/Jobs/Auth/UpdatePermission.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Permission; -use Artisan; class UpdatePermission extends Job { @@ -33,8 +32,6 @@ class UpdatePermission extends Job { $this->permission->update($this->request->all()); - Artisan::call('cache:clear'); - return $this->permission; } } diff --git a/app/Jobs/Auth/UpdateRole.php b/app/Jobs/Auth/UpdateRole.php index 5475a354c..665201253 100644 --- a/app/Jobs/Auth/UpdateRole.php +++ b/app/Jobs/Auth/UpdateRole.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\Role; -use Artisan; class UpdateRole extends Job { @@ -37,8 +36,6 @@ class UpdateRole extends Job $this->role->permissions()->sync($this->request->get('permissions')); } - Artisan::call('cache:clear'); - return $this->role; } } diff --git a/app/Jobs/Auth/UpdateUser.php b/app/Jobs/Auth/UpdateUser.php index e76e4b75c..3a1cd66e3 100644 --- a/app/Jobs/Auth/UpdateUser.php +++ b/app/Jobs/Auth/UpdateUser.php @@ -4,7 +4,6 @@ namespace App\Jobs\Auth; use App\Abstracts\Job; use App\Models\Auth\User; -use Artisan; class UpdateUser extends Job { @@ -58,8 +57,6 @@ class UpdateUser extends Job $this->user->companies()->sync($this->request->get('companies')); } - Artisan::call('cache:clear'); - return $this->user; } diff --git a/app/Jobs/Banking/CreateDocumentTransaction.php b/app/Jobs/Banking/CreateDocumentTransaction.php index 400f59d47..4942d18bd 100644 --- a/app/Jobs/Banking/CreateDocumentTransaction.php +++ b/app/Jobs/Banking/CreateDocumentTransaction.php @@ -79,8 +79,6 @@ class CreateDocumentTransaction extends Job { $currencies = Currency::enabled()->pluck('rate', 'code')->toArray(); - $total_amount = $this->model->amount; - $default_amount = (double) $this->request['amount']; if ($this->model->currency_code == $this->request['currency_code']) { @@ -103,7 +101,7 @@ class CreateDocumentTransaction extends Job $amount = (double) $convert_amount_model->getAmountConvertedFromDefault(); } - $total_amount -= $this->model->paid; + $total_amount = $this->model->amount - $this->model->paid; unset($this->model->reconciled); // For amount cover integer @@ -114,7 +112,7 @@ class CreateDocumentTransaction extends Job } $amount_check = (int) ($amount * $multiplier); - $total_amount_check = (int) (round($total_amount, $this->currency->precision) * $multiplier); + $total_amount_check = (int) ($total_amount * $multiplier); if ($amount_check > $total_amount_check) { $error_amount = $total_amount; diff --git a/app/Jobs/Common/CreateDashboard.php b/app/Jobs/Common/CreateDashboard.php index dd6b9eb01..a610d508b 100644 --- a/app/Jobs/Common/CreateDashboard.php +++ b/app/Jobs/Common/CreateDashboard.php @@ -4,6 +4,8 @@ namespace App\Jobs\Common; use App\Abstracts\Job; use App\Models\Common\Dashboard; +use App\Models\Common\Widget; +use App\Utilities\Widgets; class CreateDashboard extends Job { @@ -28,10 +30,14 @@ class CreateDashboard extends Job { $this->request['enabled'] = $this->request['enabled'] ?? 1; - $this->dashboard = Dashboard::create($this->request->all()); + $this->dashboard = Dashboard::create($this->request->only(['company_id', 'name', 'enabled'])); $this->attachToUser(); + if ($this->request->has('with_widgets')) { + $this->createWidgets(); + } + return $this->dashboard; } @@ -49,4 +55,24 @@ class CreateDashboard extends Job $this->dashboard->users()->attach($user); } + + protected function createWidgets() + { + $widgets = Widgets::getClasses(false); + + $sort = 1; + + foreach ($widgets as $class => $name) { + Widget::create([ + 'company_id' => $this->dashboard->company_id, + 'dashboard_id' => $this->dashboard->id, + 'class' => $class, + 'name' => $name, + 'sort' => $sort, + 'settings' => (new $class())->getDefaultSettings(), + ]); + + $sort++; + } + } } diff --git a/app/Jobs/Common/DeleteDashboard.php b/app/Jobs/Common/DeleteDashboard.php index 9fda5cca0..80a6a268e 100644 --- a/app/Jobs/Common/DeleteDashboard.php +++ b/app/Jobs/Common/DeleteDashboard.php @@ -35,8 +35,6 @@ class DeleteDashboard extends Job $this->dashboard->delete(); - Artisan::call('cache:clear'); - return true; } diff --git a/app/Listeners/Menu/AddAdminItems.php b/app/Listeners/Menu/AddAdminItems.php index 52436c76e..c17c4bb38 100644 --- a/app/Listeners/Menu/AddAdminItems.php +++ b/app/Listeners/Menu/AddAdminItems.php @@ -26,9 +26,11 @@ class AddAdminItems if ($dashboards->count() > 1) { $menu->dropdown(trim(trans_choice('general.dashboards', 2)), function ($sub) use ($user, $attr, $dashboards) { foreach ($dashboards as $key => $dashboard) { - $path = (session('dashboard_id') == $dashboard->id) ? '/' : '/?dashboard_id=' . $dashboard->id; - - $sub->url($path, $dashboard->name, $key, $attr); + if (session('dashboard_id') != $dashboard->id) { + $sub->route('dashboards.switch', $dashboard->name, ['dashboard' => $dashboard->id], $key, $attr); + } else { + $sub->url('/', $dashboard->name, $key, $attr); + } } }, 1, [ 'url' => '/', diff --git a/app/Listeners/Update/V20/Version207.php b/app/Listeners/Update/V20/Version207.php index 178b008c3..c783ac319 100644 --- a/app/Listeners/Update/V20/Version207.php +++ b/app/Listeners/Update/V20/Version207.php @@ -26,7 +26,7 @@ class Version207 extends Listener // Update .env file Installer::updateEnv([ - 'MAIL_MAILER' => env('MAIL_DRIVER'), + 'MAIL_MAILER' => env('MAIL_DRIVER', config('mail.default')), ]); } } diff --git a/app/Models/Auth/Permission.php b/app/Models/Auth/Permission.php index b9e74e407..e70ad7fbd 100644 --- a/app/Models/Auth/Permission.php +++ b/app/Models/Auth/Permission.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use Laratrust\Models\LaratrustPermission; use Laratrust\Traits\LaratrustPermissionTrait; use Kyslik\ColumnSortable\Sortable; @@ -9,10 +10,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Permission extends LaratrustPermission { - use LaratrustPermissionTrait, SearchString, Sortable; + use LaratrustPermissionTrait, SearchString, Sortable, Tenants; protected $table = 'permissions'; + protected $tenantable = false; + /** * The accessors to append to the model's array form. * diff --git a/app/Models/Auth/Role.php b/app/Models/Auth/Role.php index 8623e41cc..f951568f6 100644 --- a/app/Models/Auth/Role.php +++ b/app/Models/Auth/Role.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use Laratrust\Models\LaratrustRole; use Laratrust\Traits\LaratrustRoleTrait; use Kyslik\ColumnSortable\Sortable; @@ -9,10 +10,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Role extends LaratrustRole { - use LaratrustRoleTrait, SearchString, Sortable; + use LaratrustRoleTrait, SearchString, Sortable, Tenants; protected $table = 'roles'; + protected $tenantable = false; + /** * The attributes that are mass assignable. * diff --git a/app/Models/Auth/User.php b/app/Models/Auth/User.php index 265a677b4..1051d5c7b 100644 --- a/app/Models/Auth/User.php +++ b/app/Models/Auth/User.php @@ -2,6 +2,7 @@ namespace App\Models\Auth; +use App\Traits\Tenants; use App\Notifications\Auth\Reset; use App\Traits\Media; use Date; @@ -15,10 +16,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class User extends Authenticatable { - use LaratrustUserTrait, Notifiable, SearchString, SoftDeletes, Sortable, Media; + use LaratrustUserTrait, Notifiable, SearchString, SoftDeletes, Sortable, Media, Tenants; protected $table = 'users'; + protected $tenantable = false; + /** * The attributes that are mass assignable. * diff --git a/app/Models/Banking/Transaction.php b/app/Models/Banking/Transaction.php index 6f85c8255..f82e36f86 100644 --- a/app/Models/Banking/Transaction.php +++ b/app/Models/Banking/Transaction.php @@ -96,6 +96,28 @@ class Transaction extends Model return $query->whereIn($this->table . '.type', (array) $types); } + /** + * Scope to include only income. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIncome($query) + { + return $query->where($this->table . '.type', '=', 'income'); + } + + /** + * Scope to include only expense. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeExpense($query) + { + return $query->where($this->table . '.type', '=', 'expense'); + } + /** * Get only transfers. * diff --git a/app/Models/Common/Company.php b/app/Models/Common/Company.php index 86de79dbe..62b3a28ed 100644 --- a/app/Models/Common/Company.php +++ b/app/Models/Common/Company.php @@ -3,6 +3,7 @@ namespace App\Models\Common; use App\Traits\Media; +use App\Traits\Tenants; use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Eloquent\SoftDeletes; use Kyslik\ColumnSortable\Sortable; @@ -10,10 +11,12 @@ use Lorisleiva\LaravelSearchString\Concerns\SearchString; class Company extends Eloquent { - use Media, SearchString, SoftDeletes, Sortable; + use Media, SearchString, SoftDeletes, Sortable, Tenants; protected $table = 'companies'; + protected $tenantable = false; + protected $dates = ['deleted_at']; protected $fillable = ['domain', 'enabled']; diff --git a/app/Models/Common/Media.php b/app/Models/Common/Media.php index abc998ecf..334430d37 100644 --- a/app/Models/Common/Media.php +++ b/app/Models/Common/Media.php @@ -9,5 +9,7 @@ class Media extends BaseMedia { use SoftDeletes; + protected $tenantable = false; + protected $dates = ['deleted_at']; } diff --git a/app/Models/Setting/Category.php b/app/Models/Setting/Category.php index b627a811a..3ad11959b 100644 --- a/app/Models/Setting/Category.php +++ b/app/Models/Setting/Category.php @@ -68,6 +68,50 @@ class Category extends Model return $query->whereIn($this->table . '.type', (array) $types); } + /** + * Scope to include only income. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIncome($query) + { + return $query->where($this->table . '.type', '=', 'income'); + } + + /** + * Scope to include only expense. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeExpense($query) + { + return $query->where($this->table . '.type', '=', 'expense'); + } + + /** + * Scope to include only item. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeItem($query) + { + return $query->where($this->table . '.type', '=', 'item'); + } + + /** + * Scope to include only other. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeOther($query) + { + return $query->where($this->table . '.type', '=', 'other'); + } + public function scopeName($query, $name) { return $query->where('name', '=', $name); @@ -81,6 +125,6 @@ class Category extends Model */ public function scopeTransfer($query) { - return $query->where('type', 'other')->pluck('id')->first(); + return $query->where($this->table . '.type', '=', 'other')->pluck('id')->first(); } } diff --git a/app/Models/Setting/Setting.php b/app/Models/Setting/Setting.php index 92d6fed1b..0ba333fe1 100644 --- a/app/Models/Setting/Setting.php +++ b/app/Models/Setting/Setting.php @@ -3,12 +3,17 @@ namespace App\Models\Setting; use App\Scopes\Company; +use App\Traits\Tenants; use Illuminate\Database\Eloquent\Model as Eloquent; class Setting extends Eloquent { + use Tenants; + protected $table = 'settings'; + protected $tenantable = true; + public $timestamps = false; /** diff --git a/app/Providers/App.php b/app/Providers/App.php index 990b6d9ae..e3a0d8f8e 100644 --- a/app/Providers/App.php +++ b/app/Providers/App.php @@ -31,11 +31,11 @@ class App extends Provider */ public function register() { - if (env('APP_INSTALLED') && env('APP_DEBUG')) { + if (config('app.installed') && config('app.debug')) { $this->app->register(\Barryvdh\Debugbar\ServiceProvider::class); } - if (env('APP_ENV') !== 'production') { + if (config('app.env') !== 'production') { $this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class); } } diff --git a/app/Reports/ExpenseSummary.php b/app/Reports/ExpenseSummary.php index 9335c730a..1c1069e27 100644 --- a/app/Reports/ExpenseSummary.php +++ b/app/Reports/ExpenseSummary.php @@ -30,7 +30,7 @@ class ExpenseSummary extends Report public function setData() { - $transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $transactions = $this->applyFilters(Transaction::expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': diff --git a/app/Reports/IncomeExpenseSummary.php b/app/Reports/IncomeExpenseSummary.php index 2e74f99c5..19abe176d 100644 --- a/app/Reports/IncomeExpenseSummary.php +++ b/app/Reports/IncomeExpenseSummary.php @@ -16,8 +16,8 @@ class IncomeExpenseSummary extends Report public function setData() { - $income_transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); - $expense_transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $income_transactions = $this->applyFilters(Transaction::income()->isNotTransfer(), ['date_field' => 'paid_at']); + $expense_transactions = $this->applyFilters(Transaction::expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': diff --git a/app/Reports/IncomeSummary.php b/app/Reports/IncomeSummary.php index acc6608f7..5bde4b9d8 100644 --- a/app/Reports/IncomeSummary.php +++ b/app/Reports/IncomeSummary.php @@ -30,7 +30,7 @@ class IncomeSummary extends Report public function setData() { - $transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); + $transactions = $this->applyFilters(Transaction::income()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': diff --git a/app/Reports/ProfitLoss.php b/app/Reports/ProfitLoss.php index af944e645..f96aac242 100644 --- a/app/Reports/ProfitLoss.php +++ b/app/Reports/ProfitLoss.php @@ -40,40 +40,40 @@ class ProfitLoss extends Report public function setData() { - $income_transactions = $this->applyFilters(Transaction::type('income')->isNotTransfer(), ['date_field' => 'paid_at']); - $expense_transactions = $this->applyFilters(Transaction::type('expense')->isNotTransfer(), ['date_field' => 'paid_at']); + $income_transactions = $this->applyFilters(Transaction::income()->isNotTransfer(), ['date_field' => 'paid_at']); + $expense_transactions = $this->applyFilters(Transaction::expense()->isNotTransfer(), ['date_field' => 'paid_at']); switch ($this->model->settings->basis) { case 'cash': // Revenues $revenues = $income_transactions->get(); - $this->setTotals($revenues, 'paid_at', true, $this->tables['income']); + $this->setTotals($revenues, 'paid_at', true, $this->tables['income'], false); // Payments $payments = $expense_transactions->get(); - $this->setTotals($payments, 'paid_at', true, $this->tables['expense']); + $this->setTotals($payments, 'paid_at', true, $this->tables['expense'], false); break; default: // Invoices $invoices = $this->applyFilters(Invoice::accrued(), ['date_field' => 'invoiced_at'])->get(); Recurring::reflect($invoices, 'invoiced_at'); - $this->setTotals($invoices, 'invoiced_at', true, $this->tables['income']); + $this->setTotals($invoices, 'invoiced_at', true, $this->tables['income'], false); // Revenues $revenues = $income_transactions->isNotDocument()->get(); Recurring::reflect($revenues, 'paid_at'); - $this->setTotals($revenues, 'paid_at', true, $this->tables['income']); + $this->setTotals($revenues, 'paid_at', true, $this->tables['income'], false); // Bills $bills = $this->applyFilters(Bill::accrued(), ['date_field' => 'billed_at'])->get(); Recurring::reflect($bills, 'bill', 'billed_at'); - $this->setTotals($bills, 'billed_at', true, $this->tables['expense']); + $this->setTotals($bills, 'billed_at', true, $this->tables['expense'], false); // Payments $payments = $expense_transactions->isNotDocument()->get(); Recurring::reflect($payments, 'paid_at'); - $this->setTotals($payments, 'paid_at', true, $this->tables['expense']); + $this->setTotals($payments, 'paid_at', true, $this->tables['expense'], false); break; } diff --git a/app/Reports/TaxSummary.php b/app/Reports/TaxSummary.php index f9abe6b38..15baa5679 100644 --- a/app/Reports/TaxSummary.php +++ b/app/Reports/TaxSummary.php @@ -47,11 +47,11 @@ class TaxSummary extends Report switch ($this->model->settings->basis) { case 'cash': // Invoice Payments - $invoices = $this->applyFilters(Transaction::with(['invoice', 'invoice.totals'])->type('income')->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); + $invoices = $this->applyFilters(Transaction::with(['invoice', 'invoice.totals'])->income()->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); $this->setTotals($invoices, 'paid_at'); // Bill Payments - $bills = $this->applyFilters(Transaction::with(['bill', 'bill.totals'])->type('expense')->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); + $bills = $this->applyFilters(Transaction::with(['bill', 'bill.totals'])->expense()->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); $this->setTotals($bills, 'paid_at'); break; @@ -70,7 +70,7 @@ class TaxSummary extends Report } } - public function setTotals($items, $date_field, $check_type = false, $table = 'default') + public function setTotals($items, $date_field, $check_type = false, $table = 'default', $with_tax = true) { foreach ($items as $item) { // Make groups extensible diff --git a/app/Scopes/Company.php b/app/Scopes/Company.php index 4017b3143..025dd9df7 100644 --- a/app/Scopes/Company.php +++ b/app/Scopes/Company.php @@ -17,13 +17,16 @@ class Company implements Scope */ public function apply(Builder $builder, Model $model) { + if (method_exists($model, 'isNotTenantable') && $model->isNotTenantable()) { + return; + } + $table = $model->getTable(); // Skip for specific tables $skip_tables = [ - 'companies', 'jobs', 'firewall_ips', 'firewall_logs', 'media', 'mediables', 'migrations', 'notifications', - 'permissions', 'roles', 'role_companies', 'role_permissions', 'sessions', 'users', 'user_companies', - 'user_dashboards', 'user_permissions', 'user_roles', + 'jobs', 'firewall_ips', 'firewall_logs', 'media', 'mediables', 'migrations', 'notifications', 'role_companies', + 'role_permissions', 'sessions', 'user_companies', 'user_dashboards', 'user_permissions', 'user_roles', ]; if (in_array($table, $skip_tables)) { diff --git a/app/Traits/DateTime.php b/app/Traits/DateTime.php index f3a81838d..5c4ec6ded 100644 --- a/app/Traits/DateTime.php +++ b/app/Traits/DateTime.php @@ -17,7 +17,7 @@ trait DateTime $default = 'd M Y'; // Make sure it's installed - if (!env('APP_INSTALLED') && (env('APP_ENV') !== 'testing')) { + if (!config('app.installed') && (config('app.env') !== 'testing')) { return $default; } diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index 195d9012b..001dfa177 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -2,12 +2,10 @@ namespace App\Traits; -use App\Models\Module\Module as Model; use App\Models\Module\Module; use App\Traits\SiteApi; use App\Utilities\Console; use App\Utilities\Info; -use Artisan; use Cache; use Date; use File; @@ -36,10 +34,11 @@ trait Modules } // Get All Modules - public function getModules() + public function getModules($data = []) { - // Get data from cache - $items = Cache::get('apps.items'); + $key = 'apps.items.page.' . $this->getPageNumber($data); + + $items = Cache::get($key); if (!empty($items)) { return $items; @@ -47,7 +46,7 @@ trait Modules $items = static::getResponseData('GET', 'apps/items'); - Cache::put('apps.items', $items, Date::now()->addHour()); + Cache::put($key, $items, Date::now()->addHour()); return $items; } @@ -62,8 +61,9 @@ trait Modules public function getDocumentation($alias) { - // Get data from cache - $documentation = Cache::get('apps.docs.' . $alias); + $key = 'apps.docs.' . $alias; + + $documentation = Cache::get($key); if (!empty($documentation)) { return $documentation; @@ -71,15 +71,16 @@ trait Modules $documentation = static::getResponseData('GET', 'apps/docs/' . $alias); - Cache::put('apps.docs.' . $alias, $documentation, Date::now()->addHour()); + Cache::put($key, $documentation, Date::now()->addHour()); return $documentation; } public function getModuleReviews($alias, $data = []) { - // Get data from cache - $reviews = Cache::get('apps.' . $alias . '.reviews'); + $key = 'apps.' . $alias . '.reviews.page.'. $this->getPageNumber($data); + + $reviews = Cache::get($key); if (!empty($reviews)) { return $reviews; @@ -87,15 +88,16 @@ trait Modules $reviews = static::getResponseData('GET', 'apps/' . $alias . '/reviews', $data); - Cache::put('apps.' . $alias . '.reviews', $reviews, Date::now()->addHour()); + Cache::put($key, $reviews, Date::now()->addHour()); return $reviews; } - public function getCategories() + public function getCategories($data = []) { - // Get data from cache - $categories = Cache::get('apps.categories'); + $key = 'apps.categories.page.' . $this->getPageNumber($data); + + $categories = Cache::get($key); if (!empty($categories)) { return $categories; @@ -103,15 +105,16 @@ trait Modules $categories = static::getResponseData('GET', 'apps/categories'); - Cache::put('apps.categories', $categories, Date::now()->addHour()); + Cache::put($key, $categories, Date::now()->addHour()); return $categories; } public function getModulesByCategory($alias, $data = []) { - // Get data from cache - $category = Cache::get('apps.categories.' . $alias); + $key = 'apps.categories.' . $alias . '.page.' . $this->getPageNumber($data); + + $category = Cache::get($key); if (!empty($category)) { return $category; @@ -119,15 +122,16 @@ trait Modules $category = static::getResponseData('GET', 'apps/categories/' . $alias, $data); - Cache::put('apps.categories.' . $alias, $category, Date::now()->addHour()); + Cache::put($key, $category, Date::now()->addHour()); return $category; } - public function getVendors() + public function getVendors($data = []) { - // Get data from cache - $vendors = Cache::get('apps.vendors'); + $key = 'apps.vendors.page.' . $this->getPageNumber($data); + + $vendors = Cache::get($key); if (!empty($vendors)) { return $vendors; @@ -135,15 +139,16 @@ trait Modules $vendors = static::getResponseData('GET', 'apps/vendors'); - Cache::put('apps.vendors', $vendors, Date::now()->addHour()); + Cache::put($key, $vendors, Date::now()->addHour()); return $vendors; } public function getModulesByVendor($alias, $data = []) { - // Get data from cache - $vendor = Cache::get('apps.vendors.' . $alias); + $key = 'apps.vendors.' . $alias . '.page.' . $this->getPageNumber($data); + + $vendor = Cache::get($key); if (!empty($vendor)) { return $vendor; @@ -151,7 +156,7 @@ trait Modules $vendor = static::getResponseData('GET', 'apps/vendors/' . $alias, $data); - Cache::put('apps.vendors.' . $alias, $vendor, Date::now()->addHour()); + Cache::put($key, $vendor, Date::now()->addHour()); return $vendor; } @@ -161,44 +166,38 @@ trait Modules return static::getResponseData('GET', 'apps/my', $data); } - public function getInstalledModules($data = []) + public function getInstalledModules() { - $company_id = session('company_id'); + $key = 'apps.installed.' . session('company_id'); - $cache = 'installed.' . $company_id . '.module'; - - $installed = Cache::get($cache); - - if ($installed) { + if ($installed = Cache::get($key)) { return $installed; } $installed = []; - $modules = Module::all(); - $installed_modules = Model::where('company_id', '=', session('company_id'))->pluck('enabled', 'alias')->toArray(); - - foreach ($modules as $module) { - if (!array_key_exists($module->alias, $installed_modules)) { - continue; + Module::all()->each(function($module) use (&$installed) { + if (!$this->moduleExists($module->alias)) { + return; } - $result = $this->getModule($module->alias); - - if ($result) { - $installed[] = $result; + if (!$result = $this->getModule($module->alias)) { + return; } - } - Cache::put($cache, $installed, Date::now()->addHour(6)); + $installed[] = $result; + }); + + Cache::put($key, $installed, Date::now()->addHour(6)); return $installed; } public function getPreSaleModules($data = []) { - // Get data from cache - $pre_sale = Cache::get('apps.pre_sale'); + $key = 'apps.pre_sale.page.' . $this->getPageNumber($data); + + $pre_sale = Cache::get($key); if (!empty($pre_sale)) { return $pre_sale; @@ -206,15 +205,16 @@ trait Modules $pre_sale = static::getResponseData('GET', 'apps/pre_sale', $data); - Cache::put('apps.pre_sale', $pre_sale, Date::now()->addHour()); + Cache::put($key, $pre_sale, Date::now()->addHour()); return $pre_sale; } public function getPaidModules($data = []) { - // Get data from cache - $paid = Cache::get('apps.paid'); + $key = 'apps.paid.page.' . $this->getPageNumber($data); + + $paid = Cache::get($key); if (!empty($paid)) { return $paid; @@ -222,15 +222,16 @@ trait Modules $paid = static::getResponseData('GET', 'apps/paid', $data); - Cache::put('apps.paid', $paid, Date::now()->addHour()); + Cache::put($key, $paid, Date::now()->addHour()); return $paid; } public function getNewModules($data = []) { - // Get data from cache - $new = Cache::get('apps.new'); + $key = 'apps.new.page.' . $this->getPageNumber($data); + + $new = Cache::get($key); if (!empty($new)) { return $new; @@ -238,15 +239,16 @@ trait Modules $new = static::getResponseData('GET', 'apps/new', $data); - Cache::put('apps.new', $new, Date::now()->addHour()); + Cache::put($key, $new, Date::now()->addHour()); return $new; } public function getFreeModules($data = []) { - // Get data from cache - $free = Cache::get('apps.free'); + $key = 'apps.free.page.' . $this->getPageNumber($data); + + $free = Cache::get($key); if (!empty($free)) { return $free; @@ -254,15 +256,16 @@ trait Modules $free = static::getResponseData('GET', 'apps/free', $data); - Cache::put('apps.free', $free, Date::now()->addHour()); + Cache::put($key, $free, Date::now()->addHour()); return $free; } public function getFeaturedModules($data = []) { - // Get data from cache - $featured = Cache::get('apps.featured'); + $key = 'apps.featured.page.' . $this->getPageNumber($data); + + $featured = Cache::get($key); if (!empty($featured)) { return $featured; @@ -270,7 +273,7 @@ trait Modules $featured = static::getResponseData('GET', 'apps/featured', $data); - Cache::put('apps.featured', $featured, Date::now()->addHour()); + Cache::put($key, $featured, Date::now()->addHour()); return $featured; } @@ -293,11 +296,20 @@ trait Modules public function downloadModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.download', ['module' => '']), + 'data' => null, + ]; + } + if (!$response = static::getResponse('GET', $path)) { return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.download', ['module' => '']), 'data' => null, ]; } @@ -321,7 +333,7 @@ trait Modules return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.download', ['module' => '']), 'data' => null, ]; } @@ -338,6 +350,15 @@ trait Modules public function unzipModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.unzip', ['module' => '']), + 'data' => null, + ]; + } + $temp_path = storage_path('app/temp') . '/' . $path; $file = $temp_path . '/upload.zip'; @@ -349,7 +370,7 @@ trait Modules return [ 'success' => false, 'error' => true, - 'message' => null, + 'message' => trans('modules.errors.unzip', ['module' => '']), 'data' => null, ]; } @@ -373,9 +394,18 @@ trait Modules public function installModule($path) { + if (empty($path)) { + return [ + 'success' => false, + 'error' => true, + 'message' => trans('modules.errors.finish', ['module' => '']), + 'data' => null, + ]; + } + $temp_path = storage_path('app/temp') . '/' . $path; - $modules_path = base_path() . '/modules'; + $modules_path = config('module.paths.modules'); // Create modules directory if (!File::isDirectory($modules_path)) { @@ -404,13 +434,24 @@ trait Modules $company_id = session('company_id'); $locale = app()->getLocale(); - Cache::forget('installed.' . $company_id . '.module'); + $this->clearModulesCache(); - Console::run("module:install {$module->alias} {$company_id} {$locale}"); + $command = "module:install {$module->alias} {$company_id} {$locale}"; + + if (true !== $result = Console::run($command)) { + $message = !empty($result) ? $result : trans('modules.errors.finish', ['module' => $module->alias]); + + return [ + 'success' => false, + 'error' => true, + 'message' => $message, + 'data' => null, + ]; + } return [ 'success' => true, - 'redirect' => url('apps/' . $module->alias), + 'redirect' => route('apps.app.show', $module->alias), 'error' => false, 'message' => null, 'data' => $data, @@ -427,12 +468,9 @@ trait Modules 'version' => $module->get('version'), ]; - Artisan::call('cache:clear'); - $module->delete(); - // Cache Data clear - File::deleteDirectory(storage_path('framework/cache/data')); + $this->clearModulesCache(); return [ 'success' => true, @@ -454,7 +492,7 @@ trait Modules $module->enable(); - Artisan::call('cache:clear'); + $this->clearModulesCache(); return [ 'success' => true, @@ -476,7 +514,7 @@ trait Modules $module->disable(); - Artisan::call('cache:clear'); + $this->clearModulesCache($alias); return [ 'success' => true, @@ -488,19 +526,31 @@ trait Modules public function moduleExists($alias) { - $status = false; - - if (module($alias) instanceof \Akaunting\Module\Module) { - $status = true; + if (!module($alias) instanceof \Akaunting\Module\Module) { + return false; } - return $status; + return true; + } + + public function moduleEnabled($alias) + { + if (!$this->moduleExists($alias)) { + return false; + } + + if (!Module::alias($alias)->enabled()->first()) { + return false; + } + + return true; } public function loadSuggestions() { - // Get data from cache - $data = Cache::get('suggestions'); + $key = 'apps.suggestions'; + + $data = Cache::get($key); if (!empty($data)) { return $data; @@ -516,15 +566,16 @@ trait Modules $data[$suggestion->path] = $suggestion; } - Cache::put('suggestions', $data, Date::now()->addHour(6)); + Cache::put($key, $data, Date::now()->addHour(6)); return $data; } public function loadNotifications() { - // Get data from cache - $data = Cache::get('notifications'); + $key = 'apps.notifications'; + + $data = Cache::get($key); if (!empty($data)) { return $data; @@ -540,15 +591,16 @@ trait Modules $data[$notification->path][] = $notification; } - Cache::put('notifications', $data, Date::now()->addHour(6)); + Cache::put($key, $data, Date::now()->addHour(6)); return $data; } public function getSuggestions($path) { - // Get data from cache - $data = Cache::get('suggestions'); + $key = 'apps.suggestions'; + + $data = Cache::get($key); if (empty($data)) { $data = $this->loadSuggestions(); @@ -563,8 +615,9 @@ trait Modules public function getNotifications($path) { - // Get data from cache - $data = Cache::get('notifications'); + $key = 'apps.notifications'; + + $data = Cache::get($key); if (empty($data)) { $data = $this->loadNotifications(); @@ -576,4 +629,24 @@ trait Modules return false; } + + public function getPageNumber($data = []) + { + if (empty($data['query']) || empty($data['query']['page'])) { + return 1; + } + + return $data['query']['page']; + } + + public function clearModulesCache() + { + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } + + Cache::forget('apps.notifications'); + Cache::forget('apps.suggestions'); + Cache::forget('apps.installed.' . session('company_id')); + } } diff --git a/app/Traits/Omnipay.php b/app/Traits/Omnipay.php index c4feb1b9d..4c63a2ff1 100644 --- a/app/Traits/Omnipay.php +++ b/app/Traits/Omnipay.php @@ -62,7 +62,7 @@ trait Omnipay public function purchase($invoice, $request, $extra_options = []) { $default_options = [ - 'amount' => $invoice->amount, + 'amount' => $invoice->amount - $invoice->paid, 'currency' => $invoice->currency_code, 'transactionId' => $invoice->id, 'returnUrl' => $this->getReturnUrl($invoice), diff --git a/app/Traits/SiteApi.php b/app/Traits/SiteApi.php index 70e9fb766..5d73e0f04 100644 --- a/app/Traits/SiteApi.php +++ b/app/Traits/SiteApi.php @@ -2,6 +2,7 @@ namespace App\Traits; +use App\Utilities\Info; use Exception; use GuzzleHttp\Client; use GuzzleHttp\Exception\ConnectException; @@ -21,6 +22,7 @@ trait SiteApi 'Referer' => app()->runningInConsole() ? config('app.url') : url('/'), 'Akaunting' => version('short'), 'Language' => language()->getShortCode(), + 'Information' => json_encode(Info::all()), ]; $data = array_merge([ diff --git a/app/Traits/Tenants.php b/app/Traits/Tenants.php new file mode 100644 index 000000000..a2dcf0960 --- /dev/null +++ b/app/Traits/Tenants.php @@ -0,0 +1,16 @@ +tenantable) && ($this->tenantable === true)); + } + + public function isNotTenantable() + { + return !$this->isTenantable(); + } +} diff --git a/app/Utilities/Console.php b/app/Utilities/Console.php index 808739682..642489e48 100644 --- a/app/Utilities/Console.php +++ b/app/Utilities/Console.php @@ -2,6 +2,7 @@ namespace App\Utilities; +use Illuminate\Support\ProcessUtils; use Symfony\Component\Process\PhpExecutableFinder; use Symfony\Component\Process\Process; @@ -11,6 +12,8 @@ class Console { $command = static::formatCommandString($string); + logger('Console command:: ' . $command); + $process = Process::fromShellCommandline($command, base_path()); $process->setTimeout($timeout); @@ -22,19 +25,21 @@ class Console $output = $all_output ? $process->getOutput() : $process->getErrorOutput(); - logger($output); + logger('Console output:: ' . $output); return $output; } public static function getPhpBinary() { - return (new PhpExecutableFinder)->find(false) ?? 'php'; + $bin = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)); + + return !empty($bin) ? $bin : 'php'; } public static function getArtisanBinary() { - return defined('ARTISAN_BINARY') ? ARTISAN_BINARY : 'artisan'; + return defined('ARTISAN_BINARY') ? ProcessUtils::escapeArgument(ARTISAN_BINARY) : 'artisan'; } public static function formatCommandString($string) diff --git a/app/Utilities/Info.php b/app/Utilities/Info.php index 157605abe..7dfbfcd12 100644 --- a/app/Utilities/Info.php +++ b/app/Utilities/Info.php @@ -14,6 +14,7 @@ class Info 'api_key' => setting('apps.api_key'), 'companies' => Company::count(), 'users' => User::count(), + 'php_extensions' => static::phpExtensions(), ]); } @@ -31,10 +32,21 @@ class Info return phpversion(); } + public static function phpExtensions() + { + return get_loaded_extensions(); + } + public static function mysqlVersion() { - if (env('DB_CONNECTION') === 'mysql') { - return DB::selectOne('select version() as mversion')->mversion; + static $version; + + if (empty($version) && (config('database.default') === 'mysql')) { + $version = DB::selectOne('select version() as mversion')->mversion; + } + + if (isset($version)) { + return $version; } return 'N/A'; diff --git a/app/Utilities/Installer.php b/app/Utilities/Installer.php index e671b3b60..cd44b82c6 100644 --- a/app/Utilities/Installer.php +++ b/app/Utilities/Installer.php @@ -183,8 +183,8 @@ class Installer 'database' => $database, 'username' => $username, 'password' => $password, - 'driver' => env('DB_CONNECTION', 'mysql'), - 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'driver' => $connection = config('database.default', 'mysql'), + 'charset' => config("database.connections.$connection.charset", 'utf8mb4'), ]); try { @@ -213,7 +213,7 @@ class Installer 'DB_PREFIX' => $prefix, ]); - $con = env('DB_CONNECTION', 'mysql'); + $con = config('database.default', 'mysql'); // Change current connection $db = Config::get('database.connections.' . $con); diff --git a/app/Utilities/Modules.php b/app/Utilities/Modules.php index 9bfeb5f3a..a3208a11e 100644 --- a/app/Utilities/Modules.php +++ b/app/Utilities/Modules.php @@ -9,10 +9,8 @@ class Modules { public static function getPaymentMethods($type = null) { - $company_id = session('company_id'); - - $cache_admin = 'payment_methods.' . $company_id . '.admin'; - $cache_customer = 'payment_methods.' . $company_id . '.customer'; + $cache_admin = static::getPaymentMethodsCacheKey('admin'); + $cache_customer = static::getPaymentMethodsCacheKey('customer'); $payment_methods = Cache::get($cache_admin); @@ -65,6 +63,17 @@ class Modules return ($payment_methods) ? $payment_methods : []; } + public static function clearPaymentMethodsCache() + { + Cache::forget(static::getPaymentMethodsCacheKey('admin')); + Cache::forget(static::getPaymentMethodsCacheKey('customer')); + } + + public static function getPaymentMethodsCacheKey($type) + { + return 'payment_methods.' . session('company_id') . '.' . $type; + } + protected static function sortPaymentMethods(&$list) { $sort_order = []; diff --git a/app/Utilities/Updater.php b/app/Utilities/Updater.php index f889b640f..b7e20e756 100644 --- a/app/Utilities/Updater.php +++ b/app/Utilities/Updater.php @@ -8,7 +8,6 @@ use App\Events\Install\UpdateUnzipped; use App\Models\Module\Module; use App\Utilities\Console; use App\Traits\SiteApi; -use Artisan; use Cache; use Date; use File; @@ -21,7 +20,11 @@ class Updater public static function clear() { - Artisan::call('cache:clear'); + Cache::forget('updates'); + Cache::forget('versions'); + Cache::forget('apps.notifications'); + Cache::forget('apps.suggestions'); + Cache::forget('apps.installed.' . session('company_id')); return true; } @@ -161,7 +164,17 @@ class Updater $versions = Versions::all($modules); foreach ($versions as $alias => $latest_version) { - $installed_version = ($alias == 'core') ? version('short') : module($alias)->get('version'); + if ($alias == 'core') { + $installed_version = version('short'); + } else { + $module = module($alias); + + if (!$module instanceof \Akaunting\Module\Module) { + continue; + } + + $installed_version = $module->get('version'); + } if (version_compare($installed_version, $latest_version, '>=')) { continue; diff --git a/app/Utilities/Versions.php b/app/Utilities/Versions.php index 6406b7457..df7e42109 100644 --- a/app/Utilities/Versions.php +++ b/app/Utilities/Versions.php @@ -2,7 +2,6 @@ namespace App\Utilities; -use Akaunting\Module\Module; use App\Traits\SiteApi; use Cache; use Date; @@ -89,7 +88,7 @@ class Versions $module = module($module); } - if (!$module instanceof Module) { + if (!$module instanceof \Akaunting\Module\Module) { continue; } diff --git a/app/Widgets/ExpensesByCategory.php b/app/Widgets/ExpensesByCategory.php index fcf068b05..b44ef7e15 100644 --- a/app/Widgets/ExpensesByCategory.php +++ b/app/Widgets/ExpensesByCategory.php @@ -15,7 +15,7 @@ class ExpensesByCategory extends Widget public function show() { - Category::with('expense_transactions')->type('expense')->each(function ($category) { + Category::with('expense_transactions')->expense()->each(function ($category) { $amount = 0; $this->applyFilters($category->expense_transactions())->each(function ($transaction) use (&$amount) { diff --git a/app/Widgets/IncomeByCategory.php b/app/Widgets/IncomeByCategory.php index ee532420a..8d34286e0 100644 --- a/app/Widgets/IncomeByCategory.php +++ b/app/Widgets/IncomeByCategory.php @@ -15,7 +15,7 @@ class IncomeByCategory extends Widget public function show() { - Category::with('income_transactions')->type('income')->each(function ($category) { + Category::with('income_transactions')->income()->each(function ($category) { $amount = 0; $this->applyFilters($category->income_transactions())->each(function ($transaction) use (&$amount) { diff --git a/app/Widgets/LatestExpenses.php b/app/Widgets/LatestExpenses.php index ffdfb521e..9f5810136 100644 --- a/app/Widgets/LatestExpenses.php +++ b/app/Widgets/LatestExpenses.php @@ -11,7 +11,7 @@ class LatestExpenses extends Widget public function show() { - $transactions = $this->applyFilters(Transaction::with('category')->type('expense')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); + $transactions = $this->applyFilters(Transaction::with('category')->expense()->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return $this->view('widgets.latest_expenses', [ 'transactions' => $transactions, diff --git a/app/Widgets/LatestIncome.php b/app/Widgets/LatestIncome.php index 89334b9ee..d883fcdf5 100644 --- a/app/Widgets/LatestIncome.php +++ b/app/Widgets/LatestIncome.php @@ -11,7 +11,7 @@ class LatestIncome extends Widget public function show() { - $transactions = $this->applyFilters(Transaction::with('category')->type('income')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); + $transactions = $this->applyFilters(Transaction::with('category')->income()->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return $this->view('widgets.latest_income', [ 'transactions' => $transactions, diff --git a/app/Widgets/TotalExpenses.php b/app/Widgets/TotalExpenses.php index 82014f0d9..90787c309 100644 --- a/app/Widgets/TotalExpenses.php +++ b/app/Widgets/TotalExpenses.php @@ -18,7 +18,7 @@ class TotalExpenses extends Widget { $current = $open = $overdue = 0; - $this->applyFilters(Transaction::type('expense')->isNotTransfer())->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::expense()->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); diff --git a/app/Widgets/TotalIncome.php b/app/Widgets/TotalIncome.php index e48bd42f8..9f8edcef1 100644 --- a/app/Widgets/TotalIncome.php +++ b/app/Widgets/TotalIncome.php @@ -18,7 +18,7 @@ class TotalIncome extends Widget { $current = $open = $overdue = 0; - $this->applyFilters(Transaction::type('income')->isNotTransfer())->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::income()->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); diff --git a/composer.json b/composer.json index fb6a4890e..1969265f4 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "barryvdh/laravel-debugbar": "3.2.*", "barryvdh/laravel-dompdf": "0.*", "barryvdh/laravel-ide-helper": "2.6.*", - "bkwld/cloner": "3.6.*", + "bkwld/cloner": "3.7.*", "consoletvs/charts": "6.5.*", "dingo/api": "3.0.*", "doctrine/dbal": "2.9.*", @@ -40,6 +40,7 @@ "laravel/tinker": "^2.0", "laravel/ui": "^2.0", "laravelcollective/html": "6.1.*", + "league/omnipay": "3.0.*", "lorisleiva/laravel-search-string": "0.1.*", "maatwebsite/excel": "3.1.*", "misterphilip/maintenance-mode": "2.0.*", @@ -55,7 +56,7 @@ "beyondcode/laravel-dump-server": "^1.0", "facade/ignition": "^2.0", "fzaninotto/faker": "^1.9.1", - "mockery/mockery": "^1.3", + "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^4.1", "phpunit/phpunit": "^8.5" }, diff --git a/composer.lock b/composer.lock index e840e5cbb..7d9d69db1 100644 --- a/composer.lock +++ b/composer.lock @@ -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": "91309f3a56105719c200deb6d0b2079e", + "content-hash": "11a567b30598b418b543e50ee1cc7e39", "packages": [ { "name": "akaunting/firewall", @@ -323,16 +323,16 @@ }, { "name": "akaunting/setting", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/akaunting/setting.git", - "reference": "231b673a19f96fba050e9c005d3cbc7e428c914b" + "reference": "194f8c60285f66835f70e0a8e87e1a66d989b111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/akaunting/setting/zipball/231b673a19f96fba050e9c005d3cbc7e428c914b", - "reference": "231b673a19f96fba050e9c005d3cbc7e428c914b", + "url": "https://api.github.com/repos/akaunting/setting/zipball/194f8c60285f66835f70e0a8e87e1a66d989b111", + "reference": "194f8c60285f66835f70e0a8e87e1a66d989b111", "shasum": "" }, "require": { @@ -382,7 +382,7 @@ "laravel", "persistent" ], - "time": "2019-12-31T21:50:36+00:00" + "time": "2020-04-29T07:18:49+00:00" }, { "name": "akaunting/version", @@ -781,16 +781,16 @@ }, { "name": "bkwld/cloner", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/BKWLD/cloner.git", - "reference": "d9c92a1e939805eb51119d63ce6da7aa5680449c" + "reference": "bfb2db6e4e42cf2710b5d507074d0e1c1af04da3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BKWLD/cloner/zipball/d9c92a1e939805eb51119d63ce6da7aa5680449c", - "reference": "d9c92a1e939805eb51119d63ce6da7aa5680449c", + "url": "https://api.github.com/repos/BKWLD/cloner/zipball/bfb2db6e4e42cf2710b5d507074d0e1c1af04da3", + "reference": "bfb2db6e4e42cf2710b5d507074d0e1c1af04da3", "shasum": "" }, "require": { @@ -832,7 +832,7 @@ } ], "description": "A trait for Laravel Eloquent models that lets you clone of a model and it's relationships, including files.", - "time": "2020-03-05T00:58:41+00:00" + "time": "2020-05-07T16:08:16+00:00" }, { "name": "brick/math", @@ -880,6 +880,58 @@ ], "time": "2020-04-15T15:59:35+00:00" }, + { + "name": "clue/stream-filter", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/clue/php-stream-filter.git", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\StreamFilter\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "time": "2019-04-09T12:31:48+00:00" + }, { "name": "composer/ca-bundle", "version": "1.2.7", @@ -934,20 +986,30 @@ "ssl", "tls" ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], "time": "2020-04-08T08:27:21+00:00" }, { "name": "composer/composer", - "version": "1.10.5", + "version": "1.10.6", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9" + "reference": "be81b9c4735362c26876bdbfd3b5bc7e7f711c88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/7a4d5b6aa30d2118af27c04f5e897b57156ccfa9", - "reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9", + "url": "https://api.github.com/repos/composer/composer/zipball/be81b9c4735362c26876bdbfd3b5bc7e7f711c88", + "reference": "be81b9c4735362c26876bdbfd3b5bc7e7f711c88", "shasum": "" }, "require": { @@ -966,7 +1028,8 @@ "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" }, "conflict": { - "symfony/console": "2.8.38" + "symfony/console": "2.8.38", + "symfony/phpunit-bridge": "3.4.40" }, "require-dev": { "phpspec/prophecy": "^1.10", @@ -1014,7 +1077,17 @@ "dependency", "package" ], - "time": "2020-04-10T09:44:22+00:00" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-05-06T08:28:10+00:00" }, { "name": "composer/semver", @@ -1779,33 +1852,37 @@ }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "18b995743e7ec8b15fd6efc594f0fa3de4bfe6d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/18b995743e7ec8b15fd6efc594f0fa3de4bfe6d7", + "reference": "18b995743e7ec8b15fd6efc594f0fa3de4bfe6d7", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -1834,15 +1911,35 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" ], - "time": "2019-10-30T19:59:35+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2020-05-11T11:25:59+00:00" }, { "name": "doctrine/lexer", @@ -2140,16 +2237,16 @@ }, { "name": "fruitcake/laravel-cors", - "version": "v1.0.5", + "version": "v1.0.6", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0" + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/0e0500133dbb6325266133dd72f040617c9cdbd0", - "reference": "0e0500133dbb6325266133dd72f040617c9cdbd0", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/1d127dbec313e2e227d65e0c483765d8d7559bf6", + "reference": "1d127dbec313e2e227d65e0c483765d8d7559bf6", "shasum": "" }, "require": { @@ -2204,20 +2301,26 @@ "crossdomain", "laravel" ], - "time": "2020-03-11T21:05:07+00:00" + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2020-04-28T08:47:37+00:00" }, { "name": "genealabs/laravel-model-caching", - "version": "0.8.3", + "version": "0.8.6", "source": { "type": "git", "url": "https://github.com/GeneaLabs/laravel-model-caching.git", - "reference": "a76e9f143905fca08690fdf2421b0132e8881af4" + "reference": "6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeneaLabs/laravel-model-caching/zipball/a76e9f143905fca08690fdf2421b0132e8881af4", - "reference": "a76e9f143905fca08690fdf2421b0132e8881af4", + "url": "https://api.github.com/repos/GeneaLabs/laravel-model-caching/zipball/6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2", + "reference": "6ebe855e5ae9a9a9c3c7b43764d12f2b7cf261d2", "shasum": "" }, "require": { @@ -2233,8 +2336,9 @@ "predis/predis": "^1.1" }, "require-dev": { + "doctrine/dbal": "^2.10", "fzaninotto/faker": "^1.9", - "laravel/nova": "3.*", + "laravel/nova": "^3.0", "orchestra/testbench": "^5.0", "orchestra/testbench-browser-kit": "^5.0", "php-coveralls/php-coveralls": "^2.2", @@ -2268,7 +2372,13 @@ } ], "description": "Automatic caching for Eloquent models.", - "time": "2020-04-15T18:52:17+00:00" + "funding": [ + { + "url": "https://github.com/mikebronner", + "type": "github" + } + ], + "time": "2020-05-12T22:46:24+00:00" }, { "name": "genealabs/laravel-pivot-events", @@ -2989,20 +3099,20 @@ }, { "name": "laravel/framework", - "version": "v7.8.1", + "version": "v7.12.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "cdc6d7e6c744f4d8f7d61102aea9b111550cd297" + "reference": "c2fff1e9879494a6f853593b3c517dc9922bbb51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/cdc6d7e6c744f4d8f7d61102aea9b111550cd297", - "reference": "cdc6d7e6c744f4d8f7d61102aea9b111550cd297", + "url": "https://api.github.com/repos/laravel/framework/zipball/c2fff1e9879494a6f853593b3c517dc9922bbb51", + "reference": "c2fff1e9879494a6f853593b3c517dc9922bbb51", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", + "doctrine/inflector": "^1.4|^2.0", "dragonmantank/cron-expression": "^2.0", "egulias/email-validator": "^2.1.10", "ext-json": "*", @@ -3024,6 +3134,7 @@ "symfony/http-foundation": "^5.0", "symfony/http-kernel": "^5.0", "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", "symfony/process": "^5.0", "symfony/routing": "^5.0", "symfony/var-dumper": "^5.0", @@ -3137,7 +3248,7 @@ "framework", "laravel" ], - "time": "2020-04-24T17:21:56+00:00" + "time": "2020-05-19T17:09:00+00:00" }, { "name": "laravel/tinker", @@ -3205,16 +3316,16 @@ }, { "name": "laravel/ui", - "version": "v2.0.1", + "version": "v2.0.3", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83" + "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", - "reference": "47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83", + "url": "https://api.github.com/repos/laravel/ui/zipball/15368c5328efb7ce94f35ca750acde9b496ab1b1", + "reference": "15368c5328efb7ce94f35ca750acde9b496ab1b1", "shasum": "" }, "require": { @@ -3256,20 +3367,20 @@ "laravel", "ui" ], - "time": "2020-03-03T20:16:46+00:00" + "time": "2020-04-29T15:06:45+00:00" }, { "name": "laravelcollective/html", - "version": "v6.1.0", + "version": "v6.1.2", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "64f2268bf41bf02b3a9dd3c30f102e934d721664" + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/64f2268bf41bf02b3a9dd3c30f102e934d721664", - "reference": "64f2268bf41bf02b3a9dd3c30f102e934d721664", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", + "reference": "5ef9a3c9ae2423fe5618996f3cde375d461a3fc6", "shasum": "" }, "require": { @@ -3324,20 +3435,20 @@ ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2020-03-02T16:41:28+00:00" + "time": "2020-05-19T18:02:16+00:00" }, { "name": "league/commonmark", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "9e780d972185e4f737a03bade0fd34a9e67bbf31" + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/9e780d972185e4f737a03bade0fd34a9e67bbf31", - "reference": "9e780d972185e4f737a03bade0fd34a9e67bbf31", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/412639f7cfbc0b31ad2455b2fe965095f66ae505", + "reference": "412639f7cfbc0b31ad2455b2fe965095f66ae505", "shasum": "" }, "require": { @@ -3398,20 +3509,46 @@ "md", "parser" ], - "time": "2020-04-24T13:39:56+00:00" + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2020-05-04T22:15:21+00:00" }, { "name": "league/flysystem", - "version": "1.0.67", + "version": "1.0.69", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e" + "reference": "7106f78428a344bc4f643c233a94e48795f10967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5b1f36c75c4bdde981294c2a0ebdb437ee6f275e", - "reference": "5b1f36c75c4bdde981294c2a0ebdb437ee6f275e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967", + "reference": "7106f78428a344bc4f643c233a94e48795f10967", "shasum": "" }, "require": { @@ -3482,7 +3619,13 @@ "sftp", "storage" ], - "time": "2020-04-16T13:21:26+00:00" + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2020-05-18T15:13:39+00:00" }, { "name": "league/fractal", @@ -3548,6 +3691,58 @@ ], "time": "2020-01-24T23:17:29+00:00" }, + { + "name": "league/omnipay", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay.git", + "reference": "9e10d91cbf84744207e13d4483e79de39b133368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay/zipball/9e10d91cbf84744207e13d4483e79de39b133368", + "reference": "9e10d91cbf84744207e13d4483e79de39b133368", + "shasum": "" + }, + "require": { + "omnipay/common": "^3", + "php": "^5.6|^7", + "php-http/guzzle6-adapter": "^1.1|^2" + }, + "require-dev": { + "omnipay/tests": "^3" + }, + "type": "metapackage", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Omnipay payment processing library", + "homepage": "https://omnipay.thephpleague.com/", + "keywords": [ + "checkout", + "creditcard", + "omnipay", + "payment" + ], + "time": "2019-03-20T14:28:28+00:00" + }, { "name": "lorisleiva/laravel-search-string", "version": "v0.1.6", @@ -3827,16 +4022,16 @@ }, { "name": "maximebf/debugbar", - "version": "v1.16.2", + "version": "v1.16.3", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "40f375504a4dd8e59f779c3f3cac524777ddcde5" + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/40f375504a4dd8e59f779c3f3cac524777ddcde5", - "reference": "40f375504a4dd8e59f779c3f3cac524777ddcde5", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/1a1605b8e9bacb34cc0c6278206d699772e1d372", + "reference": "1a1605b8e9bacb34cc0c6278206d699772e1d372", "shasum": "" }, "require": { @@ -3884,7 +4079,7 @@ "debug", "debugbar" ], - "time": "2020-04-16T09:05:52+00:00" + "time": "2020-05-06T07:06:27+00:00" }, { "name": "misterphilip/maintenance-mode", @@ -3994,21 +4189,103 @@ "time": "2019-09-18T18:44:20+00:00" }, { - "name": "monolog/monolog", - "version": "2.0.2", + "name": "moneyphp/money", + "version": "v3.3.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "url": "https://github.com/moneyphp/money.git", + "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/moneyphp/money/zipball/122664c2621a95180a13c1ac81fea1d2ef20781e", + "reference": "122664c2621a95180a13c1ac81fea1d2ef20781e", "shasum": "" }, "require": { - "php": "^7.2", + "ext-json": "*", + "php": ">=5.6" + }, + "require-dev": { + "cache/taggable-cache": "^0.4.0", + "doctrine/instantiator": "^1.0.5", + "ext-bcmath": "*", + "ext-gmp": "*", + "ext-intl": "*", + "florianv/exchanger": "^1.0", + "florianv/swap": "^3.0", + "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3", + "moneyphp/iso-currencies": "^3.2.1", + "php-http/message": "^1.4", + "php-http/mock-client": "^1.0.0", + "phpspec/phpspec": "^3.4.3", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5", + "psr/cache": "^1.0", + "symfony/phpunit-bridge": "^4" + }, + "suggest": { + "ext-bcmath": "Calculate without integer limits", + "ext-gmp": "Calculate without integer limits", + "ext-intl": "Format Money objects with intl", + "florianv/exchanger": "Exchange rates library for PHP", + "florianv/swap": "Exchange rates library for PHP", + "psr/cache-implementation": "Used for Currency caching" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Verraes", + "email": "mathias@verraes.net", + "homepage": "http://verraes.net" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Frederik Bosch", + "email": "f.bosch@genkgo.nl" + } + ], + "description": "PHP implementation of Fowler's Money pattern", + "homepage": "http://moneyphp.org", + "keywords": [ + "Value Object", + "money", + "vo" + ], + "time": "2020-03-18T17:49:59+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", + "shasum": "" + }, + "require": { + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -4019,11 +4296,11 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^6.0", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", @@ -4072,7 +4349,17 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-05-22T08:12:19+00:00" }, { "name": "monooso/unobserve", @@ -4131,21 +4418,22 @@ }, { "name": "nesbot/carbon", - "version": "2.32.2", + "version": "2.34.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc" + "reference": "3e87404329b8072295ea11d548b47a1eefe5a162" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", - "reference": "f10e22cf546704fab1db4ad4b9dedbc5c797a0dc", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/3e87404329b8072295ea11d548b47a1eefe5a162", + "reference": "3e87404329b8072295ea11d548b47a1eefe5a162", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { @@ -4163,7 +4451,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" }, "laravel": { "providers": [ @@ -4198,7 +4487,17 @@ "datetime", "time" ], - "time": "2020-03-31T13:43:19+00:00" + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2020-05-19T22:14:16+00:00" }, { "name": "nikic/php-parser", @@ -4253,17 +4552,99 @@ "time": "2020-04-10T16:34:50+00:00" }, { - "name": "opis/closure", - "version": "3.5.1", + "name": "omnipay/common", + "version": "v3.0.3", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969" + "url": "https://github.com/thephpleague/omnipay-common.git", + "reference": "24ea70aa6e0f76d8b85d7a35d8a6560c746f566f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/93ebc5712cdad8d5f489b500c59d122df2e53969", - "reference": "93ebc5712cdad8d5f489b500c59d122df2e53969", + "url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/24ea70aa6e0f76d8b85d7a35d8a6560c746f566f", + "reference": "24ea70aa6e0f76d8b85d7a35d8a6560c746f566f", + "shasum": "" + }, + "require": { + "moneyphp/money": "^3.1", + "php": "^5.6|^7", + "php-http/client-implementation": "^1", + "php-http/discovery": "^1.2.1", + "php-http/message": "^1.5", + "symfony/http-foundation": "^2.1|^3|^4|^5" + }, + "require-dev": { + "omnipay/tests": "^3", + "php-http/mock-client": "^1", + "phpro/grumphp": "^0.14", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "league/omnipay": "The default Omnipay package provides a default HTTP Adapter." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\Common\\": "src/Common" + }, + "classmap": [ + "src/Omnipay.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + }, + { + "name": "Jason Judge", + "email": "jason.judge@consil.co.uk" + }, + { + "name": "Del" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-common/contributors" + } + ], + "description": "Common components for Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-common", + "keywords": [ + "gateway", + "merchant", + "omnipay", + "pay", + "payment", + "purchase" + ], + "time": "2020-02-12T12:28:23+00:00" + }, + { + "name": "opis/closure", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "2e3299cea6f485ca64d19c540f46d7896c512ace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/2e3299cea6f485ca64d19c540f46d7896c512ace", + "reference": "2e3299cea6f485ca64d19c540f46d7896c512ace", "shasum": "" }, "require": { @@ -4311,7 +4692,7 @@ "serialization", "serialize" ], - "time": "2019-11-29T22:36:02+00:00" + "time": "2020-05-21T20:09:36+00:00" }, { "name": "phenx/php-font-lib", @@ -4391,25 +4772,379 @@ "time": "2019-09-11T20:02:13+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "name": "php-http/discovery", + "version": "1.7.4", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "url": "https://github.com/php-http/discovery.git", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "reference": "82dbef649ccffd8e4f22e1953c3a5265992b83c0", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^4.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", + "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr7" + ], + "time": "2020-01-03T11:25:47+00:00" + }, + { + "name": "php-http/guzzle6-adapter", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "reference": "6074a4b1f4d5c21061b70bab3b8ad484282fe31f", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/client-integration-tests": "^2.0", + "phpunit/phpunit": "^7.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2018-12-16T14:44:03+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "reference": "72d2b129a48f0490d55b7f89be0d6aa0597ffb06", + "shasum": "" + }, + "require": { + "php": "^7.0", + "php-http/promise": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^4.3.4|^5.0|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2019-12-27T10:07:11+00:00" + }, + { + "name": "php-http/message", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.4", + "php": "^7.1", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^1.0", + "coduo/phpspec-data-provider-extension": "^1.0", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4", + "slim/slim": "^3.0", + "zendframework/zend-diactoros": "^1.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation", + "zendframework/zend-diactoros": "Used with Diactoros Factories" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + }, + "files": [ + "src/filters.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "time": "2019-08-05T06:55:08+00:00" + }, + { + "name": "php-http/message-factory", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "time": "2015-12-19T14:08:53+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "~6" - }, "type": "library", "extra": { "branch-alias": { @@ -4440,7 +5175,7 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-04-27T09:25:28+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -4543,16 +5278,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.11.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "c2a205e82f9cf1cc9fab86b79e808d86dd680470" + "reference": "f79611d6dc1f6b7e8e30b738fc371b392001dbfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c2a205e82f9cf1cc9fab86b79e808d86dd680470", - "reference": "c2a205e82f9cf1cc9fab86b79e808d86dd680470", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/f79611d6dc1f6b7e8e30b738fc371b392001dbfd", + "reference": "f79611d6dc1f6b7e8e30b738fc371b392001dbfd", "shasum": "" }, "require": { @@ -4632,7 +5367,7 @@ "xls", "xlsx" ], - "time": "2020-03-02T13:09:03+00:00" + "time": "2020-04-27T08:12:48+00:00" }, { "name": "phpoption/phpoption", @@ -4691,16 +5426,16 @@ }, { "name": "plank/laravel-mediable", - "version": "4.2.1", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/plank/laravel-mediable.git", - "reference": "9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5" + "reference": "06351900d67ec1021b6e1035e9b350bfabda22ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/plank/laravel-mediable/zipball/9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5", - "reference": "9c0d0aa594d5f4df0f4d3e5a1b9e4960aca437b5", + "url": "https://api.github.com/repos/plank/laravel-mediable/zipball/06351900d67ec1021b6e1035e9b350bfabda22ac", + "reference": "06351900d67ec1021b6e1035e9b350bfabda22ac", "shasum": "" }, "require": { @@ -4756,7 +5491,7 @@ "media", "uploader" ], - "time": "2020-03-11T01:12:07+00:00" + "time": "2020-05-14T02:55:04+00:00" }, { "name": "predis/predis", @@ -4903,6 +5638,55 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/496a823ef742b632934724bf769560c2a5c7c44e", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "time": "2018-10-30T23:29:13+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -5050,16 +5834,16 @@ }, { "name": "psy/psysh", - "version": "v0.10.3", + "version": "v0.10.4", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02" + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2bde2fa03e05dff0aee834598b951d6fc7c6fe02", - "reference": "2bde2fa03e05dff0aee834598b951d6fc7c6fe02", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/a8aec1b2981ab66882a01cce36a49b6317dc3560", + "reference": "a8aec1b2981ab66882a01cce36a49b6317dc3560", "shasum": "" }, "require": { @@ -5118,7 +5902,7 @@ "interactive", "shell" ], - "time": "2020-04-07T06:44:48+00:00" + "time": "2020-05-03T19:32:03+00:00" }, { "name": "ralouphie/getallheaders", @@ -5407,16 +6191,16 @@ }, { "name": "santigarcor/laratrust", - "version": "5.2.8", + "version": "5.2.9", "source": { "type": "git", "url": "https://github.com/santigarcor/laratrust.git", - "reference": "c709f44509cf1371b777a01b6eca210bc34a06f8" + "reference": "454a338500ea5ab2807da5ee0a799c9c3d01cc05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/santigarcor/laratrust/zipball/c709f44509cf1371b777a01b6eca210bc34a06f8", - "reference": "c709f44509cf1371b777a01b6eca210bc34a06f8", + "url": "https://api.github.com/repos/santigarcor/laratrust/zipball/454a338500ea5ab2807da5ee0a799c9c3d01cc05", + "reference": "454a338500ea5ab2807da5ee0a799c9c3d01cc05", "shasum": "" }, "require": { @@ -5426,7 +6210,7 @@ }, "require-dev": { "mockery/mockery": ">=0.9.9", - "orchestra/testbench": "~3.6.0|~3.7.0|~3.8.0|~3.9.0", + "orchestra/testbench": "~3.6.0|~3.7.0|~3.8.0|~3.9.0|4.*|5.*", "phpunit/phpunit": ">=4.1" }, "type": "library", @@ -5468,24 +6252,24 @@ "rbac", "roles" ], - "time": "2020-03-09T08:19:36+00:00" + "time": "2020-04-29T23:28:02+00:00" }, { "name": "seld/jsonlint", - "version": "1.7.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19" + "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", + "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" @@ -5517,7 +6301,17 @@ "parser", "validator" ], - "time": "2019-10-24T14:27:39+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2020-04-30T19:05:18+00:00" }, { "name": "seld/phar-utils", @@ -5768,7 +6562,7 @@ }, { "name": "symfony/console", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", @@ -5840,11 +6634,25 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-30T11:42:42+00:00" }, { "name": "symfony/css-selector", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -5893,11 +6701,25 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/debug", - "version": "v4.4.7", + "version": "v4.4.8", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", @@ -5949,11 +6771,25 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-27T16:54:36+00:00" }, { "name": "symfony/error-handler", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", @@ -6004,11 +6840,25 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-30T14:14:32+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -6074,6 +6924,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-27T16:56:45+00:00" }, { @@ -6136,16 +7000,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420" + "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420", - "reference": "ca3b87dd09fff9b771731637f5379965fbfab420", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7cd0dafc4353a0f62e307df90b48466379c8cc91", + "reference": "7cd0dafc4353a0f62e307df90b48466379c8cc91", "shasum": "" }, "require": { @@ -6182,11 +7046,25 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T14:40:17+00:00" }, { "name": "symfony/finder", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -6231,20 +7109,34 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6" + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e47fdf8b24edc12022ba52923150ec6484d7f57d", + "reference": "e47fdf8b24edc12022ba52923150ec6484d7f57d", "shasum": "" }, "require": { @@ -6286,20 +7178,34 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-03-30T14:14:32+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-18T20:50:06+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0" + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ad574c55d451127cab1c45b4ac51bf283e340cf0", - "reference": "ad574c55d451127cab1c45b4ac51bf283e340cf0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3565e51eecd06106304baba5ccb7ba89db2d7d2b", + "reference": "3565e51eecd06106304baba5ccb7ba89db2d7d2b", "shasum": "" }, "require": { @@ -6315,6 +7221,7 @@ "symfony/browser-kit": "<4.4", "symfony/cache": "<5.0", "symfony/config": "<5.0", + "symfony/console": "<4.4", "symfony/dependency-injection": "<4.4", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", @@ -6382,20 +7289,34 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-03-30T15:04:59+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-28T18:53:25+00:00" }, { "name": "symfony/mime", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", + "url": "https://api.github.com/repos/symfony/mime/zipball/5d6c81c39225a750f3f43bee15f03093fb9aaa0b", + "reference": "5d6c81c39225a750f3f43bee15f03093fb9aaa0b", "shasum": "" }, "require": { @@ -6444,20 +7365,34 @@ "mime", "mime-type" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-17T03:29:44+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", "shasum": "" }, "require": { @@ -6469,7 +7404,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6502,20 +7437,34 @@ "polyfill", "portable" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:14:59+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8" + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", - "reference": "ad6d62792bfbcfc385dd34b424d4fcf9712a32c8", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c4de7601eefbf25f9d47190abe07f79fe0a27424", + "reference": "c4de7601eefbf25f9d47190abe07f79fe0a27424", "shasum": "" }, "require": { @@ -6527,7 +7476,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6561,20 +7510,34 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", "shasum": "" }, "require": { @@ -6588,7 +7551,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6623,20 +7586,34 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", "shasum": "" }, "require": { @@ -6648,7 +7625,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6682,20 +7659,34 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "reference": "f048e612a3905f34931127360bdd2def19a5e582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", "shasum": "" }, "require": { @@ -6704,7 +7695,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6737,20 +7728,34 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7" + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", - "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", "shasum": "" }, "require": { @@ -6759,7 +7764,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -6795,20 +7800,34 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" }, { "name": "symfony/process", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e" + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", - "reference": "c5ca4a0fc16a0c888067d43fbcfe1f8a53d8e70e", + "url": "https://api.github.com/repos/symfony/process/zipball/3179f68dff5bad14d38c4114a1dab98030801fd7", + "reference": "3179f68dff5bad14d38c4114a1dab98030801fd7", "shasum": "" }, "require": { @@ -6844,20 +7863,34 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-15T15:59:10+00:00" }, { "name": "symfony/routing", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b" + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d98a95d0a684caba47a47c1c50c602a669dc973b", - "reference": "d98a95d0a684caba47a47c1c50c602a669dc973b", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b18480a6e101f8d9ab7c483ace7c19441be5111", + "reference": "9b18480a6e101f8d9ab7c483ace7c19441be5111", "shasum": "" }, "require": { @@ -6920,7 +7953,21 @@ "uri", "url" ], - "time": "2020-03-30T11:42:42+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-21T21:02:50+00:00" }, { "name": "symfony/service-contracts", @@ -6982,16 +8029,16 @@ }, { "name": "symfony/translation", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "99b831770e10807dca0979518e2c89edffef5978" + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/99b831770e10807dca0979518e2c89edffef5978", - "reference": "99b831770e10807dca0979518e2c89edffef5978", + "url": "https://api.github.com/repos/symfony/translation/zipball/c3879db7a68fe3e12b41263b05879412c87b27fd", + "reference": "c3879db7a68fe3e12b41263b05879412c87b27fd", "shasum": "" }, "require": { @@ -7055,7 +8102,21 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" }, { "name": "symfony/translation-contracts", @@ -7116,16 +8177,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.0.7", + "version": "v5.0.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f74a126acd701392eef2492a17228d42552c86b5" + "reference": "09de28632f16f81058a85fcf318397218272a07b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f74a126acd701392eef2492a17228d42552c86b5", - "reference": "f74a126acd701392eef2492a17228d42552c86b5", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/09de28632f16f81058a85fcf318397218272a07b", + "reference": "09de28632f16f81058a85fcf318397218272a07b", "shasum": "" }, "require": { @@ -7187,7 +8248,21 @@ "debug", "dump" ], - "time": "2020-03-27T16:56:45+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-04-12T16:45:47+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7240,20 +8315,20 @@ }, { "name": "vlucas/phpdotenv", - "version": "v4.1.4", + "version": "v4.1.6", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "feb6dad5ae24b1380827aee1629b730080fde500" + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/feb6dad5ae24b1380827aee1629b730080fde500", - "reference": "feb6dad5ae24b1380827aee1629b730080fde500", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0b32505d67c1abbfa829283c86bfc0642a661bf6", + "reference": "0b32505d67c1abbfa829283c86bfc0642a661bf6", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", + "php": "^5.5.9 || ^7.0 || ^8.0", "phpoption/phpoption": "^1.7.2", "symfony/polyfill-ctype": "^1.9" }, @@ -7300,7 +8375,17 @@ "env", "environment" ], - "time": "2020-04-12T15:20:09+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-05-23T09:43:32+00:00" }, { "name": "voku/portable-ascii", @@ -7349,6 +8434,24 @@ "clean", "php" ], + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], "time": "2020-03-13T01:23:26+00:00" }, { @@ -7570,20 +8673,26 @@ "flare", "reporting" ], + "funding": [ + { + "url": "https://www.patreon.com/spatie", + "type": "patreon" + } + ], "time": "2020-03-02T15:52:04+00:00" }, { "name": "facade/ignition", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc" + "reference": "749fba7bf560fe2600ea55bf8734a7c9b8c30cfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/67f1677954ad33ca6b77f2c41cf43a58624f27fc", - "reference": "67f1677954ad33ca6b77f2c41cf43a58624f27fc", + "url": "https://api.github.com/repos/facade/ignition/zipball/749fba7bf560fe2600ea55bf8734a7c9b8c30cfd", + "reference": "749fba7bf560fe2600ea55bf8734a7c9b8c30cfd", "shasum": "" }, "require": { @@ -7592,7 +8701,7 @@ "facade/flare-client-php": "^1.0", "facade/ignition-contracts": "^1.0", "filp/whoops": "^2.4", - "illuminate/support": "^7.0", + "illuminate/support": "^7.0|^8.0", "monolog/monolog": "^2.0", "php": "^7.2.5", "scrivo/highlight.php": "^9.15", @@ -7641,7 +8750,7 @@ "laravel", "page" ], - "time": "2020-03-18T19:20:44+00:00" + "time": "2020-05-18T15:20:13+00:00" }, { "name": "facade/ignition-contracts", @@ -7689,16 +8798,16 @@ }, { "name": "filp/whoops", - "version": "2.7.1", + "version": "2.7.2", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130" + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", - "reference": "fff6f1e4f36be0e0d0b84d66b413d9dcb0c49130", + "url": "https://api.github.com/repos/filp/whoops/zipball/17d0d3f266c8f925ebd035cd36f83cf802b47d4a", + "reference": "17d0d3f266c8f925ebd035cd36f83cf802b47d4a", "shasum": "" }, "require": { @@ -7746,7 +8855,7 @@ "throwable", "whoops" ], - "time": "2020-01-15T10:00:00+00:00" + "time": "2020-05-05T12:28:07+00:00" }, { "name": "fzaninotto/faker", @@ -8027,6 +9136,20 @@ "php", "symfony" ], + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], "time": "2020-04-04T19:56:08+00:00" }, { @@ -8448,16 +9571,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.4", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8474e22d7d642f665084ba5ec780626cbd1efd23" + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8474e22d7d642f665084ba5ec780626cbd1efd23", - "reference": "8474e22d7d642f665084ba5ec780626cbd1efd23", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", "shasum": "" }, "require": { @@ -8527,7 +9650,17 @@ "testing", "xunit" ], - "time": "2020-04-23T04:39:42+00:00" + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-22T13:51:52+00:00" }, { "name": "scrivo/highlight.php", @@ -8596,6 +9729,12 @@ "highlight.php", "syntax" ], + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], "time": "2020-03-02T05:59:21+00:00" }, { @@ -9263,5 +10402,6 @@ "php": "^7.2.5", "ext-bcmath": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "1.1.0" } diff --git a/config/app.php b/config/app.php index 58edec322..d8831bcbb 100644 --- a/config/app.php +++ b/config/app.php @@ -14,6 +14,10 @@ return [ 'name' => env('APP_NAME', 'Akaunting'), + 'installed' => env('APP_INSTALLED', false), + + 'schedule_time' => env('APP_SCHEDULE_TIME', '9:00'), + /* |-------------------------------------------------------------------------- | Application Environment diff --git a/config/module.php b/config/module.php index f822699ce..28ca352c9 100644 --- a/config/module.php +++ b/config/module.php @@ -22,9 +22,9 @@ return [ */ 'stubs' => [ 'enabled' => true, - 'path' => base_path() . '/app/Console/Stubs/Modules', + 'path' => base_path('app/Console/Stubs/Modules'), 'files' => [ - 'listeners/install' => 'Listeners/InstallModule.php', + 'listeners/install' => 'Listeners/FinishInstallation.php', 'providers/event' => 'Providers/Event.php', 'routes/admin' => 'Routes/admin.php', 'routes/portal' => 'Routes/portal.php', @@ -67,7 +67,7 @@ return [ | automatically to list of scanned folders. | */ - 'modules' => base_path('modules'), + 'modules' => base_path(env('MODULE_PATHS_MODULES', 'modules')), /* |-------------------------------------------------------------------------- @@ -77,7 +77,7 @@ return [ | Here you may update the modules assets path. | */ - 'assets' => public_path('modules'), + 'assets' => public_path(env('MODULE_PATHS_ASSETS', 'modules')), /* |-------------------------------------------------------------------------- @@ -88,7 +88,7 @@ return [ | the migration files? | */ - 'migration' => base_path('database/migrations'), + 'migration' => base_path(env('MODULE_PATHS_MIGRATION', 'database/migrations')), /* |-------------------------------------------------------------------------- diff --git a/config/version.php b/config/version.php index b4921ec6d..0d32c7b9a 100644 --- a/config/version.php +++ b/config/version.php @@ -10,15 +10,15 @@ return [ 'minor' => '0', - 'patch' => '10', + 'patch' => '13', 'build' => '', 'status' => 'Stable', - 'date' => '24-April-2020', + 'date' => '23-May-2020', - 'time' => '22:00', + 'time' => '21:00', 'zone' => 'GMT +3', diff --git a/database/factories/Bill.php b/database/factories/Bill.php index c63624cfd..3392bdee7 100644 --- a/database/factories/Bill.php +++ b/database/factories/Bill.php @@ -41,7 +41,7 @@ $factory->define(Bill::class, function (Faker $faker) use ($company) { 'currency_code' => setting('default.currency'), 'currency_rate' => '1', 'notes' => $faker->text(5), - 'category_id' => $company->categories()->type('expense')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->expense()->get()->random(1)->pluck('id')->first(), 'contact_id' => $contact->id, 'contact_name' => $contact->name, 'contact_email' => $contact->email, diff --git a/database/factories/Invoice.php b/database/factories/Invoice.php index 59c06e806..78e09ad33 100644 --- a/database/factories/Invoice.php +++ b/database/factories/Invoice.php @@ -42,7 +42,7 @@ $factory->define(Invoice::class, function (Faker $faker) use ($company) { 'currency_code' => setting('default.currency'), 'currency_rate' => '1', 'notes' => $faker->text(5), - 'category_id' => $company->categories()->type('income')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->income()->get()->random(1)->pluck('id')->first(), 'contact_id' => $contact->id, 'contact_name' => $contact->name, 'contact_email' => $contact->email, diff --git a/database/factories/Item.php b/database/factories/Item.php index d61ccaf77..61664c320 100644 --- a/database/factories/Item.php +++ b/database/factories/Item.php @@ -16,7 +16,7 @@ $factory->define(Item::class, function (Faker $faker) use ($company) { 'description' => $faker->text(100), 'purchase_price' => $faker->randomFloat(2, 10, 20), 'sale_price' => $faker->randomFloat(2, 10, 20), - 'category_id' => $company->categories()->type('item')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->item()->get()->random(1)->pluck('id')->first(), 'tax_id' => null, 'enabled' => $faker->boolean ? 1 : 0, ]; diff --git a/database/factories/Transaction.php b/database/factories/Transaction.php index 3a5a85a58..2bdc0c6ff 100644 --- a/database/factories/Transaction.php +++ b/database/factories/Transaction.php @@ -31,13 +31,13 @@ $factory->define(Transaction::class, function (Faker $faker) use ($company) { $factory->state(Transaction::class, 'income', function (Faker $faker) use ($company) { return [ 'type' => 'income', - 'category_id' => $company->categories()->type('income')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->income()->get()->random(1)->pluck('id')->first(), ]; }); $factory->state(Transaction::class, 'expense', function (Faker $faker) use ($company) { return [ 'type' => 'expense', - 'category_id' => $company->categories()->type('expense')->get()->random(1)->pluck('id')->first(), + 'category_id' => $company->categories()->expense()->get()->random(1)->pluck('id')->first(), ]; }); diff --git a/database/seeds/Dashboards.php b/database/seeds/Dashboards.php index 9f14dbc62..4a238f607 100644 --- a/database/seeds/Dashboards.php +++ b/database/seeds/Dashboards.php @@ -3,14 +3,14 @@ namespace Database\Seeds; use App\Abstracts\Model; -use App\Models\Auth\User; -use App\Models\Common\Widget; -use App\Models\Common\Dashboard; -use App\Utilities\Widgets; +use App\Jobs\Common\CreateDashboard; +use App\Traits\Jobs; use Illuminate\Database\Seeder; class Dashboards extends Seeder { + use Jobs; + /** * Run the database seeds. * @@ -30,29 +30,11 @@ class Dashboards extends Seeder $user_id = $this->command->argument('user'); $company_id = $this->command->argument('company'); - $dashboard = Dashboard::create([ + $this->dispatch(new CreateDashboard([ 'company_id' => $company_id, 'name' => trans_choice('general.dashboards', 1), - 'enabled' => 1, - ]); - - $widgets = Widgets::getClasses(false); - - $sort = 1; - - foreach ($widgets as $class => $name) { - Widget::create([ - 'company_id' => $company_id, - 'dashboard_id' => $dashboard->id, - 'class' => $class, - 'name' => $name, - 'sort' => $sort, - 'settings' => (new $class())->getDefaultSettings(), - ]); - - $sort++; - } - - User::find($user_id)->dashboards()->attach($dashboard->id); + 'with_widgets' => true, + 'users' => $user_id, + ])); } } diff --git a/modules/OfflinePayments/Http/Controllers/Settings.php b/modules/OfflinePayments/Http/Controllers/Settings.php index 806c0f333..9113d78bd 100644 --- a/modules/OfflinePayments/Http/Controllers/Settings.php +++ b/modules/OfflinePayments/Http/Controllers/Settings.php @@ -3,7 +3,7 @@ namespace Modules\OfflinePayments\Http\Controllers; use App\Abstracts\Http\Controller; -use Artisan; +use App\Utilities\Modules; use Illuminate\Http\Response; use Modules\OfflinePayments\Http\Requests\Setting as Request; use Modules\OfflinePayments\Http\Requests\SettingGet as GRequest; @@ -68,7 +68,7 @@ class Settings extends Controller setting()->save(); - Artisan::call('cache:clear'); + Modules::clearPaymentMethodsCache(); $response = [ 'status' => null, @@ -152,7 +152,7 @@ class Settings extends Controller setting()->save(); - Artisan::call('cache:clear'); + Modules::clearPaymentMethodsCache(); $message = trans('messages.success.deleted', ['type' => $remove['name']]); diff --git a/modules/OfflinePayments/Listeners/InstallModule.php b/modules/OfflinePayments/Listeners/FinishInstallation.php similarity index 96% rename from modules/OfflinePayments/Listeners/InstallModule.php rename to modules/OfflinePayments/Listeners/FinishInstallation.php index 2308f0b4d..89a7804ef 100644 --- a/modules/OfflinePayments/Listeners/InstallModule.php +++ b/modules/OfflinePayments/Listeners/FinishInstallation.php @@ -5,7 +5,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\Installed as Event; use App\Traits\Permissions; -class InstallModule +class FinishInstallation { use Permissions; diff --git a/modules/OfflinePayments/Listeners/ShowPaymentMethod.php b/modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php similarity index 94% rename from modules/OfflinePayments/Listeners/ShowPaymentMethod.php rename to modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php index ea7e776a7..66fa8f26d 100644 --- a/modules/OfflinePayments/Listeners/ShowPaymentMethod.php +++ b/modules/OfflinePayments/Listeners/ShowAsPaymentMethod.php @@ -4,7 +4,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\PaymentMethodShowing as Event; -class ShowPaymentMethod +class ShowAsPaymentMethod { /** * Handle the event. diff --git a/modules/OfflinePayments/Listeners/ShowSetting.php b/modules/OfflinePayments/Listeners/ShowInSettingsPage.php similarity index 95% rename from modules/OfflinePayments/Listeners/ShowSetting.php rename to modules/OfflinePayments/Listeners/ShowInSettingsPage.php index 7e8c06138..a69afc123 100644 --- a/modules/OfflinePayments/Listeners/ShowSetting.php +++ b/modules/OfflinePayments/Listeners/ShowInSettingsPage.php @@ -4,7 +4,7 @@ namespace Modules\OfflinePayments\Listeners; use App\Events\Module\SettingShowing as Event; -class ShowSetting +class ShowInSettingsPage { /** * Handle the event. diff --git a/modules/OfflinePayments/Providers/Event.php b/modules/OfflinePayments/Providers/Event.php index 81c49182b..a83f4d980 100644 --- a/modules/OfflinePayments/Providers/Event.php +++ b/modules/OfflinePayments/Providers/Event.php @@ -3,9 +3,9 @@ namespace Modules\OfflinePayments\Providers; use Illuminate\Foundation\Support\Providers\EventServiceProvider as Provider; -use Modules\OfflinePayments\Listeners\InstallModule; -use Modules\OfflinePayments\Listeners\ShowPaymentMethod; -use Modules\OfflinePayments\Listeners\ShowSetting; +use Modules\OfflinePayments\Listeners\FinishInstallation; +use Modules\OfflinePayments\Listeners\ShowAsPaymentMethod; +use Modules\OfflinePayments\Listeners\ShowInSettingsPage; class Event extends Provider { @@ -16,13 +16,13 @@ class Event extends Provider */ protected $listen = [ \App\Events\Module\Installed::class => [ - InstallModule::class, + FinishInstallation::class, ], \App\Events\Module\PaymentMethodShowing::class => [ - ShowPaymentMethod::class, + ShowAsPaymentMethod::class, ], \App\Events\Module\SettingShowing::class => [ - ShowSetting::class, + ShowInSettingsPage::class, ], ]; } diff --git a/modules/PaypalStandard/Listeners/ShowPaymentMethod.php b/modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php similarity index 93% rename from modules/PaypalStandard/Listeners/ShowPaymentMethod.php rename to modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php index 9d11bb115..76fc7e445 100644 --- a/modules/PaypalStandard/Listeners/ShowPaymentMethod.php +++ b/modules/PaypalStandard/Listeners/ShowAsPaymentMethod.php @@ -4,7 +4,7 @@ namespace Modules\PaypalStandard\Listeners; use App\Events\Module\PaymentMethodShowing as Event; -class ShowPaymentMethod +class ShowAsPaymentMethod { /** * Handle the event. diff --git a/modules/PaypalStandard/Providers/Event.php b/modules/PaypalStandard/Providers/Event.php new file mode 100644 index 000000000..ee4fa3008 --- /dev/null +++ b/modules/PaypalStandard/Providers/Event.php @@ -0,0 +1,20 @@ + [ + ShowAsPaymentMethod::class, + ], + ]; +} diff --git a/modules/PaypalStandard/Providers/Main.php b/modules/PaypalStandard/Providers/Main.php index e98704dab..e046d9eca 100644 --- a/modules/PaypalStandard/Providers/Main.php +++ b/modules/PaypalStandard/Providers/Main.php @@ -3,7 +3,6 @@ namespace Modules\PaypalStandard\Providers; use Illuminate\Support\ServiceProvider as Provider; -use Modules\PaypalStandard\Listeners\ShowPaymentMethod; class Main extends Provider { @@ -16,7 +15,6 @@ class Main extends Provider { $this->loadTranslations(); $this->loadViews(); - $this->loadEvents(); } /** @@ -49,16 +47,6 @@ class Main extends Provider $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'paypal-standard'); } - /** - * Load events. - * - * @return void - */ - public function loadEvents() - { - $this->app['events']->listen(\App\Events\Module\PaymentMethodShowing::class, ShowPaymentMethod::class); - } - /** * Load routes. * diff --git a/modules/PaypalStandard/module.json b/modules/PaypalStandard/module.json index fc7ed3410..a4a262a9e 100644 --- a/modules/PaypalStandard/module.json +++ b/modules/PaypalStandard/module.json @@ -5,6 +5,7 @@ "category": "payment-method", "active": 1, "providers": [ + "Modules\\PaypalStandard\\Providers\\Event", "Modules\\PaypalStandard\\Providers\\Main" ], "aliases": {}, diff --git a/overrides/akaunting/module/Commands/DeleteCommand.php b/overrides/akaunting/module/Commands/DeleteCommand.php index a7868b456..64b51c517 100644 --- a/overrides/akaunting/module/Commands/DeleteCommand.php +++ b/overrides/akaunting/module/Commands/DeleteCommand.php @@ -4,8 +4,8 @@ namespace Akaunting\Module\Commands; use App\Models\Module\Module; use App\Models\Module\ModuleHistory; -use Artisan; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; @@ -62,7 +62,9 @@ class DeleteCommand extends Command // Trigger event event(new \App\Events\Module\Deleted($alias, $company_id)); - Artisan::call('cache:clear'); + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } $this->info("Module [{$alias}] deleted."); } diff --git a/overrides/akaunting/module/Commands/InstallCommand.php b/overrides/akaunting/module/Commands/InstallCommand.php index ffcc216fb..870f3a5b5 100644 --- a/overrides/akaunting/module/Commands/InstallCommand.php +++ b/overrides/akaunting/module/Commands/InstallCommand.php @@ -6,6 +6,7 @@ use App\Models\Module\Module; use App\Models\Module\ModuleHistory; use App\Traits\Permissions; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; @@ -60,7 +61,9 @@ class InstallCommand extends Command 'description' => trans('modules.installed', ['module' => $alias]), ]); - $this->call('cache:clear'); + if (config('module.cache.enabled')) { + Cache::forget(config('module.cache.key')); + } // Disable model cache during installation config(['laravel-model-caching.enabled' => false]); diff --git a/package-lock.json b/package-lock.json index ba5d6a59a..2069014a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,19 +14,19 @@ } }, "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", + "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", + "@babel/generator": "^7.9.6", "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", + "@babel/helpers": "^7.9.6", + "@babel/parser": "^7.9.6", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -46,12 +46,12 @@ } }, "@babel/generator": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", - "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", "dev": true, "requires": { - "@babel/types": "^7.9.5", + "@babel/types": "^7.9.6", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -85,16 +85,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz", - "integrity": "sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz", + "integrity": "sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==", "dev": true, "requires": { "@babel/helper-function-name": "^7.9.5", "@babel/helper-member-expression-to-functions": "^7.8.3", "@babel/helper-optimise-call-expression": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-replace-supers": "^7.9.6", "@babel/helper-split-export-declaration": "^7.8.3" } }, @@ -229,15 +229,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", - "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.8.3", "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.6" + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/helper-simple-access": { @@ -278,14 +278,14 @@ } }, "@babel/helpers": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", - "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0" + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/highlight": { @@ -300,9 +300,9 @@ } }, "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -348,9 +348,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", - "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", + "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -571,38 +571,38 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", - "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", + "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", - "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", - "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", + "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.8.3", "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.0" + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { @@ -663,9 +663,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz", + "integrity": "sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.8.3", @@ -783,9 +783,9 @@ } }, "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -800,9 +800,9 @@ } }, "@babel/runtime-corejs2": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.2.tgz", - "integrity": "sha512-ayjSOxuK2GaSDJFCtLgHnYjuMyIpViNujWrZo8GUpN60/n7juzJKK5yOo6RFVb0zdU9ACJFK+MsZrUnj3OmXMw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.6.tgz", + "integrity": "sha512-TcdM3xc7weMrwTawuG3BTjtVE3mQLXUPQ9CxTbSKOrhn3QAcqCJ2fz+IIv25wztzUnhNZat7hr655YJa61F3zg==", "dev": true, "requires": { "core-js": "^2.6.5", @@ -829,26 +829,26 @@ } }, "@babel/traverse": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", - "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.5", + "@babel/generator": "^7.9.6", "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.5", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", - "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.9.5", @@ -1042,9 +1042,9 @@ "dev": true }, "@types/node": { - "version": "13.13.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.2.tgz", - "integrity": "sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==", + "version": "13.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", + "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", "dev": true }, "@types/normalize-package-data": { @@ -2745,9 +2745,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001046", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001046.tgz", - "integrity": "sha512-CsGjBRYWG6FvgbyGy+hBbaezpwiqIOLkxQPY4A4Ea49g1eNsnQuESB+n4QM0BKii1j80MyJ26Ir5ywTQkbRE4g==", + "version": "1.0.30001048", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", + "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", "dev": true }, "case-sensitive-paths-webpack-plugin": { @@ -4667,9 +4667,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.416", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.416.tgz", - "integrity": "sha512-fmSrpOQC1dEXzsznzAMXbhQLkpAr21WtaUfRXnIbh8kblZIaMwSL6A8u2RZHAzZliSoSOM3FzS2z/j8tVqrAAw==", + "version": "1.3.427", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.427.tgz", + "integrity": "sha512-/rG5G7Opcw68/Yrb4qYkz07h3bESVRJjUl4X/FrKLXzoUJleKm6D7K7rTTz8V5LUWnd+BbTOyxJX2XprRqHD8A==", "dev": true }, "element-ui": { @@ -6698,9 +6698,9 @@ "integrity": "sha512-pj4En0cWKG+lcBvC7qrzu5ItiMsYNTgjG2capsPzAbAM/O8ftugGpUUftTTwdGL8KlNvB4CEZ6IBWwpWYzUEpw==" }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "growly": { @@ -6816,13 +6816,33 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "hash-sum": { @@ -7729,13 +7749,6 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true, - "optional": true - }, "is-regex": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", @@ -8773,9 +8786,9 @@ } }, "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", "dev": true }, "mime-db": { @@ -8911,9 +8924,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.25.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.25.1.tgz", + "integrity": "sha512-nRKMf9wDS4Fkyd0C9LXh2FFXinD+iwbJ5p/lh3CHitW9kZbRbJ8hCruiadiIXZVbeAqKZzqcTvHnK3mRhFjb6w==" }, "move-concurrently": { "version": "1.0.1", @@ -9964,9 +9977,9 @@ "dev": true }, "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", "dev": true, "requires": { "async": "^2.6.2", @@ -9992,9 +10005,9 @@ "dev": true }, "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.28.tgz", + "integrity": "sha512-YU6nVhyWIsVtlNlnAj1fHTsUKW5qxm3KEgzq2Jj6KTEFOTK8QWR12eIDvrlWhiSTK8WIBFTBhOJV4DY6dUuEbw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -10614,9 +10627,9 @@ } }, "postcss-value-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz", - "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, "prelude-ls": { @@ -11487,14 +11500,11 @@ } }, "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "optional": true, - "requires": { - "is-promise": "^2.1.0" - } + "optional": true }, "run-queue": { "version": "1.0.3", @@ -12846,9 +12856,9 @@ } }, "terser": { - "version": "4.6.12", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz", - "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==", + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -13565,9 +13575,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.1.tgz", - "integrity": "sha512-IaPU2KOPjs/QjMlxFs/TiTtQUSbftQ7lsAvoxe21rtcQohsMhx+1AltXCNhZIpIn46PtODiAgz+o8RbMpKtmJw==", + "version": "15.9.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.2.tgz", + "integrity": "sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", diff --git a/public/css/custom.css b/public/css/custom.css index c4b1dd2c2..a5350ff4f 100644 --- a/public/css/custom.css +++ b/public/css/custom.css @@ -438,14 +438,6 @@ tbody .row { /*--------Shadow None Focus Finish--------*/ /*--------Settings Index Page Finish--------*/ -/*--------Pagination Alignment--------*/ -.page-item .page-link, -.page-item span { - align-items: unset; - padding-top: 7px; -} -/*--------Pagination Alignment Finish--------*/ - /*--------Avatar Size--------*/ .avatar-size { width: 128px; @@ -543,7 +535,6 @@ table .align-items-center td span.badge { /*--------App Comment--------*/ .media-comment-text { border-top-left-radius: 0.4375rem; - background-color: #ebebf0; padding: 1rem; } /*--------App Comment Finish--------*/ diff --git a/resources/assets/js/components/AkauntingModal.vue b/resources/assets/js/components/AkauntingModal.vue index 776ecaaa0..362392c61 100644 --- a/resources/assets/js/components/AkauntingModal.vue +++ b/resources/assets/js/components/AkauntingModal.vue @@ -1,40 +1,45 @@ @@ -58,6 +63,11 @@ export default { props: { show: Boolean, + modalDialogClass: { + type: String, + default: '', + description: "Modal Body size Class" + }, title: { type: String, default: '', @@ -96,12 +106,12 @@ export default { }; }, - created: function () { - if (this.show) { + created: function () { + if (this.show) { let documentClasses = document.body.classList; - documentClasses.add("modal-open"); - } + documentClasses.add("modal-open"); + } }, methods: { @@ -117,7 +127,7 @@ export default { }, onCancel() { - let documentClasses = document.body.classList; + let documentClasses = document.body.classList; documentClasses.remove("modal-open"); @@ -143,4 +153,8 @@ export default { .modal.show { background-color: rgba(0, 0, 0, 0.3); } + + .modal-md { + max-width: 650px; + } diff --git a/resources/assets/js/components/AkauntingModalAddNew.vue b/resources/assets/js/components/AkauntingModalAddNew.vue index e87bbb93e..2b6052ada 100644 --- a/resources/assets/js/components/AkauntingModalAddNew.vue +++ b/resources/assets/js/components/AkauntingModalAddNew.vue @@ -1,46 +1,48 @@ @@ -262,4 +264,8 @@ export default { .modal.show { background-color: rgba(0, 0, 0, 0.3); } + + .modal-md { + max-width: 650px; + } diff --git a/resources/assets/js/components/AkauntingSelect.vue b/resources/assets/js/components/AkauntingSelect.vue index 836ee4c53..34f43f88f 100644 --- a/resources/assets/js/components/AkauntingSelect.vue +++ b/resources/assets/js/components/AkauntingSelect.vue @@ -1127,6 +1127,10 @@ export default { this.$emit('new', response.data.data); this.change(); + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); } }) .catch(error => { @@ -1142,6 +1146,10 @@ export default { this.add_new.show = false; this.add_new.html = null; this.add_new_html = null; + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); }, addModal() { diff --git a/resources/assets/js/components/AkauntingSelectRemote.vue b/resources/assets/js/components/AkauntingSelectRemote.vue index c0a11c4fc..714299cb0 100644 --- a/resources/assets/js/components/AkauntingSelectRemote.vue +++ b/resources/assets/js/components/AkauntingSelectRemote.vue @@ -825,6 +825,10 @@ export default { this.$emit('new', response.data.data); this.change(); + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); } }) .catch(error => { @@ -840,6 +844,10 @@ export default { this.add_new.show = false; this.add_new.html = null; this.add_new_html = null; + + let documentClasses = document.body.classList; + + documentClasses.remove("modal-open"); }, addModal() { diff --git a/resources/assets/js/views/banking/reconciliations.js b/resources/assets/js/views/banking/reconciliations.js index 89154d550..d066a0112 100644 --- a/resources/assets/js/views/banking/reconciliations.js +++ b/resources/assets/js/views/banking/reconciliations.js @@ -79,10 +79,17 @@ const app = new Vue({ } }); - cleared_amount = parseFloat(this.form.opening_balance) + parseFloat(income_total - expense_total); + + let transaction_total = income_total - expense_total; + + cleared_amount = parseFloat(this.form.opening_balance) + transaction_total; } - difference = parseFloat(this.form.closing_balance) - cleared_amount; + if (cleared_amount > 0) { + difference = parseFloat(this.form.closing_balance) - parseFloat(cleared_amount); + } else { + difference = parseFloat(this.form.closing_balance) + parseFloat(cleared_amount); + } if (difference != 0) { this.difference = 'table-danger'; @@ -92,7 +99,7 @@ const app = new Vue({ this.reconcile = false; } - this.totals.cleared_amount = cleared_amount; + this.totals.cleared_amount = parseFloat(cleared_amount); this.totals.difference = difference; }, diff --git a/resources/assets/js/views/install/update.js b/resources/assets/js/views/install/update.js index eeedeec30..c78ab6c74 100644 --- a/resources/assets/js/views/install/update.js +++ b/resources/assets/js/views/install/update.js @@ -57,9 +57,10 @@ const app = new Vue({ }, methods: { - onChangelog() { - axios.get(url + '/install/updates/changelog') - .then(response => { + async onChangelog() { + let changelog_promise = Promise.resolve(axios.get(url + '/install/updates/changelog')); + + changelog_promise.then(response => { this.changelog.show = true; this.changelog.html = response.data; }) @@ -71,14 +72,15 @@ const app = new Vue({ }); }, - steps() { + async steps() { let name = document.getElementById('name').value; - axios.post(url + '/install/updates/steps', { + let steps_promise = Promise.resolve(axios.post(url + '/install/updates/steps', { name: name, version: version - }) - .then(response => { + })); + + steps_promise.then(response => { if (response.data.error) { this.update.status = 'exception'; this.update.html = '
' + response.data.message + '
'; @@ -96,7 +98,7 @@ const app = new Vue({ }); }, - next() { + async next() { let data = this.update.steps.shift(); let name = document.getElementById('name').value; @@ -105,18 +107,19 @@ const app = new Vue({ let installed = document.getElementById('installed').value; if (data) { - this.update.total = (100 - ((this.update.steps.length / this.update.steps_total) * 100)).toFixed(0); + this.update.total = parseInt((100 - ((this.update.steps.length / this.update.steps_total) * 100)).toFixed(0)); this.update.html = ' ' + data['text'] + '
'; - axios.post(data.url, { + let step_promise = Promise.resolve(axios.post(data.url, { name: name, alias: alias, version: version, installed: installed, path: this.update.path, - }) - .then(response => { + })); + + step_promise.then(response => { if (response.data.error) { this.update.status = 'exception'; this.update.html = '
' + response.data.message + '
'; @@ -131,11 +134,9 @@ const app = new Vue({ } if (!response.data.error && !response.data.redirect) { - let self = this; - setTimeout(function() { - self.next(); - }, 800); + this.next(); + }.bind(this), 800); } if (response.data.redirect) { diff --git a/resources/assets/js/views/modules/apps.js b/resources/assets/js/views/modules/apps.js index 6f1602355..801fc2f05 100644 --- a/resources/assets/js/views/modules/apps.js +++ b/resources/assets/js/views/modules/apps.js @@ -34,7 +34,7 @@ const app = new Vue({ onChangeCategory(category) { let path = document.getElementById('category_page').value; - if (category) { + if (category != '*') { path += '/' + encodeURIComponent(category); } else { path = app_home; diff --git a/resources/assets/js/views/modules/item.js b/resources/assets/js/views/modules/item.js index 9e0eec679..a84f02f14 100644 --- a/resources/assets/js/views/modules/item.js +++ b/resources/assets/js/views/modules/item.js @@ -32,12 +32,19 @@ const app = new Vue({ }, mounted() { - this.onGetReviews('', 1); + this.onReviews(1); }, data: function () { return { - reviews: '', + reviews: { + status: false, + html: '', + pagination: { + current_page: 1, + last_page: 1 + } + }, faq: false, installation: { show: false, @@ -56,7 +63,7 @@ const app = new Vue({ onChangeCategory(category) { let path = document.getElementById('category_page').value; - if (category) { + if (category != '*') { path += '/' + encodeURIComponent(category); } else { path = app_home; @@ -65,13 +72,19 @@ const app = new Vue({ location = path; }, - onGetReviews (path, page) { - axios.post(url + '/apps/' + app_slug + '/reviews', { - patth: path, + async onReviews(page) { + let reviews_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/reviews', { page: page - }) - .then(response => { - this.reviews = response.data.html; + })); + + reviews_promise.then(response => { + if (response.data.success) { + this.reviews.status= true; + this.reviews.html = response.data.html; + + this.reviews.pagination.current_page = page; + this.reviews.pagination.last_page = response.data.data.last_page; + } }) .catch(error => { }); @@ -81,17 +94,18 @@ const app = new Vue({ this.faq = true; }, - onInstall(path, name, version) { + async onInstall(path, name, version) { this.installation.show = true; this.installation.total = 0; this.installation.path = path; this.installation.version = version; - axios.post(url + '/apps/steps', { + let steps_promise = Promise.resolve(axios.post(url + '/apps/steps', { name: name, version: version - }) - .then(response => { + })); + + steps_promise.then(response => { if (response.data.error) { this.installation.status = 'exception'; this.installation.html = '
' + response.data.message + '
'; @@ -109,19 +123,20 @@ const app = new Vue({ }); }, - next() { + async next() { let data = this.installation.steps.shift(); if (data) { - this.installation.total = (100 - ((this.installation.steps.length / this.installation.steps_total) * 100)).toFixed(0); + this.installation.total = parseInt((100 - ((this.installation.steps.length / this.installation.steps_total) * 100)).toFixed(0)); this.installation.html = ' ' + data['text'] + '
'; - axios.post(data.url, { + let step_promise = Promise.resolve(axios.post(data.url, { version: this.installation.version, path: this.installation.path, - }) - .then(response => { + })); + + step_promise.then(response => { if (response.data.error) { this.installation.status = 'exception'; this.installation.html = '
' + response.data.message + '
'; @@ -136,11 +151,9 @@ const app = new Vue({ } if (!response.data.error && !response.data.redirect) { - let self = this; - setTimeout(function() { - self.next(); - }, 800); + this.next(); + }.bind(this), 800); } if (response.data.redirect) { diff --git a/resources/lang/ar-SA/bills.php b/resources/lang/ar-SA/bills.php index c23460c91..a61546b03 100644 --- a/resources/lang/ar-SA/bills.php +++ b/resources/lang/ar-SA/bills.php @@ -13,6 +13,7 @@ return [ 'price' => 'السعر', 'sub_total' => 'المبلغ الإجمالي', 'discount' => 'خصم', + 'item_discount' => 'Line Discount', 'tax_total' => 'إجمالي الضريبة', 'total' => 'المجموع', @@ -30,6 +31,7 @@ return [ 'add_payment' => 'إضافة مدفوعات', 'mark_paid' => 'تم التحديد كمدفوع', 'mark_received' => 'تحديد كمستلم', + 'mark_cancelled' => 'تم إلغاء العلامة', 'download_pdf' => 'تحميل PDF', 'send_mail' => 'إرسال بريد إلكتروني', 'create_bill' => 'إنشاء فاتورة شراء', @@ -43,11 +45,13 @@ return [ 'paid' => 'مدفوع', 'overdue' => 'متأخر', 'unpaid' => 'غير مدفوع', + 'cancelled' => 'Cancelled', ], 'messages' => [ - 'received' => 'تم تحويل فاتورة الشراء إلى فاتورة مستلمة بنجاح!', + 'marked_received' => 'Bill marked as received!', 'marked_paid' => 'الفاتورة عُلّمت كمدفوعة!', + 'marked_cancelled' => 'Bill marked as cancelled!', 'draft' => 'هذة فاتورة شراء عبارة عن مسودة و سوف يتم اظهارها بالنظام بعد ان يتم استحقاقها.', 'status' => [ diff --git a/resources/lang/ar-SA/bulk_actions.php b/resources/lang/ar-SA/bulk_actions.php index 8e7175433..235d9f224 100644 --- a/resources/lang/ar-SA/bulk_actions.php +++ b/resources/lang/ar-SA/bulk_actions.php @@ -4,7 +4,7 @@ return [ 'bulk_actions' => 'الإجراء الجماعي - الإجراءات الجماعية', 'selected' => 'مُحدد', - 'no_action' => 'No action available', + 'no_action' => 'لا يوجد اي اجراء متاح ', 'message' => [ 'duplicate' => 'هل أنت متأكد من مضاعفة السجلات المحددة؟', @@ -15,6 +15,7 @@ return [ 'paid' => 'هل تريد وضع علامة على الفاتورة المحددة على أنها مدفوعة ؟', 'sent' => 'هل تريد وضع علامة على الفاتورة المحددة على أنها تم أرسالها؟', 'received' => 'هل تريد وضع علامة على الفاتورة المحددة على أنها تم استلامها؟', + 'cancelled' => 'Are you sure you want to cancel selected invoice/bill?|Are you sure you want to cancel selected invoices/bills?', ], ]; diff --git a/resources/lang/ar-SA/install.php b/resources/lang/ar-SA/install.php index 405f8cb36..f49145474 100644 --- a/resources/lang/ar-SA/install.php +++ b/resources/lang/ar-SA/install.php @@ -21,6 +21,7 @@ return [ 'disabled' => 'يجب تعطيل :feature!', 'extension' => 'يجب تثبيت وتشغيل ملحق :extension!', 'directory' => 'يجب منح صلاحية الكتابة على مجلد :directory!', + 'executable' => 'The PHP CLI executable file is not defined/working or its version is not :php_version or higher! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.', ], 'database' => [ diff --git a/resources/lang/ar-SA/invoices.php b/resources/lang/ar-SA/invoices.php index 249bf5798..fea76da7a 100644 --- a/resources/lang/ar-SA/invoices.php +++ b/resources/lang/ar-SA/invoices.php @@ -13,6 +13,7 @@ return [ 'price' => 'السعر', 'sub_total' => 'المجموع الجزئي', 'discount' => 'الخصم', + 'item_discount' => 'Line Discount', 'tax_total' => 'إجمالي الضريبة', 'total' => 'الإجمالي', @@ -30,6 +31,7 @@ return [ 'mark_paid' => 'التحديد كمدفوع', 'mark_sent' => 'التحديد كمرسل', 'mark_viewed' => 'وضع علامة مشاهدة', + 'mark_cancelled' => 'Mark Cancelled', 'download_pdf' => 'تحميل PDF', 'send_mail' => 'إرسال بريد إلكتروني', 'all_invoices' => 'سجّل الدخول لعرض جميع الفواتير', @@ -47,12 +49,15 @@ return [ 'paid' => 'مدفوع', 'overdue' => 'متأخر', 'unpaid' => 'غير مدفوع', + 'cancelled' => 'Cancelled', ], 'messages' => [ 'email_sent' => 'تم إرسال الفاتورة عبر البريد اﻹلكتروني!', 'marked_sent' => 'الفاتورة عُلّمت كمرسلة!', 'marked_paid' => 'الفاتورة عُلّمت كمدفوع!', + 'marked_viewed' => 'Invoice marked as viewed!', + 'marked_cancelled' => 'Invoice marked as cancelled!', 'email_required' => 'لا يوجد عنوان البريد إلكتروني لهذا العميل!', 'draft' => 'هذه مسودة الفاتورة و سوف تظهر في النظام بعد ارسالها.', diff --git a/resources/lang/ar-SA/settings.php b/resources/lang/ar-SA/settings.php index 751122dfd..62c0ed242 100644 --- a/resources/lang/ar-SA/settings.php +++ b/resources/lang/ar-SA/settings.php @@ -29,6 +29,12 @@ return [ 'before' => 'قبل الرقم', 'after' => 'بعد الرقم', ], + 'discount_location' => [ + 'name' => 'Discount Location', + 'item' => 'At line', + 'total' => 'At total', + 'both' => 'Both line and total', + ], ], 'invoice' => [ diff --git a/resources/lang/ar-SA/validation.php b/resources/lang/ar-SA/validation.php index d2d2ecf48..d05ba02fd 100644 --- a/resources/lang/ar-SA/validation.php +++ b/resources/lang/ar-SA/validation.php @@ -104,7 +104,7 @@ return [ ], 'invalid_currency' => 'رمز خانة :attribute غير صحيحة.', 'invalid_amount' => 'خانة المبلغ :attribute غير صالحة.', - 'invalid_extension' => 'The file extension is invalid.', + 'invalid_extension' => 'هذا الملف غير صالح.', ], /* diff --git a/resources/lang/en-GB/modules.php b/resources/lang/en-GB/modules.php index 512f112f5..95a815669 100644 --- a/resources/lang/en-GB/modules.php +++ b/resources/lang/en-GB/modules.php @@ -9,7 +9,6 @@ return [ 'new' => 'New', 'top_free' => 'Top Free', 'free' => 'FREE', - 'search' => 'Search', 'install' => 'Install', 'buy_now' => 'Buy Now', 'get_api_key' => 'Click here to get your API key.', diff --git a/resources/lang/es-ES/bills.php b/resources/lang/es-ES/bills.php index ecba6fa09..6b047a800 100644 --- a/resources/lang/es-ES/bills.php +++ b/resources/lang/es-ES/bills.php @@ -13,6 +13,7 @@ return [ 'price' => 'Precio', 'sub_total' => 'Subtotal', 'discount' => 'Descuento', + 'item_discount' => 'Descuento de línea', 'tax_total' => 'Total Impuestos', 'total' => 'Total ', @@ -28,7 +29,9 @@ return [ 'histories' => 'Historial', 'payments' => 'Pagos', 'add_payment' => 'Añadir pago', + 'mark_paid' => 'Marcar Como Pagada', 'mark_received' => 'Marcar como recibido', + 'mark_cancelled' => 'Marcar como Cancelado', 'download_pdf' => 'Descargar PDF', 'send_mail' => 'Enviar Email', 'create_bill' => 'Crear Recibo', @@ -42,10 +45,13 @@ return [ 'paid' => 'Pagado', 'overdue' => 'Vencido', 'unpaid' => 'No Pagado', + 'cancelled' => 'Cancelado', ], 'messages' => [ - 'received' => 'Recibo marcado como recibido con éxito!', + 'marked_received' => '¡Recibo marcado como recibido!', + 'marked_paid' => '¡Recibo marcado como pagado!', + 'marked_cancelled' => '¡Recibo marcado como cancelado!', 'draft' => 'Este es unBORRADOR de factura y se reflejará en los gráficos luego de que sea enviada.', 'status' => [ diff --git a/resources/lang/es-ES/bulk_actions.php b/resources/lang/es-ES/bulk_actions.php index 9f28ba811..331a2cb17 100644 --- a/resources/lang/es-ES/bulk_actions.php +++ b/resources/lang/es-ES/bulk_actions.php @@ -2,8 +2,9 @@ return [ - 'bulk_actions' => 'Acción masiva|Acciones masivas', - 'selected' => 'seleccionado', + 'bulk_actions' => 'Acción masiva|Acciones masivas', + 'selected' => 'seleccionado', + 'no_action' => 'Ninguna acción disponible', 'message' => [ 'duplicate' => '¿Está seguro que desea duplicar el registro seleccionado?', @@ -14,6 +15,7 @@ return [ 'paid' => '¿Está seguro de que desea marcar la factura seleccionada como pagada? ¿Está seguro que desea marcar las facturas seleccionadas como pagadas?', 'sent' => '¿Está seguro que desea marcar la factura seleccionada como enviada? ¿Está seguro que desea marcar las facturas seleccionadas como enviadas?', 'received' => '¿Está seguro de que desea marcar el recibo seleccionado como recibido? ¿Está seguro que desea marcar los recibos seleccionados como recibidos?', + 'cancelled' => '¿Está seguro que desea cancelar la factura/recibo seleccionado?|¿Está seguro que desea cancelar las facturas/recibos seleccionados?', ], ]; diff --git a/resources/lang/es-ES/install.php b/resources/lang/es-ES/install.php index 6e894ef08..9cccee5f2 100644 --- a/resources/lang/es-ES/install.php +++ b/resources/lang/es-ES/install.php @@ -21,6 +21,7 @@ return [ 'disabled' => ':feature debe estar deshabilitado!', 'extension' => 'La extensión :extension necesita ser instalada y cargada!', 'directory' => 'El directorio :directorio necesita tener permiso de escritura!', + 'executable' => '¡El archivo ejecutable PHP CLI no está definido/funcionando o su versión no es :php_version o superior! Por favor, pida a su compañía de hosting que configure correctamente la variable de entorno PHP_BINARY o PHP_PATH.', ], 'database' => [ diff --git a/resources/lang/es-ES/invoices.php b/resources/lang/es-ES/invoices.php index dd1012b1e..14a8f04af 100644 --- a/resources/lang/es-ES/invoices.php +++ b/resources/lang/es-ES/invoices.php @@ -13,6 +13,7 @@ return [ 'price' => 'Precio', 'sub_total' => 'Subtotal', 'discount' => 'Descuento', + 'item_discount' => 'Descuento de línea', 'tax_total' => 'Total Impuestos', 'total' => 'Total ', @@ -30,6 +31,7 @@ return [ 'mark_paid' => 'Marcar Como Pagada', 'mark_sent' => 'Marcar Como Enviada', 'mark_viewed' => 'Marcar como visto', + 'mark_cancelled' => 'Marcar como Cancelada', 'download_pdf' => 'Descargar PDF', 'send_mail' => 'Enviar Email', 'all_invoices' => 'Inicie sesión para ver todas las facturas', @@ -47,12 +49,15 @@ return [ 'paid' => 'Pagada', 'overdue' => 'Vencida', 'unpaid' => 'No Pagada', + 'cancelled' => 'Cancelada', ], 'messages' => [ 'email_sent' => '¡El correo electrónico de la factura ha sido enviado!', 'marked_sent' => '¡Factura marcada como enviada!', 'marked_paid' => '¡Factura marcada como pagada!', + 'marked_viewed' => '¡Factura marcada como vista!', + 'marked_cancelled' => '¡Factura marcada como cancelada!', 'email_required' => 'Ninguna dirección de correo electrónico para este cliente!', 'draft' => 'Esta es una factura BORRADOR y se reflejará en los gráficos luego de que sea enviada.', diff --git a/resources/lang/es-ES/messages.php b/resources/lang/es-ES/messages.php index 100a7d625..579abb1df 100644 --- a/resources/lang/es-ES/messages.php +++ b/resources/lang/es-ES/messages.php @@ -28,6 +28,8 @@ return [ 'warning' => [ 'deleted' => 'Advertencia: No puede borrar :name porque tiene :text relacionado.', 'disabled' => 'Advertencia: No se permite desactivar :name porque tiene :text relacionado.', + 'reconciled_tran' => 'Advertencia: No puedes cambiar/eliminar la transacción porque está reconciliada!', + 'reconciled_doc' => 'Advertencia: No puedes modificar/eliminar :type porque tiene transacciones reconciliadas!', 'disable_code' => 'Advertencia: No puede desactivar o cambiar la moneda :name porque tiene :text relacionado.', 'payment_cancel' => 'Advertencia: Ha cancelado su reciente pago de :method!', ], diff --git a/resources/lang/es-ES/passwords.php b/resources/lang/es-ES/passwords.php index 40b370808..b523a1ae7 100644 --- a/resources/lang/es-ES/passwords.php +++ b/resources/lang/es-ES/passwords.php @@ -18,5 +18,6 @@ return [ 'sent' => 'Hemos enviado un enlace para resetear su contraseña!', 'token' => 'Ese token de contraseña ya no es válido.', 'user' => "No podemos encontrar un usuario con esa dirección de correo electrónico.", + 'throttle' => 'Por favor, espere antes de reintentar.', ]; diff --git a/resources/lang/es-ES/settings.php b/resources/lang/es-ES/settings.php index 3e39ce834..8ed6cf4b8 100644 --- a/resources/lang/es-ES/settings.php +++ b/resources/lang/es-ES/settings.php @@ -29,6 +29,12 @@ return [ 'before' => 'Antes del Número', 'after' => 'Después del número', ], + 'discount_location' => [ + 'name' => 'Ubicación de descuento', + 'item' => 'En línea', + 'total' => 'En total', + 'both' => 'Línea y total', + ], ], 'invoice' => [ diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php index c6c344b72..8bee86327 100644 --- a/resources/lang/es-ES/validation.php +++ b/resources/lang/es-ES/validation.php @@ -100,10 +100,11 @@ return [ 'custom' => [ 'attribute-name' => [ - 'rule-name' => 'mensaje personalizado', + 'rule-name' => 'mensaje personalizado', ], - 'invalid_currency' => 'El código de :attribute es incorrecto.', - 'invalid_amount' => 'El monto :attribute es inválido.', + 'invalid_currency' => 'El código de :attribute es incorrecto.', + 'invalid_amount' => 'El monto :attribute es inválido.', + 'invalid_extension' => 'La extensión del archivo no es válida.', ], /* diff --git a/resources/lang/fa-IR/auth.php b/resources/lang/fa-IR/auth.php index 3b6ee2b85..b9e4c5df2 100644 --- a/resources/lang/fa-IR/auth.php +++ b/resources/lang/fa-IR/auth.php @@ -13,16 +13,18 @@ return [ 'current_email' => 'ایمیل فعلی', 'reset' => 'بازنشانی', 'never' => 'هرگز', - + 'landing_page' => 'صفحه فرود', + 'password' => [ 'current' => 'رمز عبور', 'current_confirm' => 'تکرار رمز عبور', 'new' => 'رمز عبور جدید', 'new_confirm' => 'تکرار رمز عبور', ], - + 'error' => [ 'self_delete' => 'خطا: نمی‌توانید خودتان حذف کنید!', + 'self_disable' => 'خطا: نمی‌توانید خودتان را غیر فعال کنید!', 'no_company' => 'خطا: هیچ کمپانی به حساب شما متصل نیست. لطفا با مدیر سیستم تماس بگیرید.', ], diff --git a/resources/lang/fa-IR/bills.php b/resources/lang/fa-IR/bills.php index 508456394..c762825c4 100644 --- a/resources/lang/fa-IR/bills.php +++ b/resources/lang/fa-IR/bills.php @@ -2,54 +2,65 @@ return [ - 'bill_number' => 'شماره صورتحساب', - 'bill_date' => 'تاریخ صورتحساب', - 'total_price' => 'قیمت کل', - 'due_date' => 'سررسید', - 'order_number' => 'شماره سفارش', - 'bill_from' => 'صورتحساب از', + 'bill_number' => 'شماره صورتحساب', + 'bill_date' => 'تاریخ صورتحساب', + 'total_price' => 'قیمت کل', + 'due_date' => 'سررسید', + 'order_number' => 'شماره سفارش', + 'bill_from' => 'صورتحساب از', - 'quantity' => 'تعداد', - 'price' => 'قيمت', - 'sub_total' => 'جمع کل', - 'discount' => 'تخفیف', - 'tax_total' => 'مجموع مالیات', - 'total' => 'مجموع', + 'quantity' => 'تعداد', + 'price' => 'قيمت', + 'sub_total' => 'جمع کل', + 'discount' => 'تخفیف', + 'item_discount' => 'Line Discount', + 'tax_total' => 'مجموع مالیات', + 'total' => 'مجموع', - 'item_name' => 'نام آیتم | نام آیتم ها', + 'item_name' => 'نام آیتم | نام آیتم ها', - 'show_discount' => 'تخفیف: discount%', - 'add_discount' => 'اضافه کردن تخفیف', - 'discount_desc' => 'از جمع کل', + 'show_discount' => 'تخفیف: discount%', + 'add_discount' => 'اضافه کردن تخفیف', + 'discount_desc' => 'از جمع کل', - 'payment_due' => 'سررسید پرداخت', - 'amount_due' => 'مقدار سررسید', - 'paid' => 'پرداخت شده', - 'histories' => 'تاریخچه', - 'payments' => 'پرداخت ها', - 'add_payment' => 'پرداخت', - 'mark_received' => 'دریافت شده', - 'download_pdf' => 'دانلود PDF', - 'send_mail' => 'ارسال ایمیل', + 'payment_due' => 'سررسید پرداخت', + 'amount_due' => 'مقدار سررسید', + 'paid' => 'پرداخت شده', + 'histories' => 'تاریخچه', + 'payments' => 'پرداخت ها', + 'add_payment' => 'پرداخت', + 'mark_paid' => 'Mark Paid', + 'mark_received' => 'دریافت شده', + 'mark_cancelled' => 'Mark Cancelled', + 'download_pdf' => 'دانلود PDF', + 'send_mail' => 'ارسال ایمیل', + 'create_bill' => 'ایجاد صورتحساب', + 'receive_bill' => 'دریافت صورتحساب', + 'make_payment' => 'پرداخت کردن', 'statuses' => [ - 'draft' => 'پیش‌ نویس', - 'received' => 'دریافت شده', - 'partial' => 'جزئیات', - 'paid' => 'پرداخت شده', + 'draft' => 'پیش‌نویس', + 'received' => 'دریافت شده', + 'partial' => 'جزئی', + 'paid' => 'پرداخت شده', + 'overdue' => 'سر رسید شده', + 'unpaid' => 'پرداخت نشده', + 'cancelled' => 'Cancelled', ], 'messages' => [ - 'received' => 'صورتحساب مشخص شده با موفقیت علامت گذاری شد.', - 'draft' => 'این صورت حساب به صورت پیشنویس است و پس از دریافت وجه بر روی نمودار را اعمال می شود.', + 'marked_received' => 'Bill marked as received!', + 'marked_paid' => 'Bill marked as paid!', + 'marked_cancelled' => 'Bill marked as cancelled!', + 'draft' => 'این صورت حساب به صورت پیشنویس است و پس از دریافت وجه بر روی نمودار را اعمال می شود.', 'status' => [ - 'created' => 'تاریخ ایجاد :date', - 'receive' => [ + 'created' => 'تاریخ ایجاد :date', + 'receive' => [ 'draft' => 'ارسال نشده', 'received' => 'تاریخ دریافت :date', ], - 'paid' => [ + 'paid' => [ 'await' => 'انتظار پرداخت', ], ], diff --git a/resources/lang/fa-IR/bulk_actions.php b/resources/lang/fa-IR/bulk_actions.php new file mode 100644 index 000000000..0cb52a06c --- /dev/null +++ b/resources/lang/fa-IR/bulk_actions.php @@ -0,0 +1,21 @@ + 'Bulk Action|Bulk Actions', + 'selected' => 'انتخاب شده', + 'no_action' => 'No action available', + + 'message' => [ + 'duplicate' => 'Are you sure you want to duplicate selected record?', + 'delete' => 'Are you sure you want to delete selected record?|Are you sure you want to delete selected records?', + 'export' => 'Are you sure you want to export selected record?|Are you sure you want to export selected records?', + 'enable' => 'Are you sure you want to enable selected record?|Are you sure you want to enable selected records?', + 'disable' => 'Are you sure you want to disable selected record?|Are you sure you want to disable selected records?', + 'paid' => 'Are you sure you want to mark selected invoice as paid?|Are you sure you want to mark selected invoices as paid?', + 'sent' => 'Are you sure you want to mark selected invoice as sent?|Are you sure you want to mark selected invoices as sent?', + 'received' => 'Are you sure you want to mark selected bill as received?|Are you sure you want to mark selected bills as received?', + 'cancelled' => 'Are you sure you want to cancel selected invoice/bill?|Are you sure you want to cancel selected invoices/bills?', + ], + +]; diff --git a/resources/lang/fa-IR/companies.php b/resources/lang/fa-IR/companies.php index 6b9ea230e..308c4a622 100644 --- a/resources/lang/fa-IR/companies.php +++ b/resources/lang/fa-IR/companies.php @@ -4,10 +4,11 @@ return [ 'domain' => 'دامنه', 'logo' => 'لوگو', - 'manage' => 'مدیریت شرکت ها', - 'all' => 'تمام شرکت ها', + 'error' => [ - 'delete_active' => 'خطا:نمی توانید شرکت فعال را حذف نمایید، ابتدا آن را ویرایش کنید!', + 'not_user_company' => 'خطا: شما اجازه تغییر این شرکت را ندارید!', + 'delete_active' => 'خطا: نمی توانید شرکت فعال را حذف نمایید، ابتدا به یک شرکت دیگر تغییر دهید!', + 'disable_active' => 'خطا: نمی توانید شرکت فعال را غیرفعال نمایید، ابتدا به یک شرکت دیگر تغییر دهید!', ], ]; diff --git a/resources/lang/fa-IR/customers.php b/resources/lang/fa-IR/customers.php index ee53a7a0d..f3a9210f6 100644 --- a/resources/lang/fa-IR/customers.php +++ b/resources/lang/fa-IR/customers.php @@ -2,15 +2,11 @@ return [ - 'allow_login' => 'مجاز به ورود به سیستم؟', + 'can_login' => 'می‌توانید وارد شوید؟', 'user_created' => 'کاربر ایجاد شده', 'error' => [ - 'email' => 'این ایمیل قبلا انتخاب شده است.' + 'email' => 'این ایمیل قبلا انتخاب شده است.', ], - 'notification' => [ - 'message' => ':customer made :amount payment to invoice number :invoice_number.', - 'button' => 'نمایش', - ], ]; diff --git a/resources/lang/fa-IR/dashboards.php b/resources/lang/fa-IR/dashboards.php new file mode 100644 index 000000000..561ac9580 --- /dev/null +++ b/resources/lang/fa-IR/dashboards.php @@ -0,0 +1,11 @@ + [ + 'not_user_dashboard' => 'خطا:شما اجازه تغییر این داشبورد رو ندارید!', + 'delete_last' => 'خطا: امکان حذف آخرین داشبورد وجود ندارد . لطفا اول یک داشبورد جدید بسازید!', + 'disable_last' => 'خطا: امکان غیر فعال کردن آخرین داشبورد وجود ندارد . لطفا اول یک داشبورد جدید بسازید!', + ], + +]; diff --git a/resources/lang/fa-IR/demo.php b/resources/lang/fa-IR/demo.php index bdabe273d..ef1472d27 100644 --- a/resources/lang/fa-IR/demo.php +++ b/resources/lang/fa-IR/demo.php @@ -2,15 +2,33 @@ return [ - 'accounts_cash' => 'پول نقد', - 'categories_deposit' => 'سپرده', - 'categories_sales' => 'فروش', - 'currencies_usd' => 'دلار آمریکا', - 'currencies_eur' => 'یورو', - 'currencies_gbp' => 'پوند انگلیس', - 'currencies_try' => 'لیره ترکیه', - 'taxes_exempt' => 'معاف از مالیات', - 'taxes_normal' => 'مالیات عادی', - 'taxes_sales' => 'مالیات بر فروش', + 'accounts' => [ + 'cash' => 'Cash', + ], + + 'categories' => [ + 'deposit' => 'Deposit', + 'sales' => 'Sales', + ], + + 'currencies' => [ + 'usd' => 'US Dollar', + 'eur' => 'Euro', + 'gbp' => 'British Pound', + 'try' => 'Turkish Lira', + ], + + 'offline_payments' => [ + 'cash' => 'Cash', + 'bank' => 'Bank Transfer', + ], + + 'reports' => [ + 'income' => 'Monthly income summary by category.', + 'expense' => 'Monthly expense summary by category.', + 'income_expense' => 'Monthly income vs expense by category.', + 'tax' => 'Quarterly tax summary.', + 'profit_loss' => 'Quarterly profit & loss by category.', + ], ]; diff --git a/resources/lang/fa-IR/email_templates.php b/resources/lang/fa-IR/email_templates.php new file mode 100644 index 000000000..59e874483 --- /dev/null +++ b/resources/lang/fa-IR/email_templates.php @@ -0,0 +1,50 @@ + [ + 'subject' => '{invoice_number} invoice created', + 'body' => 'Dear {customer_name},

We have prepared the following invoice for you: {invoice_number}.

You can see the invoice details and proceed with the payment from the following link: {invoice_number}.

Feel free to contact us for any question.

Best Regards,
{company_name}', + ], + + 'invoice_remind_customer' => [ + 'subject' => '{invoice_number} invoice overdue notice', + 'body' => 'Dear {customer_name},

This is an overdue notice for {invoice_number} invoice.

The invoice total is {invoice_total} and was due {invoice_due_date}.

You can see the invoice details and proceed with the payment from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_remind_admin' => [ + 'subject' => '{invoice_number} invoice overdue notice', + 'body' => 'Hello,

{customer_name} has received an overdue notice for {invoice_number} invoice.

The invoice total is {invoice_total} and was due {invoice_due_date}.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_recur_customer' => [ + 'subject' => '{invoice_number} recurring invoice created', + 'body' => 'Dear {customer_name},

Based on your recurring circle, we have prepared the following invoice for you: {invoice_number}.

You can see the invoice details and proceed with the payment from the following link: {invoice_number}.

Feel free to contact us for any question.

Best Regards,
{company_name}', + ], + + 'invoice_recur_admin' => [ + 'subject' => '{invoice_number} recurring invoice created', + 'body' => 'Hello,

Based on {customer_name} recurring circle, {invoice_number} invoice has been automatically created.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_payment_customer' => [ + 'subject' => 'Payment received for {invoice_number} invoice', + 'body' => 'Dear {customer_name},

Thank you for the payment. Find the payment details below:

-------------------------------------------------
Amount: {transaction_total}
Date: {transaction_paid_date}
Invoice Number: {invoice_number}
-------------------------------------------------

You can always see the invoice details from the following link: {invoice_number}.

Feel free to contact us for any question.

Best Regards,
{company_name}', + ], + + 'invoice_payment_admin' => [ + 'subject' => 'Payment received for {invoice_number} invoice', + 'body' => 'Hello,

{customer_name} recorded a payment for {invoice_number} invoice.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'bill_remind_admin' => [ + 'subject' => '{bill_number} bill reminding notice', + 'body' => 'Hello,

This is a reminding notice for {bill_number} bill to {vendor_name}.

The bill total is {bill_total} and is due {bill_due_date}.

You can see the bill details from the following link: {bill_number}.

Best Regards,
{company_name}', + ], + + 'bill_recur_admin' => [ + 'subject' => '{bill_number} recurring bill created', + 'body' => 'Hello,

Based on {vendor_name} recurring circle, {bill_number} invoice has been automatically created.

You can see the bill details from the following link: {bill_number}.

Best Regards,
{company_name}', + ], + +]; diff --git a/resources/lang/fa-IR/errors.php b/resources/lang/fa-IR/errors.php new file mode 100644 index 000000000..c72a47530 --- /dev/null +++ b/resources/lang/fa-IR/errors.php @@ -0,0 +1,23 @@ + [ + '403' => 'Oops! Forbidden Access', + '404' => 'Oops! Page not found', + '500' => 'Oops! Something went wrong', + ], + + 'header' => [ + '403' => '403 Forbidden', + '404' => '404 Not Found', + '500' => '500 Internal Server Error', + ], + + 'message' => [ + '403' => 'You can not access this page.', + '404' => 'We could not find the page you were looking for.', + '500' => 'We will work on fixing that right away.', + ], + +]; diff --git a/resources/lang/fa-IR/general.php b/resources/lang/fa-IR/general.php index 43f91e51b..bb1524c81 100644 --- a/resources/lang/fa-IR/general.php +++ b/resources/lang/fa-IR/general.php @@ -2,6 +2,7 @@ return [ + 'dashboards' => 'داشبورد | داشبوردها', 'items' => 'مورد | موارد', 'incomes' => 'درآمد | درآمد', 'invoices' => 'فاکتور | فاکتورها', @@ -38,10 +39,20 @@ return [ 'numbers' => 'شماره | تعداد', 'statuses' => 'وضعیت | وضعیت', 'others' => 'سایر |‌ سایرین', - 'contacts' => 'Contact|Contacts', - 'reconciliations' => 'Reconciliation|Reconciliations', + 'contacts' => 'مخاطب|مخاطبین', + 'reconciliations' => 'مصالحه|مصالحه ها', + 'developers' => 'توسعه دهنده|توسعه دهندگان', + 'schedules' => 'زمانبندی | زمانبندی ها', + 'groups' => 'گروه | گروه‌ها', + 'charts' => 'نمودار | نمودارها', + 'localisations' => 'بومی سازی|بومی سازی ها', + 'defaults' => 'پیش فرض | پیش فرض‌ها', + 'widgets' => 'ابزارک‌ | ابزارک‌ها', + 'templates' => 'قالب | قالب‌ها', + 'sales' => 'فروش | فروش‌ها', + 'purchases' => 'خرید | خرید‌ها', - 'dashboard' => 'پیشخوان', + 'welcome' => 'خوش آمدید', 'banking' => 'بانکداری', 'general' => 'عمومی', 'no_records' => 'بدون سابقه', @@ -53,15 +64,19 @@ return [ 'no' => 'خیر', 'na' => '(تعریف نشده)', 'daily' => 'روزانه', + 'weekly' => 'هفتگی', 'monthly' => 'ماهانه', 'quarterly' => 'فصلی', 'yearly' => 'سالانه', 'add' => 'افزودن', 'add_new' => 'افزودن جدید', + 'add_income' => 'اضافه کردن درآمد', + 'add_expense' => 'اضافه کردن هزینه', 'show' => 'نمایش', 'edit' => 'ويرايش', 'delete' => 'حذف', 'send' => 'ارسال', + 'share' => 'سهم', 'download' => 'دريافت', 'delete_confirm' => 'تایید حذف :name :type ؟', 'name' => 'نام', @@ -79,9 +94,11 @@ return [ 'reference' => 'مرجع', 'attachment' => 'پیوست', 'change' => 'تغییر', + 'change_type' => 'تغییر:نوع', 'switch' => 'جایه‌جایی', 'color' => 'رنگ', 'save' => 'ذخیره کردن', + 'confirm' => 'تأیید کردن', 'cancel' => 'انصراف', 'loading' => 'درحال بارگذاری...', 'from' => 'از', @@ -105,26 +122,53 @@ return [ 'partially_paid' => 'پرداخت جزئی', 'export' => 'گرفتن خروجی', 'finish' => 'پایان', - 'wizard' => 'Wizard', + 'wizard' => 'مراحل جادویی', 'skip' => 'صرف‌نظر', 'enable' => 'فعال', 'disable' => 'غیر فعال', 'select_all' => 'انتخاب همه', 'unselect_all' => 'عدم انتخاب همه', - 'go_to' => 'برو به: نام', 'created_date' => 'تاریخ ایجاد', 'period' => 'دوره', + 'frequency' => 'فراوانی', 'start' => 'شروع', 'end' => 'پایان', 'clear' => 'پاک کردن', 'difference' => 'تفاوت', + 'footer' => 'پاورقی', + 'start_date' => 'تاریخ شروع', + 'end_date' => 'تاریخ پایان', + 'basis' => 'مبنا', + 'accrual' => 'تعهدی', + 'cash' => 'پول نقد', + 'group_by' => 'گروه بندی بر اساس', + 'accounting' => 'حسابداری', + 'sort' => 'مرتب‌سازی', + 'width' => 'عرض', + 'month' => 'ماه', + 'year' => 'سال', + 'type_item_name' => 'نام یک کالا را تایپ کنید', + 'no_data' => 'داده‌ای وجود ندارد', + 'no_matching_data' => 'با هیچ داده‌ای مطابق نیست', + 'clear_cache' => 'پاکسازی حافظه نهان', + 'go_to_dashboard' => 'Go to dashboard', + + 'card' => [ + 'name' => 'نام روی کارت', + 'number' => 'شماره‌ی کارت', + 'expiration_date' => 'تاریخ انقضا', + 'cvv' => 'کد CVV', + ], 'title' => [ 'new' => ':type جدید', 'edit' => 'ویرایش :type', + 'delete' => 'حذف', 'create' => 'ایجاد: نوع', 'send' => 'ارسال: نوع', - 'get' => 'Get :type', + 'get' => 'دریافت:نوع', + 'add' => 'اضافه', + 'manage' => 'مدیریت', ], 'form' => [ @@ -133,14 +177,30 @@ return [ 'field' => '-انتخاب :field-', 'file' => 'انتخاب فایل', ], + 'add_new' => 'افزودن فیلد جدید', 'no_file_selected' => 'هیچ فایلی انتخاب نشده...', ], 'date_range' => [ 'today' => 'امروز', 'yesterday' => 'ديروز', - 'last_days' => 'Last :day Days', + 'last_days' => 'گذشته:روز روز', 'this_month' => 'این ماه', 'last_month' => 'ماه قبل', ], + + 'empty' => [ + 'documentation' => 'Check out the documentation for more details.', + 'items' => 'کالا‌ها میتوانند محصولات یا خدمات باشند. شما می‌توانید از کالا ها زمان ایجاد فکتور ها یا صورتحساب‌ها برای داشتن قیمت‌، مالیات و دیگر فیلد های دلخواه استفاده کنید.', + 'invoices' => 'Invoices can be one time or recurring. You can send them to customers and start accepting online payments.', + 'revenues' => 'Revenue is a paid income transaction. It can be an independent record (i.e. deposit) or attached to an invoice.', + 'customers' => 'Customers are required if you want to create invoices. They may also log in to Client Portal and see their balance.', + 'bills' => 'Bills can be one time or recurring. They indicate what you owe your vendors for the products or services you purchase.', + 'payments' => 'Payment is a paid expense transaction. It can be an independent record (i.e. food receipt) or attached to a bill.', + 'vendors' => 'Vendors are required if you want to create bills. You can see the balance you owe and filter reports by the vendor.', + 'transfers' => 'Transfers allow you to move money from one account to another, whether they use the same currency or not.', + 'taxes' => 'Taxes are used to apply extra fees to invoices and bills. Your financials are affected by these regulatory taxes.', + 'reconciliations' => 'Bank reconciliation is a process performed to ensure that your company bank records are also correct.', + ], + ]; diff --git a/resources/lang/fa-IR/header.php b/resources/lang/fa-IR/header.php index 52ac03bae..81bca56d0 100644 --- a/resources/lang/fa-IR/header.php +++ b/resources/lang/fa-IR/header.php @@ -8,9 +8,9 @@ return [ 'counter' => '{0} شما اطلاعیه ای ندارید |{1} شما:count اطلاعیه دارید | [2, *] شما :coun اطلاعیه دارید', 'overdue_invoices' => '{1} :count فاکتور سررسید شده دارید | [2, *]: :count فاکتور سررسید شده دارید', 'upcoming_bills' => '{1}:count صورتحساب دارید | [2, *]:count صورتحساب دارید', - 'items_stock' => '{1} :count موجود است | [2,*] :count موجود است', 'view_all' => 'نمایش همه' ], 'docs_link' => 'https://akaunting.com/docs', + 'support_link' => 'https://akaunting.com/support', ]; diff --git a/resources/lang/fa-IR/install.php b/resources/lang/fa-IR/install.php index 5d0e462df..d6575035f 100644 --- a/resources/lang/fa-IR/install.php +++ b/resources/lang/fa-IR/install.php @@ -6,7 +6,7 @@ return [ 'refresh' => 'تازه سازی', 'steps' => [ - 'requirements' => 'Please, ask your hosting provider to fix the errors!', + 'requirements' => 'لطفاً از ارائه دهنده سرویس میزبانی خود بخواهید که ایراد را بر طرف کند!', 'language' => 'گام 1/3: انتخاب زبان', 'database' => 'مرحله 2/3: راه اندازی پایگاه داده', 'settings' => 'مرحله 3/3: شرکت و مدیریت اطلاعات', @@ -19,8 +19,9 @@ return [ 'requirements' => [ 'enabled' => ':feature باید فعال باشد!', 'disabled' => ':feature باید غیر فعال باشد!', - 'extension' => ':extension extension needs to be installed and loaded!', + 'extension' => ':افزونه نیاز است افزونه نصب و بارگذاری شود!', 'directory' => ':directory باید فابل نوشتن باشد!', + 'executable' => 'The PHP CLI executable file is not defined/working or its version is not :php_version or higher! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.', ], 'database' => [ diff --git a/resources/lang/fa-IR/invoices.php b/resources/lang/fa-IR/invoices.php index c3732b1a3..2bfbbb71a 100644 --- a/resources/lang/fa-IR/invoices.php +++ b/resources/lang/fa-IR/invoices.php @@ -2,67 +2,76 @@ return [ - 'invoice_number' => 'شماره فاکتور', - 'invoice_date' => 'تاریخ فاکتور', - 'total_price' => 'قیمت کل', - 'due_date' => 'سررسید', - 'order_number' => 'شماره فاکتور', - 'bill_to' => 'صورتحساب برای', + 'invoice_number' => 'شماره فاکتور', + 'invoice_date' => 'تاریخ فاکتور', + 'total_price' => 'قیمت کل', + 'due_date' => 'سررسید', + 'order_number' => 'شماره فاکتور', + 'bill_to' => 'صورتحساب برای', - 'quantity' => 'تعداد', - 'price' => 'قيمت', - 'sub_total' => 'جمع کل', - 'discount' => 'تخفیف', - 'tax_total' => 'مجموع مالیات', - 'total' => 'مجموع', + 'quantity' => 'تعداد', + 'price' => 'قيمت', + 'sub_total' => 'جمع کل', + 'discount' => 'تخفیف', + 'item_discount' => 'Line Discount', + 'tax_total' => 'مجموع مالیات', + 'total' => 'مجموع', - 'item_name' => 'نام آیتم | نام آیتم ها', + 'item_name' => 'نام آیتم | نام آیتم ها', - 'show_discount' => ':discount% Discount', - 'add_discount' => 'افزودن تخفیف', - 'discount_desc' => 'از جمع کل', + 'show_discount' => ':تخفیف% تخفیف', + 'add_discount' => 'افزودن تخفیف', + 'discount_desc' => 'از جمع کل', - 'payment_due' => 'سررسید پرداخت', - 'paid' => 'پرداخت شده', - 'histories' => 'تاریخچه', - 'payments' => 'پرداخت ها', - 'add_payment' => 'پرداخت', - 'mark_paid' => 'پرداخت شده', - 'mark_sent' => 'ارسال شده', - 'download_pdf' => 'دانلود PDF', - 'send_mail' => 'ارسال ایمیل', - 'all_invoices' => 'Login to view all invoices', + 'payment_due' => 'سررسید پرداخت', + 'paid' => 'پرداخت شده', + 'histories' => 'تاریخچه', + 'payments' => 'پرداخت ها', + 'add_payment' => 'پرداخت', + 'mark_paid' => 'پرداخت شده', + 'mark_sent' => 'ارسال شده', + 'mark_viewed' => 'Mark Viewed', + 'mark_cancelled' => 'Mark Cancelled', + 'download_pdf' => 'دانلود PDF', + 'send_mail' => 'ارسال ایمیل', + 'all_invoices' => 'ورود برای دیدن تمام فاکتور ها', + 'create_invoice' => 'ایجاد فاکتور', + 'send_invoice' => 'ارسال فاکتور', + 'get_paid' => 'پرداخت شده', + 'accept_payments' => 'پذیرفتن پرداخت های آنلاین', 'statuses' => [ - 'draft' => 'پیش‌ نویس', - 'sent' => 'ارسال شده', - 'viewed' => 'مشاهده شده', - 'approved' => 'تایید شده', - 'partial' => 'جزئیات', - 'paid' => 'پرداخت شده', + 'draft' => 'Draft', + 'sent' => 'Sent', + 'viewed' => 'Viewed', + 'approved' => 'Approved', + 'partial' => 'Partial', + 'paid' => 'Paid', + 'overdue' => 'Overdue', + 'unpaid' => 'Unpaid', + 'cancelled' => 'Cancelled', ], 'messages' => [ - 'email_sent' => 'فاکتور با موفقت ارسال شده است!', - 'marked_sent' => 'فاکتور با موفقت ارسال شده است!', - 'email_required' => 'هیچ آدرس ایمیل برای این مشتری موجود نیست!', - 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.', + 'email_sent' => 'Invoice email has been sent!', + 'marked_sent' => 'Invoice marked as sent!', + 'marked_paid' => 'Invoice marked as paid!', + 'marked_viewed' => 'Invoice marked as viewed!', + 'marked_cancelled' => 'Invoice marked as cancelled!', + 'email_required' => 'هیچ آدرس ایمیل برای این مشتری موجود نیست!', + 'draft' => 'این یک پیشنویس است و پس از ارسال بر روی نمودار اعمال می شود.', 'status' => [ - 'created' => 'Created on :date', - 'send' => [ + 'created' => 'ایجاد شده در تاریخ:', + 'viewed' => 'Viewed', + 'send' => [ 'draft' => 'ارسال نشده', - 'sent' => 'Sent on :date', + 'sent' => 'ارسال شده در تاریخ:', ], - 'paid' => [ + 'paid' => [ 'await' => 'در انتظار پرداخت', ], ], ], - 'notification' => [ - 'message' => 'شما این ایمیل را دریافت کردید به دلیل اینکه مشتری شما :customer مقدار :amount فاکتور دارد.', - 'button' => 'پرداخت', - ], - ]; diff --git a/resources/lang/fa-IR/items.php b/resources/lang/fa-IR/items.php index ce7cb68e4..18159017f 100644 --- a/resources/lang/fa-IR/items.php +++ b/resources/lang/fa-IR/items.php @@ -2,17 +2,7 @@ return [ - 'quantities' => 'تعداد | تعداد', 'sales_price' => 'قیمت فروش', 'purchase_price' => 'قیمت خرید', - 'sku' => 'کد کالا', - - 'notification' => [ - 'message' => [ - 'reminder' => 'You are receiving this email because only :quantity of :name has remained.', - 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.', - ], - 'button' => 'مشاهده', - ], ]; diff --git a/resources/lang/fa-IR/maintenance.php b/resources/lang/fa-IR/maintenance.php new file mode 100644 index 000000000..514800dcd --- /dev/null +++ b/resources/lang/fa-IR/maintenance.php @@ -0,0 +1,11 @@ + 'Under Maintenance', + + 'message' => 'Sorry, we\'re down for maintenance. Please, try again later!', + + 'last-updated' => 'This message was last updated :timestamp.', + +]; diff --git a/resources/lang/fa-IR/messages.php b/resources/lang/fa-IR/messages.php index f9876a1e3..9fafea372 100644 --- a/resources/lang/fa-IR/messages.php +++ b/resources/lang/fa-IR/messages.php @@ -8,25 +8,30 @@ return [ 'deleted' => ':type حذف شد!', 'duplicated' => ':type دو عدد موجود است!', 'imported' => ':type درون ریزی شد!', - 'enabled' => ':type enabled!', - 'disabled' => ':type disabled!', + 'exported' => ':type exported!', + 'enabled' => ':نوع فعال است!', + 'disabled' => ':نوع غیر فعال است!', ], 'error' => [ - 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount', + 'over_payment' => 'خطا: پرداخت اضافه نشد! مبلغی که وارد کردید از کل گذر کرد :مبلغ', 'not_user_company' => 'خطا: شما اجازه مدیریت این شرکت را ندارید!', 'customer' => 'خطا: کاربر ایجاد نشد :name از ایمیل وارد شده استفاده می کند.', 'no_file' => 'خطا: فایلی انتخاب نشده است!', - 'last_category' => 'Error: Can not delete the last :type category!', - 'invalid_apikey' => 'Error: The token entered is invalid!', - 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.', - 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.', + 'last_category' => 'خطا: نمیتوان :نوع دسته بندی قبل را پاک کرد!', + 'change_type' => 'Error: Can not change the type because it has :text related!', + 'invalid_apikey' => 'Error: The API Key entered is invalid!', + 'import_column' => 'خطا: :پیام :نام ورق :ورق. شماره خط :خط.', + 'import_sheet' => 'خطا: نام ورق معتبر نیست. لطفاً، فایل نمونه را بررسی کنید.', ], 'warning' => [ 'deleted' => 'هشدار: شما نمی توانید :name را به دلیل :text حذف کنید.', 'disabled' => 'هشدار: شما نمی توانید :name را به دلیل :text غیر فعال کنید.', - 'disable_code' => 'Warning: You are not allowed to disable or change the currency of :name because it has :text related.', + 'reconciled_tran' => 'Warning: You are not allowed to change/delete transaction because it is reconciled!', + 'reconciled_doc' => 'Warning: You are not allowed to change/delete :type because it has reconciled transactions!', + 'disable_code' => 'هشدار: شما مجاز نیستید که واحد پولی :name را تغییر دهید یا غیر فعال کنید زیرا آن با :متن در ارتباط است.', + 'payment_cancel' => 'Warning: You have cancelled your recent :method payment!', ], ]; diff --git a/resources/lang/fa-IR/modules.php b/resources/lang/fa-IR/modules.php index 686ba45aa..cfe170c2a 100644 --- a/resources/lang/fa-IR/modules.php +++ b/resources/lang/fa-IR/modules.php @@ -2,20 +2,18 @@ return [ - 'title' => 'API Token', - 'api_token' => 'Token', + 'api_key' => 'API Key', 'my_apps' => 'برنامه‌های من', + 'pre_sale' => 'پیش فروش', 'top_paid' => 'بهترین غیر رایگان', 'new' => 'جدید', 'top_free' => 'بهترین رایگان', 'free' => 'رایگان', - 'search' => 'جستجو', 'install' => 'نصب', 'buy_now' => 'خرید', - 'token_link' => 'دریافت Token.', + 'get_api_key' => 'Click here to get your API key.', 'no_apps' => 'در این بخش هیچ نرم افزاری وجود ندارد.', - 'developer' => 'آیا شما یک توسعه دهنده هستید؟با مراجعه به سایت فروشگاهی می توانید نرم افزار های خود را بسیازید و بفروشید.', - + 'become_developer' => 'Are you a developer? Here you can learn how to create an app and start selling today!', 'recommended_apps' => 'برنامه‌های توصیه شده', 'about' => 'درباره ما', @@ -37,30 +35,30 @@ return [ 'installation' => 'نصب', 'faq' => 'سوالات متداول', 'changelog' => 'تغییرات', - 'reviews' => 'نظرات', + 'reviews' => 'نظرات', ], 'installation' => [ 'header' => 'محل نصب نرم افزار', - 'download' => 'دریافت فایل :module', - 'unzip' => 'استخراج فایل :module.', - 'file_copy' => 'Copying :module files.', - 'migrate' => 'Applying :module updates.', - 'finish' => 'The update was successfully installed. You will be redirect Update Center.', - 'install' => 'نصب فایل های :module .', + 'download' => 'Downloading :module', + 'unzip' => 'Extracting :module files', + 'file_copy' => 'Copying :module files', + 'finish' => 'Finalizing :module installation', + 'redirect' => ':module installed, redirecting to updates page', + 'install' => 'Installing :module', ], 'errors' => [ - 'download' => ':module can not download!', - 'upload' => 'Downloaded :module can not saved!', - 'unzip' => ':module can not unzip!', - 'file_copy' => ':module files can not copy!', - 'migrate' => ':module migrate broken!', - 'migrate core' => ':module already latest version so then yon can not update.', + 'download' => 'Not able to download :module', + 'zip' => 'Not able to create :module zip file', + 'unzip' => 'Not able to unzip :module', + 'file_copy' => 'Not able to copy :module files', + 'finish' => 'Not able to finalize :module installation', ], 'badge' => [ - 'installed' => 'نصب شده', + 'installed' => 'نصب شده', + 'pre_sale' => 'پیش فروش', ], 'button' => [ @@ -70,14 +68,16 @@ return [ ], 'my' => [ - 'purchased' => 'خریداری شد', - 'installed' => 'نصب شده', + 'purchased' => 'خریداری شد', + 'installed' => 'نصب شده', ], 'reviews' => [ 'button' => [ - 'add' => 'اضافه کردن نظر' + 'add' => 'اضافه کردن نظر' ], - 'na' => 'هیچ بررسی وجود دارد.' - ] + + 'na' => 'هیچ بررسی وجود دارد.' + ], + ]; diff --git a/resources/lang/fa-IR/notifications.php b/resources/lang/fa-IR/notifications.php index 002f903cc..d33965903 100644 --- a/resources/lang/fa-IR/notifications.php +++ b/resources/lang/fa-IR/notifications.php @@ -5,6 +5,6 @@ return [ 'whoops' => 'آخ!', 'hello' => 'سلام!', 'salutation' => 'با احترام،
:company_name ', - 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)', + 'subcopy' => 'اگر شما هنگام کلیک کردن دکمه ":text" مشکل دارید ، آدرس URL را کپی کرده و در مرورگر وب خود بازنشانی کنید: [:url](:url)', ]; diff --git a/resources/lang/fa-IR/pagination.php b/resources/lang/fa-IR/pagination.php index 61ad705e2..876ab3bf1 100644 --- a/resources/lang/fa-IR/pagination.php +++ b/resources/lang/fa-IR/pagination.php @@ -2,8 +2,9 @@ return [ - 'previous' => '« قبلی', - 'next' => 'بعدی »', - 'showing' => 'نمایش :first تا :last از :total :typr', + 'previous' => 'پیشین', + 'next' => 'بعدی', + 'showing' => ':first-:last of :total records.', + 'page' => 'در صفحه.', ]; diff --git a/resources/lang/fa-IR/passwords.php b/resources/lang/fa-IR/passwords.php index 995269161..a90df915a 100644 --- a/resources/lang/fa-IR/passwords.php +++ b/resources/lang/fa-IR/passwords.php @@ -18,5 +18,6 @@ return [ 'sent' => 'لینک بازگردانی گذرواژه به ایمیل شما ارسال شد.', 'token' => 'مشخصه‌ی بازگردانی گذرواژه معتبر نیست.', 'user' => "ما کاربری با این نشانی ایمیل نداریم!", + 'throttle' => 'Please wait before retrying.', ]; diff --git a/resources/lang/fa-IR/reconciliations.php b/resources/lang/fa-IR/reconciliations.php index 456e11ef2..e6de5dd4c 100644 --- a/resources/lang/fa-IR/reconciliations.php +++ b/resources/lang/fa-IR/reconciliations.php @@ -2,15 +2,15 @@ return [ - 'reconcile' => 'Reconcile', - 'reconciled' => 'Reconciled', - 'closing_balance' => 'Closing Balance', - 'unreconciled' => 'Unreconciled', - 'list_transactions' => 'فهرست تراکنش‌ها', + 'reconcile' => 'مغایرت گیری', + 'reconciled' => 'مغایرت گیری شده', + 'closing_balance' => 'تراز پایان دوره', + 'unreconciled' => 'مغایرت گیری نشده', + 'transactions' => 'تراکنش‌ها', 'start_date' => 'تاریخ شروع', 'end_date' => 'تاریخ پایان', - 'cleared_amount' => 'Cleared Amount', + 'cleared_amount' => 'مبلغ تصفیه شده', 'deposit' => 'سپرده', - 'withdrawal' => 'Withdrawal', + 'withdrawal' => 'برداشت', ]; diff --git a/resources/lang/fa-IR/reports.php b/resources/lang/fa-IR/reports.php index 94a86525d..db07d8f39 100644 --- a/resources/lang/fa-IR/reports.php +++ b/resources/lang/fa-IR/reports.php @@ -12,6 +12,7 @@ return [ 'net_profit' => 'سود خالص', 'total_expenses' => 'هزینه های کل', 'net' => 'خالص', + 'income_expense' => 'Income & Expense', 'summary' => [ 'income' => 'خلاصه درآمد', @@ -20,11 +21,10 @@ return [ 'tax' => 'خلاصه مالیات', ], - 'quarter' => [ - '1' => 'Jan-Mar', - '2' => 'Apr-Jun', - '3' => 'Jul-Sep', - '4' => 'Oct-Dec', + 'charts' => [ + 'line' => 'خطی', + 'bar' => 'میله‌ای', + 'pie' => 'کیکی', ], ]; diff --git a/resources/lang/fa-IR/settings.php b/resources/lang/fa-IR/settings.php index 785a2f925..f98a12cc0 100644 --- a/resources/lang/fa-IR/settings.php +++ b/resources/lang/fa-IR/settings.php @@ -3,14 +3,18 @@ return [ 'company' => [ + 'description' => 'Change company name, email, address, tax number etc', 'name' => 'نام', 'email' => 'ایمیل', 'phone' => 'تلفن', 'address' => 'آدرس', 'logo' => 'لوگو', ], + 'localisation' => [ - 'tab' => 'موقعیت', + 'description' => 'Set fiscal year, time zone, date format and more locals', + 'financial_start' => 'شروع سال مالی', + 'timezone' => 'منطقه زمانی', 'date' => [ 'format' => 'فرمت تاریخ', 'separator' => 'جداکننده تاریخ', @@ -20,15 +24,21 @@ return [ 'slash' => 'علامت ممیز (/)', 'space' => 'فضا ( )', ], - 'timezone' => 'منطقه زمانی', 'percent' => [ 'title' => 'درصد (%) موقعیت', 'before' => 'قبل از شماره', 'after' => 'پس از شماره', ], + 'discount_location' => [ + 'name' => 'Discount Location', + 'item' => 'At line', + 'total' => 'At total', + 'both' => 'Both line and total', + ], ], + 'invoice' => [ - 'tab' => 'فاکتور', + 'description' => 'Customize invoice prefix, number, terms, footer etc', 'prefix' => 'پیشوند شماره', 'digit' => 'تعداد ارقام', 'next' => 'شماره بعدی', @@ -43,16 +53,25 @@ return [ 'rate' => 'نرخ', 'quantity_name' => 'نام مقدار', 'quantity' => 'مقدار', + 'payment_terms' => 'Payment Terms', + 'title' => 'Title', + 'subheading' => 'Subheading', + 'due_receipt' => 'Due upon receipt', + 'due_days' => 'Due within :days days', + 'choose_template' => 'Choose invoice template', + 'default' => 'Default', + 'classic' => 'Classic', + 'modern' => 'Modern', ], + 'default' => [ - 'tab' => 'پیش‌فرض‌ها', - 'account' => 'حساب پیش فرض', - 'currency' => 'واحد پول پیش فرض', - 'tax' => 'نرخ مالیات پیش فرض', - 'payment' => 'پیش فرض روش پرداخت', - 'language' => 'زبان پیش فرض', + 'description' => 'Default account, currency, language of your company', + 'list_limit' => 'Records Per Page', + 'use_gravatar' => 'Use Gravatar', ], + 'email' => [ + 'description' => 'Change the sending protocol and email templates', 'protocol' => 'پروتکل', 'php' => 'ایمیل PHP', 'smtp' => [ @@ -67,36 +86,44 @@ return [ 'sendmail' => 'Sendmail ', 'sendmail_path' => 'مسیر Sendmail', 'log' => 'رکورد های ایمیل', + + 'templates' => [ + 'subject' => 'Subject', + 'body' => 'Body', + 'tags' => 'Available Tags: :tag_list', + 'invoice_new_customer' => 'New Invoice Template (sent to customer)', + 'invoice_remind_customer' => 'Invoice Reminder Template (sent to customer)', + 'invoice_remind_admin' => 'Invoice Reminder Template (sent to admin)', + 'invoice_recur_customer' => 'Invoice Recurring Template (sent to customer)', + 'invoice_recur_admin' => 'Invoice Recurring Template (sent to admin)', + 'invoice_payment_customer' => 'Payment Received Template (sent to customer)', + 'invoice_payment_admin' => 'Payment Received Template (sent to admin)', + 'bill_remind_admin' => 'Bill Reminder Template (sent to admin)', + 'bill_recur_admin' => 'Bill Recurring Template (sent to admin)', + ], ], + 'scheduling' => [ - 'tab' => 'برنامه‌ریزی', + 'name' => 'برنامه‌ریزی', + 'description' => 'Automatic reminders and command for recurring', 'send_invoice' => 'ارسال فاکتور یادآور', 'invoice_days' => 'ارسال بعد از چند روز', 'send_bill' => 'ارسال یاد آور صورتحساب', 'bill_days' => 'تعداد روز ارسال قبل از سررسید', 'cron_command' => 'فرمان Cron', 'schedule_time' => 'ساعت به اجرا', - 'send_item_reminder'=> 'ارسال به یادآوری', - 'item_stocks' => 'ارسال زمانی که موجود باشد', ], - 'appearance' => [ - 'tab' => 'ظاهر', - 'theme' => 'قالب', - 'light' => 'روشن', - 'dark' => 'تاریک', - 'list_limit' => 'نتایج در هر صفحه', - 'use_gravatar' => 'استفاده از Gravatar', + + 'categories' => [ + 'description' => 'Unlimited categories for income, expense, and item', ], - 'system' => [ - 'tab' => 'سیستم', - 'session' => [ - 'lifetime' => 'جلسه طول عمر (دقیقه)', - 'handler' => 'مکانیزم نشست', - 'file' => 'فایل', - 'database' => 'پایگاه داده', - ], - 'file_size' => 'حداکثر اندازه فایل (MB)', - 'file_types' => 'نوع فایل مجاز', + + 'currencies' => [ + 'description' => 'Create and manage currencies and set their rates', + ], + + 'taxes' => [ + 'description' => 'Fixed, normal, inclusive, and compound tax rates', ], ]; diff --git a/resources/lang/fa-IR/taxes.php b/resources/lang/fa-IR/taxes.php index 427d24aeb..f04299073 100644 --- a/resources/lang/fa-IR/taxes.php +++ b/resources/lang/fa-IR/taxes.php @@ -7,5 +7,5 @@ return [ 'normal' => 'عادی', 'inclusive' => 'شامل', 'compound' => 'ترکیب', - + 'fixed' => 'ثابت', ]; diff --git a/resources/lang/fa-IR/validation.php b/resources/lang/fa-IR/validation.php index c476a722e..136eef639 100644 --- a/resources/lang/fa-IR/validation.php +++ b/resources/lang/fa-IR/validation.php @@ -33,16 +33,17 @@ return [ 'confirmed' => ':attribute با فیلد تکرار مطابقت ندارد.', 'date' => ':attribute یک تاریخ معتبر نیست.', 'date_format' => ':attribute با الگوی :format مطاقبت ندارد.', - 'different' => ':attribute و :other باید متفاوت باشند.', + 'different' => ':attribute و :other باید از یکدیگر متفاوت باشند.', 'digits' => ':attribute باید :digits رقم باشد.', 'digits_between' => ':attribute باید بین :min و :max رقم باشد.', 'dimensions' => 'ابعاد تصویر :attribute قابل قبول نیست.', 'distinct' => 'فیلد :attribute تکراری است.', - 'email' => ':attribute باید یک ایمیل معتبر باشد', + 'email' => ':attribute باید یک ایمیل معتبر باشد.', + 'ends_with' => 'فیلد :attribute باید با یکی از مقادیر زیر خاتمه یابد: :values', 'exists' => ':attribute انتخاب شده، معتبر نیست.', - 'file' => ':attribute باید یک فایل باشد', - 'filled' => 'فیلد :attribute الزامی است', - 'image' => ':attribute باید تصویر باشد.', + 'file' => ':attribute باید یک فایل معتبر باشد.', + 'filled' => 'فیلد :attribute باید مقدار داشته باشد.', + 'image' => ':attribute باید یک تصویر معتبر باشد.', 'in' => ':attribute انتخاب شده، معتبر نیست.', 'in_array' => 'فیلد :attribute در :other وجود ندارد.', 'integer' => ':attribute باید عدد صحیح باشد.', @@ -65,8 +66,8 @@ return [ 'not_in' => ':attribute انتخاب شده، معتبر نیست.', 'numeric' => ':attribute باید عدد باشد.', 'present' => 'فیلد :attribute باید در پارامترهای ارسالی وجود داشته باشد.', - 'regex' => 'فرمت :attribute معتبر نیست', - 'required' => 'فیلد :attribute الزامی است', + 'regex' => 'فرمت :attribute معتبر نیست.', + 'required' => 'فیلد :attribute الزامی است.', 'required_if' => 'هنگامی که :other برابر با :value است، فیلد :attribute الزامی است.', 'required_unless' => 'فیلد :attribute ضروری است، مگر آنکه :other در :values موجود باشد.', 'required_with' => 'در صورت وجود فیلد :values، فیلد :attribute الزامی است.', @@ -80,11 +81,11 @@ return [ 'string' => ':attribute باید برابر با :size کاراکتر باشد.', 'array' => ':attribute باسد شامل :size آیتم باشد.', ], - 'string' => 'فیلد :attribute باید متن باشد.', + 'string' => 'فیلد :attribute باید رشته باشد.', 'timezone' => 'فیلد :attribute باید یک منطقه زمانی قابل قبول باشد.', 'unique' => ':attribute قبلا انتخاب شده است.', - 'uploaded' => 'آپلود فایل :attribute موفقیت آمیز نبود.', - 'url' => 'فرمت آدرس :attribute اشتباه است.', + 'uploaded' => 'بارگذاری فایل :attribute موفقیت آمیز نبود.', + 'url' => ':attribute معتبر نمی‌باشد.', /* |-------------------------------------------------------------------------- @@ -99,10 +100,11 @@ return [ 'custom' => [ 'attribute-name' => [ - 'rule-name' => 'custom-message', + 'rule-name' => 'custom-message', ], - 'invalid_currency' => 'فرمت آدرس :attribute اشتباه است.', - 'invalid_amount' => ':attribute وارد شده، معتبر نیست.', + 'invalid_currency' => 'فرمت آدرس :attribute اشتباه است.', + 'invalid_amount' => ':attribute وارد شده، معتبر نیست.', + 'invalid_extension' => 'The file extension is invalid.', ], /* diff --git a/resources/lang/fa-IR/dashboard.php b/resources/lang/fa-IR/widgets.php similarity index 56% rename from resources/lang/fa-IR/dashboard.php rename to resources/lang/fa-IR/widgets.php index a7248d603..4796f84e4 100644 --- a/resources/lang/fa-IR/dashboard.php +++ b/resources/lang/fa-IR/widgets.php @@ -2,12 +2,12 @@ return [ - 'total_incomes' => 'کل درآمد', - 'receivables' => 'مطالبات', - 'open_invoices' => 'فاکتورها باز', + 'total_income' => 'کل درآمد', + 'receivables' => 'دریافتنی', + 'open_invoices' => 'فاکتورهای باز', 'overdue_invoices' => 'فاکتورها سر رسیده', 'total_expenses' => 'هزینه های کل', - 'payables' => 'Payables', + 'payables' => 'پرداختنی', 'open_bills' => 'صورتحساب های باز', 'overdue_bills' => 'صورتحساب های سررسید شده', 'total_profit' => 'کل سود', @@ -15,10 +15,9 @@ return [ 'overdue_profit' => 'سود سررسید شده', 'cash_flow' => 'جریان نقدی', 'no_profit_loss' => 'بدون سود از دست رفته', - 'incomes_by_category' => 'درآمد بر اساس بخش بندی', - 'expenses_by_category' => 'هزینه بر اساس بخش بندی', - 'account_balance' => 'مانده حساب', - 'latest_incomes' => 'آخرین درآمد', + 'income_by_category' => 'درآمد بر اساس گروه‌بندی', + 'expenses_by_category' => 'هزینه بر اساس گروه‌بندی', + 'account_balance' => 'موجودی حساب', + 'latest_income' => 'آخرین درآمد', 'latest_expenses' => 'آخرین هزینه ها', - ]; diff --git a/resources/lang/hi-IN/bills.php b/resources/lang/hi-IN/bills.php index 366abac5d..28669061c 100644 --- a/resources/lang/hi-IN/bills.php +++ b/resources/lang/hi-IN/bills.php @@ -13,7 +13,7 @@ return [ 'price' => 'मूल्य', 'sub_total' => 'पूर्ण योग', 'discount' => 'छूट', - 'item_discount' => 'Line Discount', + 'item_discount' => 'पंक्ति डिस्काउंट', 'tax_total' => 'कर राशि', 'total' => 'कुल', @@ -31,7 +31,7 @@ return [ 'add_payment' => 'भुगतान जोड़ें', 'mark_paid' => 'मार्क करे की भुगतान किया हुआ है', 'mark_received' => 'प्राप्त किए हुए में मार्क करे', - 'mark_cancelled' => 'Mark Cancelled', + 'mark_cancelled' => 'रद्द किए हुए में मार्क करे', 'download_pdf' => 'डाउनलोड PDF', 'send_mail' => 'ईमेल भेजें', 'create_bill' => 'बिल बनाएं', @@ -45,13 +45,13 @@ return [ 'paid' => 'भुगतान किया', 'overdue' => 'समय पर भुगतान नहीं किया', 'unpaid' => 'भुगतान नहीं किया है', - 'cancelled' => 'Cancelled', + 'cancelled' => 'रद्द कर दिया', ], 'messages' => [ - 'marked_received' => 'Bill marked as received!', + 'marked_received' => 'बिल स्वीकार किये के रूप में मार्क किया गया!', 'marked_paid' => 'बिल भुगतान के रूप में मार्क किया गया!', - 'marked_cancelled' => 'Bill marked as cancelled!', + 'marked_cancelled' => 'बिल रद्द के रूप में मार्क किया गया!', 'draft' => 'यह एक ड्राफ्ट बिल है और इसे प्राप्त होने के बाद चार्ट पर प्रतिबिंबित किया जाएगा।', 'status' => [ diff --git a/resources/lang/hi-IN/bulk_actions.php b/resources/lang/hi-IN/bulk_actions.php index 4b86107f5..e78871903 100644 --- a/resources/lang/hi-IN/bulk_actions.php +++ b/resources/lang/hi-IN/bulk_actions.php @@ -15,7 +15,7 @@ return [ 'paid' => 'क्या आप वाकई चयनित चालान को भुगतान के रूप में चिह्नित करना चाहते हैं?|क्या आप सुनिश्चित हैं कि आप चयनित चालान को भुगतान के रूप में चिह्नित करना चाहते हैं?', 'sent' => 'क्या आप सुनिश्चित हैं कि आप चयनित चालान को भेजे गए के रूप में चिह्नित करना चाहते हैं?|क्या आप सुनिश्चित हैं कि आप चयनित चालान को भेजे गए के रूप में चिह्नित करना चाहते हैं?', 'received' => 'क्या आप वाकई चयनित बिल को प्राप्त किये गए के रूप में चिह्नित करना चाहते हैं?|क्या आप वाकई चयनित बिलों को प्राप्त किये गए के रूप में चिह्नित करना चाहते हैं?', - 'cancelled' => 'Are you sure you want to cancel selected invoice/bill?|Are you sure you want to cancel selected invoices/bills?', + 'cancelled' => 'क्या आप वाकई चयनित चालान/बिल को रद्द करना चाहते हैं?|क्या आप वाकई चयनित चालान/बिल को रद्द करना चाहते हैं?', ], ]; diff --git a/resources/lang/hi-IN/invoices.php b/resources/lang/hi-IN/invoices.php index 154c71561..900fb11b6 100644 --- a/resources/lang/hi-IN/invoices.php +++ b/resources/lang/hi-IN/invoices.php @@ -13,7 +13,7 @@ return [ 'price' => 'कीमत', 'sub_total' => 'पूर्ण योग', 'discount' => 'छूट', - 'item_discount' => 'Line Discount', + 'item_discount' => 'पंक्ति डिस्काउंट', 'tax_total' => 'कुल कर', 'total' => 'कुल', @@ -31,7 +31,7 @@ return [ 'mark_paid' => 'मार्क करे की भुगतान किया हुआ है', 'mark_sent' => 'मार्क करे की भेजा गया', 'mark_viewed' => 'मार्क किया हुआ देखे', - 'mark_cancelled' => 'Mark Cancelled', + 'mark_cancelled' => 'रद्द किए हुए में मार्क करे', 'download_pdf' => 'डाउनलोड PDF', 'send_mail' => 'ईमेल भेजें', 'all_invoices' => 'सभी चालान देखने के लिए लॉगिन करें', @@ -49,15 +49,15 @@ return [ 'paid' => 'भुगतान किया है', 'overdue' => 'समय पर भुगतान नहीं किया', 'unpaid' => 'भुगतान नहीं किया है', - 'cancelled' => 'Cancelled', + 'cancelled' => 'रद्द कर दिया', ], 'messages' => [ 'email_sent' => 'चालान ईमेल भेजा गया है!', - 'marked_sent' => 'भेजे गए के रूप में मार्क किया गया!', + 'marked_sent' => 'चालान भेजे गए के रूप में मार्क किया गया!', 'marked_paid' => 'चालान भुगतान के रूप में मार्क किया गया!', - 'marked_viewed' => 'Invoice marked as viewed!', - 'marked_cancelled' => 'Invoice marked as cancelled!', + 'marked_viewed' => 'चालान देखे गए के रूप में मार्क किया गया!', + 'marked_cancelled' => 'चालान रद्द के रूप में मार्क किया गया!', 'email_required' => 'इस ग्राहक के लिए कोई ईमेल पता नहीं!', 'draft' => 'यह एक ड्राफ्ट चालान है और इसे भेजे जाने के बाद चार्ट में प्रतिबिंबित होगा।', diff --git a/resources/lang/hi-IN/modules.php b/resources/lang/hi-IN/modules.php index f11bffd78..0b513eb18 100644 --- a/resources/lang/hi-IN/modules.php +++ b/resources/lang/hi-IN/modules.php @@ -9,7 +9,6 @@ return [ 'new' => 'नया', 'top_free' => 'टॉप फ़्री', 'free' => 'फ़्री', - 'search' => 'खोज', 'install' => 'इंस्टॉल करें', 'buy_now' => 'अभी खरीदें', 'get_api_key' => 'अपनी एपीआई कुंजी प्राप्त करने के लिए यहां क्लिक करें।', diff --git a/resources/lang/hi-IN/settings.php b/resources/lang/hi-IN/settings.php index 0dba551f3..42c54191b 100644 --- a/resources/lang/hi-IN/settings.php +++ b/resources/lang/hi-IN/settings.php @@ -30,10 +30,10 @@ return [ 'after' => 'नंबर के बाद', ], 'discount_location' => [ - 'name' => 'Discount Location', - 'item' => 'At line', - 'total' => 'At total', - 'both' => 'Both line and total', + 'name' => 'छूट का स्थान', + 'item' => 'रेखा पर', + 'total' => 'कुल पर', + 'both' => 'लाइन और कुल दोनों पर', ], ], diff --git a/resources/lang/ja-JP/install.php b/resources/lang/ja-JP/install.php index 8138ad440..f5093af2b 100644 --- a/resources/lang/ja-JP/install.php +++ b/resources/lang/ja-JP/install.php @@ -21,7 +21,7 @@ return [ 'disabled' => ':feature 無効にする必要があります!', 'extension' => ':extension エクステンション 拡張機能をインストールしてロードする必要があります!', 'directory' => ':directory ディレクトリは書き込み可能である必要があります!', - 'executable' => 'The PHP CLI executable file is not defined/working or its version is not :php_version or higher! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.', + 'executable' => 'PHP CLI 実行可能ファイルが定義されていないか、機能していないか、バージョンが :php_version 以降ではありません! PHP_BINARY または PHP_PATH 環境変数を正しく設定するようにホスティング会社に依頼してください。', ], 'database' => [ diff --git a/resources/lang/lt-LT/auth.php b/resources/lang/lt-LT/auth.php index 7b7fe014b..29dca4fb8 100644 --- a/resources/lang/lt-LT/auth.php +++ b/resources/lang/lt-LT/auth.php @@ -13,16 +13,18 @@ return [ 'current_email' => 'Dabartinis el. paštas', 'reset' => 'Atstatyti', 'never' => 'niekada', - + 'landing_page' => 'Pirmas puslapis', + 'password' => [ 'current' => 'Slaptažodis', 'current_confirm' => 'Slaptažodžio patvirtinimas', 'new' => 'Naujas slaptažodis', 'new_confirm' => 'Naujo slaptažodžio patvirtinimas', ], - + 'error' => [ 'self_delete' => 'Negalite ištrinti savęs!', + 'self_disable' => 'Klaida: negalite išjungti savęs!', 'no_company' => 'Nėra priskirtos kompanijos. Prašome susisiekti su sistemos administratoriumi.', ], diff --git a/resources/lang/lt-LT/bills.php b/resources/lang/lt-LT/bills.php index 9eb9d3d94..edf2c8c35 100644 --- a/resources/lang/lt-LT/bills.php +++ b/resources/lang/lt-LT/bills.php @@ -13,6 +13,7 @@ return [ 'price' => 'Kaina', 'sub_total' => 'Tarpinė suma', 'discount' => 'Nuolaida', + 'item_discount' => 'Nuolaida', 'tax_total' => 'Mokesčių suma', 'total' => 'Iš viso', @@ -28,7 +29,9 @@ return [ 'histories' => 'Istorijos', 'payments' => 'Mokėjimai', 'add_payment' => 'Pridėti mokėjimą', + 'mark_paid' => 'Pažymėti kaip apmokėtą', 'mark_received' => 'Pažymėti kaip gautą', + 'mark_cancelled' => 'Pažymėti kaip atšauktą', 'download_pdf' => 'Parsisiųsti PDF', 'send_mail' => 'Siųsti laišką', 'create_bill' => 'Sukurti sąskaitą', @@ -40,10 +43,15 @@ return [ 'received' => 'Gauta', 'partial' => 'Dalinis', 'paid' => 'Apmokėta', + 'overdue' => 'Vėluojanti', + 'unpaid' => 'Neapmokėta', + 'cancelled' => 'Atšaukta', ], 'messages' => [ - 'received' => 'Sąskaita gauta sėkmingai!', + 'marked_received' => 'Sąskaita pažymėta kaip gauta!', + 'marked_paid' => 'Sąskaita pažymėta kaip apmokėta!', + 'marked_cancelled' => 'Sąskaita pažymėta kaip atšaukta!', 'draft' => 'Tai yra JUODRAŠTINĖ sąskaita ir ji bus įtraukta į grafikus po to kai bus gauta.', 'status' => [ diff --git a/resources/lang/lt-LT/bulk_actions.php b/resources/lang/lt-LT/bulk_actions.php new file mode 100644 index 000000000..c45c3107a --- /dev/null +++ b/resources/lang/lt-LT/bulk_actions.php @@ -0,0 +1,21 @@ + 'Veiksmas|Veiksmai', + 'selected' => 'pasirinkta', + 'no_action' => 'Nėra veiksmų', + + 'message' => [ + 'duplicate' => 'Ar tikrai norite duplikuoti pasirinktą įrašą?', + 'delete' => 'Ar tikrai norite ištrinti pasirinktą įrašą?|Ar tikrai norite duplikuoti pasirinktus įrašus?', + 'export' => 'Ar tikrai norite eksportuoti pasirinktą įrašą?|Ar tikrai norite eksportuoti pasirinktus įrašus?', + 'enable' => 'Ar tikrai norite įjungti pasirinktą įrašą?|Ar tikrai norite įjungti pasirinktus įrašus?', + 'disable' => 'Ar tikrai norite išjungti pasirinktą įrašą?|Ar tikrai norite išjungti pasirinktus įrašus?', + 'paid' => 'Ar tikrai norite pasirinktą sąskaitą-faktūrą pažymėti kaip apmokėtą?|Ar tikrai norite pasirinktas sąskaitas-faktūras pažymėti kaip apmokėtas?', + 'sent' => 'Ar tikrai norite pasirinktą sąskaitą-faktūrą pažymėti kaip išsiųstą?|Ar tikrai norite pasirinktas sąskaitas-faktūras pažymėti kaip išsiųstas?', + 'received' => 'Ar tikrai norite pasirinktą sąskaitą pažymėti kaip gautą?|Ar tikrai norite pasirinktas sąskaitas pažymėti kaip gautas?', + 'cancelled' => 'Ar tikrai norite atšaukti pasirinktą sąskaitą?|Ar tikrai norite atšaukti pasirinktas sąskaitas?', + ], + +]; diff --git a/resources/lang/lt-LT/companies.php b/resources/lang/lt-LT/companies.php index cbe3111b4..a1f975c85 100644 --- a/resources/lang/lt-LT/companies.php +++ b/resources/lang/lt-LT/companies.php @@ -4,10 +4,11 @@ return [ 'domain' => 'Domenas', 'logo' => 'Logotipas', - 'manage' => 'Valdyti įmones', - 'all' => 'Visos įmonės', + 'error' => [ - 'delete_active' => 'Klaida: Negalite ištrinti aktyvios įmonės, pirma turite pakeisti ją!', + 'not_user_company' => 'Klaida: Jūs neturite teisės valdyti šios kompanijos!', + 'delete_active' => 'Klaida: Negalite ištrinti aktyvios įmonės. Pirma turite pasikeisti ją!', + 'disable_active' => 'Klaida: Negalite atjungti aktyvios įmonės. Pirma turite pasikeisti ją!', ], ]; diff --git a/resources/lang/lt-LT/customers.php b/resources/lang/lt-LT/customers.php index 0bcea13ca..6529516a0 100644 --- a/resources/lang/lt-LT/customers.php +++ b/resources/lang/lt-LT/customers.php @@ -2,15 +2,11 @@ return [ - 'allow_login' => 'Leisti prisijungti?', + 'can_login' => 'Gali prisijungti?', 'user_created' => 'Vartotojas sukurtas', 'error' => [ - 'email' => 'Šis el. paštas jau užimtas.' + 'email' => 'Šis el. paštas jau užimtas.', ], - 'notification' => [ - 'message' => ':customer sumokėjo :amount pagal sąskaitą: :invoice_number.', - 'button' => 'Rodyti', - ], ]; diff --git a/resources/lang/lt-LT/dashboards.php b/resources/lang/lt-LT/dashboards.php new file mode 100644 index 000000000..a570fb12a --- /dev/null +++ b/resources/lang/lt-LT/dashboards.php @@ -0,0 +1,11 @@ + [ + 'not_user_dashboard' => 'Klaida: Jūs neturite teisės keisti šio puslapio!', + 'delete_last' => 'Error: Can not delete the last dashboard. Please, create a new one first!', + 'disable_last' => 'Error: Can not disable the last dashboard. Please, create a new one first!', + ], + +]; diff --git a/resources/lang/lt-LT/demo.php b/resources/lang/lt-LT/demo.php index 0df5628dc..f8efcba65 100644 --- a/resources/lang/lt-LT/demo.php +++ b/resources/lang/lt-LT/demo.php @@ -2,15 +2,33 @@ return [ - 'accounts_cash' => 'Grynieji pinigai', - 'categories_deposit' => 'Depozitas', - 'categories_sales' => 'Pardavimai', - 'currencies_usd' => 'JAV doleris', - 'currencies_eur' => 'Euras', - 'currencies_gbp' => 'Svarai sterlingai', - 'currencies_try' => 'Turkijos Lira', - 'taxes_exempt' => 'Neapmokestinamos pajamos', - 'taxes_normal' => 'Įprastiniai mokesčiai', - 'taxes_sales' => 'PVM', + 'accounts' => [ + 'cash' => 'Grynieji pinigai', + ], + + 'categories' => [ + 'deposit' => 'Depozitas', + 'sales' => 'Pardavimai', + ], + + 'currencies' => [ + 'usd' => 'JAV doleris', + 'eur' => 'Euras', + 'gbp' => 'Svarai sterlingai', + 'try' => 'Turkijos Lira', + ], + + 'offline_payments' => [ + 'cash' => 'Grynieji pinigai', + 'bank' => 'Bankinis pervedimas', + ], + + 'reports' => [ + 'income' => 'Mėnesio pajamų santrauka pagal kategoriją.', + 'expense' => 'Mėnesio išlaidų santrauka pagal kategoriją.', + 'income_expense' => 'Mėnesio pajamos/išlaidos pagal kategoriją.', + 'tax' => 'Ketvirčio mokesčių santrauka.', + 'profit_loss' => 'Ketvirčio pelnas/nuostolis pagal kategoriją.', + ], ]; diff --git a/resources/lang/lt-LT/email_templates.php b/resources/lang/lt-LT/email_templates.php new file mode 100644 index 000000000..656e154e1 --- /dev/null +++ b/resources/lang/lt-LT/email_templates.php @@ -0,0 +1,50 @@ + [ + 'subject' => 'Sąskaita-faktūra {invoice_number} sukurta', + 'body' => 'Gerb. {customer_name},

Mes jums paruošėme sąskaitą-faktūrą: {invoice_number}.

Galite peržiūrėti sąskaitą-faktūrą ir apmokėti spausdami čia: {invoice_number}.

Prašome kreiptis, jei turite klausimų.

Linkėjimai,
{company_name}', + ], + + 'invoice_remind_customer' => [ + 'subject' => 'Priminimas del {invoice_number} sąskaitos-faktūros', + 'body' => 'Dear {customer_name},

This is an overdue notice for {invoice_number} invoice.

The invoice total is {invoice_total} and was due {invoice_due_date}.

You can see the invoice details and proceed with the payment from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_remind_admin' => [ + 'subject' => '{invoice_number} invoice overdue notice', + 'body' => 'Hello,

{customer_name} has received an overdue notice for {invoice_number} invoice.

The invoice total is {invoice_total} and was due {invoice_due_date}.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_recur_customer' => [ + 'subject' => 'Sąskaita-faktūra {invoice_number} sukurta', + 'body' => 'Dear {customer_name},

Based on your recurring circle, we have prepared the following invoice for you: {invoice_number}.

You can see the invoice details and proceed with the payment from the following link: {invoice_number}.

Feel free to contact us for any question.

Best Regards,
{company_name}', + ], + + 'invoice_recur_admin' => [ + 'subject' => '{invoice_number} recurring invoice created', + 'body' => 'Hello,

Based on {customer_name} recurring circle, {invoice_number} invoice has been automatically created.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'invoice_payment_customer' => [ + 'subject' => 'Payment received for {invoice_number} invoice', + 'body' => 'Dear {customer_name},

Thank you for the payment. Find the payment details below:

-------------------------------------------------
Amount: {transaction_total}
Date: {transaction_paid_date}
Invoice Number: {invoice_number}
-------------------------------------------------

You can always see the invoice details from the following link: {invoice_number}.

Feel free to contact us for any question.

Best Regards,
{company_name}', + ], + + 'invoice_payment_admin' => [ + 'subject' => 'Payment received for {invoice_number} invoice', + 'body' => 'Hello,

{customer_name} recorded a payment for {invoice_number} invoice.

You can see the invoice details from the following link: {invoice_number}.

Best Regards,
{company_name}', + ], + + 'bill_remind_admin' => [ + 'subject' => '{bill_number} bill reminding notice', + 'body' => 'Hello,

This is a reminding notice for {bill_number} bill to {vendor_name}.

The bill total is {bill_total} and is due {bill_due_date}.

You can see the bill details from the following link: {bill_number}.

Best Regards,
{company_name}', + ], + + 'bill_recur_admin' => [ + 'subject' => '{bill_number} recurring bill created', + 'body' => 'Hello,

Based on {vendor_name} recurring circle, {bill_number} invoice has been automatically created.

You can see the bill details from the following link: {bill_number}.

Best Regards,
{company_name}', + ], + +]; diff --git a/resources/lang/lt-LT/errors.php b/resources/lang/lt-LT/errors.php new file mode 100644 index 000000000..6e47c4f8f --- /dev/null +++ b/resources/lang/lt-LT/errors.php @@ -0,0 +1,23 @@ + [ + '403' => 'Negalima Prieiga', + '404' => 'Puslapis nerastas', + '500' => 'Oi... Kažkas įvyko ne taip', + ], + + 'header' => [ + '403' => '403 Negalima', + '404' => '404 Nerasta', + '500' => '500 Vidinė serverio klaida', + ], + + 'message' => [ + '403' => 'Negalite matyti šio puslapio.', + '404' => 'Negalėjome rasti puslapio kurio ieškojote.', + '500' => 'Mes tuoj pat stengsimės tai sutvarkyti.', + ], + +]; diff --git a/resources/lang/lt-LT/general.php b/resources/lang/lt-LT/general.php index cc8e57a00..221056cc8 100644 --- a/resources/lang/lt-LT/general.php +++ b/resources/lang/lt-LT/general.php @@ -2,6 +2,7 @@ return [ + 'dashboards' => 'Pagrindinis|Pagrindinis', 'items' => 'Prekės', 'incomes' => 'Pajamos', 'invoices' => 'Sąskaitos', @@ -41,8 +42,17 @@ return [ 'contacts' => 'Kontaktai', 'reconciliations' => 'Reconciliation|Reconciliations', 'developers' => 'Kūrėjas|Kūrėjai', + 'schedules' => 'Kalendorius|Kalendoriai', + 'groups' => 'Grupė|Grupės', + 'charts' => 'Lentelė|Lentelės', + 'localisations' => 'Lokalizacija|Lokalizacijos', + 'defaults' => 'Numatytasis|Numatytieji', + 'widgets' => 'Widget|Widgets', + 'templates' => 'Šablonas|Šablonai', + 'sales' => 'Pardavimas|Pardavimai', + 'purchases' => 'Pirkimas|Pirkimai', - 'dashboard' => 'Pradžia', + 'welcome' => 'Sveiki', 'banking' => 'Bankai ir finansai', 'general' => 'Bendras', 'no_records' => 'Nėra įrašų.', @@ -54,15 +64,19 @@ return [ 'no' => 'Ne', 'na' => 'N/D', 'daily' => 'Kasdien', + 'weekly' => 'Savaitinis', 'monthly' => 'Kas mėnesį', 'quarterly' => 'Kas ketvirtį', 'yearly' => 'Kasmet', 'add' => 'Pridėti', 'add_new' => 'Pridėti naują', + 'add_income' => 'Pridėti Pajamas', + 'add_expense' => 'Pridėti Išlaidas', 'show' => 'Rodyti', 'edit' => 'Redaguoti', 'delete' => 'Ištrinti', 'send' => 'Siųsti', + 'share' => 'Dalintis', 'download' => 'Parsisiųsti', 'delete_confirm' => 'Ar tikrai norite ištrinti?', 'name' => 'Vardas', @@ -80,9 +94,11 @@ return [ 'reference' => 'Nuoroda', 'attachment' => 'Priedai', 'change' => 'Pakeisti', + 'change_type' => 'Pakeisti :type', 'switch' => 'Perjungti', 'color' => 'Spalva', 'save' => 'Išsaugoti', + 'confirm' => 'Patvirtinti', 'cancel' => 'Atšaukti', 'loading' => 'Kraunama...', 'from' => 'Nuo', @@ -112,20 +128,47 @@ return [ 'disable' => 'Išjungti', 'select_all' => 'Pažymėti viską', 'unselect_all' => 'Panaikinti visų žymėjimą', - 'go_to' => 'Eiti į :name', 'created_date' => 'Sukūrimo data', 'period' => 'Periodas', + 'frequency' => 'Dažnumas', 'start' => 'Pradžia', 'end' => 'Pabaiga', 'clear' => 'Išvalyti', 'difference' => 'Skirtumas', + 'footer' => 'Apačia', + 'start_date' => 'Pradžios Data', + 'end_date' => 'Pabaigos Data', + 'basis' => 'Basis', + 'accrual' => 'Accrual', + 'cash' => 'Grynieji pinigai', + 'group_by' => 'Grupuoti pagal', + 'accounting' => 'Buhalterija', + 'sort' => 'Rikiuoti', + 'width' => 'Plotis', + 'month' => 'Mėnuo', + 'year' => 'Metai', + 'type_item_name' => 'Įveskite pavadinimą', + 'no_data' => 'Nėra duomenų', + 'no_matching_data' => 'Nieko nerasta', + 'clear_cache' => 'Išvalyti talpyklą', + 'go_to_dashboard' => 'Eiti į pagrindinį', + + 'card' => [ + 'name' => 'Vardas (ant kortelės)', + 'number' => 'Kortelės numeris', + 'expiration_date' => 'Galiojimo data', + 'cvv' => 'Kortelės CVV kodas', + ], 'title' => [ 'new' => 'Naujas :type', 'edit' => 'Redaguoti :type', + 'delete' => 'Ištrinti :type', 'create' => 'Sukurti :type', 'send' => 'Siųsti :type', 'get' => 'Gauti :type', + 'add' => 'Pridėti :type', + 'manage' => 'Valdyti :type', ], 'form' => [ @@ -134,6 +177,7 @@ return [ 'field' => '- Pasirinkite :field -', 'file' => 'Pasirinkti failą', ], + 'add_new' => 'Pridėti naują :field', 'no_file_selected' => 'Nepasirinktas failas...', ], @@ -144,4 +188,19 @@ return [ 'this_month' => 'Šis mėnuo', 'last_month' => 'Praėjęs mėnuo', ], + + 'empty' => [ + 'documentation' => 'Peržiūrėkite dokumentaciją.', + 'items' => 'Items can be products or services. You can use items when creating invoices and bills to have the price, tax etc fields populated.', + 'invoices' => 'Sąskaitos-faktūros gali būti vienkartinės arba pasikartojančios. Jūs galite siųsti jas savo klientams ir gauti apmokėjimus.', + 'revenues' => 'Revenue is a paid income transaction. It can be an independent record (i.e. deposit) or attached to an invoice.', + 'customers' => 'Customers are required if you want to create invoices. They may also log in to Client Portal and see their balance.', + 'bills' => 'Bills can be one time or recurring. They indicate what you owe your vendors for the products or services you purchase.', + 'payments' => 'Payment is a paid expense transaction. It can be an independent record (i.e. food receipt) or attached to a bill.', + 'vendors' => 'Vendors are required if you want to create bills. You can see the balance you owe and filter reports by the vendor.', + 'transfers' => 'Transfers allow you to move money from one account to another, whether they use the same currency or not.', + 'taxes' => 'Taxes are used to apply extra fees to invoices and bills. Your financials are affected by these regulatory taxes.', + 'reconciliations' => 'Bank reconciliation is a process performed to ensure that your company bank records are also correct.', + ], + ]; diff --git a/resources/lang/lt-LT/header.php b/resources/lang/lt-LT/header.php index 0ec4cec2a..2ef22909c 100644 --- a/resources/lang/lt-LT/header.php +++ b/resources/lang/lt-LT/header.php @@ -8,9 +8,9 @@ return [ 'counter' => '{0} Pranešimų nėra|{1} Turite :count pranešimą|[2,*] Turite :count pranešimus', 'overdue_invoices' => '{1} :count vėluojanti sąskaita|[2,*] :count vėluojančios sąskaitos', 'upcoming_bills' => '{1} :count artėjantis mokėjimasl|[2,*] :count artėjantys mokėjimai', - 'items_stock' => '{1} :count prekės nebėra|[2,*] :count prekių nebėra', 'view_all' => 'Peržiūrėti visus' ], 'docs_link' => 'https://akaunting.com/docs', + 'support_link' => 'https://akaunting.com/support', ]; diff --git a/resources/lang/lt-LT/install.php b/resources/lang/lt-LT/install.php index eef0204c3..c7859a049 100644 --- a/resources/lang/lt-LT/install.php +++ b/resources/lang/lt-LT/install.php @@ -21,6 +21,7 @@ return [ 'disabled' => ': feature turi būti išjungta!', 'extension' => ':extension turi būti įrašytas ir įjungtas!', 'directory' => ':directory direktorijoje turi būti leidžiama įrašyti!', + 'executable' => 'The PHP CLI executable file is not defined/working or its version is not :php_version or higher! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.', ], 'database' => [ diff --git a/resources/lang/lt-LT/invoices.php b/resources/lang/lt-LT/invoices.php index 897b401cc..149539b75 100644 --- a/resources/lang/lt-LT/invoices.php +++ b/resources/lang/lt-LT/invoices.php @@ -13,6 +13,7 @@ return [ 'price' => 'Kaina', 'sub_total' => 'Tarpinė suma', 'discount' => 'Nuolaida', + 'item_discount' => 'Nuolaida', 'tax_total' => 'Mokesčių suma', 'total' => 'Iš viso', @@ -29,12 +30,15 @@ return [ 'add_payment' => 'Pridėti mokėjimą', 'mark_paid' => 'Pažymėti kaip apmokėtą', 'mark_sent' => 'Pažymėti kaip išsiųstą', + 'mark_viewed' => 'Pažymėti kaip peržiūrėtą', + 'mark_cancelled' => 'Pažymėti kaip atšauktą', 'download_pdf' => 'Parsisiųsti PDF', 'send_mail' => 'Siųsti laišką', 'all_invoices' => 'Prisijunkite norėdami peržiūrėti visas sąskaitas faktūras', 'create_invoice' => 'Sukurti sąskaitą-faktūrą', 'send_invoice' => 'Siųsti sąskaitą-faktūrą', 'get_paid' => 'Gauti apmokėjimą', + 'accept_payments' => 'Priimti atsiskaitymus internetu', 'statuses' => [ 'draft' => 'Juodraštis', @@ -43,16 +47,23 @@ return [ 'approved' => 'Patvirtinta', 'partial' => 'Dalinis', 'paid' => 'Apmokėta', + 'overdue' => 'Vėluojanti', + 'unpaid' => 'Neapmokėta', + 'cancelled' => 'Atšaukta', ], 'messages' => [ - 'email_sent' => 'Sąskaitą-faktūrą išsiųsta sėkmingai!', - 'marked_sent' => 'SF pažymėta kaip išsiųsta sėkmingai!', + 'email_sent' => 'Sąskaita-faktūra išsiųsta el. paštu!', + 'marked_sent' => 'Sąskaita-faktūra pažymėta kaip išsiųsta!', + 'marked_paid' => 'Sąskaita-faktūra pažymėta kaip apmokėta!', + 'marked_viewed' => 'Sąskaita-faktūra pažymėta kaip peržiūrėta!', + 'marked_cancelled' => 'Sąskaita-faktūra pažymėta kaip atšaukta!', 'email_required' => 'Klientas neturi el. pašto!', 'draft' => 'Tai yra JUODRAŠTINĖ sąskaita ir ji bus įtraukta į grafikus po to kai bus išsiųsta.', 'status' => [ 'created' => 'Sukurta :date', + 'viewed' => 'Peržiūrėta', 'send' => [ 'draft' => 'Neišsiųsta', 'sent' => 'Išsiųsta :date', @@ -63,9 +74,4 @@ return [ ], ], - 'notification' => [ - 'message' => 'Jūs gavote šį laišką, nes :customer jums išrašė sąskaitą už :amount.', - 'button' => 'Apmokėti dabar', - ], - ]; diff --git a/resources/lang/lt-LT/items.php b/resources/lang/lt-LT/items.php index c4229e72b..0e79d33d1 100644 --- a/resources/lang/lt-LT/items.php +++ b/resources/lang/lt-LT/items.php @@ -2,17 +2,7 @@ return [ - 'quantities' => 'Kiekis|Kiekiai', 'sales_price' => 'Pardavimo kaina', 'purchase_price' => 'Pirkimo kaina', - 'sku' => 'Prekės kodas', - - 'notification' => [ - 'message' => [ - 'reminder' => 'Jūs gavote šį laišką, nes :name liko tik :quantity vnt.', - 'out_of_stock' => 'Jūs gavote šį laišką, nes baigiasi :name likutis.', - ], - 'button' => 'Peržiūrėti dabar', - ], ]; diff --git a/resources/lang/lt-LT/maintenance.php b/resources/lang/lt-LT/maintenance.php new file mode 100644 index 000000000..ac8ab8f86 --- /dev/null +++ b/resources/lang/lt-LT/maintenance.php @@ -0,0 +1,11 @@ + 'puslapis tvarkomas', + + 'message' => 'Sorry, we\'re down for maintenance. Please, try again later!', + + 'last-updated' => 'This message was last updated :timestamp.', + +]; diff --git a/resources/lang/lt-LT/messages.php b/resources/lang/lt-LT/messages.php index 679ae5d23..9a3d48a47 100644 --- a/resources/lang/lt-LT/messages.php +++ b/resources/lang/lt-LT/messages.php @@ -8,6 +8,7 @@ return [ 'deleted' => ':type ištrintas!', 'duplicated' => ':type duplikuotas!', 'imported' => ':type importuotas!', + 'exported' => ':type išeksportuotas!', 'enabled' => ':type įjungtas!', 'disabled' => ':type išjungtas!', ], @@ -18,7 +19,8 @@ return [ 'customer' => 'Klaida: Vartotojas nebuvo sukurtas! :name jau naudoja šį el. pašto adresą.', 'no_file' => 'Klaida: Nepasirinktas failas!', 'last_category' => 'Klaida: Negalite ištrinti paskutinės :type kategorijos!', - 'invalid_apikey' => 'Klaida: Neteisingas raktas!', + 'change_type' => 'Klaida: Negalima pakeisti tipo, nes jis yra susijęs su :text!', + 'invalid_apikey' => 'Klaida: Neteisingas raktas!', 'import_column' => 'Klaida: :message :sheet lape. Eilutė: :line.', 'import_sheet' => 'Klaida: Lapo pavadinimas neteisingas Peržiūrėkite pavyzdį.', ], @@ -26,7 +28,10 @@ return [ 'warning' => [ 'deleted' => 'Negalima ištrinti :name, nes jis yra susijęs su :text.', 'disabled' => 'Negalima išjungti :name, nes jis yra susijęs su :text.', + 'reconciled_tran' => 'Warning: You are not allowed to change/delete transaction because it is reconciled!', + 'reconciled_doc' => 'Warning: You are not allowed to change/delete :type because it has reconciled transactions!', 'disable_code' => 'Įspėjimas: Negalima išjungti arba pakeisti valiutos :name, nes ji susijusi su :text.', + 'payment_cancel' => 'Warning: You have cancelled your recent :method payment!', ], ]; diff --git a/resources/lang/lt-LT/modules.php b/resources/lang/lt-LT/modules.php index 4d7948d2d..e7b4f3ad3 100644 --- a/resources/lang/lt-LT/modules.php +++ b/resources/lang/lt-LT/modules.php @@ -2,9 +2,9 @@ return [ - 'title' => 'API raktas', - 'api_token' => 'Raktas', + 'api_key' => 'API Raktas', 'my_apps' => 'Mano programėlės', + 'pre_sale' => 'Pre-Sale', 'top_paid' => 'Geriausios mokamos', 'new' => 'Nauji', 'top_free' => 'Geriausios nemokamos', @@ -12,10 +12,9 @@ return [ 'search' => 'Paieška', 'install' => 'Įrašyti', 'buy_now' => 'Pirkti dabar', - 'token_link' => 'Spauskite čia, kad gautumėte savo API raktą.', + 'get_api_key' => 'Norėdami gauti API Raktą spauskite čia.', 'no_apps' => 'Nėra programėlių šioje kategorijoje.', - 'developer' => 'Ar esate kūrėjas? Čia galite sužinoti, kaip sukurti programėlę ir pradėti pardavinėti šiandien!', - + 'become_developer' => 'Are you a developer? Here you can learn how to create an app and start selling today!', 'recommended_apps' => 'Rekomenduojamos programėlės', 'about' => 'Apie', @@ -37,30 +36,30 @@ return [ 'installation' => 'Įrašymas', 'faq' => 'DUK', 'changelog' => 'Pakeitimų sąrašas', - 'reviews' => 'Atsiliepimai', + 'reviews' => 'Atsiliepimai', ], 'installation' => [ 'header' => 'Įrašymas', - 'download' => 'Parsisiunčiamas :module failas.', + 'download' => 'Parsisiunčiamas :module', 'unzip' => 'Išskleidžiami :module failai.', 'file_copy' => 'Kopijuojami :module failai.', - 'migrate' => 'Įrašomi :module atnaujinimai.', - 'finish' => 'Atnaujinimai įrašyti. Jūs būsite nukreipti į Atnaujinimų Centrą.', - 'install' => 'Įrašomi :module failai.', + 'finish' => 'Užbaigiamas :module įrašymas', + 'redirect' => ':module įrašytas, nukreipiam į atnuajinimų puslapį', + 'install' => 'Įrašomas :module', ], 'errors' => [ - 'download' => 'Negalima parsisiųsti :module!', - 'upload' => 'Negalima įrašyti parsiųsto modulio :module!', - 'unzip' => 'Nagelima išpakuoti (unzip) :module!', - 'file_copy' => 'Negalima kopijuoti :module failų!', - 'migrate' => ':module migracija sugadinta!', - 'migrate core' => ':module yra naujausios versijos.', + 'download' => 'Negalima parsisiųsti :module', + 'zip' => 'Not able to create :module zip file', + 'unzip' => 'Not able to unzip :module', + 'file_copy' => 'Not able to copy :module files', + 'finish' => 'Not able to finalize :module installation', ], 'badge' => [ - 'installed' => 'Įrašytas', + 'installed' => 'Įrašytas', + 'pre_sale' => 'Pre-Sale', ], 'button' => [ @@ -70,14 +69,16 @@ return [ ], 'my' => [ - 'purchased' => 'Nupirkta', - 'installed' => 'Įrašyta', + 'purchased' => 'Nupirkta', + 'installed' => 'Įrašyta', ], 'reviews' => [ 'button' => [ - 'add' => 'Pridėti apžvalgą' + 'add' => 'Pridėti apžvalgą' ], - 'na' => 'Nėra apžvalgų.' - ] + + 'na' => 'Nėra apžvalgų.' + ], + ]; diff --git a/resources/lang/lt-LT/pagination.php b/resources/lang/lt-LT/pagination.php index a69c048e3..b78a134bf 100644 --- a/resources/lang/lt-LT/pagination.php +++ b/resources/lang/lt-LT/pagination.php @@ -2,8 +2,9 @@ return [ - 'previous' => '« Ankstesnis', - 'next' => 'Sekantis »', - 'showing' => 'Rodoma nuo :first iki :last iš :total :type', + 'previous' => 'Ankstesnis', + 'next' => 'Sekantis', + 'showing' => ':first-:last iš :total.', + 'page' => 'puslapyje.', ]; diff --git a/resources/lang/lt-LT/passwords.php b/resources/lang/lt-LT/passwords.php index 4fb2c8538..83f06b1da 100644 --- a/resources/lang/lt-LT/passwords.php +++ b/resources/lang/lt-LT/passwords.php @@ -18,5 +18,6 @@ return [ 'sent' => 'Slaptažodžio keitimo nuoroda išsiųsta!', 'token' => 'Šis slaptažodžio atnaujinimas negaliojantis.', 'user' => "Vartotojas su tokiu el. pašu nerastas.", + 'throttle' => 'Prašome palaukti prieš bandant dar kartą.', ]; diff --git a/resources/lang/lt-LT/reconciliations.php b/resources/lang/lt-LT/reconciliations.php index 02ab28038..9f500f992 100644 --- a/resources/lang/lt-LT/reconciliations.php +++ b/resources/lang/lt-LT/reconciliations.php @@ -6,7 +6,7 @@ return [ 'reconciled' => 'Reconciled', 'closing_balance' => 'Galutinis likutis', 'unreconciled' => 'Unreconciled', - 'list_transactions' => 'Operacijos', + 'transactions' => 'Transactions', 'start_date' => 'Pradžios data', 'end_date' => 'Pabaigos data', 'cleared_amount' => 'Cleared Amount', diff --git a/resources/lang/lt-LT/reports.php b/resources/lang/lt-LT/reports.php index 18653f3c1..d7940c729 100644 --- a/resources/lang/lt-LT/reports.php +++ b/resources/lang/lt-LT/reports.php @@ -12,6 +12,7 @@ return [ 'net_profit' => 'Pelnas prieš mokesčius', 'total_expenses' => 'Iš viso išlaidų', 'net' => 'NET', + 'income_expense' => 'Pajamos / išlaidos', 'summary' => [ 'income' => 'Pajamų suvestinė', @@ -20,11 +21,10 @@ return [ 'tax' => 'Mokesčių suvestinė', ], - 'quarter' => [ - '1' => 'Sau-Kov', - '2' => 'Bal-Bir', - '3' => 'Lie-Rugs', - '4' => 'Spa-Gruo', + 'charts' => [ + 'line' => 'Eilutė', + 'bar' => 'Stulpelis', + 'pie' => 'Skritulinė', ], ]; diff --git a/resources/lang/lt-LT/settings.php b/resources/lang/lt-LT/settings.php index a783c27e7..2db080738 100644 --- a/resources/lang/lt-LT/settings.php +++ b/resources/lang/lt-LT/settings.php @@ -3,14 +3,16 @@ return [ 'company' => [ + 'description' => 'Pakeisti kompanijos pavadinimą, el. paštą, adresą ir t.t.', 'name' => 'Pavadinimas', 'email' => 'El. paštas', 'phone' => 'Telefonas', 'address' => 'Adresas', 'logo' => 'Logotipas', ], + 'localisation' => [ - 'tab' => 'Lokalizacija', + 'description' => 'Nustatyti biudžetinius metus, laiko juostas, datos formatą ir kitus lokalizacijos nustatymus.', 'financial_start' => 'Finansinių metų pradžia', 'timezone' => 'Laiko juosta', 'date' => [ @@ -27,9 +29,16 @@ return [ 'before' => 'Prieš skaičių', 'after' => 'Po skaičiaus', ], + 'discount_location' => [ + 'name' => 'Nuolaidos vieta', + 'item' => 'Eilutėje', + 'total' => 'Iš viso', + 'both' => 'Both line and total', + ], ], + 'invoice' => [ - 'tab' => 'Sąskaita faktūra', + 'description' => 'Customize invoice prefix, number, terms, footer etc', 'prefix' => 'Sąskaitos serija', 'digit' => 'Skaitmenų kiekis', 'next' => 'Kitas numeris', @@ -44,16 +53,25 @@ return [ 'rate' => 'Kursas', 'quantity_name' => 'Kiekio pavadinimas', 'quantity' => 'Kiekis', + 'payment_terms' => 'Mokėjimo Sąlygos', + 'title' => 'Pavadinimas', + 'subheading' => 'Poraštė', + 'due_receipt' => 'Due upon receipt', + 'due_days' => 'Due within :days days', + 'choose_template' => 'Pasirinkite sąskaitos-faktūros šabloną.', + 'default' => 'Numatytas', + 'classic' => 'Klasikinis', + 'modern' => 'Modernus', ], + 'default' => [ - 'tab' => 'Numatytieji', - 'account' => 'Numatytoji įmonė', - 'currency' => 'Numatytoji valiuta', - 'tax' => 'Numatytasis mokesčių tarifas', - 'payment' => 'Numatytasis mokėjimo būdas', - 'language' => 'Numatytoji kalba', + 'description' => 'Numatytoji sąskaita, valuta, kalba', + 'list_limit' => 'Įrašų puslapyje', + 'use_gravatar' => 'Naudoti Gravatar', ], + 'email' => [ + 'description' => 'Change the sending protocol and email templates', 'protocol' => 'Protokolas', 'php' => 'PHP Mail', 'smtp' => [ @@ -68,36 +86,44 @@ return [ 'sendmail' => 'Sendmail', 'sendmail_path' => 'Sendmail kelias', 'log' => 'Prisijungti el. Paštu', + + 'templates' => [ + 'subject' => 'Tema', + 'body' => 'Tekstas', + 'tags' => 'Available Tags: :tag_list', + 'invoice_new_customer' => 'New Invoice Template (sent to customer)', + 'invoice_remind_customer' => 'Invoice Reminder Template (sent to customer)', + 'invoice_remind_admin' => 'Invoice Reminder Template (sent to admin)', + 'invoice_recur_customer' => 'Invoice Recurring Template (sent to customer)', + 'invoice_recur_admin' => 'Invoice Recurring Template (sent to admin)', + 'invoice_payment_customer' => 'Payment Received Template (sent to customer)', + 'invoice_payment_admin' => 'Payment Received Template (sent to admin)', + 'bill_remind_admin' => 'Bill Reminder Template (sent to admin)', + 'bill_recur_admin' => 'Bill Recurring Template (sent to admin)', + ], ], + 'scheduling' => [ - 'tab' => 'Planavimas', + 'name' => 'Planavimas', + 'description' => 'Automatic reminders and command for recurring', 'send_invoice' => 'Siųsti SF priminimą', 'invoice_days' => 'Siųsti pavėlavus', 'send_bill' => 'Siųsti sąskaitos priminimą', 'bill_days' => 'Siųsti prieš pavėlavimą', 'cron_command' => 'Cron komanda', 'schedule_time' => 'Paleidimo valanda', - 'send_item_reminder'=> 'Siųsti priminimą', - 'item_stocks' => 'Siųsti kai atsiras prekių', ], - 'appearance' => [ - 'tab' => 'Išvaizda', - 'theme' => 'Tema', - 'light' => 'Šviesi', - 'dark' => 'Tamsi', - 'list_limit' => 'Įrašų puslapyje', - 'use_gravatar' => 'Naudoti Gravatar', + + 'categories' => [ + 'description' => 'Unlimited categories for income, expense, and item', ], - 'system' => [ - 'tab' => 'Sistema', - 'session' => [ - 'lifetime' => 'Sesijos galiojimo laikas (min)', - 'handler' => 'Sesijos valdiklis', - 'file' => 'Failas', - 'database' => 'Duomenų bazė', - ], - 'file_size' => 'Maksimalus failo dydis (MB)', - 'file_types' => 'Leidžiami failų tipai', + + 'currencies' => [ + 'description' => 'Create and manage currencies and set their rates', + ], + + 'taxes' => [ + 'description' => 'Fixed, normal, inclusive, and compound tax rates', ], ]; diff --git a/resources/lang/lt-LT/taxes.php b/resources/lang/lt-LT/taxes.php index 52809a77f..c574f8080 100644 --- a/resources/lang/lt-LT/taxes.php +++ b/resources/lang/lt-LT/taxes.php @@ -7,5 +7,5 @@ return [ 'normal' => 'Normalus', 'inclusive' => 'Imtinai', 'compound' => 'Sudėtinis', - + 'fixed' => 'Fiksuota', ]; diff --git a/resources/lang/lt-LT/validation.php b/resources/lang/lt-LT/validation.php index 0207badb5..aea160f61 100644 --- a/resources/lang/lt-LT/validation.php +++ b/resources/lang/lt-LT/validation.php @@ -16,13 +16,13 @@ return [ 'accepted' => ':Attribute turi būti pažymėtas.', 'active_url' => ':Attribute nėra galiojantis internetinis adresas.', 'after' => ':Attribute reikšmė turi būti po :date datos.', - 'after_or_equal' => ':Attribute privalo būti data lygi arba vėlesnė už :date.', + 'after_or_equal' => 'Lauko :attribute reikšmė privalo būti data lygi arba vėlesnė negu :date.', 'alpha' => ':Attribute gali turėti tik raides.', 'alpha_dash' => ':Attribute gali turėti tik raides, skaičius ir brūkšnelius.', 'alpha_num' => 'Laukas :attribute gali turėti tik raides ir skaičius.', 'array' => ':Attribute turi būti masyvas.', 'before' => ':Attribute turi būti data prieš :date.', - 'before_or_equal' => ':Attribute privalo būti data ankstenė arba lygi :date.', + 'before_or_equal' => 'Lauko :attribute reikšmė privalo būti data lygi arba ankstesnė negu :date.', 'between' => [ 'numeric' => ':Attribute reikšmė turi būti tarp :min ir :max.', 'file' => ':Attribute failo dydis turi būti tarp :min ir :max kilobaitų.', @@ -39,13 +39,14 @@ return [ 'dimensions' => 'Lauke :attribute įkeltas paveiksliukas neatitinka išmatavimų reikalavimo.', 'distinct' => 'Laukas :attribute pasikartoja.', 'email' => 'Lauko :attribute reikšmė turi būti galiojantis el. pašto adresas.', + 'ends_with' => 'Laukas :attribute turi baigtis vienu iš: :values', 'exists' => 'Pasirinkta negaliojanti :attribute reikšmė.', - 'file' => ':Attribute privalo būti failas.', + 'file' => ':attribute turi būti failas.', 'filled' => 'Laukas :attribute turi būti užpildytas.', 'image' => 'Lauko :attribute reikšmė turi būti paveikslėlis.', 'in' => 'Pasirinkta negaliojanti :attribute reikšmė.', 'in_array' => 'Laukas :attribute neegzistuoja :other lauke.', - 'integer' => 'Lauko :attribute reikšmė turi būti veikasis skaičius.', + 'integer' => 'Lauko :attribute reikšmė turi būti sveikasis skaičius.', 'ip' => 'Lauko :attribute reikšmė turi būti galiojantis IP adresas.', 'json' => 'Lauko :attribute reikšmė turi būti JSON tekstas.', 'max' => [ @@ -83,7 +84,7 @@ return [ 'string' => 'Laukas :attribute turi būti tekstinis.', 'timezone' => 'Lauko :attribute reikšmė turi būti galiojanti laiko zona.', 'unique' => 'Tokia :attribute reikšmė jau pasirinkta.', - 'uploaded' => 'Nepavyko įkelti :attribute.', + 'uploaded' => 'Nepavyko įkelti :attribute lauko.', 'url' => 'Negaliojantis lauko :attribute formatas.', /* @@ -99,10 +100,11 @@ return [ 'custom' => [ 'attribute-name' => [ - 'rule-name' => 'Pasirinktinis pranešimas', + 'rule-name' => 'Pasirinktinis pranešimas', ], - 'invalid_currency' => ':Attribute kodas neteisingas.', - 'invalid_amount' => ':Attribute kiekis yra neteisingas.', + 'invalid_currency' => ':Attribute kodas neteisingas.', + 'invalid_amount' => ':Attribute kiekis yra neteisingas.', + 'invalid_extension' => 'Negalimas failo tipas.', ], /* diff --git a/resources/lang/lt-LT/dashboard.php b/resources/lang/lt-LT/widgets.php similarity index 78% rename from resources/lang/lt-LT/dashboard.php rename to resources/lang/lt-LT/widgets.php index d61df9240..785d28894 100644 --- a/resources/lang/lt-LT/dashboard.php +++ b/resources/lang/lt-LT/widgets.php @@ -2,7 +2,7 @@ return [ - 'total_incomes' => 'Iš viso pajamų', + 'total_income' => 'Iš viso pajamų', 'receivables' => 'Gautinos sumos', 'open_invoices' => 'Neapmokėtos sąskaitos faktūros', 'overdue_invoices' => 'Vėluojančios sąskaitos faktūros', @@ -11,14 +11,13 @@ return [ 'open_bills' => 'Neapmokėtos sąskaitas', 'overdue_bills' => 'Vėluojančios sąskaitos', 'total_profit' => 'Pelnas iš viso', - 'open_profit' => 'Pelnas prieš mokesčius', + 'open_profit' => 'Open Profit', 'overdue_profit' => 'Vėluojantis pelnas', 'cash_flow' => 'Grynųjų pinigų srautai', 'no_profit_loss' => 'Nėra nuostolių', - 'incomes_by_category' => 'Pajamos pagal kategoriją', + 'income_by_category' => 'Pajamos pagal kategoriją', 'expenses_by_category' => 'Išlaidos pagal kategoriją', 'account_balance' => 'Sąskaitos likutis', - 'latest_incomes' => 'Naujausios pajamos', + 'latest_income' => 'Naujausios pajamos', 'latest_expenses' => 'Paskutinis išlaidos', - ]; diff --git a/resources/lang/pt-BR/general.php b/resources/lang/pt-BR/general.php index 88e3ce394..a6a4de20f 100644 --- a/resources/lang/pt-BR/general.php +++ b/resources/lang/pt-BR/general.php @@ -81,7 +81,7 @@ return [ 'delete_confirm' => 'Confirma a exclusão :name :type?', 'name' => 'Nome', 'email' => 'E-mail', - 'tax_number' => 'Número de identificação fisca', + 'tax_number' => 'Número de identificação fiscal', 'phone' => 'Telefone', 'address' => 'Endereço', 'website' => 'Site', diff --git a/resources/lang/pt-BR/modules.php b/resources/lang/pt-BR/modules.php index 39db039ab..45341ccc8 100644 --- a/resources/lang/pt-BR/modules.php +++ b/resources/lang/pt-BR/modules.php @@ -9,7 +9,6 @@ return [ 'new' => 'Novo', 'top_free' => 'Melhores Grátis', 'free' => 'Gratis', - 'search' => 'Pesquisa', 'install' => 'Instalar', 'buy_now' => 'Comprar Agora', 'get_api_key' => 'Clique aqui para obter sua chave de API.', diff --git a/resources/lang/pt-BR/reports.php b/resources/lang/pt-BR/reports.php index d671ed781..ea25fbe4f 100644 --- a/resources/lang/pt-BR/reports.php +++ b/resources/lang/pt-BR/reports.php @@ -10,7 +10,7 @@ return [ 'profit_loss' => 'Receitas & Despesas', 'gross_profit' => 'Lucro Bruto', 'net_profit' => 'Lucro líquido', - 'total_expenses' => 'Total Despesas', + 'total_expenses' => 'Despesas Totais', 'net' => 'Líquido', 'income_expense' => 'Receita vs Despesa', diff --git a/resources/lang/pt-BR/widgets.php b/resources/lang/pt-BR/widgets.php index d4db19cf1..08b9a7004 100644 --- a/resources/lang/pt-BR/widgets.php +++ b/resources/lang/pt-BR/widgets.php @@ -2,11 +2,11 @@ return [ - 'total_income' => 'Rendimentos totais', + 'total_income' => 'Receitas totais', 'receivables' => 'Recebíveis', 'open_invoices' => 'Faturas em aberto', 'overdue_invoices' => 'Faturas vencidas', - 'total_expenses' => 'Total Despesas', + 'total_expenses' => 'Despesas Totais', 'payables' => 'Pagamentos', 'open_bills' => 'Contas em Aberto', 'overdue_bills' => 'Contas Vencidas', @@ -18,6 +18,6 @@ return [ 'income_by_category' => 'Resultados por Categoria', 'expenses_by_category' => 'Despesas por Categoria', 'account_balance' => 'Saldo da Conta', - 'latest_income' => 'Últimos Rendimentos', + 'latest_income' => 'Últimas Receitas', 'latest_expenses' => 'Últimas Despesas', ]; diff --git a/resources/lang/pt-PT/auth.php b/resources/lang/pt-PT/auth.php index a68bc946f..ae643c3c8 100644 --- a/resources/lang/pt-PT/auth.php +++ b/resources/lang/pt-PT/auth.php @@ -24,7 +24,7 @@ return [ 'error' => [ 'self_delete' => 'Erro: Não pode se excluir!', - 'self_disable' => 'Error: Can not disable yourself!', + 'self_disable' => 'Não se pode desativar!', 'no_company' => 'Erro: Nenhuma empresa atribuída à sua conta. Por favor, contacte o administrador do sistema.', ], diff --git a/resources/lang/pt-PT/bills.php b/resources/lang/pt-PT/bills.php index f83669530..5cc9076c6 100644 --- a/resources/lang/pt-PT/bills.php +++ b/resources/lang/pt-PT/bills.php @@ -13,6 +13,7 @@ return [ 'price' => 'Preço', 'sub_total' => 'Subtotal', 'discount' => 'Desconto', + 'item_discount' => 'Line Discount', 'tax_total' => 'Imposto', 'total' => 'Total', @@ -30,6 +31,7 @@ return [ 'add_payment' => 'Pagar Conta', 'mark_paid' => 'Mark Paid', 'mark_received' => 'Marcar como Recebida', + 'mark_cancelled' => 'Mark Cancelled', 'download_pdf' => 'Transferir em PDF', 'send_mail' => 'Enviar e-mail', 'create_bill' => 'Criar Conta', @@ -43,11 +45,13 @@ return [ 'paid' => 'Paga', 'overdue' => 'Vencida', 'unpaid' => 'Por Pagar', + 'cancelled' => 'Cancelled', ], 'messages' => [ - 'received' => 'Conta marcada como recebida com sucesso!', + 'marked_received' => 'Bill marked as received!', 'marked_paid' => 'Bill marked as paid!', + 'marked_cancelled' => 'Bill marked as cancelled!', 'draft' => 'Isto é um RASCUNHO da conta e será refletida nos gráficos depois de recebida.', 'status' => [ diff --git a/resources/lang/pt-PT/bulk_actions.php b/resources/lang/pt-PT/bulk_actions.php index 495357740..f2338881d 100644 --- a/resources/lang/pt-PT/bulk_actions.php +++ b/resources/lang/pt-PT/bulk_actions.php @@ -15,6 +15,7 @@ return [ 'paid' => 'Are you sure you want to mark selected invoice as paid?|Are you sure you want to mark selected invoices as paid?', 'sent' => 'Are you sure you want to mark selected invoice as sent?|Are you sure you want to mark selected invoices as sent?', 'received' => 'Are you sure you want to mark selected bill as received?|Are you sure you want to mark selected bills as received?', + 'cancelled' => 'Are you sure you want to cancel selected invoice/bill?|Are you sure you want to cancel selected invoices/bills?', ], ]; diff --git a/resources/lang/pt-PT/dashboards.php b/resources/lang/pt-PT/dashboards.php index cdee3cb28..54706fa30 100644 --- a/resources/lang/pt-PT/dashboards.php +++ b/resources/lang/pt-PT/dashboards.php @@ -3,9 +3,9 @@ return [ 'error' => [ - 'not_user_dashboard' => 'Error: You are not allowed to change this dashboard!', - 'delete_last' => 'Error: Can not delete the last dashboard. Please, create a new one first!', - 'disable_last' => 'Error: Can not disable the last dashboard. Please, create a new one first!', + 'not_user_dashboard' => 'Não tem permissão para alterar este painel!', + 'delete_last' => 'Não é possível apagar o último painel. Por favor, crie um novo primeiro!', + 'disable_last' => 'Não é possível desativar o último painel. Por favor, crie um novo primeiro!', ], ]; diff --git a/resources/lang/pt-PT/demo.php b/resources/lang/pt-PT/demo.php index df6afba2e..f0f94b7a0 100644 --- a/resources/lang/pt-PT/demo.php +++ b/resources/lang/pt-PT/demo.php @@ -24,11 +24,11 @@ return [ ], 'reports' => [ - 'income' => 'Monthly income summary by category.', - 'expense' => 'Monthly expense summary by category.', - 'income_expense' => 'Monthly income vs expense by category.', - 'tax' => 'Quarterly tax summary.', - 'profit_loss' => 'Quarterly profit & loss by category.', + 'income' => 'Resumo mensal de receitas por categoria', + 'expense' => 'Resumo mensal de despesas por categoria.', + 'income_expense' => 'Receitas vs despesas mensais por categoria.', + 'tax' => 'Resumo trimestral de impostos.', + 'profit_loss' => 'Lucro & perda trimestral por categoria.', ], ]; diff --git a/resources/lang/pt-PT/install.php b/resources/lang/pt-PT/install.php index 59976d538..c9ffbb129 100644 --- a/resources/lang/pt-PT/install.php +++ b/resources/lang/pt-PT/install.php @@ -21,6 +21,7 @@ return [ 'disabled' => ':feature precisa estar desativada!', 'extension' => ':extensão extensão precisa estar instalada e carregada!', 'directory' => 'O diretório :directory precisa de permissão para escrita!', + 'executable' => 'The PHP CLI executable file is not defined/working or its version is not :php_version or higher! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.', ], 'database' => [ diff --git a/resources/lang/pt-PT/invoices.php b/resources/lang/pt-PT/invoices.php index a8c008afc..bbeeb887e 100644 --- a/resources/lang/pt-PT/invoices.php +++ b/resources/lang/pt-PT/invoices.php @@ -13,6 +13,7 @@ return [ 'price' => 'Preço', 'sub_total' => 'Subtotal', 'discount' => 'Desconto', + 'item_discount' => 'Line Discount', 'tax_total' => 'Total de imposto', 'total' => 'Total', @@ -30,6 +31,7 @@ return [ 'mark_paid' => 'Marcar como Pago', 'mark_sent' => 'Marcar como Enviada', 'mark_viewed' => 'Mark Viewed', + 'mark_cancelled' => 'Mark Cancelled', 'download_pdf' => 'Transferir em PDF', 'send_mail' => 'Enviar E-mail', 'all_invoices' => 'Faça o login para ver todas as faturas', @@ -47,12 +49,15 @@ return [ 'paid' => 'Paid', 'overdue' => 'Overdue', 'unpaid' => 'Por Pagar', + 'cancelled' => 'Cancelled', ], 'messages' => [ 'email_sent' => 'Invoice email has been sent!', 'marked_sent' => 'Invoice marked as sent!', 'marked_paid' => 'Invoice marked as paid!', + 'marked_viewed' => 'Invoice marked as viewed!', + 'marked_cancelled' => 'Invoice marked as cancelled!', 'email_required' => 'Nenhum endereço de e-mail para este cliente!', 'draft' => 'Isto é um RASCUNHO da fatura e será refletida nos gráficos depois de enviada.', diff --git a/resources/lang/pt-PT/modules.php b/resources/lang/pt-PT/modules.php index fcfc170fd..6645d5d70 100644 --- a/resources/lang/pt-PT/modules.php +++ b/resources/lang/pt-PT/modules.php @@ -9,7 +9,6 @@ return [ 'new' => 'Recentes', 'top_free' => 'Melhores Grátis', 'free' => 'GRÁTIS', - 'search' => 'Pesquisar', 'install' => 'Instalar', 'buy_now' => 'Comprar Agora', 'get_api_key' => 'Click here to get your API key.', diff --git a/resources/lang/pt-PT/passwords.php b/resources/lang/pt-PT/passwords.php index 3d1c64ca4..db8d386c9 100644 --- a/resources/lang/pt-PT/passwords.php +++ b/resources/lang/pt-PT/passwords.php @@ -13,11 +13,11 @@ return [ | */ - 'password' => 'A senha deve conter no mínimo 6 caracteres e ser igual à confirmação.', - 'reset' => 'A senha foi redefinida!', - 'sent' => 'O link para redefinição de senha foi enviado para o seu e-mail!', - 'token' => 'Token para recuperação de senha inválido.', + 'password' => 'A password necessita conter, pelo menos, 6 caracteres e corresponder à sua confirmacao.', + 'reset' => 'A sua password foi redefinida!', + 'sent' => 'Enviámos um e-mail com o link para redefinir a sua password!', + 'token' => 'Token para recuperação da password inválido.', 'user' => "Não encontramos nenhum utilizador com esse endereço de e-mail.", - 'throttle' => 'Please wait before retrying.', + 'throttle' => 'Por favor, aguarde antes de tentar novamente.', ]; diff --git a/resources/lang/pt-PT/reconciliations.php b/resources/lang/pt-PT/reconciliations.php index 8b96f3bcf..f99990725 100644 --- a/resources/lang/pt-PT/reconciliations.php +++ b/resources/lang/pt-PT/reconciliations.php @@ -6,7 +6,7 @@ return [ 'reconciled' => 'Reconciliado', 'closing_balance' => 'Balanço Final', 'unreconciled' => 'Não Reconciliado', - 'transactions' => 'Transactions', + 'transactions' => 'Transações', 'start_date' => 'Data Inicial', 'end_date' => 'Data Final', 'cleared_amount' => 'Montante Apurado', diff --git a/resources/lang/pt-PT/reports.php b/resources/lang/pt-PT/reports.php index bec6c9d78..1615c072b 100644 --- a/resources/lang/pt-PT/reports.php +++ b/resources/lang/pt-PT/reports.php @@ -12,7 +12,7 @@ return [ 'net_profit' => 'Lucro Líquido', 'total_expenses' => 'Despesas Totais', 'net' => 'Líquido', - 'income_expense' => 'Income & Expense', + 'income_expense' => 'Receita & Despesa', 'summary' => [ 'income' => 'Resumo das Receitas', @@ -22,9 +22,9 @@ return [ ], 'charts' => [ - 'line' => 'Line', - 'bar' => 'Bar', - 'pie' => 'Pie', + 'line' => 'Linha', + 'bar' => 'Barras', + 'pie' => 'Circular', ], ]; diff --git a/resources/lang/pt-PT/settings.php b/resources/lang/pt-PT/settings.php index 18778cd1e..10a9216ef 100644 --- a/resources/lang/pt-PT/settings.php +++ b/resources/lang/pt-PT/settings.php @@ -29,6 +29,12 @@ return [ 'before' => 'Antes do Número', 'after' => 'Depois do Número', ], + 'discount_location' => [ + 'name' => 'Discount Location', + 'item' => 'At line', + 'total' => 'At total', + 'both' => 'Both line and total', + ], ], 'invoice' => [ diff --git a/resources/lang/pt-PT/validation.php b/resources/lang/pt-PT/validation.php index a8e1cb693..1b3bd9c14 100644 --- a/resources/lang/pt-PT/validation.php +++ b/resources/lang/pt-PT/validation.php @@ -104,7 +104,7 @@ return [ ], 'invalid_currency' => 'O código do :attribute é inválido.', 'invalid_amount' => 'O montante do campo :attribute não é válido.', - 'invalid_extension' => 'The file extension is invalid.', + 'invalid_extension' => 'A extensão do ficheiro é inválida.', ], /* diff --git a/resources/lang/pt-PT/widgets.php b/resources/lang/pt-PT/widgets.php index f9fe1fce6..b2d469e7a 100644 --- a/resources/lang/pt-PT/widgets.php +++ b/resources/lang/pt-PT/widgets.php @@ -2,22 +2,22 @@ return [ - 'total_income' => 'Total Income', - 'receivables' => 'Receivables', - 'open_invoices' => 'Open Invoices', - 'overdue_invoices' => 'Overdue Invoices', - 'total_expenses' => 'Total Expenses', - 'payables' => 'Payables', - 'open_bills' => 'Open Bills', - 'overdue_bills' => 'Overdue Bills', - 'total_profit' => 'Total Profit', - 'open_profit' => 'Open Profit', - 'overdue_profit' => 'Overdue Profit', - 'cash_flow' => 'Cash Flow', - 'no_profit_loss' => 'No Profit Loss', - 'income_by_category' => 'Income By Category', - 'expenses_by_category' => 'Expenses By Category', - 'account_balance' => 'Account Balance', - 'latest_income' => 'Latest Income', - 'latest_expenses' => 'Latest Expenses', + 'total_income' => 'Rendimento Total', + 'receivables' => 'A Receber', + 'open_invoices' => 'Faturas em Aberto', + 'overdue_invoices' => 'Faturas Vencidas', + 'total_expenses' => 'Despesas Totais', + 'payables' => 'A Pagar', + 'open_bills' => 'Contas em Aberto', + 'overdue_bills' => 'Contas Vencidas', + 'total_profit' => 'Lucro Total', + 'open_profit' => 'Lucro em Aberto', + 'overdue_profit' => 'Lucro Vencido', + 'cash_flow' => 'Fluxo de Caixa', + 'no_profit_loss' => 'Sem Perda de Lucro', + 'income_by_category' => 'Rendimento por Categoria', + 'expenses_by_category' => 'Despesas por Categoria', + 'account_balance' => 'Saldo da Conta', + 'latest_income' => 'Últimas Receitas', + 'latest_expenses' => 'Últimas Despesas', ]; diff --git a/resources/views/auth/users/index.blade.php b/resources/views/auth/users/index.blade.php index ecce5dccd..17790fdcc 100644 --- a/resources/views/auth/users/index.blade.php +++ b/resources/views/auth/users/index.blade.php @@ -87,10 +87,12 @@ diff --git a/resources/views/banking/reconciliations/create.blade.php b/resources/views/banking/reconciliations/create.blade.php index a5475ad20..9ef1ff572 100644 --- a/resources/views/banking/reconciliations/create.blade.php +++ b/resources/views/banking/reconciliations/create.blade.php @@ -16,9 +16,9 @@
- {{ Form::dateGroup('started_at', trans('reconciliations.start_date'), 'calendar', ['id' => 'started_at', 'class' => 'form-control datepicker', 'required' => 'required', 'date-format' => 'Y-m-d', 'autocomplete' => 'off'], request('started_at'), 'col-xl-3') }} + {{ Form::dateGroup('started_at', trans('reconciliations.start_date'), 'calendar', ['id' => 'started_at', 'class' => 'form-control datepicker', 'required' => 'required', 'date-format' => 'Y-m-d', 'autocomplete' => 'off'], request('started_at', Date::now()->firstOfMonth()->toDateString()), 'col-xl-3') }} - {{ Form::dateGroup('ended_at', trans('reconciliations.end_date'), 'calendar', ['id' => 'ended_at', 'class' => 'form-control datepicker', 'required' => 'required', 'date-format' => 'Y-m-d', 'autocomplete' => 'off'], request('ended_at'), 'col-xl-3') }} + {{ Form::dateGroup('ended_at', trans('reconciliations.end_date'), 'calendar', ['id' => 'ended_at', 'class' => 'form-control datepicker', 'required' => 'required', 'date-format' => 'Y-m-d', 'autocomplete' => 'off'], request('ended_at', Date::now()->endOfMonth()->toDateString()), 'col-xl-3') }} {{ Form::moneyGroup('closing_balance', trans('reconciliations.closing_balance'), 'balance-scale', ['required' => 'required', 'autofocus' => 'autofocus', 'currency' => $currency], request('closing_balance', 0.00), 'col-xl-2') }} diff --git a/resources/views/install/updates/edit.blade.php b/resources/views/install/updates/edit.blade.php index 50b349c66..747f4e6cd 100644 --- a/resources/views/install/updates/edit.blade.php +++ b/resources/views/install/updates/edit.blade.php @@ -16,7 +16,7 @@

-

+
{{ Form::hidden('page', 'update', ['id' => 'page']) }} {{ Form::hidden('name', $name, ['id' => 'name']) }} diff --git a/resources/views/modules/item/pre_sale.blade.php b/resources/views/modules/item/pre_sale.blade.php index e31911bf4..dd73e9e98 100644 --- a/resources/views/modules/item/pre_sale.blade.php +++ b/resources/views/modules/item/pre_sale.blade.php @@ -87,10 +87,9 @@ @endif @endpermission - @if ($module->purchase_faq) -
-
- {{ trans('modules.tab.faq')}} + @if (!empty($module->purchase_desc)) +
+ {!! $module->purchase_desc !!}
@endif
@@ -138,7 +137,7 @@
@if ($module->purchase_faq) - + diff --git a/resources/views/modules/item/show.blade.php b/resources/views/modules/item/show.blade.php index c4e33dbe6..c5f55d58c 100644 --- a/resources/views/modules/item/show.blade.php +++ b/resources/views/modules/item/show.blade.php @@ -109,17 +109,72 @@ @endif
-
- @if(!$module->reviews) -
- - {{ trans('modules.reviews.na') }} - -
- @endif + @php + $reviews = $module->app_reviews; + @endphp + +
+ +
+ @include('partials.modules.reviews')
-