Merge branch 'akaunting:master' into invoice-form-enhancements

This commit is contained in:
bengü thon mai mochi 2021-08-25 11:15:51 +03:00 committed by GitHub
commit af8b75487f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
148 changed files with 2103 additions and 1033 deletions

View File

@ -101,6 +101,12 @@ abstract class TransferShow extends Component
/** @var string */ /** @var string */
public $routeButtonDelete; public $routeButtonDelete;
/** @var string */
public $routeFromAccountShow;
/** @var string */
public $routeToAccountShow;
/** @var string */ /** @var string */
public $textDeleteModal; public $textDeleteModal;
@ -267,7 +273,7 @@ abstract class TransferShow extends Component
bool $hideButtonGroupDivider1 = false, bool $hideButtonGroupDivider2 = false, bool $hideButtonGroupDivider3 = false, bool $hideButtonGroupDivider1 = false, bool $hideButtonGroupDivider2 = false, bool $hideButtonGroupDivider3 = false,
string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '', string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '',
string $routeButtonAddNew = '', string $routeButtonEdit = '', string $routeButtonDuplicate = '', string $routeButtonPrint = '', string $signedUrl = '', string $routeButtonAddNew = '', string $routeButtonEdit = '', string $routeButtonDuplicate = '', string $routeButtonPrint = '', string $signedUrl = '',
string $routeButtonEmail = '', string $routeButtonPdf = '', string $routeButtonDelete = '', string $routeButtonEmail = '', string $routeButtonPdf = '', string $routeButtonDelete = '', string $routeFromAccountShow = '', string $routeToAccountShow = '',
string $textDeleteModal = '', string $textDeleteModal = '',
bool $hideHeader = false, bool $hideHeaderFromAccount = false, bool $hideHeaderToAccount = false, bool $hideHeaderAmount = false, bool $hideHeaderPaidAt = false, bool $hideHeader = false, bool $hideHeaderFromAccount = false, bool $hideHeaderToAccount = false, bool $hideHeaderAmount = false, bool $hideHeaderPaidAt = false,
string $textHeaderFromAccount = '', string $textHeaderToAccount = '', string $textHeaderAmount = '', string $textHeaderPaidAt = '', string $textHeaderFromAccount = '', string $textHeaderToAccount = '', string $textHeaderAmount = '', string $textHeaderPaidAt = '',
@ -324,6 +330,8 @@ abstract class TransferShow extends Component
$this->routeButtonEmail = $this->getRouteButtonEmail($routeButtonEmail); $this->routeButtonEmail = $this->getRouteButtonEmail($routeButtonEmail);
$this->routeButtonPdf = $this->getRouteButtonPdf($routeButtonPdf); $this->routeButtonPdf = $this->getRouteButtonPdf($routeButtonPdf);
$this->routeButtonDelete = $this->getRouteButtonDelete($routeButtonDelete); $this->routeButtonDelete = $this->getRouteButtonDelete($routeButtonDelete);
$this->routeFromAccountShow = $this->getRouteFromAccountShow($routeFromAccountShow);
$this->routeToAccountShow = $this->getRouteToAccountShow($routeToAccountShow);
// Navbar Text // Navbar Text
$this->textDeleteModal = $textDeleteModal; $this->textDeleteModal = $textDeleteModal;
@ -501,6 +509,24 @@ abstract class TransferShow extends Component
return 'transfers.destroy'; return 'transfers.destroy';
} }
protected function getRouteFromAccountShow($routeFromAccountShow)
{
if (!empty($routeFromAccountShow)) {
return $routeFromAccountShow;
}
return 'accounts.show';
}
protected function getRouteToAccountShow($routeToAccountShow)
{
if (!empty($routeToAccountShow)) {
return $routeToAccountShow;
}
return 'accounts.show';
}
protected function getPermissionCreate($permissionCreate) protected function getPermissionCreate($permissionCreate)
{ {
if (!empty($permissionCreate)) { if (!empty($permissionCreate)) {

View File

@ -3,8 +3,6 @@
namespace $NAMESPACE$; namespace $NAMESPACE$;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class $CLASS$ extends Command class $CLASS$ extends Command
{ {
@ -22,16 +20,6 @@ class $CLASS$ extends Command
*/ */
protected $description = 'Command description.'; protected $description = 'Command description.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/** /**
* Execute the console command. * Execute the console command.
* *
@ -41,28 +29,4 @@ class $CLASS$ extends Command
{ {
// //
} }
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return [
['example', InputArgument::REQUIRED, 'An example argument.'],
];
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [
['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null],
];
}
} }

View File

@ -0,0 +1,24 @@
<?php
namespace App\Events\Auth;
use App\Abstracts\Event;
class UserCreated extends Event
{
public $user;
public $request;
/**
* Create a new event instance.
*
* @param $user
* @param $request
*/
public function __construct($user, $request)
{
$this->user = $user;
$this->request = $request;
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace App\Events\Auth;
use Illuminate\Queue\SerializesModels;
class UserCreating
{
use SerializesModels;
public $request;
/**
* Create a new event instance.
*
* @param $request
*/
public function __construct($request)
{
$this->request = $request;
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Events\Auth;
use App\Abstracts\Event;
class UserUpdated extends Event
{
public $user;
public $request;
/**
* Create a new event instance.
*
* @param $user
* @param $request
*/
public function __construct($user, $request)
{
$this->user = $user;
$this->request = $request;
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Events\Auth;
use App\Abstracts\Event;
class UserUpdating extends Event
{
public $user;
public $request;
/**
* Create a new event instance.
*
* @param $user
* @param $request
*/
public function __construct($user, $request)
{
$this->user = $user;
$this->request = $request;
}
}

View File

@ -8,6 +8,9 @@ use App\Jobs\Banking\CreateAccount;
use App\Jobs\Banking\DeleteAccount; use App\Jobs\Banking\DeleteAccount;
use App\Jobs\Banking\UpdateAccount; use App\Jobs\Banking\UpdateAccount;
use App\Models\Banking\Account; use App\Models\Banking\Account;
use App\Models\Banking\Transaction;
use App\Models\Banking\Transfer;
use App\Utilities\Reports as Utility;
use App\Models\Setting\Currency; use App\Models\Setting\Currency;
class Accounts extends Controller class Accounts extends Controller
@ -29,11 +32,26 @@ class Accounts extends Controller
* *
* @return Response * @return Response
*/ */
public function show() public function show(Account $account)
{ {
return redirect()->route('accounts.index'); // Handle transactions
} $transactions = Transaction::with('account', 'category')->where('account_id', $account->id)->collect('paid_at');
$transfers = Transfer::with('transaction')->all()->filter(function ($transfer) use($account) {
if ($transfer->expense_account->id == $account->id || $transfer->income_account->id == $account->id) {
return true;
}
return false;
})->sortByDesc(function ($transfer) {
return $transfer->expense_transaction->paid_at;
});
$limit = (int) request('limit', setting('default.list_limit', '25'));
$transfers = $this->paginate($transfers, $limit);
return view('banking.accounts.show', compact('account', 'transactions', 'transfers'));
}
/** /**
* Show the form for creating a new resource. * Show the form for creating a new resource.
* *
@ -60,7 +78,7 @@ class Accounts extends Controller
$response = $this->ajaxDispatch(new CreateAccount($request)); $response = $this->ajaxDispatch(new CreateAccount($request));
if ($response['success']) { if ($response['success']) {
$response['redirect'] = route('accounts.index'); $response['redirect'] = route('accounts.show', $response['data']->id);
$message = trans('messages.success.added', ['type' => trans_choice('general.accounts', 1)]); $message = trans('messages.success.added', ['type' => trans_choice('general.accounts', 1)]);
@ -76,6 +94,24 @@ class Accounts extends Controller
return response()->json($response); return response()->json($response);
} }
/**
* Duplicate the specified resource.
*
* @param Account $account
*
* @return Response
*/
public function duplicate(Account $account)
{
$clone = $account->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.accounts', 1)]);
flash($message)->success();
return redirect()->route('accounts.edit', $clone->id);
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *
@ -107,7 +143,7 @@ class Accounts extends Controller
$response = $this->ajaxDispatch(new UpdateAccount($account, $request)); $response = $this->ajaxDispatch(new UpdateAccount($account, $request));
if ($response['success']) { if ($response['success']) {
$response['redirect'] = route('accounts.index'); $response['redirect'] = route('accounts.show', $account->id);
$message = trans('messages.success.updated', ['type' => $account->name]); $message = trans('messages.success.updated', ['type' => $account->name]);
@ -185,6 +221,44 @@ class Accounts extends Controller
return response()->json($response); return response()->json($response);
} }
public function createRevenue(Account $account)
{
$data['account_id'] = $account->id;
return redirect()->route('revenues.create')->withInput($data);
}
public function createPayment(Account $account)
{
$data['account_id'] = $account->id;
return redirect()->route('payments.create')->withInput($data);
}
public function createTransfer(Account $account)
{
$data['from_account_id'] = $account->id;
return redirect()->route('transfers.create')->withInput($data);
}
public function seePerformance(Account $account)
{
$data['account_id'] = $account->id;
$report = Utility::getClassInstance('App\Reports\IncomeExpenseSummary');
if (empty($report) || empty($report->model)) {
$message = trans('accounts.create_report');
flash($message)->warning()->important();
return redirect()->route('reports.create');
}
return redirect()->route('reports.show', $report->model->id)->withInput($data);
}
public function currency() public function currency()
{ {
$account_id = (int) request('account_id'); $account_id = (int) request('account_id');

View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Common;
use App\Abstracts\Http\Controller; use App\Abstracts\Http\Controller;
use App\Http\Requests\Common\BulkAction as Request; use App\Http\Requests\Common\BulkAction as Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class BulkActions extends Controller class BulkActions extends Controller
@ -57,6 +58,14 @@ class BulkActions extends Controller
if (!empty($result) && ($result instanceof \Symfony\Component\HttpFoundation\BinaryFileResponse)) { if (!empty($result) && ($result instanceof \Symfony\Component\HttpFoundation\BinaryFileResponse)) {
return $result; return $result;
} elseif (!empty($result) && ($result instanceof RedirectResponse)) {
return response()->json([
'success' => true,
'redirect' => $result->getTargetUrl(),
'error' => false,
'data' => [],
'message' => ''
]);
} else { } else {
return response()->json([ return response()->json([
'success' => true, 'success' => true,

View File

@ -2,15 +2,15 @@
namespace App\Http\Controllers\Common; namespace App\Http\Controllers\Common;
use Date;
use App\Abstracts\Http\Controller; use App\Abstracts\Http\Controller;
use App\Traits\Modules as RemoteModules;
use App\Http\Requests\Common\Notification as Request; use App\Http\Requests\Common\Notification as Request;
use App\Traits\Modules;
use App\Utilities\Date;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class Notifications extends Controller class Notifications extends Controller
{ {
use RemoteModules; use Modules;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
@ -36,13 +36,17 @@ class Notifications extends Controller
} }
// Hide New Apps Notifications // Hide New Apps Notifications
$module_notifications = $this->getNotifications('new-apps' ); $module_notifications = $this->getNotifications('new-apps');
foreach ($module_notifications as $module_notification) { foreach ($module_notifications as $module_notification) {
setting()->set('notifications.'. user()->id . '.' . $module_notification->alias . '.name', $module_notification->name); $prefix = 'notifications.' . user()->id . '.' . $module_notification->alias;
setting()->set('notifications.'. user()->id . '.' . $module_notification->alias . '.message', $module_notification->alias);
setting()->set('notifications.'. user()->id . '.' . $module_notification->alias . '.date', Date::now()); setting()->set([
setting()->set('notifications.'. user()->id . '.' . $module_notification->alias . '.status', '0'); $prefix . '.name' => $module_notification->name,
$prefix . '.message' => $module_notification->alias,
$prefix . '.date' => Date::now(),
$prefix . '.status' => '0',
]);
} }
setting()->save(); setting()->save();
@ -68,17 +72,20 @@ class Notifications extends Controller
$notifications = $this->getNotifications($path); $notifications = $this->getNotifications($path);
if ($notifications) { foreach ($notifications as $notification) {
foreach ($notifications as $notification) { if ($notification->id == $id) {
if ($notification->id == $id) { $prefix = 'notifications.' . $path . '.' . $id;
setting()->set('notifications.'. $path . '.' . $id . '.name', $notification->name);
setting()->set('notifications.'. $path . '.' . $id . '.message', $notification->message);
setting()->set('notifications.'. $path . '.' . $id . '.date', Date::now());
setting()->set('notifications.'. $path . '.' . $id . '.status', '0');
setting()->save(); setting()->set([
break; $prefix . '.name' => $notification->name,
} $prefix . '.message' => $notification->message,
$prefix . '.date' => Date::now(),
$prefix . '.status' => '0',
]);
setting()->save();
break;
} }
} }

View File

@ -57,7 +57,7 @@ class TransferTemplates extends Controller
'error' => false, 'error' => false,
'message' => $message, 'message' => $message,
'data' => null, 'data' => null,
'redirect' => route('settings.invoice.edit'), 'redirect' => url()->previous(),
]; ];
flash($message)->success(); flash($message)->success();

View File

@ -59,7 +59,7 @@ class Vendors extends Controller
foreach ($bills as $item) { foreach ($bills as $item) {
// Already in transactions // Already in transactions
if ($item->status == 'paid') { if ($item->status == 'paid' || $item->status == 'cancelled') {
continue; continue;
} }
@ -118,7 +118,7 @@ class Vendors extends Controller
$response = $this->ajaxDispatch(new CreateContact($request)); $response = $this->ajaxDispatch(new CreateContact($request));
if ($response['success']) { if ($response['success']) {
$response['redirect'] = route('vendors.index'); $response['redirect'] = route('vendors.show', $response['data']->id);
$message = trans('messages.success.added', ['type' => trans_choice('general.vendors', 1)]); $message = trans('messages.success.added', ['type' => trans_choice('general.vendors', 1)]);

View File

@ -57,7 +57,7 @@ class Customers extends Controller
foreach ($invoices as $item) { foreach ($invoices as $item) {
// Already in transactions // Already in transactions
if ($item->status == 'paid') { if ($item->status == 'paid' || $item->status == 'cancelled') {
continue; continue;
} }
@ -116,7 +116,7 @@ class Customers extends Controller
$response = $this->ajaxDispatch(new CreateContact($request)); $response = $this->ajaxDispatch(new CreateContact($request));
if ($response['success']) { if ($response['success']) {
$response['redirect'] = route('customers.index'); $response['redirect'] = route('customers.show', $response['data']->id);
$message = trans('messages.success.added', ['type' => trans_choice('general.customers', 1)]); $message = trans('messages.success.added', ['type' => trans_choice('general.customers', 1)]);

View File

@ -2,8 +2,8 @@
namespace App\Http\Livewire\Common\Notifications; namespace App\Http\Livewire\Common\Notifications;
use Date;
use App\Traits\Modules; use App\Traits\Modules;
use App\Utilities\Date;
use Livewire\Component; use Livewire\Component;
class NewApps extends Component class NewApps extends Component
@ -12,39 +12,46 @@ class NewApps extends Component
public function markRead($alias) public function markRead($alias)
{ {
$notifications = $this->getNotifications('new-apps' ); $notifications = $this->getNotifications('new-apps');
foreach ($notifications as $notification) { foreach ($notifications as $notification) {
if ($notification->alias != $alias) { if ($notification->alias != $alias) {
continue; continue;
} }
$readed = $notification; $read = $notification;
} }
setting()->set('notifications.'. user()->id . '.' . $alias . '.name', $readed->name); $prefix = 'notifications.' . user()->id . '.' . $alias;
setting()->set('notifications.'. user()->id . '.' . $alias . '.message', $readed->alias);
setting()->set('notifications.'. user()->id . '.' . $alias . '.date', Date::now()); setting()->set([
setting()->set('notifications.'. user()->id . '.' . $alias . '.status', '0'); $prefix . '.name' => $read->name,
$prefix . '.message' => $read->alias,
$prefix . '.date' => Date::now(),
$prefix . '.status' => '0',
]);
setting()->save(); setting()->save();
$this->dispatchBrowserEvent('mark-read', [ $this->dispatchBrowserEvent('mark-read', [
'type' => 'new-apps', 'type' => 'new-apps',
'message' => trans('notifications.messages.mark_read', ['type' => $notification->name]), 'message' => trans('notifications.messages.mark_read', ['type' => $read->name]),
]); ]);
} }
public function markReadAll() public function markReadAll()
{ {
$notifications = $this->getNotifications('new-apps' ); $notifications = $this->getNotifications('new-apps');
foreach ($notifications as $notification) { foreach ($notifications as $notification) {
setting()->set('notifications.'. user()->id . '.' . $notification->alias . '.name', $notification->name); $prefix = 'notifications.' . user()->id . '.' . $notification->alias;
setting()->set('notifications.'. user()->id . '.' . $notification->alias . '.message', $notification->alias);
setting()->set('notifications.'. user()->id . '.' . $notification->alias . '.date', Date::now());
setting()->set('notifications.'. user()->id . '.' . $notification->alias . '.status', '0');
setting()->set([
$prefix . '.name' => $notification->name,
$prefix . '.message' => $notification->alias,
$prefix . '.date' => Date::now(),
$prefix . '.status' => '0',
]);
} }
setting()->save(); setting()->save();

View File

@ -109,7 +109,7 @@ class Search extends Component
'name' => $account->name, 'name' => $account->name,
'type' => trans_choice('general.accounts', 1), 'type' => trans_choice('general.accounts', 1),
'color' => '#55588b', 'color' => '#55588b',
'href' => route('accounts.edit', $account->id), 'href' => route('accounts.show', $account->id),
]; ];
} }
} }

View File

@ -59,6 +59,8 @@ class Money
$money_format = Str::replaceFirst('.', '', $money_format); $money_format = Str::replaceFirst('.', '', $money_format);
} }
} }
$money_format = (double) $money_format;
} }
$amount = $this->getAmount($money_format, $currency_code); $amount = $this->getAmount($money_format, $currency_code);

View File

@ -43,6 +43,12 @@ class Document extends FormRequest
// Get company id // Get company id
$company_id = (int) $this->request->get('company_id'); $company_id = (int) $this->request->get('company_id');
$quantity_size = 5;
if ((Str::substrCount($this->request->get('quantity'), '.') > 1) || (Str::substrCount($this->request->get('quantity'), ',') > 1)) {
$quantity_size = 7;
}
return [ return [
'type' => 'required|string', 'type' => 'required|string',
'document_number' => 'required|string|unique:documents,NULL,' . $id . ',id,type,' . $type . ',company_id,' . $company_id . ',deleted_at,NULL', 'document_number' => 'required|string|unique:documents,NULL,' . $id . ',id,type,' . $type . ',company_id,' . $company_id . ',deleted_at,NULL',
@ -51,7 +57,7 @@ class Document extends FormRequest
'due_at' => 'required|date_format:Y-m-d H:i:s|after_or_equal:issued_at', 'due_at' => 'required|date_format:Y-m-d H:i:s|after_or_equal:issued_at',
'amount' => 'required', 'amount' => 'required',
'items.*.name' => 'required|string', 'items.*.name' => 'required|string',
'items.*.quantity' => 'required', 'items.*.quantity' => 'required|max:' . $quantity_size,
'items.*.price' => 'required|amount', 'items.*.price' => 'required|amount',
'currency_code' => 'required|string|currency', 'currency_code' => 'required|string|currency',
'currency_rate' => 'required|gt:0', 'currency_rate' => 'required|gt:0',
@ -80,6 +86,7 @@ class Document extends FormRequest
return [ return [
'items.*.name.required' => trans('validation.required', ['attribute' => Str::lower(trans('general.name'))]), 'items.*.name.required' => trans('validation.required', ['attribute' => Str::lower(trans('general.name'))]),
'items.*.quantity.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.quantity'))]), 'items.*.quantity.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.quantity'))]),
'items.*.quantity.size' => trans('validation.size', ['attribute' => Str::lower(trans('invoices.quantity'))]),
'items.*.price.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.price'))]), 'items.*.price.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.price'))]),
'items.*.currency.required' => trans('validation.custom.invalid_currency'), 'items.*.currency.required' => trans('validation.custom.invalid_currency'),
'items.*.currency.string' => trans('validation.custom.invalid_currency'), 'items.*.currency.string' => trans('validation.custom.invalid_currency'),

View File

@ -3,6 +3,7 @@
namespace App\Http\Requests\Document; namespace App\Http\Requests\Document;
use App\Abstracts\Http\FormRequest; use App\Abstracts\Http\FormRequest;
use Illuminate\Support\Str;
class DocumentItem extends FormRequest class DocumentItem extends FormRequest
{ {
@ -13,11 +14,17 @@ class DocumentItem extends FormRequest
*/ */
public function rules() public function rules()
{ {
$quantity_size = 5;
if ((Str::substrCount($this->request->get('quantity'), '.') > 1) || (Str::substrCount($this->request->get('quantity'), ',') > 1)) {
$quantity_size = 7;
}
return [ return [
'type' => 'required|string', 'type' => 'required|string',
'document_id' => 'required|integer', 'document_id' => 'required|integer',
'name' => 'required|string', 'name' => 'required|string',
'quantity' => 'required', 'quantity' => 'required|max:' . $quantity_size,
'price' => 'required|amount', 'price' => 'required|amount',
'total' => 'required', 'total' => 'required',
'tax' => 'required', 'tax' => 'required',

View File

@ -2,8 +2,8 @@
namespace App\Http\ViewComposers; namespace App\Http\ViewComposers;
use App\Utilities\Versions;
use App\Traits\Modules; use App\Traits\Modules;
use App\Utilities\Versions;
use Illuminate\View\View; use Illuminate\View\View;
class Header class Header
@ -71,16 +71,14 @@ class Header
$new_apps = $this->getNotifications('new-apps'); $new_apps = $this->getNotifications('new-apps');
if ($new_apps) { foreach ($new_apps as $key => $new_app) {
foreach ($new_apps as $key => $new_app) { if (setting('notifications.' . user()->id . '.' . $new_app->alias)) {
if (setting('notifications.' . user()->id . '.' . $new_app->alias)) { unset($new_apps[$key]);
unset($new_apps[$key]);
continue; continue;
}
$notifications++;
} }
$notifications++;
} }
} }

View File

@ -3,7 +3,7 @@
namespace App\Http\ViewComposers; namespace App\Http\ViewComposers;
use App\Traits\Modules; use App\Traits\Modules;
use Route; use Illuminate\Support\Facades\Route;
use Illuminate\View\View; use Illuminate\View\View;
class Notifications class Notifications
@ -29,9 +29,7 @@ class Notifications
$path = str_replace('{company_id}/', '', $path); $path = str_replace('{company_id}/', '', $path);
if (!$notifications = $this->getNotifications($path)) { $notifications = $this->getNotifications($path);
return;
}
// Push to a stack // Push to a stack
foreach ($notifications as $notification) { foreach ($notifications as $notification) {

View File

@ -37,6 +37,7 @@ class Bills extends Import
$rules['bill_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']); $rules['bill_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['billed_at'] = $rules['issued_at']; $rules['billed_at'] = $rules['issued_at'];
$rules['currency_rate'] = 'required';
unset($rules['document_number'], $rules['issued_at'], $rules['type']); unset($rules['document_number'], $rules['issued_at'], $rules['type']);

View File

@ -37,6 +37,7 @@ class Invoices extends Import
$rules['invoice_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']); $rules['invoice_number'] = Str::replaceFirst('unique:documents,NULL', 'unique:documents,document_number', $rules['document_number']);
$rules['invoiced_at'] = $rules['issued_at']; $rules['invoiced_at'] = $rules['issued_at'];
$rules['currency_rate'] = 'required';
unset($rules['document_number'], $rules['issued_at'], $rules['type']); unset($rules['document_number'], $rules['issued_at'], $rules['type']);

View File

@ -3,6 +3,8 @@
namespace App\Jobs\Auth; namespace App\Jobs\Auth;
use App\Abstracts\Job; use App\Abstracts\Job;
use App\Events\Auth\UserCreated;
use App\Events\Auth\UserCreating;
use App\Models\Auth\User; use App\Models\Auth\User;
use Artisan; use Artisan;
@ -29,6 +31,8 @@ class CreateUser extends Job
*/ */
public function handle() public function handle()
{ {
event(new UserCreating($this->request));
\DB::transaction(function () { \DB::transaction(function () {
$this->user = User::create($this->request->input()); $this->user = User::create($this->request->input());
@ -79,6 +83,8 @@ class CreateUser extends Job
} }
}); });
event(new UserCreated($this->user, $this->request));
return $this->user; return $this->user;
} }
} }

View File

@ -3,6 +3,8 @@
namespace App\Jobs\Auth; namespace App\Jobs\Auth;
use App\Abstracts\Job; use App\Abstracts\Job;
use App\Events\Auth\UserUpdated;
use App\Events\Auth\UserUpdating;
use App\Models\Auth\User; use App\Models\Auth\User;
class UpdateUser extends Job class UpdateUser extends Job
@ -38,6 +40,8 @@ class UpdateUser extends Job
unset($this->request['password_confirmation']); unset($this->request['password_confirmation']);
} }
event(new UserUpdating($this->user, $this->request));
\DB::transaction(function () { \DB::transaction(function () {
$this->user->update($this->request->input()); $this->user->update($this->request->input());
@ -73,6 +77,8 @@ class UpdateUser extends Job
} }
}); });
event(new UserUpdated($this->user, $this->request));
return $this->user; return $this->user;
} }

