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 */
public $routeButtonDelete;
/** @var string */
public $routeFromAccountShow;
/** @var string */
public $routeToAccountShow;
/** @var string */
public $textDeleteModal;
@ -267,7 +273,7 @@ abstract class TransferShow extends Component
bool $hideButtonGroupDivider1 = false, bool $hideButtonGroupDivider2 = false, bool $hideButtonGroupDivider3 = false,
string $permissionCreate = '', string $permissionUpdate = '', string $permissionDelete = '',
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 = '',
bool $hideHeader = false, bool $hideHeaderFromAccount = false, bool $hideHeaderToAccount = false, bool $hideHeaderAmount = false, bool $hideHeaderPaidAt = false,
string $textHeaderFromAccount = '', string $textHeaderToAccount = '', string $textHeaderAmount = '', string $textHeaderPaidAt = '',
@ -324,6 +330,8 @@ abstract class TransferShow extends Component
$this->routeButtonEmail = $this->getRouteButtonEmail($routeButtonEmail);
$this->routeButtonPdf = $this->getRouteButtonPdf($routeButtonPdf);
$this->routeButtonDelete = $this->getRouteButtonDelete($routeButtonDelete);
$this->routeFromAccountShow = $this->getRouteFromAccountShow($routeFromAccountShow);
$this->routeToAccountShow = $this->getRouteToAccountShow($routeToAccountShow);
// Navbar Text
$this->textDeleteModal = $textDeleteModal;
@ -501,6 +509,24 @@ abstract class TransferShow extends Component
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)
{
if (!empty($permissionCreate)) {

View File

@ -3,8 +3,6 @@
namespace $NAMESPACE$;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class $CLASS$ extends Command
{
@ -22,16 +20,6 @@ class $CLASS$ extends Command
*/
protected $description = 'Command description.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 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\UpdateAccount;
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;
class Accounts extends Controller
@ -29,11 +32,26 @@ class Accounts extends Controller
*
* @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.
*
@ -60,7 +78,7 @@ class Accounts extends Controller
$response = $this->ajaxDispatch(new CreateAccount($request));
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)]);
@ -76,6 +94,24 @@ class Accounts extends Controller
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.
*
@ -107,7 +143,7 @@ class Accounts extends Controller
$response = $this->ajaxDispatch(new UpdateAccount($account, $request));
if ($response['success']) {
$response['redirect'] = route('accounts.index');
$response['redirect'] = route('accounts.show', $account->id);
$message = trans('messages.success.updated', ['type' => $account->name]);
@ -185,6 +221,44 @@ class Accounts extends Controller
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()
{
$account_id = (int) request('account_id');

View File

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

View File

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

View File

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

View File

@ -59,7 +59,7 @@ class Vendors extends Controller
foreach ($bills as $item) {
// Already in transactions
if ($item->status == 'paid') {
if ($item->status == 'paid' || $item->status == 'cancelled') {
continue;
}
@ -118,7 +118,7 @@ class Vendors extends Controller
$response = $this->ajaxDispatch(new CreateContact($request));
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)]);

View File

@ -57,7 +57,7 @@ class Customers extends Controller
foreach ($invoices as $item) {
// Already in transactions
if ($item->status == 'paid') {
if ($item->status == 'paid' || $item->status == 'cancelled') {
continue;
}
@ -116,7 +116,7 @@ class Customers extends Controller
$response = $this->ajaxDispatch(new CreateContact($request));
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)]);

View File

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

View File

@ -109,7 +109,7 @@ class Search extends Component
'name' => $account->name,
'type' => trans_choice('general.accounts', 1),
'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 = (double) $money_format;
}
$amount = $this->getAmount($money_format, $currency_code);

View File