View File

@ -55,6 +55,7 @@ class CreateTransfer extends Job
'category_id' => Category::transfer(), // Transfer Category ID 'category_id' => Category::transfer(), // Transfer Category ID
'payment_method' => $this->request->get('payment_method'), 'payment_method' => $this->request->get('payment_method'),
'reference' => $this->request->get('reference'), 'reference' => $this->request->get('reference'),
'created_by' => $this->request->get('created_by'),
]); ]);
$amount = $this->request->get('amount'); $amount = $this->request->get('amount');
@ -77,12 +78,14 @@ class CreateTransfer extends Job
'category_id' => Category::transfer(), // Transfer Category ID 'category_id' => Category::transfer(), // Transfer Category ID
'payment_method' => $this->request->get('payment_method'), 'payment_method' => $this->request->get('payment_method'),
'reference' => $this->request->get('reference'), 'reference' => $this->request->get('reference'),
'created_by' => $this->request->get('created_by'),
]); ]);
$this->transfer = Transfer::create([ $this->transfer = Transfer::create([
'company_id' => $this->request['company_id'], 'company_id' => $this->request['company_id'],
'expense_transaction_id' => $expense_transaction->id, 'expense_transaction_id' => $expense_transaction->id,
'income_transaction_id' => $income_transaction->id, 'income_transaction_id' => $income_transaction->id,
'created_by' => $this->request->get('created_by'),
]); ]);
// Upload attachment // Upload attachment

View File

@ -43,16 +43,13 @@ class CreateDocumentItem extends Job
// Apply line discount to amount // Apply line discount to amount
if (!empty($this->request['discount'])) { if (!empty($this->request['discount'])) {
$discount += $this->request['discount']; $discount = $this->request['discount'];
$item_discounted_amount = $item_amount -= ($item_amount * ($this->request['discount'] / 100)); if ($this->request['discount_type'] === 'percentage') {
} $item_discounted_amount = $item_amount -= ($item_amount * ($this->request['discount'] / 100));
} else {
// Apply global discount to amount $item_discounted_amount = $item_amount -= $this->request['discount'];
if (!empty($this->request['global_discount'])) { }
$discount += $this->request['global_discount'];
$item_discounted_amount = $item_amount - ($item_amount * ($this->request['global_discount'] / 100));
} }
$tax_amount = 0; $tax_amount = 0;
@ -153,7 +150,11 @@ class CreateDocumentItem extends Job
$item_tax_total += $tax_amount; $item_tax_total += $tax_amount;
} }
$item_amount = ($item_amount - $item_tax_total) / (1 - $discount / 100); if (!empty($this->request['discount_type']) && $this->request['discount_type'] === 'fixed') {
$item_amount = ($item_amount - $item_tax_total) - $discount;
} else {
$item_amount = ($item_amount - $item_tax_total) / (1 - $discount / 100);
}
} }
if ($compounds) { if ($compounds) {
@ -185,6 +186,7 @@ class CreateDocumentItem extends Job
$this->request['quantity'] = (double) $this->request['quantity']; $this->request['quantity'] = (double) $this->request['quantity'];
$this->request['price'] = round($this->request['price'], $precision); $this->request['price'] = round($this->request['price'], $precision);
$this->request['tax'] = round($item_tax_total, $precision); $this->request['tax'] = round($item_tax_total, $precision);
$this->request['discount_type'] = !empty($this->request['discount_type']) ? $this->request['discount_type'] : 'percentage';
$this->request['discount_rate'] = !empty($this->request['discount']) ? $this->request['discount'] : 0; $this->request['discount_rate'] = !empty($this->request['discount']) ? $this->request['discount'] : 0;
$this->request['total'] = round($item_amount, $precision); $this->request['total'] = round($item_amount, $precision);

View File

@ -67,15 +67,17 @@ class CreateDocumentItemsAndTotals extends Job
'sort_order' => $sort_order, 'sort_order' => $sort_order,
]); ]);
$this->request['amount'] -= $discount_amount_total;
$sort_order++; $sort_order++;
} }
if (!empty($this->request['discount'])) { if (!empty($this->request['discount'])) {
$discount_total = ($sub_total - $discount_amount_total) * ($this->request['discount'] / 100); if ($this->request['discount_type'] === 'percentage') {
$discount_total = $sub_total * ($this->request['discount'] / 100);
} else {
$discount_total = $this->request['discount'];
}
DocumentTotal::create([ DocumentTotal::create([
'company_id' => $this->document->company_id, 'company_id' => $this->document->company_id,
'type' => $this->document->type, 'type' => $this->document->type,
'document_id' => $this->document->id, 'document_id' => $this->document->id,
@ -193,11 +195,15 @@ class CreateDocumentItemsAndTotals extends Job
$discount_amount = 0; $discount_amount = 0;
if (!empty($item['discount'])) { if (!empty($item['discount'])) {
$discount_amount = ($item_amount * ($item['discount'] / 100)); if ($item['discount_type'] === 'percentage') {
$discount_amount = ($item_amount * ($item['discount'] / 100));
} else {
$discount_amount = $item['discount'];
}
} }
// Calculate totals // Calculate totals
$sub_total += $document_item->total + $discount_amount; $sub_total += $document_item->total;
$discount_amount_total += $discount_amount; $discount_amount_total += $discount_amount;

View File

@ -36,16 +36,30 @@ class CreateDocumentTransaction
if (empty($user) || $signed) { if (empty($user) || $signed) {
flash($message)->error()->important(); flash($message)->error()->important();
redirect()->route("signed.$type.show", $document->id)->send(); return $this->getResponse('signed.' . $type . '.show', $document, $message);
} }
if ($user->can('read-client-portal')) { if ($user->can('read-client-portal')) {
flash($message)->error()->important(); flash($message)->error()->important();
redirect()->route("portal.$type.show", $document->id)->send(); return $this->getResponse('portal.' . $type . '.show', $document, $message);
} }
throw new \Exception($message); throw new \Exception($message);
} }
} }
protected function getResponse($path, $document, $message)
{
if (request()->expectsJson()) {
return response()->json([
'success' => false,
'errors' => true,
'message' => $message,
'redirect' => route($path, $document->id)
]);
}
return redirect()->route($path, $document->id);
}
} }

View File

@ -27,6 +27,35 @@ class AddSearchString extends Listener
return; return;
} }
$old = old();
$request = request()->all();
if ($old || $request) {
$input = request('search');
$filters = [];
if ($input) {
$filters = explode(' ', $input);
}
foreach ($old as $key => $value) {
$filters[] = $key . ':' . $value;
}
foreach ($request as $key => $value) {
if ($key == 'search') {
continue;
}
$filters[] = $key . ':' . $value;
}
request()->merge([
'search' => implode(' ', $filters)
]);
}
// Apply search string // Apply search string
$this->applySearchStringFilter($event); $this->applySearchStringFilter($event);
} }

View File

@ -5,10 +5,11 @@ namespace App\Models\Banking;
use App\Abstracts\Model; use App\Abstracts\Model;
use App\Traits\Transactions; use App\Traits\Transactions;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Bkwld\Cloner\Cloneable;
class Account extends Model class Account extends Model
{ {
use HasFactory, Transactions; use Cloneable, HasFactory, Transactions;
protected $table = 'accounts'; protected $table = 'accounts';
@ -92,6 +93,41 @@ class Account extends Model
return $total; return $total;
} }
/**
* Get the current balance.
*
* @return string
*/
public function getIncomeBalanceAttribute()
{
// Opening Balance
//$total = $this->opening_balance;
$total = 0;
// Sum Incomes
$total += $this->income_transactions->sum('amount');
return $total;
}
/**
* Get the current balance.
*
* @return string
*/
public function getExpenseBalanceAttribute()
{
// Opening Balance
//$total = $this->opening_balance;
$total = 0;
// Subtract Expenses
$total += $this->expense_transactions->sum('amount');
return $total;
}
/** /**
* Create a new factory instance for the model. * Create a new factory instance for the model.
* *

View File

@ -349,6 +349,16 @@ class Transaction extends Model
} }
} }
/**
* Check if the record is attached to a transfer.
*
* @return bool
*/
public function getHasTransferRelationAttribute()
{
return (bool) (optional($this->category)->id == optional($this->category)->transfer());
}
/** /**
* Get the title of type. * Get the title of type.
* *

View File

@ -443,7 +443,7 @@ class Company extends Eloquent implements Ownable
*/ */
public function getCompanyLogoAttribute() public function getCompanyLogoAttribute()
{ {
return $this->getMedia('company_logo')->last(); return $this->getMedia('company.logo')->last();
} }
public function makeCurrent($force = false) public function makeCurrent($force = false)

View File

@ -37,7 +37,7 @@ class App extends Provider
Paginator::useBootstrap(); Paginator::useBootstrap();
Model::preventLazyLoading(); Model::preventLazyLoading(config('app.eager_load'));
Model::handleLazyLoadingViolationUsing(function ($model, $relation) { Model::handleLazyLoadingViolationUsing(function ($model, $relation) {
$class = get_class($model); $class = get_class($model);

View File

@ -136,7 +136,7 @@ class Form extends Provider
]); ]);
Facade::component('bulkActionAllGroup', 'partials.form.bulk_action_all_group', [ Facade::component('bulkActionAllGroup', 'partials.form.bulk_action_all_group', [
'attributes' => []
]); ]);
Facade::component('bulkActionGroup', 'partials.form.bulk_action_group', [ Facade::component('bulkActionGroup', 'partials.form.bulk_action_group', [

View File

@ -396,7 +396,7 @@ trait Modules
return false; return false;
} }
public function getNotifications($path) public function getNotifications($path): array
{ {
$key = 'apps.notifications'; $key = 'apps.notifications';
@ -407,10 +407,10 @@ trait Modules
} }
if (!empty($data) && array_key_exists($path, $data)) { if (!empty($data) && array_key_exists($path, $data)) {
return $data[$path]; return (array) $data[$path];
} }
return false; return [];
} }
public function getPageNumberOfModules($data = []) public function getPageNumberOfModules($data = [])