@ -43,6 +43,12 @@ class Document extends FormRequest
// 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 [
'type' => 'required|string',
'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',
'amount' => 'required',
'items.*.name' => 'required|string',
'items.*.quantity' => 'required',
'items.*.quantity' => 'required|max:' . $quantity_size,
'items.*.price' => 'required|amount',
'currency_code' => 'required|string|currency',
'currency_rate' => 'required|gt:0',
@ -80,6 +86,7 @@ class Document extends FormRequest
return [
'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.size' => trans('validation.size', ['attribute' => Str::lower(trans('invoices.quantity'))]),
'items.*.price.required' => trans('validation.required', ['attribute' => Str::lower(trans('invoices.price'))]),
'items.*.currency.required' => trans('validation.custom.invalid_currency'),
'items.*.currency.string' => trans('validation.custom.invalid_currency'),

View File

@ -3,6 +3,7 @@
namespace App\Http\Requests\Document;
use App\Abstracts\Http\FormRequest;
use Illuminate\Support\Str;
class DocumentItem extends FormRequest
{
@ -13,11 +14,17 @@ class DocumentItem extends FormRequest
*/
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 [
'type' => 'required|string',
'document_id' => 'required|integer',
'name' => 'required|string',
'quantity' => 'required',
'quantity' => 'required|max:' . $quantity_size,
'price' => 'required|amount',
'total' => 'required',
'tax' => 'required',

View File

@ -2,8 +2,8 @@
namespace App\Http\ViewComposers;
use App\Utilities\Versions;
use App\Traits\Modules;
use App\Utilities\Versions;
use Illuminate\View\View;
class Header
@ -71,7 +71,6 @@ class Header
$new_apps = $this->getNotifications('new-apps');
if ($new_apps) {
foreach ($new_apps as $key => $new_app) {
if (setting('notifications.' . user()->id . '.' . $new_app->alias)) {
unset($new_apps[$key]);
@ -82,7 +81,6 @@ class Header
$notifications++;
}
}
}
if ($user->can('read-install-updates')) {
$updates = count(Versions::getUpdates());

View File

@ -3,7 +3,7 @@
namespace App\Http\ViewComposers;
use App\Traits\Modules;
use Route;
use Illuminate\Support\Facades\Route;
use Illuminate\View\View;
class Notifications
@ -29,9 +29,7 @@ class Notifications
$path = str_replace('{company_id}/', '', $path);
if (!$notifications = $this->getNotifications($path)) {
return;
}
$notifications = $this->getNotifications($path);
// Push to a stack
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['billed_at'] = $rules['issued_at'];
$rules['currency_rate'] = 'required';
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['invoiced_at'] = $rules['issued_at'];
$rules['currency_rate'] = 'required';
unset($rules['document_number'], $rules['issued_at'], $rules['type']);

View File

@ -3,6 +3,8 @@
namespace App\Jobs\Auth;
use App\Abstracts\Job;
use App\Events\Auth\UserCreated;
use App\Events\Auth\UserCreating;
use App\Models\Auth\User;
use Artisan;
@ -29,6 +31,8 @@ class CreateUser extends Job
*/
public function handle()
{
event(new UserCreating($this->request));
\DB::transaction(function () {
$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;
}
}

View File

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

View File

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

View File

@ -43,16 +43,13 @@ class CreateDocumentItem extends Job
// Apply line discount to amount
if (!empty($this->request['discount'])) {
$discount += $this->request['discount'];
$discount = $this->request['discount'];
if ($this->request['discount_type'] === 'percentage') {
$item_discounted_amount = $item_amount -= ($item_amount * ($this->request['discount'] / 100));
} else {
$item_discounted_amount = $item_amount -= $this->request['discount'];
}
// Apply global discount to amount
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;
@ -153,8 +150,12 @@ class CreateDocumentItem extends Job
$item_tax_total += $tax_amount;
}
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) {
foreach ($compounds as $compound) {
@ -185,6 +186,7 @@ class CreateDocumentItem extends Job
$this->request['quantity'] = (double) $this->request['quantity'];
$this->request['price'] = round($this->request['price'], $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['total'] = round($item_amount, $precision);

View File

@ -67,13 +67,15 @@ class CreateDocumentItemsAndTotals extends Job
'sort_order' => $sort_order,
]);
$this->request['amount'] -= $discount_amount_total;
$sort_order++;
}
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([
'company_id' => $this->document->company_id,
@ -193,11 +195,15 @@ class CreateDocumentItemsAndTotals extends Job
$discount_amount = 0;
if (!empty($item['discount'])) {
if ($item['discount_type'] === 'percentage') {
$discount_amount = ($item_amount * ($item['discount'] / 100));
} else {
$discount_amount = $item['discount'];
}
}
// Calculate totals
$sub_total += $document_item->total + $discount_amount;
$sub_total += $document_item->total;
$discount_amount_total += $discount_amount;

View File

@ -36,16 +36,30 @@ class CreateDocumentTransaction
if (empty($user) || $signed) {
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')) {
flash($message)->error()->important();
redirect()->route("portal.$type.show", $document->id)->send();
return $this->getResponse('portal.' . $type . '.show', $document, $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;
}
$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
$this->applySearchStringFilter($event);
}

View File

@ -5,10 +5,11 @@ namespace App\Models\Banking;
use App\Abstracts\Model;
use App\Traits\Transactions;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Bkwld\Cloner\Cloneable;
class Account extends Model
{
use HasFactory, Transactions;
use Cloneable, HasFactory, Transactions;
protected $table = 'accounts';
@ -92,6 +93,41 @@ class Account extends Model
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.
*

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.
*

View File

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

View File

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

View File

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

View File

@ -396,7 +396,7 @@ trait Modules
return false;
}
public function getNotifications($path)
public function getNotifications($path): array
{
$key = 'apps.notifications';
@ -407,10 +407,10 @@ trait Modules
}
if (!empty($data) && array_key_exists($path, $data)) {
return $data[$path];
return (array) $data[$path];
}
return false;
return [];
}
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'),
'eager_load' => (bool) env('APP_EAGER_LOAD', true),
/*
|--------------------------------------------------------------------------
| Application Environment

View File

@ -10,15 +10,15 @@ return [
'minor' => '1',
'patch' => '20',
'patch' => '22',
'build' => '',
'status' => 'Stable',
'date' => '16-July-2021',
'date' => '08-August-2021',
'time' => '16:00',
'time' => '23:00',
'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
@change="change" @visible-change="visibleChange" @remove-tag="removeTag" @clear="clear" @blur="blur" @focus="focus"
:clearable="clearable"
:disabled="disabled"
:multiple="multiple"
:readonly="readonly"
@ -247,6 +248,12 @@ export default {
description: "Selectbox disabled status"
},
clearable: {
type: Boolean,
default: true,
description: "Selectbox clearable status"
},
disabled: {
type: Boolean,
default: false,
@ -384,13 +391,13 @@ export default {
for (const [key, value] of Object.entries(options)) {
values.push({
key: key,
key: key.toString(),
value: value
});
}
this.sorted_options.push({
key: index,
key: index.toString(),
value: values
});
}
@ -405,7 +412,7 @@ export default {
} else {
this.sorted_options.push({
index: index,
key: option.id,
key: option.id.toString(),
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name
});
}
@ -416,7 +423,7 @@ export default {
if (!Array.isArray(created_options)) {
for (const [key, value] of Object.entries(created_options)) {
this.sorted_options.push({
key: key,
key: key.toString(),
value: value
});
}
@ -431,7 +438,7 @@ export default {
} else {
this.sorted_options.push({
index: index,
key: option.id,
key: option.id.toString(),
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name
});
}
@ -654,6 +661,7 @@ export default {
}
})
.then(response => {
this.loading = false;
this.form.loading = false;
if (response.data.success) {
@ -675,10 +683,14 @@ export default {
this.add_new.html = '';
this.add_new_html = null;
response.data.data.mark_new = true;
this.$emit('new', response.data.data);
this.change();
this.$emit('visible-change', event);
let documentClasses = document.body.classList;
documentClasses.remove("modal-open");

View File

@ -11,6 +11,7 @@
<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"
:clearable="clearable"
:disabled="disabled"
:multiple="multiple"
:readonly="readonly"
@ -110,6 +111,7 @@
<span v-else>
<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"
:clearable="clearable"
:disabled="disabled"
:multiple="multiple"
:readonly="readonly"
@ -338,6 +340,12 @@ export default {
description: "Selectbox disabled status"
},
clearable: {
type: Boolean,
default: true,
description: "Selectbox clearable status"
},
disabled: {
type: Boolean,
default: false,

View File

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

View File

@ -19,7 +19,7 @@ import BulkAction from './../../plugins/bulk-action';
Vue.use(DashboardPlugin);
const app = new Vue({
el: '#app',
el: '#main-body',
mixins: [
Global
@ -28,8 +28,7 @@ const app = new Vue({
data: function () {
return {
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);
const app = new Vue({
el: '#app',
el: '#main-body',
mixins: [
Global

View File

@ -65,11 +65,14 @@ const app = new Vue({
"decimal_mark":".",
"thousands_separator":","
},
dropdown_visible: true
dropdown_visible: true,
dynamic_taxes: [],
}
},
mounted() {
this.form.discount_type = 'percentage';
if ((document.getElementById('items') != null) && (document.getElementById('items').rows)) {
this.colspan = document.getElementById("items").rows[0].cells.length - 1;
}
@ -88,6 +91,7 @@ const app = new Vue({
default_currency_symbol = symbol.symbol;
}
}
this.currency_symbol.symbol = default_currency_symbol;
}
@ -98,7 +102,7 @@ const app = new Vue({
let global_discount = parseFloat(this.form.discount);
let discount_total = 0;
let line_item_discount_total = 0;
let taxes = document_taxes;
let taxes = this.dynamic_taxes;
let sub_total = 0;
let totals_taxes = [];
let grand_total = 0;
@ -115,7 +119,19 @@ const app = new Vue({
let line_discount_amount = 0;
if (item.discount) {
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_discounted_total = item.total -= line_discount_amount;
@ -124,12 +140,6 @@ const app = new Vue({
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.
if (item.tax_ids) {
let inclusives = [];
@ -240,7 +250,11 @@ const app = new Vue({
// Apply discount to total
if (global_discount) {
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;
@ -352,7 +366,7 @@ const app = new Vue({
let selected_tax;
document_taxes.forEach(function(tax) {
this.dynamic_taxes.forEach(function(tax) {
if (tax.id == this.tax_id) {
selected_tax = tax;
}
@ -387,17 +401,36 @@ const app = new Vue({
},
onAddLineDiscount(item_index) {
this.items[item_index].discount_type = 'percentage';
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() {
let discount = document.getElementById('pre-discount').value;
if (this.form.discount_type === 'percentage') {
if (discount < 0) {
discount = 0;
} 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;
@ -620,6 +653,7 @@ const app = new Vue({
price: (item.price).toFixed(2),
tax_ids: item.tax_ids,
discount: item.discount_rate,
discount_type: item.discount_type,
total: (item.total).toFixed(2)
});
@ -657,6 +691,7 @@ const app = new Vue({
tax_ids: item_taxes,
add_discount: (item.discount_rate) ? true : false,
discount: item.discount_rate,
discount_type: item.discount_type,
total: (item.total).toFixed(2),
// @todo
// invoice_item_checkbox_sample: [],
@ -686,7 +721,7 @@ const app = new Vue({
this.page_loaded = true;
if (document_currencies) {
if (typeof document_currencies !== 'undefined' && document_currencies) {
this.currencies = document_currencies;
this.currencies.forEach(function (currency, index) {
@ -697,5 +732,9 @@ const app = new Vue({
}
}, 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_date' => 'تاريخ الفاتورة',
'bill_amount' => 'مبلغ الفاتورة',
'total_price' => 'السعر الإجمالي',
'due_date' => 'تاريخ الاستحقاق',
'order_number' => 'رقم الطلب',
@ -13,7 +14,7 @@ return [
'price' => 'السعر',
'sub_total' => 'المبلغ الإجمالي',
'discount' => 'خصم',
'item_discount' => 'خصم على المبيعات',
'item_discount' => 'خصم على هذه المنتجات',
'tax_total' => 'إجمالي الضريبة',
'total' => 'المجموع',

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,20 +2,20 @@
return [
'bulk_actions' => 'Toplu Hərəkət|Toplu Hərəkətlər',
'selected' => 'seçili',
'bulk_actions' => 'Toplu əməliyyat|Toplu əməliyyatlar',
'selected' => 'seçildi',
'no_action' => 'Heç bir əməliyyat yoxdur',
'message' => [
'duplicate' => 'Seşilmiş qeydi <b>dublikat etməl</b> istədiyinizdən ə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?',
'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?',
'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?',
'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?',
'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?',
'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?',
'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?',
'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?',
'duplicate' => 'Seçilmiş qeydi <b>çoxaltmaq</b> istədiyinizə ə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ədiyinizə əminsiniz?|Seçilmiş qeydləri <b>ixrac etmək</b> istədiyinizə ə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>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ə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ə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ə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ə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?',
'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 [
'domain' => 'Domain Adı',
'logo' => 'Logo',
'domain' => 'Domen',
'logo' => 'Loqo',
'error' => [
'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!',
'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!',
'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: 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',
'rate' => 'Məzənnə',
'default' => 'Varsayılan Valyuta',
'decimal_mark' => 'Onluq Ayırıcı',
'thousands_separator' => 'Minlik Aıyrıcı',
'default' => 'İlkin pul vahidi',
'decimal_mark' => 'Onluq ayırıcı',
'thousands_separator' => 'Minlik ayırıcı',
'precision' => 'Dəqiqlik',
'conversion' => 'Valyuta konversiyası',
'conversion' => 'İlkin konversiya: :currency_rate əmsalı ilə :price (:currency_code)',
'symbol' => [
'symbol' => 'İşarə',
'position' => 'İşarənin Yeri',
'before' => 'Məbləğdən Əvvəl',
'after' => 'Məbləğdən Sonra',
'symbol' => 'Simvol',
'position' => 'Simvol mövqeyi',
'before' => 'Məbləğdən əvvəl',
'after' => 'Məbləğdən sonra',
]
];

View File

@ -2,11 +2,11 @@
return [
'can_login' => 'Giriş Edə Bilər',
'user_created' => 'İstifadəçi yarat',
'can_login' => 'Giriş edilə bilər?',
'user_created' => 'İstifadəçi yaradıldı',
'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' => [
'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!',
'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 [
'accounts' => [
'cash' => 'Nəğd',
'cash' => 'Nağd',
],
'categories' => [
@ -12,22 +12,22 @@ return [
],
'currencies' => [
'usd' => 'Amerika Dolları',
'usd' => 'Amerikan dolları',
'eur' => 'Avro',
'gbp' => 'İngilis Sterlinqi',
'try' => 'Türk Lirəsı',
'gbp' => 'İngilis sterlinqi',
'try' => 'Türk lirəsi',
],
'offline_payments' => [
'cash' => 'Nəğd',
'bank' => 'Bank Köçürməsi',
'cash' => 'Nağd',
'bank' => 'Bank köçürməsi',
],
'reports' => [
'income' => 'Kateqoriya əsaslı aylıq gəlir xülasəsi.',
'expense' => 'Kateqoriya əsaslı aylıq xərc xülasəsi.',
'income_expense' => 'Kateqoriya əsaslı aylıq gəlir-xərc balansı.',
'tax' => 'Rüblük vergi xülasəsi.',
'income' => 'Kateqoriyaya görə aylıq gəlir icmalı.',
'expense' => 'Katqoriyaya görə aylıq xərc icmalı.',
'income_expense' => 'Kateqoriyaya görə aylıq gəlir - xərc icmalı.',
'tax' => 'Rüblük vergi icmalı.',
'profit_loss' => 'Rüblük mənfəət və zərər hesabatı.',
],

View File

@ -2,26 +2,26 @@
return [
'edit_columns' => 'Sütünları Düzəlt',
'empty_items' => 'Hər hansı bir məhsul/xidmət əlavə etmədiniz.',
'edit_columns' => 'Sütunlara düzəliş et',
'empty_items' => 'Heç bir element əlavə edilmədi.',
'statuses' => [
'draft' => 'Qaralama',
'sent' => 'Göndərildi',
'expired' => 'Vaxtı Bitdi',
'expired' => 'Vaxtı bitib',
'viewed' => 'Baxıldı',
'approved' => 'Təsdiqləndi',
'received' => 'Qəbul Edildi',
'refused' => 'Rədd Edildi',
'received' => 'Alındı',
'refused' => 'Rədd edildi',
'restored' => 'Bərpa edildi',
'reversed' => 'Geri Qaytarıldı',
'partial' => 'Qismən Ödəmə',
'reversed' => 'Çevrildi',
'partial' => 'Hissəli',
'paid' => 'Ödənildi',
'pending' => 'Gözləyən',
'invoiced' => 'Faturalandırıldı',
'invoiced' => 'Fakturalı',
'overdue' => 'Gecikmiş',
'unpaid' => 'Ödənilməmiş',
'cancelled' => 'Ləğv Edildi',
'cancelled' => 'İmtina edilmiş',
'voided' => 'Ləğv Edildi',
'completed' => 'Tamamlandı',
'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.',
'reset' => 'Şifrəniz sıfırlandı!',
'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.',
'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 [
'installed_version' => 'Yüklü Versiya',
'latest_version' => 'Ən Son Versiya',
'installed_version' => 'Quraşdırılmış versiya',
'latest_version' => 'Son versiya',
'update' => ':version versiyasına yenilə',
'changelog' => 'Dəyişiklik Qeydi',
'check' => 'Yenilə',

View File

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

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Telefon banke',
'bank_address' => 'Adresa banke',
'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_income' => 'Dodajte prihod',
'add_expense' => 'Dodajte trošak',
'add_transfer' => 'Dodaj transfer',
'show' => 'Prikaži',
'edit' => 'Uredi',
'delete' => 'Izbriši',

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Telefon bank',
'bank_address' => 'Bank adresse',
'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}',
],
'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_income' => 'Tilføj Indkomst',
'add_expense' => 'Tilføj Udgift',
'add_transfer' => 'Tilføj overførsel',
'show' => 'Vis',
'edit' => 'Rediger',
'delete' => 'Slet',

View File

@ -4,12 +4,24 @@ return [
'change_language' => 'Skift sprog',
'last_login' => 'Sidste login :time',
'notifications' => [
'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',
'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',
'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.',
'enabled' => ':type aktiveret!',
'disabled' => ':type deaktiveret!',
'clear_all' => 'Fantastisk! Du har ryddet alle dine :type.',
],
'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',
'to_account' => 'Til konto',
'to_account_rate' => 'Til kontosats',
'details' => 'Detalje|Detaljer',
'messages' => [
'delete' => ':from til :to (:amount)',

View File

@ -31,7 +31,9 @@ return [
],
'boolean' => ':attribute skal være enabled eller disabled.',
'confirmed' => ':attribute valget stemmer ikke overens.',
'current_password' => 'Adgangskoden er forkert.',
'date' => ':attribute er ikke en gyldig dato.',
'date_equals' => ':attribute skal være en dato lig med :date.',
'date_format' => ':attribute svarer ikke til formatet :format.',
'different' => ':attribute og :other skal være <strong>forskellige</strong>.',
'digits' => ':attribute skal være :digits cifre.',
@ -43,12 +45,44 @@ return [
'exists' => 'Det valgte :attribute er ugyldigt.',
'file' => ':attribute skal være en <strong>fil</strong>.',
'filled' => ':attribute feltet skal have en <strong>værdi</strong>.',
'gt' => [
'numeric' => ':attribute skal være større end :value.
',
'file' => ':attribute skal være større end :value kilobytes.',
'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.',
'file' => ':attribute må ikke overstige :max. kilobytes.',
@ -63,8 +97,11 @@ return [
'string' => ':attribute skal mindst være :min tegn.',
'array' => ':attribute skal have mindst :min styk.',
],
'multiple_of' => ':attribute skal være en multipel af :values.',
'not_in' => 'Det valgte :attribute er ugyldigt.',
'not_regex' => ':attribute formatet er forkert.',
'numeric' => ':attribute skal være et tal.',
'password' => 'Adgangskoden er forkert.',
'present' => ':attribute feltet skal være <strong>til stede</strong>.',
'regex' => ':attribute formatet er <strong>forkert</strong>.',
'required' => ':attribute feltet er <strong>påkrævet</strong>.',
@ -74,6 +111,9 @@ return [
'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.',
'prohibited' => ':attribute feltet er ikke tilladt.',
'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.',
@ -81,11 +121,13 @@ return [
'string' => ':attribute skal være <strong>:size karakterer</strong>.',
'array' => ':attribute skal indeholde :size antal.',
],
'starts_with' => ':attribute skal starte med en af følgende: :values',
'string' => ':attribute skal være en <strong>tekst</strong>.',
'timezone' => ':attribute skal være en gyldig zone.',
'unique' => ':attribute er allerede <strong>taget</strong>.',
'uploaded' => ':attribute <strong>kunne ikke</strong> uploades.',
'url' => ':attribute formatet er <strong>ugyldigt</strong>.',
'uuid' => ':attribute skal være en gyldig UUID.',
/*
|--------------------------------------------------------------------------
@ -112,9 +154,9 @@ return [
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/

View File

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

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Bank Phone',
'bank_address' => 'Bank Address',
'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_income' => 'Add Income',
'add_expense' => 'Add Expense',
'add_transfer' => 'Add Transfer',
'show' => 'Show',
'edit' => 'Edit',
'delete' => 'Delete',

View File

@ -10,5 +10,9 @@ return [
'bank_phone' => 'Bank Phone',
'bank_address' => 'Bank Address',
'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_income' => 'Add Income',
'add_expense' => 'Add Expense',
'add_transfer' => 'Add Transfer',
'show' => 'Show',
'edit' => 'Edit',
'delete' => 'Delete',

View File

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

View File

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

View File

@ -3,12 +3,16 @@
return [
'account_name' => 'Nama Akun',
'number' => 'Nomor',
'number' => 'Nomor Rekening',
'opening_balance' => 'Saldo Awal',
'current_balance' => 'Saldo Saat Ini',
'bank_name' => 'Nama Bank',
'bank_phone' => 'Telepon 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',
'login' => 'Masuk',
'login_to' => 'Masuk untuk memulai sesi Anda',
'remember_me' => 'Ingatkan Saya',
'remember_me' => 'Ingat Saya',
'forgot_password' => 'Lupa kata sandi',
'reset_password' => 'Atur Ulang Kata Sandi',
'enter_email' => 'Masukan Alamat Email Anda',
@ -23,9 +23,9 @@ return [
],
'error' => [
'self_delete' => 'Error: Tidak dapat menghapus akun sendiri!',
'self_disable' => 'Error: Anda tidak dapat mengaktifkan akun Anda sendiri!',
'no_company' => 'Error: Tidak ada perusahaan yang ditunjuk ke akun Anda. Silakan hubungi administrator sistem.',
'self_delete' => 'Kesalahan: Tidak dapat menghapus akun sendiri!',
'self_disable' => 'Kesalahan: Tidak dapat menonaktifkan akun sendiri!',
'no_company' => 'Kesalahan: Tidak ada perusahaan yang ditunjuk ke akun Anda. Silakan hubungi administrator sistem.',
],
'failed' => 'Identitas ini tidak cocok dengan data kami.',

View File

@ -7,7 +7,7 @@ return [
'error' => [
'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!',
],

View File

@ -3,9 +3,9 @@
return [
'error' => [
'not_user_dashboard' => 'Error: Anda tidak diperbolehkan merubah perusahaan ini!',
'delete_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Tolong, buat yang baru dulu!',
'disable_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Tolong, buat yang baru dulu!',
'not_user_dashboard' => 'Error: Anda tidak diperbolehkan merubah dasbor ini!',
'delete_last' => 'Kesalahan: Tidak dapat menghapus dasbor terakhir. Silahkan, 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_income' => 'Tambahkan pendapatan',
'add_expense' => 'Tambahkan Biaya',
'add_transfer' => 'Tambahkan Transfer',
'show' => 'Tampilkan',
'edit' => 'Sunting',
'delete' => 'Hapus',

View File

@ -24,7 +24,7 @@ return [
'no_file' => 'Kesalahan: Tidak ada file dipilih!',
'last_category' => 'Error: Tidak dapat menghapus kategori :type terakhir!',
'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_sheet' => 'Error: Nama sheet tidak valid. Mohon untuk memeriksa contoh file yang tersedia.',
],

View File

@ -2,7 +2,7 @@
return [
'api_key' => 'Kunci API',
'api_key' => 'Token API',
'my_apps' => 'Aplikasi saya',
'pre_sale' => 'Pra Penjualan',
'top_paid' => 'Dibayar atas',
@ -11,7 +11,7 @@ return [
'free' => 'GRATIS',
'install' => 'Pasang',
'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.',
'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',
@ -33,7 +33,7 @@ return [
'tab' => [
'installation' => 'Instalasi',
'faq' => 'FAQ',
'faq' => 'Tanya jawab',
'changelog' => 'Perubahan Catatan',
'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' => [
'description' => 'Akun default, mata uang, bahasa perusahaan Anda',
'list_limit' => 'Data Per Laman',

View File

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

View File

@ -4,6 +4,7 @@ return [
'bill_number' => 'Број на сметка',
'bill_date' => 'Датум на сметка',
'bill_amount' => 'Сума на Сметката',
'total_price' => 'Вкупна цена',
'due_date' => 'Доспева на',
'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' => [
'deposit' => 'Депозит',
'sales' => 'Продажба',
'sales' => 'Продажби',
],
'currencies' => [
'usd' => 'Американски Долар',
'eur' => 'Евро',
'gbp' => 'Ангклиска Фунта',
'gbp' => 'Англиска Фунта',
'try' => 'Турска лира',
],
'offline_payments' => [
'cash' => 'Готовина',
'bank' => 'Банкарска уплата',
'bank' => 'Банкарски трансфер',
],
'reports' => [
'income' => 'Месечен вкупен приход по категорија.',
'expense' => 'Месечен вкупен раход по категорија.',
'income_expense' => 'Месечен приход спроти расход по категорија.',
'income' => 'Преглед на Месечен приход по категорија.',
'expense' => 'Преглед на Месечен расход по категорија.',
'income_expense' => 'Месечен приход спрема расход по категорија.',
'tax' => 'Квартален извештај на данок.',
'profit_loss' => 'Квартален профит & загуба по категорија.',
'profit_loss' => 'Квартална добивка & загуба по категорија.',
],
];

View File

@ -4,5 +4,6 @@ return [
'sales_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 [
'currencies' => 'Валути',
'total_income' => 'Вкупно приходи',
'receivables' => 'Побарувања',
'open_invoices' => 'Отворени фактури',

View File

@ -8,6 +8,7 @@ return [
'email' => 'E-post',
'phone' => 'Telefon',
'address' => 'Adresse',
'edit_your_business_address' => 'Rediger forretningsadressen din',
'logo' => 'Logo',
],
@ -15,6 +16,11 @@ return [
'description' => 'Sett regnskapsår, tidssone, datoformat og mer',
'financial_start' => 'Start på regnskapsår',
'timezone' => 'Tidssone',
'financial_denote' => [
'title' => 'Betegnelse regnskapsår',
'begins' => 'Til starten av året',
'ends' => 'Til slutten av året',
],
'date' => [
'format' => 'Datoformat',
'separator' => 'Datoseparator',
@ -71,12 +77,18 @@ return [
],
],
'transfer' => [
'choose_template' => 'Velg overføringsmal',
'second' => 'Sekund',
'third' => 'Tredje',
],
'default' => [
'description' => 'Standard konto, valuta, språk for ditt foretak',
'list_limit' => 'Oppføringer per side',
'use_gravatar' => 'Bruk Gravatar',
'income_category' => 'Inntekter etter kategori',
'expense_category' => 'Utgifter etter kategori',
'income_category' => 'Inntektskategori',
'expense_category' => 'Utgiftskategori',
],
'email' => [
@ -109,6 +121,7 @@ return [
'invoice_payment_admin' => 'Mottatt betalingsmal (sendt til admin)',
'bill_remind_admin' => 'Fakturapåminnelsesmal (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