659
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,8 @@ return [
'schedule_time' => env('APP_SCHEDULE_TIME', '09:00'), 'schedule_time' => env('APP_SCHEDULE_TIME', '09:00'),
'eager_load' => (bool) env('APP_EAGER_LOAD', true),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Environment | Application Environment

View File

@ -10,15 +10,15 @@ return [
'minor' => '1', 'minor' => '1',
'patch' => '20', 'patch' => '22',
'build' => '', 'build' => '',
'status' => 'Stable', 'status' => 'Stable',
'date' => '16-July-2021', 'date' => '08-August-2021',
'time' => '16:00', 'time' => '23:00',
'zone' => 'GMT +3', 'zone' => 'GMT +3',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"/livewire.js":"/livewire.js?id=936e5d0fb0b76b631ba7"} {"/livewire.js":"/livewire.js?id=d9e06c155e467adb5de2"}

View File

@ -11,6 +11,7 @@
<el-select v-model="selected" :placeholder="placeholder" filterable <el-select v-model="selected" :placeholder="placeholder" filterable
@change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus" @change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus"
:clearable="clearable"
:disabled="disabled" :disabled="disabled"
:multiple="multiple" :multiple="multiple"
:readonly="readonly" :readonly="readonly"
@ -247,6 +248,12 @@ export default {
description: "Selectbox disabled status" description: "Selectbox disabled status"
}, },
clearable: {
type: Boolean,
default: true,
description: "Selectbox clearable status"
},
disabled: { disabled: {
type: Boolean, type: Boolean,
default: false, default: false,
@ -384,13 +391,13 @@ export default {
for (const [key, value] of Object.entries(options)) { for (const [key, value] of Object.entries(options)) {
values.push({ values.push({
key: key, key: key.toString(),
value: value value: value
}); });
} }
this.sorted_options.push({ this.sorted_options.push({
key: index, key: index.toString(),
value: values value: values
}); });
} }
@ -405,7 +412,7 @@ export default {
} else { } else {
this.sorted_options.push({ this.sorted_options.push({
index: index, index: index,
key: option.id, key: option.id.toString(),
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name
}); });
} }
@ -416,7 +423,7 @@ export default {
if (!Array.isArray(created_options)) { if (!Array.isArray(created_options)) {
for (const [key, value] of Object.entries(created_options)) { for (const [key, value] of Object.entries(created_options)) {
this.sorted_options.push({ this.sorted_options.push({
key: key, key: key.toString(),
value: value value: value
}); });
} }
@ -431,7 +438,7 @@ export default {
} else { } else {
this.sorted_options.push({ this.sorted_options.push({
index: index, index: index,
key: option.id, key: option.id.toString(),
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name
}); });
} }
@ -654,6 +661,7 @@ export default {
} }
}) })
.then(response => { .then(response => {
this.loading = false;
this.form.loading = false; this.form.loading = false;
if (response.data.success) { if (response.data.success) {
@ -675,10 +683,14 @@ export default {
this.add_new.html = ''; this.add_new.html = '';
this.add_new_html = null; this.add_new_html = null;
response.data.data.mark_new = true;
this.$emit('new', response.data.data); this.$emit('new', response.data.data);
this.change(); this.change();
this.$emit('visible-change', event);
let documentClasses = document.body.classList; let documentClasses = document.body.classList;
documentClasses.remove("modal-open"); documentClasses.remove("modal-open");

View File

@ -11,6 +11,7 @@
<el-select v-model="selected" :placeholder="placeholder" filterable remote reserve-keyword <el-select v-model="selected" :placeholder="placeholder" filterable remote reserve-keyword
@change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus" @change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus"
:clearable="clearable"
:disabled="disabled" :disabled="disabled"
:multiple="multiple" :multiple="multiple"
:readonly="readonly" :readonly="readonly"
@ -110,6 +111,7 @@
<span v-else> <span v-else>
<el-select v-model="selected" :placeholder="placeholder" filterable remote reserve-keyword <el-select v-model="selected" :placeholder="placeholder" filterable remote reserve-keyword
@change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus" @change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus"
:clearable="clearable"
:disabled="disabled" :disabled="disabled"
:multiple="multiple" :multiple="multiple"
:readonly="readonly" :readonly="readonly"
@ -338,6 +340,12 @@ export default {
description: "Selectbox disabled status" description: "Selectbox disabled status"
}, },
clearable: {
type: Boolean,
default: true,
description: "Selectbox clearable status"
},
disabled: { disabled: {
type: Boolean, type: Boolean,
default: false, default: false,

View File

@ -152,8 +152,10 @@ export default class BulkAction {
})); }));
type_promise.then(response => { type_promise.then(response => {
if (response.data.redirect) { if (response.data.redirect === true) {
window.location.reload(false); window.location.reload(false);
} else if (typeof response.data.redirect === 'string') {
window.location.href = response.data.redirect;
} }
}) })
.catch(error => { .catch(error => {

View File

@ -19,7 +19,7 @@ import BulkAction from './../../plugins/bulk-action';
Vue.use(DashboardPlugin); Vue.use(DashboardPlugin);
const app = new Vue({ const app = new Vue({
el: '#app', el: '#main-body',
mixins: [ mixins: [
Global Global
@ -28,8 +28,7 @@ const app = new Vue({
data: function () { data: function () {
return { return {
form: new Form('account'), form: new Form('account'),
bulk_action: new BulkAction('accounts') bulk_action: new BulkAction('accounts'),
} }
}, },
}); });

View File

@ -19,7 +19,7 @@ import BulkAction from './../../plugins/bulk-action';
Vue.use(DashboardPlugin); Vue.use(DashboardPlugin);
const app = new Vue({ const app = new Vue({
el: '#app', el: '#main-body',
mixins: [ mixins: [
Global Global

View File

@ -27,70 +27,74 @@ const app = new Vue({
], ],
data: function () { data: function () {
return { return {
form: new Form('document'), form: new Form('document'),
bulk_action: new BulkAction('documents'), bulk_action: new BulkAction('documents'),
totals: { totals: {
sub: 0, sub: 0,
item_discount: '', item_discount: '',
discount: '', discount: '',
discount_text: false, discount_text: false,
taxes: [], taxes: [],
total: 0 total: 0
}, },
transaction: [], transaction: [],
edit: { edit: {
status: false, status: false,
currency: false, currency: false,
items: 0, items: 0,
}, },
colspan: 6, colspan: 6,
discount: false, discount: false,
tax: false, tax: false,
discounts: [], discounts: [],
tax_id: [], tax_id: [],
items: [], items: [],
taxes: [], taxes: [],
page_loaded: false, page_loaded: false,
currencies: [], currencies: [],
min_due_date: false, min_due_date: false,
currency_symbol: { currency_symbol: {
"name":"US Dollar", "name":"US Dollar",
"code":"USD", "code":"USD",
"rate":1, "rate":1,
"precision":2, "precision":2,
"symbol":"$", "symbol":"$",
"symbol_first":1, "symbol_first":1,
"decimal_mark":".", "decimal_mark":".",
"thousands_separator":"," "thousands_separator":","
}, },
dropdown_visible: true dropdown_visible: true,
} dynamic_taxes: [],
}
}, },
mounted() { mounted() {
if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) { this.form.discount_type = 'percentage';
this.colspan = document.getElementById("items").rows[0].cells.length - 1;
}
if (!this.edit.status) {
this.dropdown_visible = false;
}
this.currency_symbol.rate = this.form.currency_rate;
if (company_currency_code) { if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) {
let default_currency_symbol = null; this.colspan = document.getElementById("items").rows[0].cells.length - 1;
}
if (!this.edit.status) {
this.dropdown_visible = false;
}
this.currency_symbol.rate = this.form.currency_rate;
if (company_currency_code) {
let default_currency_symbol = null;
for (let symbol of this.currencies) {
if(symbol.code == company_currency_code) {
default_currency_symbol = symbol.symbol;
}
}
this.currency_symbol.symbol = default_currency_symbol;
}
for (let symbol of this.currencies) {
if(symbol.code == company_currency_code) {
default_currency_symbol = symbol.symbol;
}
}
this.currency_symbol.symbol = default_currency_symbol;
}
}, },
methods: { methods: {
@ -98,7 +102,7 @@ const app = new Vue({
let global_discount = parseFloat(this.form.discount); let global_discount = parseFloat(this.form.discount);
let discount_total = 0; let discount_total = 0;
let line_item_discount_total = 0; let line_item_discount_total = 0;
let taxes = document_taxes; let taxes = this.dynamic_taxes;
let sub_total = 0; let sub_total = 0;
let totals_taxes = []; let totals_taxes = [];
let grand_total = 0; let grand_total = 0;
@ -115,7 +119,19 @@ const app = new Vue({
let line_discount_amount = 0; let line_discount_amount = 0;
if (item.discount) { if (item.discount) {
line_discount_amount = item.total * (item.discount / 100); if (item.discount_type === 'percentage') {
if (item.discount > 100) {
item.discount = 100;
}
line_discount_amount = item.total * (item.discount / 100);
} else {
if (parseInt(item.discount) > item.price) {
item.discount = item.price;
}
line_discount_amount = parseFloat(item.discount);
}
item.discount_amount = line_discount_amount item.discount_amount = line_discount_amount
item_discounted_total = item.total -= line_discount_amount; item_discounted_total = item.total -= line_discount_amount;
@ -124,12 +140,6 @@ const app = new Vue({
let item_discounted_total = item.total; let item_discounted_total = item.total;
if (global_discount) {
item_discounted_total = item.total - (item.total * (global_discount / 100));
item_discount = global_discount;
}
// item tax calculate. // item tax calculate.
if (item.tax_ids) { if (item.tax_ids) {
let inclusives = []; let inclusives = [];
@ -240,7 +250,11 @@ const app = new Vue({
// Apply discount to total // Apply discount to total
if (global_discount) { if (global_discount) {
discount_total = parseFloat(sub_total + inclusive_tax_total) * (global_discount / 100); if (this.form.discount_type === 'percentage') {
discount_total = parseFloat(sub_total + inclusive_tax_total) * (global_discount / 100);
} else {
discount_total = global_discount;
}
this.totals.discount = discount_total; this.totals.discount = discount_total;
@ -254,7 +268,7 @@ const app = new Vue({
this.form.items.forEach(function(form_item, form_index) { this.form.items.forEach(function(form_item, form_index) {
let item = this.items[form_index]; let item = this.items[form_index];
for (const [key, value] of Object.entries(item)) { for (const [key, value] of Object.entries(item)) {
if (key == 'add_tax' || key == 'tax_ids' || key == 'add_discount') { if (key == 'add_tax' || key == 'tax_ids' || key == 'add_discount') {
continue continue
@ -352,7 +366,7 @@ const app = new Vue({
let selected_tax; let selected_tax;
document_taxes.forEach(function(tax) { this.dynamic_taxes.forEach(function(tax) {
if (tax.id == this.tax_id) { if (tax.id == this.tax_id) {
selected_tax = tax; selected_tax = tax;
} }
@ -387,16 +401,35 @@ const app = new Vue({
}, },
onAddLineDiscount(item_index) { onAddLineDiscount(item_index) {
this.items[item_index].discount_type = 'percentage';
this.items[item_index].add_discount = true; this.items[item_index].add_discount = true;
}, },
onChangeDiscountType(type) {
this.form.discount_type = type;
this.onCalculateTotal();
},
onChangeLineDiscountType(item_index, type) {
this.items[item_index].discount_type = type;
this.onCalculateTotal();
},
onAddTotalDiscount() { onAddTotalDiscount() {
let discount = document.getElementById('pre-discount').value; let discount = document.getElementById('pre-discount').value;
if (discount < 0) { if (this.form.discount_type === 'percentage') {
discount = 0; if (discount < 0) {
} else if (discount > 100) { discount = 0;
discount = 100; } else if (discount > 100) {
discount = 100;
}
} else {
if (discount < 0) {
discount = 0;
} else if (discount > this.totals.sub) {
discount = this.totals.sub;
}
} }
document.getElementById('pre-discount').value = discount; document.getElementById('pre-discount').value = discount;
@ -620,6 +653,7 @@ const app = new Vue({
price: (item.price).toFixed(2), price: (item.price).toFixed(2),
tax_ids: item.tax_ids, tax_ids: item.tax_ids,
discount: item.discount_rate, discount: item.discount_rate,
discount_type: item.discount_type,
total: (item.total).toFixed(2) total: (item.total).toFixed(2)
}); });
@ -657,6 +691,7 @@ const app = new Vue({
tax_ids: item_taxes, tax_ids: item_taxes,
add_discount: (item.discount_rate) ? true : false, add_discount: (item.discount_rate) ? true : false,
discount: item.discount_rate, discount: item.discount_rate,
discount_type: item.discount_type,
total: (item.total).toFixed(2), total: (item.total).toFixed(2),
// @todo // @todo
// invoice_item_checkbox_sample: [], // invoice_item_checkbox_sample: [],
@ -686,7 +721,7 @@ const app = new Vue({
this.page_loaded = true; this.page_loaded = true;
if (document_currencies) { if (typeof document_currencies !== 'undefined' && document_currencies) {
this.currencies = document_currencies; this.currencies = document_currencies;
this.currencies.forEach(function (currency, index) { this.currencies.forEach(function (currency, index) {
@ -697,5 +732,9 @@ const app = new Vue({
} }
}, this); }, this);
} }
if (typeof document_taxes !== 'undefined' && document_taxes) {
this.dynamic_taxes = document_taxes;
}
} }
}); });

View File

@ -1,34 +0,0 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./../../bootstrap');
import Vue from 'vue';
import DashboardPlugin from './../../plugins/dashboard-plugin';
import Global from './../../mixins/global';
import Form from './../../plugins/form';
import BulkAction from './../../plugins/bulk-action';
// plugin setup
Vue.use(DashboardPlugin);
const app = new Vue({
el: '#app',
mixins: [
Global
],
data: function () {
return {
form: new Form('payment'),
bulk_action: new BulkAction('payments'),
}
},
});

View File

@ -1,34 +0,0 @@
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./../../bootstrap');
import Vue from 'vue';
import DashboardPlugin from './../../plugins/dashboard-plugin';
import Global from './../../mixins/global';
import Form from './../../plugins/form';
import BulkAction from './../../plugins/bulk-action';
// plugin setup
Vue.use(DashboardPlugin);
const app = new Vue({
el: '#app',
mixins: [
Global
],
data: function () {
return {
form: new Form('revenue'),
bulk_action: new BulkAction('revenues')
}
}
});

View File

@ -4,6 +4,7 @@ return [
'bill_number' => 'رقم فاتورة الشراء', 'bill_number' => 'رقم فاتورة الشراء',
'bill_date' => 'تاريخ الفاتورة', 'bill_date' => 'تاريخ الفاتورة',
'bill_amount' => 'مبلغ الفاتورة',
'total_price' => 'السعر الإجمالي', 'total_price' => 'السعر الإجمالي',
'due_date' => 'تاريخ الاستحقاق', 'due_date' => 'تاريخ الاستحقاق',
'order_number' => 'رقم الطلب', 'order_number' => 'رقم الطلب',
@ -13,7 +14,7 @@ return [
'price' => 'السعر', 'price' => 'السعر',
'sub_total' => 'المبلغ الإجمالي', 'sub_total' => 'المبلغ الإجمالي',
'discount' => 'خصم', 'discount' => 'خصم',
'item_discount' => 'خصم على المبيعات', 'item_discount' => 'خصم على هذه المنتجات',
'tax_total' => 'إجمالي الضريبة', 'tax_total' => 'إجمالي الضريبة',
'total' => 'المجموع', 'total' => 'المجموع',

View File

@ -3,18 +3,24 @@
return [ return [
'company' => [ 'company' => [
'description' => 'تغيير اسم الشركه، البريد اﻹلكتروني، العنوان، الرقم الضريبي الخ', 'description' => 'تغيير اسم الشركه، البريد اﻹلكتروني، العنوان، الرقم الضريبي الخ',
'name' => 'الاسم', 'name' => 'الاسم',
'email' => 'البريد الإلكتروني', 'email' => 'البريد الإلكتروني',
'phone' => 'رقم الهاتف', 'phone' => 'رقم الهاتف',
'address' => 'العنوان', 'address' => 'العنوان',
'logo' => 'الشعار', 'edit_your_business_address' => 'أدخل عنوان العمل',
'logo' => 'الشعار',
], ],
'localisation' => [ 'localisation' => [
'description' => 'قم بتحديد السنة المالية والمنطقة الزمنية وصيغة التاريخ والمزيد من الاعدادات', 'description' => 'قم بتحديد السنة المالية والمنطقة الزمنية وصيغة التاريخ والمزيد من الاعدادات',
'financial_start' => 'بدء السنة المالية', 'financial_start' => 'بدء السنة المالية',
'timezone' => 'التوقيت', 'timezone' => 'التوقيت',
'financial_denote' => [
'title' => 'السنة المالية',
'begins' => 'خلال السنة التي تبدأ في',
'ends' => 'خلال السنة التي تنتهي في',
],
'date' => [ 'date' => [
'format' => 'صيغة التاريخ', 'format' => 'صيغة التاريخ',
'separator' => 'فاصل التاريخ', 'separator' => 'فاصل التاريخ',
@ -62,12 +68,27 @@ return [
'default' => 'الافتراضي', 'default' => 'الافتراضي',
'classic' => 'كلاسيكي', 'classic' => 'كلاسيكي',
'modern' => 'عصري', 'modern' => 'عصري',
'hide' => [
'item_name' => 'إخفاء أسم الصنف',
'item_description' => 'إخفاء وصف الصنف',
'quantity' => 'إخفاء كمية',
'price' => 'إخفاء سعر',
'amount' => 'إخفاء عدد',
],
],
'transfer' => [
'choose_template' => 'أختر لنقل القالب',
'second' => 'الثاني',
'third' => 'الثالث',
], ],
'default' => [ 'default' => [
'description' => 'الحساب اﻹفتراضي، العملة، لغة الشركة', 'description' => 'الحساب اﻹفتراضي، العملة، لغة الشركة',
'list_limit' => 'عدد السجلات في كل صفحة', 'list_limit' => 'عدد السجلات في كل صفحة',
'use_gravatar' => 'إستخدم Gravatar', 'use_gravatar' => 'إستخدم Gravatar',
'income_category' => 'فئة الدخل',
'expense_category' => 'فئة المصروف',
], ],
'email' => [ 'email' => [
@ -100,6 +121,7 @@ return [
'invoice_payment_admin' => 'قالب استلام المدفوعات (يُرسل الى المدير)', 'invoice_payment_admin' => 'قالب استلام المدفوعات (يُرسل الى المدير)',
'bill_remind_admin' => 'قالب تذكير لفاتورة (أُرسل الى المدير)', 'bill_remind_admin' => 'قالب تذكير لفاتورة (أُرسل الى المدير)',
'bill_recur_admin' => 'قالب تكرار الفاتورة (أُرسل إلى المدير)', 'bill_recur_admin' => 'قالب تكرار الفاتورة (أُرسل إلى المدير)',
'revenue_new_customer' => 'قالب استلام الإيراد (مرسل للعميل)',
], ],
], ],

View File

@ -3,7 +3,10 @@
return [ return [
'from_account' => 'من حساب', 'from_account' => 'من حساب',
'from_account_rate' => 'من تسعيرة حساب',
'to_account' => 'إلى حساب', 'to_account' => 'إلى حساب',
'to_account_rate' => 'إلى تسعيرة حساب',
'details' => 'تفاصيل|تفاصيل',
'messages' => [ 'messages' => [
'delete' => ':from إلى :to (:amount)', 'delete' => ':from إلى :to (:amount)',

View File

@ -2,13 +2,13 @@
return [ return [
'account_name' => 'Hesab Adı', 'account_name' => 'Hesab adı',
'number' => 'Nömrə', 'number' => 'Nömrə',
'opening_balance' => 'Açılış Balansı', 'opening_balance' => 'Açılış balansı',
'current_balance' => 'Mövcud Balans', 'current_balance' => 'Mövcud balans',
'bank_name' => 'Bank Adı', 'bank_name' => 'Bank adı',
'bank_phone' => 'Bank Telefonu', 'bank_phone' => 'Bank telefonu',
'bank_address' => 'Bank Ünvanı', 'bank_address' => 'Bank ünvanı',
'default_account' => 'Varsayılan Hesab', 'default_account' => 'İlkin hesab',
]; ];

View File

@ -5,37 +5,37 @@ return [
'profile' => 'Profil', 'profile' => 'Profil',
'logout' => ıxış', 'logout' => ıxış',
'login' => 'Giriş', 'login' => 'Giriş',
'login_to' => 'Giriş üçün daxil olun', 'login_to' => 'Seans başlatmaq üçün giriş edin',
'remember_me' => 'Məni Xatırla', 'remember_me' => 'Məni xatırla',
'forgot_password' => 'Şifrəmi unutdum', 'forgot_password' => 'Şifrəmi unutdum',
'reset_password' => 'Şifrəmi Yenilə', 'reset_password' => 'Şifrəni sıfırla',
'enter_email' => 'E-poçt Ünvanınızı Daxil edin', 'enter_email' => 'E-poçt ünvanınızı daxil edin',
'current_email' => 'Cari E-poçt', 'current_email' => 'Hazırkı e-poçt',
'reset' => 'Yenilə', 'reset' => 'Sıfırla',
'never' => 'heçbir zaman', 'never' => 'heç vaxt',
'landing_page' => 'Açılış Səhifəsi', 'landing_page' => 'Açılış səhifəsi',
'password' => [ 'password' => [
'current' => 'Şifrə', 'current' => 'Şifrə',
'current_confirm' => 'Şifrə Təsdiqi', 'current_confirm' => 'Şifrə təsdiqi',
'new' => 'Yeni Şifrə', 'new' => 'Yeni şifrə',
'new_confirm' => 'Yeni Şifrə Təsdiqi', 'new_confirm' => 'Yeni şifrə təsdiqi',
], ],
'error' => [ 'error' => [
'self_delete' => 'Xəta: Özünüzü silə bilməzsiniz!', 'self_delete' => 'Xəta: Özünüzü silə bilməzsiniz!',
'self_disable' => 'Xəta: Özünüzü deaktiv edə bilməzsiniz!', 'self_disable' => 'Xəta: Özünüzü sıradan çıxarda bilməzsiniz!',
'no_company' => 'Xəta: Hesabınıza təyin edilmiş bir şirkət yoxdur. Zəhmət olmasa sistem inzibatçısı ilə əlaqə saxlayın.', 'no_company' => 'Xəta: Hesabınıza heç bir şirkət təyin edilməyib. Zəhmət olmasa sistem administratoru ilə əlaqə saxlayın.',
], ],
'failed' => 'Bu istifadəçi bilgiləri bizim məlumatlarla uyğun gəlmir.', 'failed' => 'Kimlik məlumatları, qeydlərimizlə uyğunlaşmır.',
'throttle' => 'Çox sayda giriş cəhdi. Zəhmət olmazsa: saniyələr içində yenidən cəhd edin.', 'throttle' => 'Çox sayda giriş cəhdi. Zəhmət olmasa :seconds saniyə ərzindən yenidən sınayın.',
'disabled' => 'Bu hesab deaktiv edilib. Zəhmət olmasa sistem administratoru ilə əlaqə saxlayın.', 'disabled' => 'Bu hesab sıradan çıxarılıb. Zəhmət olmasa sistem administratoru ilə əlaqə saxlayın.',
'notification' => [ 'notification' => [
'message_1' => 'Bu e-poçtu şifrə Yeniləma tələbinizə uyğun olaraq alırsınız.', 'message_1' => 'Hesabınız üçün şifrə sıfırlama tələbini aldığımız üçün bu e-poçtu alırsınız.',
'message_2' => 'Bir şifrə Yeniləma tələb etmədiyiniz təqdirdə heç bir şey etməyin.', 'message_2' => 'Şifrə sıfırlama tələbi göndərməmisinizsə, heç bir şey etməyin.',
'button' => 'Şifrə Yeniləma', 'button' => 'Şifrə sıfırlama',
], ],
]; ];

View File

@ -2,53 +2,54 @@
return [ return [
'bill_number' => 'Faktura Nömrəsi', 'bill_number' => 'Faktura nömrəsi',
'bill_date' => 'Faktura Tarixi', 'bill_date' => 'Faktura tarixi',
'total_price' => 'Cəmi Məbləğ', 'bill_amount' => 'Faktura məbləği',
'due_date' => 'Son Ödəniş Tarixi', 'total_price' => 'Cəmi qiymət',
'order_number' => 'Sifariş Nömrəsi', 'due_date' => 'Bitmə tarixi',
'bill_from' => 'Fakturanı Göndərən', 'order_number' => 'Sifariş nömrəsi',
'bill_from' => 'Fakturanı göndərən',
'quantity' => 'Ədəd', 'quantity' => 'Ədəd',
'price' => 'Qiymət', 'price' => 'Qiymət',
'sub_total' => 'Ara Cəmi', 'sub_total' => 'Alt cəm',
'discount' => 'Endirim', 'discount' => 'Endirim',
'item_discount' => 'Məhsul Endirimi', 'item_discount' => 'Sətir endirimi',
'tax_total' => 'Vergi Cəmi', 'tax_total' => 'Vergi cəmi',
'total' => 'Cəmi', 'total' => 'Cəmi',
'item_name' => 'Məhsul Adı | Məhsul Adları', 'item_name' => 'Element adı|Element adları',
'show_discount' => '%:discount Endirim', 'show_discount' => '%:discount Endirim',
'add_discount' => 'Endirim Əlavə et', 'add_discount' => 'Endirim əlavə et',
'discount_desc' => 'ara cəm üzərinə', 'discount_desc' => 'alt cəm üzərindən',
'payment_due' => 'Son Ödəmə Tarixi', 'payment_due' => 'Son ödəniş tarixi',
'amount_due' => 'Ödənəcək Məbləğ', 'amount_due' => 'Ödəniləcək məbləğ',
'paid' => 'Ödənmiş', 'paid' => 'Ödənilib',
'histories' => 'Keşmiş', 'histories' => 'Tarixçə',
'payments' => 'Ödənişlər', 'payments' => 'Ödənişlər',
'add_payment' => 'Ödəniş Əlavə Et', 'add_payment' => 'Ödəniş əlavə et',
'mark_paid' => 'Ödənildi İşarələ', 'mark_paid' => 'Ödənilmiş kimi işarələ',
'mark_received' => 'Qəbul edildi İşarələ', 'mark_received' => 'Alınmış kimi işarələ',
'mark_cancelled' => 'Ləğv Edildi İşarələ', 'mark_cancelled' => 'İmtina edilmiş kimi işarələ',
'download_pdf' => 'PDF Yükə', 'download_pdf' => 'PDF endir',
'send_mail' => 'E-poçt Göndər', 'send_mail' => 'E-poçt göndər',
'create_bill' => 'Faktura Yarat', 'create_bill' => 'Faktura yarat',
'receive_bill' => 'Fakturanı Qəbul et', 'receive_bill' => 'Faktura al',
'make_payment' => 'Ödəniş et', 'make_payment' => 'Ödəniş et',
'messages' => [ 'messages' => [
'draft' => 'Bu bir <b>QARALAMA</b> Fakturadır və qəbul edildikdən sonra qrafiklərdə əks olunacaq.', 'draft' => 'Bu bir <b>QARALAMA</b> fakturadır və qəbul edildikdən sonra qrafiklərdə əks olunacaq.',
'status' => [ 'status' => [
'created' => ':date Tarixində Yaradıldı', 'created' => ':date tarixində yaradıldı',
'receive' => [ 'receive' => [
'draft' => 'Göndərilmədi', 'draft' => 'Alınmadı',
'received' => ':date Tarixində Qəbul edildi', 'received' => ':date tarixində alındı',
], ],
'paid' => [ 'paid' => [
'await' => 'Gözləyən Ödəniş', 'await' => 'Gözləyən ödəniş',
], ],
], ],
], ],

View File

@ -2,20 +2,20 @@
return [ return [
'bulk_actions' => 'Toplu Hərəkət|Toplu Hərəkətlər', 'bulk_actions' => 'Toplu əməliyyat|Toplu əməliyyatlar',
'selected' => 'seçili', 'selected' => 'seçildi',
'no_action' => 'Heç bir əməliyyat yoxdur', 'no_action' => 'Heç bir əməliyyat yoxdur',
'message' => [ 'message' => [
'duplicate' => 'Seşilmiş qeydi <b>dublikat etməl</b> istədiyinizdən əminsiniz?', 'duplicate' => 'Seçilmiş qeydi <b>çoxaltmaq</b> istədiyinizə əminsiniz?',
'delete' => 'Seşilmiş qeydi <b>silmək</b> istədiyinizdən əminsiniz?|Seşilmiş qeydiləri <b>silmək</b> istədiyinizdən əminsiniz?', 'delete' => 'Seçilmiş qeydi <b>silmək</b> istədiyinizə əminsiniz?|Seçilmiş qeydləri <b>silmək</b> istədiyinizə əminsiniz?',
'export' => 'Seçilmiş qeydi <b>ixrac etmək</b> istədiyinizdən əminsiniz?|Seçilmiş qeydləri <b>ixrac etmək</b> istədiyinizdən əminsiniz?', 'export' => 'Seçilmiş qeydi <b>ixrac etmək</b> istədiyinizə əminsiniz?|Seçilmiş qeydləri <b>ixrac etmək</b> istədiyinizə əminsiniz?',
'enable' => 'Seçilmiş qeydi <b>aktiv etmək</b> istədiyinizdən əminsiniz?|Seçilmiş qeydləri <b>aktiv etmək</b> istədiyinizdən əminsiniz?', 'enable' => 'Seçilmiş qeydi <b>fəallaşdırmaq</b> istədiyinizə əminsiniz?|Seçilmiş qeydləri <b>fəallaşdırmaq</b> istədiyinizə əminsiniz?',
'disable' => 'Seçilmiş qeydi <b>deaktiv etmək</b> istədiyinizdən əminsiniz?|Seçilmiş qeydləri <b>deaktiv etmək</b> istədiyinizdən əminsiniz?', 'disable' => 'Seçilmiş qeydi <b>sıradan çıxartmaq</b> istədiyinizə əminsiniz?|Seçilmiş qeydləri <b>sıradan çıxartmaq</b> istədiyinizə əminsiniz?',
'paid' => 'Seçilmiş fakturanı <b>ödənildi</b> olaraq işarələmək istədiyinizdən əminsiniz?|Seçilmiş fakturaları <b>ödənildi</b> olaraq işarələmək istədiyinizdən əminsiniz?', 'paid' => 'Seçilmiş fakturanı <b>ödənildi</b> olaraq işarələmək istədiyinizə əminsiniz?|Seçilmiş fakturaları <b>ödənildi</b> olaraq istədiyinizə istədiyinizdən əminsiniz?',
'sent' => 'Seçilmiş fakturanı <b>göndərildi</b> olaraq işarələmək istədiyinizdən əminsiniz?|Seçilmiş fakturaları <b>göndərildi</b> olaraq işarələmək istədiyinizdən əminsiniz?', 'sent' => 'Seçilmiş fakturanı <b>göndərildi</b> olaraq işarələmək istədiyinizə əminsiniz?|Seçilmiş fakturaları <b>göndərildi</b> olaraq işarələmək istədiyinizə əminsiniz?',
'received' => 'Seçilmiş fakturanı <b>qəbul edildi</b> olaraq işarələmək istədiyinizdən əminsiniz?|Seçilmiş fakturaları <b>qəbul edildi</b> olaraq işarələmək istədiyinizdən əminsiniz?', 'received' => 'Seçilmiş fakturanı <b>qəbul edildi</b> olaraq işarələmək istədiyinizə əminsiniz?|Seçilmiş fakturaları <b>qəbul edildi</b> olaraq işarələmək istədiyinizə əminsiniz?',
'cancelled' => 'Seçilmiş fakturanı <b>ləğv etmək</b> istədiyinizdən əminsiniz?|Seçilmiş fakturaları <b>ləğv etmək</b> istədiyinizdən əminsiniz?', 'cancelled' => 'Seçilmiş fakturanı <b>ləğv etmək</b> istədiyinizə əminsiniz?|Seçilmiş fakturaları <b>ləğv etmək</b> istədiyinizə əminsiniz?',
'reconcile' => 'Seçilmiş qeyd üçün <b>razılaşmaq</b> istədiyinizdən əminsiniz?|Seçilmiş qeydlər üçün <b>razılaşmaq</b> istədiyinizdən əminsiniz?', 'reconcile' => 'Seçilmiş qeyd üçün <b>razılaşmaq</b> istədiyinizdən əminsiniz?|Seçilmiş qeydlər üçün <b>razılaşmaq</b> istədiyinizdən əminsiniz?',
'unreconcile' => 'Seçilmiş qeyd üçün <b>razılaşmaq istəmədiyinizdən</b> əminsiniz?|Seçilmiş qeydlər üçün <b>razılaşmaq istəmədiyinizdən</b> əminsiniz?', 'unreconcile' => 'Seçilmiş qeyd üçün <b>razılaşmaq istəmədiyinizdən</b> əminsiniz?|Seçilmiş qeydlər üçün <b>razılaşmaq istəmədiyinizdən</b> əminsiniz?',
], ],

View File

@ -2,13 +2,13 @@
return [ return [
'domain' => 'Domain Adı', 'domain' => 'Domen',
'logo' => 'Logo', 'logo' => 'Loqo',
'error' => [ 'error' => [
'not_user_company' => 'Xəta: Bu şirkəti dəyişdirmə icazəniz yoxdur!', 'not_user_company' => 'Xəta: Bu şirkəti dəyişdirmə icazəniz yoxdur!',
'delete_active' => 'Xəta: Mövcud şirkəti silə bilməzsiniz. Zəhmət olmazsa, əvvəlcə başqa bir şirkətə keçin!', 'delete_active' => 'Xəta: Aktiv şirkəti silə bilməzsiniz. Zəhmət olmasa əvvəlcə başqa bir şirkətə keçin!',
'disable_active' => 'Xəta: Mövcud şirkəti deaktiv edə bilməzsiniz. Zəhmət olmazsa, əvvəlcə başqa bir şirkətə keçin!', 'disable_active' => 'Xəta: Aktiv şirkəti sıradan çıxarda bilməzsiniz. Zəhmət olmasa əvvəlcə başqa bir şirkətə keçin!',
], ],
]; ];

View File

@ -4,16 +4,16 @@ return [
'code' => 'Kod', 'code' => 'Kod',
'rate' => 'Məzənnə', 'rate' => 'Məzənnə',
'default' => 'Varsayılan Valyuta', 'default' => 'İlkin pul vahidi',
'decimal_mark' => 'Onluq Ayırıcı', 'decimal_mark' => 'Onluq ayırıcı',
'thousands_separator' => 'Minlik Aıyrıcı', 'thousands_separator' => 'Minlik ayırıcı',
'precision' => 'Dəqiqlik', 'precision' => 'Dəqiqlik',
'conversion' => 'Valyuta konversiyası', 'conversion' => 'İlkin konversiya: :currency_rate əmsalı ilə :price (:currency_code)',
'symbol' => [ 'symbol' => [
'symbol' => 'İşarə', 'symbol' => 'Simvol',
'position' => 'İşarənin Yeri', 'position' => 'Simvol mövqeyi',
'before' => 'Məbləğdən Əvvəl', 'before' => 'Məbləğdən əvvəl',
'after' => 'Məbləğdən Sonra', 'after' => 'Məbləğdən sonra',
] ]
]; ];

View File

@ -2,11 +2,11 @@
return [ return [
'can_login' => 'Giriş Edə Bilər', 'can_login' => 'Giriş edilə bilər?',
'user_created' => 'İstifadəçi yarat', 'user_created' => 'İstifadəçi yaradıldı',
'error' => [ 'error' => [
'email' => 'E-poçt ünvanı istifadə edilir.', 'email' => 'E-poçt ünvanı artıq istifadədədir.',
], ],
]; ];

View File

@ -5,7 +5,7 @@ return [
'error' => [ 'error' => [
'not_user_dashboard' => 'Xəta: Bu idarəetmə panelini dəyişdirmə icazəniz yoxdur!', 'not_user_dashboard' => 'Xəta: Bu idarəetmə panelini dəyişdirmə icazəniz yoxdur!',
'delete_last' => 'Xəta: Son idarəetmə panelini silə bilməzsiniz. Əvvəlcə yeni bir panel yaradın!', 'delete_last' => 'Xəta: Son idarəetmə panelini silə bilməzsiniz. Əvvəlcə yeni bir panel yaradın!',
'disable_last' => 'Xəta: Son idarəetmə panelini deaktiv edə bilməzsiniz. Əvvəlcə yeni bir panel yaradın!', 'disable_last' => 'Xəta: Son idarəetmə panelini sıradan çıxarda bilməzsiniz. Əvvəlcə yeni bir panel yaradın!',
], ],
]; ];

View File

@ -3,7 +3,7 @@
return [ return [
'accounts' => [ 'accounts' => [
'cash' => 'Nəğd', 'cash' => 'Nağd',
], ],
'categories' => [ 'categories' => [
@ -12,22 +12,22 @@ return [
], ],
'currencies' => [ 'currencies' => [
'usd' => 'Amerika Dolları', 'usd' => 'Amerikan dolları',
'eur' => 'Avro', 'eur' => 'Avro',
'gbp' => 'İngilis Sterlinqi', 'gbp' => 'İngilis sterlinqi',
'try' => 'Türk Lirəsı', 'try' => 'Türk lirəsi',
], ],
'offline_payments' => [ 'offline_payments' => [
'cash' => 'Nəğd', 'cash' => 'Nağd',
'bank' => 'Bank Köçürməsi', 'bank' => 'Bank köçürməsi',
], ],
'reports' => [ 'reports' => [
'income' => 'Kateqoriya əsaslı aylıq gəlir xülasəsi.', 'income' => 'Kateqoriyaya görə aylıq gəlir icmalı.',
'expense' => 'Kateqoriya əsaslı aylıq xərc xülasəsi.', 'expense' => 'Katqoriyaya görə aylıq xərc icmalı.',
'income_expense' => 'Kateqoriya əsaslı aylıq gəlir-xərc balansı.', 'income_expense' => 'Kateqoriyaya görə aylıq gəlir - xərc icmalı.',
'tax' => 'Rüblük vergi xülasəsi.', 'tax' => 'Rüblük vergi icmalı.',
'profit_loss' => 'Rüblük mənfəət və zərər hesabatı.', 'profit_loss' => 'Rüblük mənfəət və zərər hesabatı.',
], ],

View File

@ -2,26 +2,26 @@
return [ return [
'edit_columns' => 'Sütünları Düzəlt', 'edit_columns' => 'Sütunlara düzəliş et',
'empty_items' => 'Hər hansı bir məhsul/xidmət əlavə etmədiniz.', 'empty_items' => 'Heç bir element əlavə edilmədi.',
'statuses' => [ 'statuses' => [
'draft' => 'Qaralama', 'draft' => 'Qaralama',
'sent' => 'Göndərildi', 'sent' => 'Göndərildi',
'expired' => 'Vaxtı Bitdi', 'expired' => 'Vaxtı bitib',
'viewed' => 'Baxıldı', 'viewed' => 'Baxıldı',
'approved' => 'Təsdiqləndi', 'approved' => 'Təsdiqləndi',
'received' => 'Qəbul Edildi', 'received' => 'Alındı',
'refused' => 'Rədd Edildi', 'refused' => 'Rədd edildi',
'restored' => 'Bərpa edildi', 'restored' => 'Bərpa edildi',
'reversed' => 'Geri Qaytarıldı', 'reversed' => 'Çevrildi',
'partial' => 'Qismən Ödəmə', 'partial' => 'Hissəli',
'paid' => 'Ödənildi', 'paid' => 'Ödənildi',
'pending' => 'Gözləyən', 'pending' => 'Gözləyən',
'invoiced' => 'Faturalandırıldı', 'invoiced' => 'Fakturalı',
'overdue' => 'Gecikmiş', 'overdue' => 'Gecikmiş',
'unpaid' => 'Ödənilməmiş', 'unpaid' => 'Ödənilməmiş',
'cancelled' => 'Ləğv Edildi', 'cancelled' => 'İmtina edilmiş',
'voided' => 'Ləğv Edildi', 'voided' => 'Ləğv Edildi',
'completed' => 'Tamamlandı', 'completed' => 'Tamamlandı',
'shipped' => 'Göndərildi', 'shipped' => 'Göndərildi',

View File

@ -16,8 +16,8 @@ return [
'password' => 'Parollar ən azı altı simvoldan ibarət olmalı və təsdiqlə uyğun olmalıdır.', 'password' => 'Parollar ən azı altı simvoldan ibarət olmalı və təsdiqlə uyğun olmalıdır.',
'reset' => 'Şifrəniz sıfırlandı!', 'reset' => 'Şifrəniz sıfırlandı!',
'sent' => 'Şifrə sıfırlama linkinizi elektron poçtla göndərdik!', 'sent' => 'Şifrə sıfırlama linkinizi elektron poçtla göndərdik!',
'throttled' => 'Yenidən sınamazdan əvvəl gözləyin.',
'token' => 'Şifrə sıfırlama ünvanı/kodu etibarsızdır.', 'token' => 'Şifrə sıfırlama ünvanı/kodu etibarsızdır.',
'user' => "Bu e-poçt ünvanı ilə qeydiyyatdan keçmiş bir üzv yoxdur.", 'user' => "Bu e-poçt ünvanı ilə qeydiyyatdan keçmiş bir üzv yoxdur.",
'throttle' => 'Zəhmət olmazsa, yenidən cəhd etmədən əvvəl gözləyin.',
]; ];

View File

@ -0,0 +1,10 @@
<?php
return [
'payment_made' => 'Ödəniş edildi',
'paid_to' => 'Ödəniş göndərildi',
'related_bill' => 'Əlaqəli faktura',
'create_payment' => 'Ödəniş yarat',
];

View File

@ -2,8 +2,8 @@
return [ return [
'installed_version' => 'Yüklü Versiya', 'installed_version' => 'Quraşdırılmış versiya',
'latest_version' => 'Ən Son Versiya', 'latest_version' => 'Son versiya',
'update' => ':version versiyasına yenilə', 'update' => ':version versiyasına yenilə',
'changelog' => 'Dəyişiklik Qeydi', 'changelog' => 'Dəyişiklik Qeydi',
'check' => 'Yenilə', 'check' => 'Yenilə',

View File

@ -2,22 +2,23 @@
return [ return [
'total_income' => 'Cəmi Gəlir', 'currencies' => 'Pul vahidləri',
'receivables' => 'Alacaq', 'total_income' => 'Cəmi gəlir',
'open_invoices' => 'Açıq Fakturalar', 'receivables' => 'Alınacaqlar',
'overdue_invoices' => 'Gecikmiş Fakturalar', 'open_invoices' => 'Açıq fakturalar',
'total_expenses' => 'Cəmi Xərc', 'overdue_invoices' => 'Gecikmiş fakturalar',
'payables' => 'Verəcək', 'total_expenses' => 'Cəmi xərclər',
'open_bills' => 'Açıq Fakturalar', 'payables' => 'Veriləcəklər',
'overdue_bills' => 'Gecikmiş Fakturalar', 'open_bills' => 'Açıq fakturalar',
'total_profit' => 'Cəmi Gəlir', 'overdue_bills' => 'Gecikmiş fakturalar',
'open_profit' => 'Açıq Gəlir', 'total_profit' => 'Cəmi mənfəət',
'overdue_profit' => 'Gecikmiş Gəlir', 'open_profit' => 'Açıq mənfəət',
'cash_flow' => 'Maliyyə axını', 'overdue_profit' => 'Gecikmiş mənfəət',
'no_profit_loss' => 'Gəlir-Zərər Yox', 'cash_flow' => 'Nağd axın',
'income_by_category' => 'Gəlir Kateqoriyaları', 'no_profit_loss' => 'Mənfəət itkisi yoxdur',
'expenses_by_category' => 'Xərc Kateqoriyaları', 'income_by_category' => 'Kateqriyaya görə gəlir',
'account_balance' => 'Hesap Balansı', 'expenses_by_category' => 'Kateqoriyaya görə xərclər',
'latest_income' => 'Son Gəlirlər', 'account_balance' => 'Hesab balansı',
'latest_expenses' => 'Son Xərclər', 'latest_income' => 'Son gəlir',
'latest_expenses' => 'Son xərclər',
]; ];

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Telefon banke', 'bank_phone' => 'Telefon banke',
'bank_address' => 'Adresa banke', 'bank_address' => 'Adresa banke',
'default_account' => 'Zadani račun', 'default_account' => 'Zadani račun',
'incoming' => 'Dolazni',
'outgoing' => 'Odlazni',
'see_performance' => 'Pogledaj performanse',
'create_report' => 'Ako želite vidjeti performanse računa. Možete kreirati instancu izvještaja o prihodima i troškovima.',
]; ];

View File

@ -73,6 +73,7 @@ return [
'add_new' => 'Dodaj novo', 'add_new' => 'Dodaj novo',
'add_income' => 'Dodajte prihod', 'add_income' => 'Dodajte prihod',
'add_expense' => 'Dodajte trošak', 'add_expense' => 'Dodajte trošak',
'add_transfer' => 'Dodaj transfer',
'show' => 'Prikaži', 'show' => 'Prikaži',
'edit' => 'Uredi', 'edit' => 'Uredi',
'delete' => 'Izbriši', 'delete' => 'Izbriši',

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Telefon bank', 'bank_phone' => 'Telefon bank',
'bank_address' => 'Bank adresse', 'bank_address' => 'Bank adresse',
'default_account' => 'Standardkonto', 'default_account' => 'Standardkonto',
'incoming' => 'Indgående',
'outgoing' => 'Udgående',
'see_performance' => 'Se præstation',
'create_report' => 'Hvis du vil se præstationen for den enkelte konto, kan du oprette en indtægt vs. udgiftsrapport.',
]; ];

View File

@ -49,4 +49,14 @@ return [
'body' => 'Hej,<br /><br /> Baseret på {vendor_name}\'s tilbagevendende betaling, er faktura nummer <strong>{bill_number}</strong> automatisk genereret.<br /><br />Du kan se fakturadetaljerne på dette link: <a href="{bill_admin_link}">{bill_number}</a>.<br /><br />Med venlig hilsen,<br />{company_name}', 'body' => 'Hej,<br /><br /> Baseret på {vendor_name}\'s tilbagevendende betaling, er faktura nummer <strong>{bill_number}</strong> automatisk genereret.<br /><br />Du kan se fakturadetaljerne på dette link: <a href="{bill_admin_link}">{bill_number}</a>.<br /><br />Med venlig hilsen,<br />{company_name}',
], ],
'revenue_new_customer' => [
'subject' => '{revenue_date} betaling oprettet',
'body' => 'Kære {customer_name},<br /><br />Vi har forberedt følgende betaling. <br /><br />Du kan se betalingsdetaljerne på følgende link: <a href="{revenue_guest_link}">{revenue_date}</a>.<br /><br />Du er velkommen til at kontakte os, hvis du har spørgsmål til betalingen.<br /><br />Venlig hilsen,<br />{company_name}',
],
'payment_new_vendor' => [
'subject' => '{revenue_date} betaling oprettet',
'body' => 'Kære {vendor_name},<br /><br />Vi har forberedt følgende betaling. <br /><br />Du kan se betalingsdetaljerne følgende link: <a href="{payment_admin_link}">{payment_date}</a>.<br /><br />Du er velkommen til at kontakte os, hvis du har spørgsmål.<br /><br />Venlig hilsen,<br />{company_name}
',
],
]; ];

View File

@ -73,6 +73,7 @@ return [
'add_new' => 'Tilføj ny', 'add_new' => 'Tilføj ny',
'add_income' => 'Tilføj Indkomst', 'add_income' => 'Tilføj Indkomst',
'add_expense' => 'Tilføj Udgift', 'add_expense' => 'Tilføj Udgift',
'add_transfer' => 'Tilføj overførsel',
'show' => 'Vis', 'show' => 'Vis',
'edit' => 'Rediger', 'edit' => 'Rediger',
'delete' => 'Slet', 'delete' => 'Slet',

View File

@ -4,12 +4,24 @@ return [
'change_language' => 'Skift sprog', 'change_language' => 'Skift sprog',
'last_login' => 'Sidste login :time', 'last_login' => 'Sidste login :time',
'notifications' => [ 'notifications' => [
'counter' => '{0} Du har ingen notifikationer|{1} Du har :count notifikation|[2, *] Du har :count notifikationer', 'counter' => '{0} Du har ingen notifikationer|{1} Du har :count notifikation|[2, *] Du har :count notifikationer',
'new_apps' => '{1} :count ny app er publiceret|[2,*] :count nye apps publiceret',
'overdue_invoices' => '{1} :count forfalden regning|[2,*] :count forfaldne regninger', 'overdue_invoices' => '{1} :count forfalden regning|[2,*] :count forfaldne regninger',
'upcoming_bills' => '{1} :count kommende regning|[2,*] :count kommende regninger', 'upcoming_bills' => '{1} :count kommende regning|[2,*] :count kommende regninger',
'view_all' => 'Vis alle' 'view_all' => 'Vis alle',
'exports' => [
'completed' => '{1} :count færdig eksport|[2,*] :count færdige eksporter',
'failed' => '{1} :count eksport med fejl|[2,*] :count eksporter med fejl',
],
'imports' => [
'completed' => '{1} :count færdig import|[2,*] :count færdige importer',
'failed' => '{1} :count import med fejl|[2,*] :count importer med fejl',
],
], ],
'docs_link' => 'https://akaunting.com/docs', 'docs_link' => 'https://akaunting.com/docs',
'support_link' => 'https://akaunting.com/support', 'support_link' => 'https://akaunting.com/support',

View File

@ -13,6 +13,8 @@ return [
'export_queued' => ':type eksport er planlagt! Du vil modtage en e-mail, når den er klar til download.', 'export_queued' => ':type eksport er planlagt! Du vil modtage en e-mail, når den er klar til download.',
'enabled' => ':type aktiveret!', 'enabled' => ':type aktiveret!',
'disabled' => ':type deaktiveret!', 'disabled' => ':type deaktiveret!',
'clear_all' => 'Fantastisk! Du har ryddet alle dine :type.',
], ],
'error' => [ 'error' => [

View File

@ -0,0 +1,10 @@
<?php
return [
'payment_made' => 'Betaling fortaget',
'paid_to' => 'Betalt til',
'related_bill' => 'Relateret regning',
'create_payment' => 'Opret betaling',
];

View File

@ -6,6 +6,7 @@ return [
'from_account_rate' => 'Fra kontosats', 'from_account_rate' => 'Fra kontosats',
'to_account' => 'Til konto', 'to_account' => 'Til konto',
'to_account_rate' => 'Til kontosats', 'to_account_rate' => 'Til kontosats',
'details' => 'Detalje|Detaljer',
'messages' => [ 'messages' => [
'delete' => ':from til :to (:amount)', 'delete' => ':from til :to (:amount)',

View File

@ -13,79 +13,121 @@ return [
| |
*/ */
'accepted' => ':attribute skal være accepteret.', 'accepted' => ':attribute skal være accepteret.',
'active_url' => ':attribute er ikke en gyldig URL.', 'active_url' => ':attribute er ikke en gyldig URL.',
'after' => ':attribute skal være en dato efter :date.', 'after' => ':attribute skal være en dato efter :date.',
'after_or_equal' => ':attribute skal være en dato før eller lig med :date.', 'after_or_equal' => ':attribute skal være en dato før eller lig med :date.',
'alpha' => ':attribute må kun indeholde bogstaver.', 'alpha' => ':attribute må kun indeholde bogstaver.',
'alpha_dash' => ':attribute må kun indeholde bogstaver, tal eller bindestreger.', 'alpha_dash' => ':attribute må kun indeholde bogstaver, tal eller bindestreger.',
'alpha_num' => ':attribute må kun indeholde bogstaver eller tal.', 'alpha_num' => ':attribute må kun indeholde bogstaver eller tal.',
'array' => ':attribute skal være en matrix.', 'array' => ':attribute skal være en matrix.',
'before' => ':attribute skal være en dato før :date.', 'before' => ':attribute skal være en dato før :date.',
'before_or_equal' => ':attribute skal være en dato før eller lig med :date.', 'before_or_equal' => ':attribute skal være en dato før eller lig med :date.',
'between' => [ 'between' => [
'numeric' => ':attribute skal være imellem :min og :max.', 'numeric' => ':attribute skal være imellem :min og :max.',
'file' => ':attribute skal være imellem :min - :max kilobytes.', 'file' => ':attribute skal være imellem :min - :max kilobytes.',
'string' => ':attribute skal være imellem :min - :max tegn.', 'string' => ':attribute skal være imellem :min - :max tegn.',
'array' => ':attribute skal have mellem: min og: maks. Emner.', 'array' => ':attribute skal have mellem: min og: maks. Emner.',
], ],
'boolean' => ':attribute skal være enabled eller disabled.', 'boolean' => ':attribute skal være enabled eller disabled.',
'confirmed' => ':attribute valget stemmer ikke overens.', 'confirmed' => ':attribute valget stemmer ikke overens.',
'date' => ':attribute er ikke en gyldig dato.', 'current_password' => 'Adgangskoden er forkert.',
'date_format' => ':attribute svarer ikke til formatet :format.', 'date' => ':attribute er ikke en gyldig dato.',
'different' => ':attribute og :other skal være <strong>forskellige</strong>.', 'date_equals' => ':attribute skal være en dato lig med :date.',
'digits' => ':attribute skal være :digits cifre.', 'date_format' => ':attribute svarer ikke til formatet :format.',
'digits_between' => ':attribute skal være imellem :min og :max cifre.', 'different' => ':attribute og :other skal være <strong>forskellige</strong>.',
'dimensions' => ':attribute har ugyldige billeddimensioner.', 'digits' => ':attribute skal være :digits cifre.',
'distinct' => ':attribute har en duplikatværdi.', 'digits_between' => ':attribute skal være imellem :min og :max cifre.',
'email' => ':attribute skal være en gyldig <strong>email adresse</strong>.', 'dimensions' => ':attribute har ugyldige billeddimensioner.',
'ends_with' => ':attribute skal ende med en af følgende: :values', 'distinct' => ':attribute har en duplikatværdi.',
'exists' => 'Det valgte :attribute er ugyldigt.', 'email' => ':attribute skal være en gyldig <strong>email adresse</strong>.',
'file' => ':attribute skal være en <strong>fil</strong>.', 'ends_with' => ':attribute skal ende med en af følgende: :values',
'filled' => ':attribute feltet skal have en <strong>værdi</strong>.', 'exists' => 'Det valgte :attribute er ugyldigt.',
'image' => ':attribute skal være et <strong>billede</strong>.', 'file' => ':attribute skal være en <strong>fil</strong>.',
'in' => 'Det valgte :attribute er ugyldigt.', 'filled' => ':attribute feltet skal have en <strong>værdi</strong>.',
'in_array' => ':attribute findes ikke i :other.', 'gt' => [
'integer' => ':attribute skal være et <strong>heltal</strong>.', 'numeric' => ':attribute skal være større end :value.
'ip' => ':attribute skal være en gyldig IP adresse.', ',
'json' => ':attribute skal være en gyldig JSON-streng.', 'file' => ':attribute skal være større end :value kilobytes.',
'max' => [ 'string' => ':attribute skal være flere end :value tegn.
',
'array' => ':attribute skal indeholde mere end :value varer.',
],
'gte' => [
'numeric' => ':attribute skal være større end eller lig med :value.',
'file' => ':attribute skal være større end eller lig :value kilobytes.
',
'string' => ':attribute skal være større end eller lig :value karakterer.',
'array' => ':attribute skal have :value varer eller mere.',
],
'image' => ':attribute skal være et <strong>billede</strong>.',
'in' => 'Det valgte :attribute er ugyldigt.',
'in_array' => ':attribute findes ikke i :other.',
'integer' => ':attribute skal være et <strong>heltal</strong>.',
'ip' => ':attribute skal være en gyldig IP adresse.',
'ipv4' => ':attribute skal være en valid IPv4 adresse',
'ipv6' => ':attribute skal være en valid IPv6 adresse',
'json' => ':attribute skal være en gyldig JSON-streng.',
'lt' => [
'numeric' => ':attribute skal være mindre end :value.
',
'file' => ':attribute skal være mindre end :value kilobytes.',
'string' => ':attribute skal være færre end :value tegn.
',
'array' => ':attribute skal indeholde mindre end :value varer.',
],
'lte' => [
'numeric' => ':attribute skal være mindre end eller lig med :value.',
'file' => ':attribute skal være mindre end eller lig :value kilobytes.
',
'string' => ':attribute skal være færre end eller lig :value karakterer.',
'array' => ':attribute skal indeholde færre end :value varer.',
],
'max' => [
'numeric' => ':attribute må ikke overstige :max.', 'numeric' => ':attribute må ikke overstige :max.',
'file' => ':attribute må ikke overstige :max. kilobytes.', 'file' => ':attribute må ikke overstige :max. kilobytes.',
'string' => ':attribute må ikke overstige :max. tegn.', 'string' => ':attribute må ikke overstige :max. tegn.',
'array' => ':attribute må ikke overstige :max. antal.', 'array' => ':attribute må ikke overstige :max. antal.',
], ],
'mimes' => ':attribute skal være en fil af typen: :values.', 'mimes' => ':attribute skal være en fil af typen: :values.',
'mimetypes' => ':attribute skal være en fil af typen: :values.', 'mimetypes' => ':attribute skal være en fil af typen: :values.',
'min' => [ 'min' => [
'numeric' => ':attribute skal mindst være :min.', 'numeric' => ':attribute skal mindst være :min.',
'file' => ':attribute skal mindst være :min kilobytes.', 'file' => ':attribute skal mindst være :min kilobytes.',
'string' => ':attribute skal mindst være :min tegn.', 'string' => ':attribute skal mindst være :min tegn.',
'array' => ':attribute skal have mindst :min styk.', 'array' => ':attribute skal have mindst :min styk.',
], ],
'not_in' => 'Det valgte :attribute er ugyldigt.', 'multiple_of' => ':attribute skal være en multipel af :values.',
'numeric' => ':attribute skal være et tal.', 'not_in' => 'Det valgte :attribute er ugyldigt.',
'present' => ':attribute feltet skal være <strong>til stede</strong>.', 'not_regex' => ':attribute formatet er forkert.',
'regex' => ':attribute formatet er <strong>forkert</strong>.', 'numeric' => ':attribute skal være et tal.',
'required' => ':attribute feltet er <strong>påkrævet</strong>.', 'password' => 'Adgangskoden er forkert.',
'required_if' => ':attribute feltet er krævet når :other er :value.', 'present' => ':attribute feltet skal være <strong>til stede</strong>.',
'required_unless' => ':attribute feltet er påkrævet, med mindre :other er :value.', 'regex' => ':attribute formatet er <strong>forkert</strong>.',
'required_with' => ':attribute er påkrævet, når :values er til stede.', 'required' => ':attribute feltet er <strong>påkrævet</strong>.',
'required_with_all' => ':attribute er påkrævet, når :values er til stede.', 'required_if' => ':attribute feltet er krævet når :other er :value.',
'required_without' => ':attribute er påkrævet, når :values ikke er tilstede.', 'required_unless' => ':attribute feltet er påkrævet, med mindre :other er :value.',
'required_with' => ':attribute er påkrævet, når :values er til stede.',
'required_with_all' => ':attribute er påkrævet, når :values er til stede.',
'required_without' => ':attribute er påkrævet, når :values ikke er tilstede.',
'required_without_all' => ':attribute er påkrævet, når ingen af :values er tilstede.', 'required_without_all' => ':attribute er påkrævet, når ingen af :values er tilstede.',
'same' => ':attribute og :other skal være ens.', 'prohibited' => ':attribute feltet er ikke tilladt.',
'size' => [ 'prohibited_if' => ':attribute feltet er ikke tilladt når :other er :value.',
'prohibited_unless' => ':attribute feltet er ikke tilladt, med mindre :other er :value.',
'same' => ':attribute og :other skal være ens.',
'size' => [
'numeric' => ':attribute skal være :size.', 'numeric' => ':attribute skal være :size.',
'file' => ':attribute skal være :size kilobytes.', 'file' => ':attribute skal være :size kilobytes.',
'string' => ':attribute skal være <strong>:size karakterer</strong>.', 'string' => ':attribute skal være <strong>:size karakterer</strong>.',
'array' => ':attribute skal indeholde :size antal.', 'array' => ':attribute skal indeholde :size antal.',
], ],
'string' => ':attribute skal være en <strong>tekst</strong>.', 'starts_with' => ':attribute skal starte med en af følgende: :values',
'timezone' => ':attribute skal være en gyldig zone.', 'string' => ':attribute skal være en <strong>tekst</strong>.',
'unique' => ':attribute er allerede <strong>taget</strong>.', 'timezone' => ':attribute skal være en gyldig zone.',
'uploaded' => ':attribute <strong>kunne ikke</strong> uploades.', 'unique' => ':attribute er allerede <strong>taget</strong>.',
'url' => ':attribute formatet er <strong>ugyldigt</strong>.', 'uploaded' => ':attribute <strong>kunne ikke</strong> uploades.',
'url' => ':attribute formatet er <strong>ugyldigt</strong>.',
'uuid' => ':attribute skal være en gyldig UUID.',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -100,7 +142,7 @@ return [
'custom' => [ 'custom' => [
'attribute-name' => [ 'attribute-name' => [
'rule-name' => 'brugerdefineret besked', 'rule-name' => 'brugerdefineret besked',
], ],
'invalid_currency' => 'Koden :attribute er ugyldig.', 'invalid_currency' => 'Koden :attribute er ugyldig.',
'invalid_amount' => 'Det valgte :attribute er ugyldigt.', 'invalid_amount' => 'Det valgte :attribute er ugyldigt.',
@ -112,9 +154,9 @@ return [
| Custom Validation Attributes | Custom Validation Attributes
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| The following language lines are used to swap attribute place-holders | The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as E-Mail Address instead | with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make messages a little cleaner. | of "email". This simply helps us make our message more expressive.
| |
*/ */

View File

@ -100,7 +100,7 @@ return [
'color' => 'Farbe', 'color' => 'Farbe',
'save' => 'Speichern', 'save' => 'Speichern',
'confirm' => 'Bestätigen', 'confirm' => 'Bestätigen',
'cancel' => 'Abbrechen', 'cancel' => 'Stornieren',
'loading' => 'Wird geladen...', 'loading' => 'Wird geladen...',
'from' => 'Von', 'from' => 'Von',
'to' => 'An', 'to' => 'An',

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Bank Phone', 'bank_phone' => 'Bank Phone',
'bank_address' => 'Bank Address', 'bank_address' => 'Bank Address',
'default_account' => 'Default Account', 'default_account' => 'Default Account',
'incoming' => 'Incoming',
'outgoing' => 'Outgoing',
'see_performance' => 'See Performance',
'create_report' => 'If you want to see account performance. You can create Income vs Expense report instance.',
]; ];

View File

@ -73,6 +73,7 @@ return [
'add_new' => 'Add New', 'add_new' => 'Add New',
'add_income' => 'Add Income', 'add_income' => 'Add Income',
'add_expense' => 'Add Expense', 'add_expense' => 'Add Expense',
'add_transfer' => 'Add Transfer',
'show' => 'Show', 'show' => 'Show',
'edit' => 'Edit', 'edit' => 'Edit',
'delete' => 'Delete', 'delete' => 'Delete',

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Bank Phone', 'bank_phone' => 'Bank Phone',
'bank_address' => 'Bank Address', 'bank_address' => 'Bank Address',
'default_account' => 'Default Account', 'default_account' => 'Default Account',
'incoming' => 'Incoming',
'outgoing' => 'Outgoing',
'see_performance' => 'See Performance',
'create_report' => 'If you want to see account performance. You can create Income vs Expense report instance.',
]; ];

View File

@ -73,6 +73,7 @@ return [
'add_new' => 'Add New', 'add_new' => 'Add New',
'add_income' => 'Add Income', 'add_income' => 'Add Income',
'add_expense' => 'Add Expense', 'add_expense' => 'Add Expense',
'add_transfer' => 'Add Transfer',
'show' => 'Show', 'show' => 'Show',
'edit' => 'Edit', 'edit' => 'Edit',
'delete' => 'Delete', 'delete' => 'Delete',

View File

@ -77,6 +77,12 @@ return [
], ],
], ],
'transfer' => [
'choose_template' => 'स्थानांतरण टेम्पलेट चुनें',
'second' => 'दूसरा',
'third' => 'तीसरा',
],
'default' => [ 'default' => [
'description' => 'मूल खाता, मुद्रा, आपकी कंपनी की भाषा', 'description' => 'मूल खाता, मुद्रा, आपकी कंपनी की भाषा',
'list_limit' => 'प्रति पृष्ठ रेकार्ड', 'list_limit' => 'प्रति पृष्ठ रेकार्ड',
@ -115,6 +121,7 @@ return [
'invoice_payment_admin' => 'भुगतान प्राप्त टेम्प्लेट (व्यवस्थापक को भेजा गया)', 'invoice_payment_admin' => 'भुगतान प्राप्त टेम्प्लेट (व्यवस्थापक को भेजा गया)',
'bill_remind_admin' => 'बिल स्मरणपत्र टेम्पलेट (व्यवस्थापक को भेजा गया)', 'bill_remind_admin' => 'बिल स्मरणपत्र टेम्पलेट (व्यवस्थापक को भेजा गया)',
'bill_recur_admin' => 'बिल आवर्ती टेम्पलेट (व्यवस्थापक को भेजा गया)', 'bill_recur_admin' => 'बिल आवर्ती टेम्पलेट (व्यवस्थापक को भेजा गया)',
'revenue_new_customer' => 'आय प्राप्त टेम्प्लेट (ग्राहक को भेजा गया)',
], ],
], ],

View File

@ -6,6 +6,7 @@ return [
'from_account_rate' => 'खाता दर से', 'from_account_rate' => 'खाता दर से',
'to_account' => 'खाते में', 'to_account' => 'खाते में',
'to_account_rate' => 'खाता दर के लिए', 'to_account_rate' => 'खाता दर के लिए',
'details' => 'विवरण|विवरण',
'messages' => [ 'messages' => [
'delete' => ':from से :to (:amount)', 'delete' => ':from से :to (:amount)',

View File

@ -3,12 +3,16 @@
return [ return [
'account_name' => 'Nama Akun', 'account_name' => 'Nama Akun',
'number' => 'Nomor', 'number' => 'Nomor Rekening',
'opening_balance' => 'Saldo Awal', 'opening_balance' => 'Saldo Awal',
'current_balance' => 'Saldo Saat Ini', 'current_balance' => 'Saldo Saat Ini',
'bank_name' => 'Nama Bank', 'bank_name' => 'Nama Bank',
'bank_phone' => 'Telepon Bank', 'bank_phone' => 'Telepon Bank',
'bank_address' => 'Alamat Bank', 'bank_address' => 'Alamat Bank',
'default_account' => 'Akun Default', 'default_account' => 'Akun Bawaan',
'incoming' => 'Masuk',
'outgoing' => 'Keluar',
'see_performance' => 'Lihat Kinerja',
'create_report' => 'Jika anda ingin melihat kinerja akun. Anda dapa membuat dalam bentuk wujud laporan Pemdapatan dan Pengeluaran.',
]; ];

View File

@ -6,7 +6,7 @@ return [
'logout' => 'Keluar', 'logout' => 'Keluar',
'login' => 'Masuk', 'login' => 'Masuk',
'login_to' => 'Masuk untuk memulai sesi Anda', 'login_to' => 'Masuk untuk memulai sesi Anda',
'remember_me' => 'Ingatkan Saya', 'remember_me' => 'Ingat Saya',
'forgot_password' => 'Lupa kata sandi', 'forgot_password' => 'Lupa kata sandi',
'reset_password' => 'Atur Ulang Kata Sandi', 'reset_password' => 'Atur Ulang Kata Sandi',
'enter_email' => 'Masukan Alamat Email Anda', 'enter_email' => 'Masukan Alamat Email Anda',
@ -23,9 +23,9 @@ return [
], ],
'error' => [ 'error' => [
'self_delete' => 'Error: Tidak dapat menghapus akun sendiri!', 'self_delete' => 'Kesalahan: Tidak dapat menghapus akun sendiri!',
'self_disable' => 'Error: Anda tidak dapat mengaktifkan akun Anda sendiri!', 'self_disable' => 'Kesalahan: Tidak dapat menonaktifkan akun sendiri!',
'no_company' => 'Error: Tidak ada perusahaan yang ditunjuk ke akun Anda. Silakan hubungi administrator sistem.', 'no_company' => 'Kesalahan: Tidak ada perusahaan yang ditunjuk ke akun Anda. Silakan hubungi administrator sistem.',
], ],
'failed' => 'Identitas ini tidak cocok dengan data kami.', 'failed' => 'Identitas ini tidak cocok dengan data kami.',

View File

@ -7,7 +7,7 @@ return [
'error' => [ 'error' => [
'not_user_company' => 'Error: Anda tidak diperbolehkan merubah perusahaan ini!', 'not_user_company' => 'Error: Anda tidak diperbolehkan merubah perusahaan ini!',
'delete_active' => 'Kesalahan: kamu tidak dapat menghapus Perusahaan aktif, silahkan berpindah perusahaan terlebih dahulu!', 'delete_active' => 'Kesalahan: kamu tidak dapat menghapus Perusahaan aktif, Silakan, beralih ke yang lain dulu!',
'disable_active' => 'Kesalahan: Tidak dapat menonaktifkan perusahaan yang aktif. Silakan, beralih ke yang lain dulu!', 'disable_active' => 'Kesalahan: Tidak dapat menonaktifkan perusahaan yang aktif. Silakan, beralih ke yang lain dulu!',
], ],

View File

@ -3,9 +3,9 @@
return [ return [
'error' => [ 'error' => [
'not_user_dashboard' => 'Error: Anda tidak diperbolehkan merubah perusahaan ini!', 'not_user_dashboard' => 'Error: Anda tidak diperbolehkan merubah dasbor ini!',
'delete_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Tolong, buat yang baru dulu!', 'delete_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Silahkan, buat yang baru dulu!',
'disable_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Tolong, buat yang baru dulu!', 'disable_last' => 'Kesalahan: Tidak dapat menonaktifkan dasbor terakhir. Silahkan, buat yang baru dulu!',
], ],
]; ];

View File

@ -73,6 +73,7 @@ return [
'add_new' => 'Tambah Baru', 'add_new' => 'Tambah Baru',
'add_income' => 'Tambahkan pendapatan', 'add_income' => 'Tambahkan pendapatan',
'add_expense' => 'Tambahkan Biaya', 'add_expense' => 'Tambahkan Biaya',
'add_transfer' => 'Tambahkan Transfer',
'show' => 'Tampilkan', 'show' => 'Tampilkan',
'edit' => 'Sunting', 'edit' => 'Sunting',
'delete' => 'Hapus', 'delete' => 'Hapus',

View File

@ -24,7 +24,7 @@ return [
'no_file' => 'Kesalahan: Tidak ada file dipilih!', 'no_file' => 'Kesalahan: Tidak ada file dipilih!',
'last_category' => 'Error: Tidak dapat menghapus kategori :type terakhir!', 'last_category' => 'Error: Tidak dapat menghapus kategori :type terakhir!',
'change_type' => 'Kesalahan: Tidak dapat mengubah jenis karena memiliki: teks terkait!', 'change_type' => 'Kesalahan: Tidak dapat mengubah jenis karena memiliki: teks terkait!',
'invalid_apikey' => 'Galat: Token yang dimasukkan tidak sah!', 'invalid_apikey' => 'Galat: Token API yang dimasukkan tidak sah!',
'import_column' => 'Kesalahan: :message Nama kolom: :column. Nomor baris: :line.', 'import_column' => 'Kesalahan: :message Nama kolom: :column. Nomor baris: :line.',
'import_sheet' => 'Error: Nama sheet tidak valid. Mohon untuk memeriksa contoh file yang tersedia.', 'import_sheet' => 'Error: Nama sheet tidak valid. Mohon untuk memeriksa contoh file yang tersedia.',
], ],

View File

@ -2,7 +2,7 @@
return [ return [
'api_key' => 'Kunci API', 'api_key' => 'Token API',
'my_apps' => 'Aplikasi saya', 'my_apps' => 'Aplikasi saya',
'pre_sale' => 'Pra Penjualan', 'pre_sale' => 'Pra Penjualan',
'top_paid' => 'Dibayar atas', 'top_paid' => 'Dibayar atas',
@ -11,7 +11,7 @@ return [
'free' => 'GRATIS', 'free' => 'GRATIS',
'install' => 'Pasang', 'install' => 'Pasang',
'buy_now' => 'Beli Sekarang', 'buy_now' => 'Beli Sekarang',
'get_api_key' => '<a href=":url" target="_blank">Klik disini</a> untuk mendapatkan Kunci API.', 'get_api_key' => '<a href=":url" target="_blank">Klik disini</a> untuk mendapatkan Token API.',
'no_apps' => 'Belum ada aplikasi dalam kategori ini.', 'no_apps' => 'Belum ada aplikasi dalam kategori ini.',
'become_developer' => 'Apakah Anda seorang pengembang? <a href=":url" target="_blank"> Di Sini </a> Anda dapat belajar cara membuat aplikasi dan mulai menjual hari ini!', 'become_developer' => 'Apakah Anda seorang pengembang? <a href=":url" target="_blank"> Di Sini </a> Anda dapat belajar cara membuat aplikasi dan mulai menjual hari ini!',
'recommended_apps' => 'Aplikasi yang direkomendasikan', 'recommended_apps' => 'Aplikasi yang direkomendasikan',
@ -33,7 +33,7 @@ return [
'tab' => [ 'tab' => [
'installation' => 'Instalasi', 'installation' => 'Instalasi',
'faq' => 'FAQ', 'faq' => 'Tanya jawab',
'changelog' => 'Perubahan Catatan', 'changelog' => 'Perubahan Catatan',
'reviews' => 'Ulasan', 'reviews' => 'Ulasan',
], ],

View File

@ -0,0 +1,10 @@
<?php
return [
'revenue_received' => 'Pendapatan Diterima',
'paid_by' => 'Dibayar Oleh',
'related_invoice' => 'Faktur Terkait',
'create_revenue' => 'Membuat Pendapatan',
];

View File

@ -77,6 +77,12 @@ return [
], ],
], ],
'transfer' => [
'choose_template' => 'Pilih contoh transfer',
'second' => 'Kedua',
'third' => 'Ketiga',
],
'default' => [ 'default' => [
'description' => 'Akun default, mata uang, bahasa perusahaan Anda', 'description' => 'Akun default, mata uang, bahasa perusahaan Anda',
'list_limit' => 'Data Per Laman', 'list_limit' => 'Data Per Laman',

View File

@ -6,6 +6,7 @@ return [
'from_account_rate' => 'Dari Tarif Akun', 'from_account_rate' => 'Dari Tarif Akun',
'to_account' => 'Ke Akun', 'to_account' => 'Ke Akun',
'to_account_rate' => 'Ke Tarif Akun', 'to_account_rate' => 'Ke Tarif Akun',
'details' => 'Detil|Detil',
'messages' => [ 'messages' => [
'delete' => ':from sampai :to (:amount)', 'delete' => ':from sampai :to (:amount)',

View File

@ -4,6 +4,7 @@ return [
'bill_number' => 'Број на сметка', 'bill_number' => 'Број на сметка',
'bill_date' => 'Датум на сметка', 'bill_date' => 'Датум на сметка',
'bill_amount' => 'Сума на Сметката',
'total_price' => 'Вкупна цена', 'total_price' => 'Вкупна цена',
'due_date' => 'Доспева на', 'due_date' => 'Доспева на',
'order_number' => 'Број на нарачка', 'order_number' => 'Број на нарачка',

View File

@ -0,0 +1,11 @@
<?php
return [
'error' => [
'not_user_dashboard' => 'Error: Немате дозвола да ја измените оваа контролна табла!',
'delete_last' => 'Error: Неможе да се избрише последната контролна табла. Ве молиме, прво креирајте една нова.',
'disable_last' => 'Error: Неможе да се оневозможи последната контролна табла. Ве молиме, прво креирајте една нова.',
],
];

View File

@ -8,27 +8,27 @@ return [
'categories' => [ 'categories' => [
'deposit' => 'Депозит', 'deposit' => 'Депозит',
'sales' => 'Продажба', 'sales' => 'Продажби',
], ],
'currencies' => [ 'currencies' => [
'usd' => 'Американски Долар', 'usd' => 'Американски Долар',
'eur' => 'Евро', 'eur' => 'Евро',
'gbp' => 'Ангклиска Фунта', 'gbp' => 'Англиска Фунта',
'try' => 'Турска лира', 'try' => 'Турска лира',
], ],
'offline_payments' => [ 'offline_payments' => [
'cash' => 'Готовина', 'cash' => 'Готовина',
'bank' => 'Банкарска уплата', 'bank' => 'Банкарски трансфер',
], ],
'reports' => [ 'reports' => [
'income' => 'Месечен вкупен приход по категорија.', 'income' => 'Преглед на Месечен приход по категорија.',
'expense' => 'Месечен вкупен раход по категорија.', 'expense' => 'Преглед на Месечен расход по категорија.',
'income_expense' => 'Месечен приход спроти расход по категорија.', 'income_expense' => 'Месечен приход спрема расход по категорија.',
'tax' => 'Квартален извештај на данок.', 'tax' => 'Квартален извештај на данок.',
'profit_loss' => 'Квартален профит & загуба по категорија.', 'profit_loss' => 'Квартална добивка & загуба по категорија.',
], ],
]; ];

View File

@ -2,7 +2,8 @@
return [ return [
'sales_price' => 'Продажна Цена', 'sales_price' => 'Продажна Цена',
'purchase_price' => 'Набавна цена', 'purchase_price' => 'Набавна цена',
'enter_item_description' => 'Внеси Опис на ставката',
]; ];

View File

@ -0,0 +1,10 @@
<?php
return [
'payment_made' => 'Направено Плаќање',
'paid_to' => 'Платено На',
'related_bill' => 'Поврзана Сметка',
'create_payment' => 'Направи плаќање',
];

View File

@ -0,0 +1,10 @@
<?php
return [
'revenue_received' => 'Примен Приход',
'paid_by' => 'Платено од',
'related_invoice' => 'Поврзана Фактура',
'create_revenue' => 'Креирај Приход',
];

View File

@ -2,6 +2,7 @@
return [ return [
'currencies' => 'Валути',
'total_income' => 'Вкупно приходи', 'total_income' => 'Вкупно приходи',
'receivables' => 'Побарувања', 'receivables' => 'Побарувања',
'open_invoices' => 'Отворени фактури', 'open_invoices' => 'Отворени фактури',

View File

@ -3,18 +3,24 @@
return [ return [
'company' => [ 'company' => [
'description' => 'Endre bedriftsnavn, e-post, adresse, momsavgifter mm', 'description' => 'Endre bedriftsnavn, e-post, adresse, momsavgifter mm',
'name' => 'Navn', 'name' => 'Navn',
'email' => 'E-post', 'email' => 'E-post',
'phone' => 'Telefon', 'phone' => 'Telefon',
'address' => 'Adresse', 'address' => 'Adresse',
'logo' => 'Logo', 'edit_your_business_address' => 'Rediger forretningsadressen din',
'logo' => 'Logo',
], ],
'localisation' => [ 'localisation' => [
'description' => 'Sett regnskapsår, tidssone, datoformat og mer', 'description' => 'Sett regnskapsår, tidssone, datoformat og mer',
'financial_start' => 'Start på regnskapsår', 'financial_start' => 'Start på regnskapsår',
'timezone' => 'Tidssone', 'timezone' => 'Tidssone',
'financial_denote' => [
'title' => 'Betegnelse regnskapsår',
'begins' => 'Til starten av året',
'ends' => 'Til slutten av året',
],
'date' => [ 'date' => [
'format' => 'Datoformat', 'format' => 'Datoformat',
'separator' => 'Datoseparator', 'separator' => 'Datoseparator',
@ -71,12 +77,18 @@ return [
], ],
], ],
'transfer' => [
'choose_template' => 'Velg overføringsmal',
'second' => 'Sekund',
'third' => 'Tredje',
],
'default' => [ 'default' => [
'description' => 'Standard konto, valuta, språk for ditt foretak', 'description' => 'Standard konto, valuta, språk for ditt foretak',
'list_limit' => 'Oppføringer per side', 'list_limit' => 'Oppføringer per side',
'use_gravatar' => 'Bruk Gravatar', 'use_gravatar' => 'Bruk Gravatar',
'income_category' => 'Inntekter etter kategori', 'income_category' => 'Inntektskategori',
'expense_category' => 'Utgifter etter kategori', 'expense_category' => 'Utgiftskategori',
], ],
'email' => [ 'email' => [
@ -109,6 +121,7 @@ return [
'invoice_payment_admin' => 'Mottatt betalingsmal (sendt til admin)', 'invoice_payment_admin' => 'Mottatt betalingsmal (sendt til admin)',
'bill_remind_admin' => 'Fakturapåminnelsesmal (sendt til admin)', 'bill_remind_admin' => 'Fakturapåminnelsesmal (sendt til admin)',
'bill_recur_admin' => 'Gjentagende fakturamal (sendt til admin)', 'bill_recur_admin' => 'Gjentagende fakturamal (sendt til admin)',
'revenue_new_customer' => 'Mal mottatte inntekter (sendt til kunde)',
], ],
], ],

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