diff --git a/.env.example b/.env.example
index e9f998867..c15b6a8d6 100644
--- a/.env.example
+++ b/.env.example
@@ -26,3 +26,5 @@ MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
+MAIL_FROM_NAME=null
+MAIL_FROM_ADDRESS=null
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..ee09abcd0
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,26 @@
+language: php
+
+php:
+ - '5.6'
+ - '7.0'
+ - '7.1'
+ - '7.2'
+
+env:
+ - DB=sqlite
+
+sqlite:
+ adapter: sqlite3
+ database: ':memory:'
+ timeout: 500
+
+before_install:
+ # turn off XDebug
+ - phpenv config-rm xdebug.ini || return
+
+before_script:
+ - cp .env.testing .env
+ - composer install --no-interaction
+
+script:
+ - vendor/bin/phpunit
\ No newline at end of file
diff --git a/README.md b/README.md
index 02317462b..0c5fc14e8 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# Akaunting™
+# Akaunting™
-   [](https://crowdin.com/project/akaunting) [](#backers) [](#sponsors)
+   [](https://crowdin.com/project/akaunting)  [](#backers) [](#sponsors)
Akaunting is a free, open source and online accounting software designed for small businesses and freelancers. It is built with modern technologies such as Laravel, Bootstrap, jQuery, RESTful API etc. Thanks to its modular structure, Akaunting provides an awesome App Store for users and developers.
diff --git a/app/Console/Commands/ModuleDelete.php b/app/Console/Commands/ModuleDelete.php
new file mode 100644
index 000000000..d2974f08e
--- /dev/null
+++ b/app/Console/Commands/ModuleDelete.php
@@ -0,0 +1,78 @@
+argument('alias');
+ $company_id = $this->argument('company_id');
+
+ $model = Module::alias($alias)->companyId($company_id)->first();
+
+ if (!$model) {
+ $this->info("Module [{$alias}] not found.");
+ return;
+ }
+
+ $module = $this->laravel['modules']->findByAlias($alias);
+ $module->delete();
+
+ $model->status = 0;
+ $model->save();
+
+ // Add history
+ $data = [
+ 'company_id' => $company_id,
+ 'module_id' => $model->id,
+ 'category' => $module->get('category'),
+ 'version' => $module->get('version'),
+ 'description' => trans('modules.deleted', ['module' => $module->get('name')]),
+ ];
+
+ ModuleHistory::create($data);
+
+ Artisan::call('cache:clear');
+
+ $this->info("Module [{$alias}] deleted.");
+ }
+
+ /**
+ * Get the console command arguments.
+ *
+ * @return array
+ */
+ protected function getArguments()
+ {
+ return array(
+ array('alias', InputArgument::REQUIRED, 'Module alias.'),
+ array('company_id', InputArgument::REQUIRED, 'Company ID.'),
+ );
+ }
+}
diff --git a/app/Console/Commands/ModuleInstall.php b/app/Console/Commands/ModuleInstall.php
index fa428a78c..6ae58108b 100644
--- a/app/Console/Commands/ModuleInstall.php
+++ b/app/Console/Commands/ModuleInstall.php
@@ -54,6 +54,9 @@ class ModuleInstall extends Command
ModuleHistory::create($data);
+ // Clear cache
+ $this->call('cache:clear');
+
// Update database
$this->call('migrate', ['--force' => true]);
diff --git a/app/Console/Commands/RecurringCheck.php b/app/Console/Commands/RecurringCheck.php
index 8b41c499a..7c2f10167 100644
--- a/app/Console/Commands/RecurringCheck.php
+++ b/app/Console/Commands/RecurringCheck.php
@@ -63,43 +63,41 @@ class RecurringCheck extends Command
$company->setSettings();
- foreach ($company->recurring as $recur) {
- if (!$current = $recur->current()) {
- continue;
- }
+ foreach ($company->recurring as $recurring) {
+ foreach ($recurring->schedule() as $recur) {
+ $recur_date = Date::parse($recur->getStart()->format('Y-m-d'));
- $current_date = Date::parse($current->format('Y-m-d'));
+ // Check if should recur today
+ if ($this->today->ne($recur_date)) {
+ continue;
+ }
- // Check if should recur today
- if ($this->today->ne($current_date)) {
- continue;
- }
+ $model = $recurring->recurable;
- $model = $recur->recurable;
+ if (!$model) {
+ continue;
+ }
- if (!$model) {
- continue;
- }
+ switch ($recurring->recurable_type) {
+ case 'App\Models\Expense\Bill':
+ $this->recurBill($company, $model);
+ break;
+ case 'App\Models\Income\Invoice':
+ $this->recurInvoice($company, $model);
+ break;
+ case 'App\Models\Expense\Payment':
+ case 'App\Models\Income\Revenue':
+ $model->cloneable_relations = [];
- switch ($recur->recurable_type) {
- case 'App\Models\Expense\Bill':
- $this->recurBill($company, $model);
- break;
- case 'App\Models\Income\Invoice':
- $this->recurInvoice($company, $model);
- break;
- case 'App\Models\Expense\Payment':
- case 'App\Models\Income\Revenue':
- $model->cloneable_relations = [];
+ // Create new record
+ $clone = $model->duplicate();
- // Create new record
- $clone = $model->duplicate();
+ $clone->parent_id = $model->id;
+ $clone->paid_at = $this->today->format('Y-m-d');
+ $clone->save();
- $clone->parent_id = $model->id;
- $clone->paid_at = $this->today->format('Y-m-d');
- $clone->save();
-
- break;
+ break;
+ }
}
}
}
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index d8f35a822..96844ddfc 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -13,10 +13,11 @@ class Kernel extends ConsoleKernel
* @var array
*/
protected $commands = [
- Commands\CompanySeed::class,
Commands\BillReminder::class,
+ Commands\CompanySeed::class,
Commands\Install::class,
Commands\InvoiceReminder::class,
+ Commands\ModuleDelete::class,
Commands\ModuleDisable::class,
Commands\ModuleEnable::class,
Commands\ModuleInstall::class,
diff --git a/app/Events/AdminMenuCreated.php b/app/Events/AdminMenuCreated.php
index 9883abb09..764c931bf 100644
--- a/app/Events/AdminMenuCreated.php
+++ b/app/Events/AdminMenuCreated.php
@@ -15,4 +15,4 @@ class AdminMenuCreated
{
$this->menu = $menu;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/BillCreated.php b/app/Events/BillCreated.php
index fc4881a74..11b29cc1e 100644
--- a/app/Events/BillCreated.php
+++ b/app/Events/BillCreated.php
@@ -15,4 +15,4 @@ class BillCreated
{
$this->bill = $bill;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/BillUpdated.php b/app/Events/BillUpdated.php
index 21751e17a..563eb3254 100644
--- a/app/Events/BillUpdated.php
+++ b/app/Events/BillUpdated.php
@@ -15,4 +15,4 @@ class BillUpdated
{
$this->bill = $bill;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/CompanySwitched.php b/app/Events/CompanySwitched.php
index 3738c8dae..2a25ec4e0 100644
--- a/app/Events/CompanySwitched.php
+++ b/app/Events/CompanySwitched.php
@@ -15,4 +15,4 @@ class CompanySwitched
{
$this->company = $company;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/CustomerMenuCreated.php b/app/Events/CustomerMenuCreated.php
index 5766e1ba2..b7c6fcccc 100644
--- a/app/Events/CustomerMenuCreated.php
+++ b/app/Events/CustomerMenuCreated.php
@@ -15,4 +15,4 @@ class CustomerMenuCreated
{
$this->menu = $menu;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/InvoiceCreated.php b/app/Events/InvoiceCreated.php
index afa2e3c62..e6ab023a8 100644
--- a/app/Events/InvoiceCreated.php
+++ b/app/Events/InvoiceCreated.php
@@ -15,4 +15,4 @@ class InvoiceCreated
{
$this->invoice = $invoice;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/InvoicePrinting.php b/app/Events/InvoicePrinting.php
index f775b69dc..78fb14c7d 100644
--- a/app/Events/InvoicePrinting.php
+++ b/app/Events/InvoicePrinting.php
@@ -15,4 +15,4 @@ class InvoicePrinting
{
$this->invoice = $invoice;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/InvoiceUpdated.php b/app/Events/InvoiceUpdated.php
index d9d6fc3ee..2f4db58e3 100644
--- a/app/Events/InvoiceUpdated.php
+++ b/app/Events/InvoiceUpdated.php
@@ -15,4 +15,4 @@ class InvoiceUpdated
{
$this->invoice = $invoice;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/ModuleInstalled.php b/app/Events/ModuleInstalled.php
index b581eb539..3ce3ef2b0 100644
--- a/app/Events/ModuleInstalled.php
+++ b/app/Events/ModuleInstalled.php
@@ -19,4 +19,4 @@ class ModuleInstalled
$this->alias = $alias;
$this->company_id = $company_id;
}
-}
\ No newline at end of file
+}
diff --git a/app/Events/UpdateFinished.php b/app/Events/UpdateFinished.php
index d221c60fd..8af0b3177 100644
--- a/app/Events/UpdateFinished.php
+++ b/app/Events/UpdateFinished.php
@@ -23,4 +23,4 @@ class UpdateFinished
$this->old = $old;
$this->new = $new;
}
-}
\ No newline at end of file
+}
diff --git a/app/Filters/Banking/Reconciliations.php b/app/Filters/Banking/Reconciliations.php
new file mode 100644
index 000000000..3628cd609
--- /dev/null
+++ b/app/Filters/Banking/Reconciliations.php
@@ -0,0 +1,21 @@
+ [input_key1, input_key2]].
+ *
+ * @var array
+ */
+ public $relations = [];
+
+ public function accounts($accounts)
+ {
+ return $this->whereIn('account_id', (array) $accounts);
+ }
+}
\ No newline at end of file
diff --git a/app/Filters/Banking/Transactions.php b/app/Filters/Banking/Transactions.php
index 8c64cb979..b9dc8ad34 100644
--- a/app/Filters/Banking/Transactions.php
+++ b/app/Filters/Banking/Transactions.php
@@ -14,18 +14,27 @@ class Transactions extends ModelFilter
*/
public $relations = [];
- public function account($account_id)
+ public function accounts($accounts)
{
- return $this->where('account_id', $account_id);
+ return $this->whereIn('account_id', (array) $accounts);
}
- public function category($category_id)
+ public function categories($categories)
{
// No category for bills/invoices
if (in_array($this->getModel()->getTable(), ['bill_payments', 'invoice_payments'])) {
return $this;
}
- return $this->where('category_id', $category_id);
+ return $this->whereIn('category_id', (array) $categories);
+ }
+
+ public function date($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('paid_at', $dates);
}
}
\ No newline at end of file
diff --git a/app/Filters/Banking/Transfers.php b/app/Filters/Banking/Transfers.php
index 594d4ee01..18dbb6a90 100644
--- a/app/Filters/Banking/Transfers.php
+++ b/app/Filters/Banking/Transfers.php
@@ -23,4 +23,13 @@ class Transfers extends ModelFilter
{
return $this->related('revenue', 'revenues.account_id', '=', $account_id);
}
+
+ public function date($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('paid_at', $dates);
+ }
}
diff --git a/app/Filters/Common/Items.php b/app/Filters/Common/Items.php
index ec3a21825..9c6369953 100644
--- a/app/Filters/Common/Items.php
+++ b/app/Filters/Common/Items.php
@@ -19,8 +19,8 @@ class Items extends ModelFilter
return $this->whereLike('name', $query);
}
- public function category($id)
+ public function categories($ids)
{
- return $this->where('category_id', $id);
+ return $this->whereIn('category_id', (array) $ids);
}
}
diff --git a/app/Filters/Expenses/Bills.php b/app/Filters/Expenses/Bills.php
index 7055a1ef7..06ae99b3d 100644
--- a/app/Filters/Expenses/Bills.php
+++ b/app/Filters/Expenses/Bills.php
@@ -19,13 +19,27 @@ class Bills extends ModelFilter
return $this->whereLike('vendor_name', $query);
}
- public function vendor($vendor)
+ public function vendors($vendors)
{
- return $this->where('vendor_id', $vendor);
+ return $this->whereIn('vendor_id', (array) $vendors);
}
- public function status($status)
+ public function categories($categories)
{
- return $this->where('bill_status_code', $status);
+ return $this->whereIn('category_id', (array) $categories);
+ }
+
+ public function statuses($statuses)
+ {
+ return $this->whereIn('bill_status_code', (array) $statuses);
+ }
+
+ public function billDate($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('billed_at', $dates);
}
}
\ No newline at end of file
diff --git a/app/Filters/Expenses/Payments.php b/app/Filters/Expenses/Payments.php
index a9345d428..834f5f71a 100644
--- a/app/Filters/Expenses/Payments.php
+++ b/app/Filters/Expenses/Payments.php
@@ -19,18 +19,27 @@ class Payments extends ModelFilter
return $this->whereLike('description', $query);
}
- public function vendor($vendor)
+ public function vendors($vendors)
{
- return $this->where('vendor_id', $vendor);
+ return $this->whereIn('vendor_id', (array) $vendors);
}
- public function category($category)
+ public function categories($categories)
{
- return $this->where('category_id', $category);
+ return $this->whereIn('category_id', (array) $categories);
}
- public function account($account)
+ public function accounts($accounts)
{
- return $this->where('account_id', $account);
+ return $this->whereIn('account_id', (array) $accounts);
+ }
+
+ public function date($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('paid_at', $dates);
}
}
\ No newline at end of file
diff --git a/app/Filters/Incomes/Invoices.php b/app/Filters/Incomes/Invoices.php
index 79e3ef639..f473d1455 100644
--- a/app/Filters/Incomes/Invoices.php
+++ b/app/Filters/Incomes/Invoices.php
@@ -19,13 +19,27 @@ class Invoices extends ModelFilter
return $this->whereLike('customer_name', $query);
}
- public function customer($customer)
+ public function customers($customers)
{
- return $this->where('customer_id', $customer);
+ return $this->whereIn('customer_id', (array) $customers);
}
- public function status($status)
+ public function categories($categories)
{
- return $this->where('invoice_status_code', $status);
+ return $this->whereIn('category_id', (array) $categories);
}
-}
\ No newline at end of file
+
+ public function statuses($statuses)
+ {
+ return $this->whereIn('invoice_status_code', (array) $statuses);
+ }
+
+ public function invoiceDate($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('invoiced_at', $dates);
+ }
+}
diff --git a/app/Filters/Incomes/Revenues.php b/app/Filters/Incomes/Revenues.php
index f61bcfa35..9d200accc 100644
--- a/app/Filters/Incomes/Revenues.php
+++ b/app/Filters/Incomes/Revenues.php
@@ -19,18 +19,27 @@ class Revenues extends ModelFilter
return $this->whereLike('description', $query);
}
- public function customer($customer)
+ public function customers($customers)
{
- return $this->where('customer_id', $customer);
+ return $this->whereIn('customer_id', (array) $customers);
}
- public function category($category)
+ public function categories($categories)
{
- return $this->where('category_id', $category);
+ return $this->whereIn('category_id', (array) $categories);
}
- public function account($account)
+ public function accounts($accounts)
{
- return $this->where('account_id', $account);
+ return $this->whereIn('account_id', (array) $accounts);
+ }
+
+ public function date($date)
+ {
+ $dates = explode('_', $date);
+ $dates[0] .= ' 00:00:00';
+ $dates[1] .= ' 23:59:59';
+
+ return $this->whereBetween('paid_at', $dates);
}
}
\ No newline at end of file
diff --git a/app/Filters/Settings/Categories.php b/app/Filters/Settings/Categories.php
index ebb50b667..9b8445823 100644
--- a/app/Filters/Settings/Categories.php
+++ b/app/Filters/Settings/Categories.php
@@ -19,8 +19,8 @@ class Categories extends ModelFilter
return $this->whereLike('name', $query);
}
- public function type($type)
+ public function types($types)
{
- return $this->where('type', $type);
+ return $this->whereIn('type', (array) $types);
}
}
diff --git a/app/Http/Controllers/Api/Incomes/Invoices.php b/app/Http/Controllers/Api/Incomes/Invoices.php
index 8015e0da6..062ce3b34 100644
--- a/app/Http/Controllers/Api/Incomes/Invoices.php
+++ b/app/Http/Controllers/Api/Incomes/Invoices.php
@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\Incomes;
-use App\Events\InvoiceCreated;
use App\Events\InvoiceUpdated;
use App\Http\Controllers\ApiController;
use App\Http\Requests\Income\Invoice as Request;
+use App\Jobs\Income\CreateInvoice;
use App\Models\Income\Invoice;
use App\Models\Income\InvoiceHistory;
use App\Models\Income\InvoiceItem;
@@ -13,13 +13,13 @@ use App\Models\Income\InvoicePayment;
use App\Models\Income\InvoiceTotal;
use App\Models\Common\Item;
use App\Models\Setting\Tax;
-use App\Notifications\Common\Item as ItemNotification;
+use App\Traits\Incomes;
use App\Transformers\Income\Invoice as Transformer;
use Dingo\Api\Routing\Helpers;
class Invoices extends ApiController
{
- use Helpers;
+ use Helpers, Incomes;
/**
* Display a listing of the resource.
@@ -63,114 +63,9 @@ class Invoices extends ApiController
$request['amount'] = 0;
}
- $invoice = Invoice::create($request->all());
+ $invoice = dispatch(new CreateInvoice($request));
- $taxes = [];
- $tax_total = 0;
- $sub_total = 0;
-
- $invoice_item = array();
- $invoice_item['company_id'] = $request['company_id'];
- $invoice_item['invoice_id'] = $invoice->id;
-
- if ($request['item']) {
- foreach ($request['item'] as $item) {
- $item_id = 0;
- $item_sku = '';
-
- if (!empty($item['item_id'])) {
- $item_object = Item::find($item['item_id']);
-
- $item_id = $item['item_id'];
-
- $item['name'] = $item_object->name;
- $item_sku = $item_object->sku;
-
- // Decrease stock (item sold)
- $item_object->quantity -= $item['quantity'];
- $item_object->save();
-
- // Notify users if out of stock
- if ($item_object->quantity == 0) {
- foreach ($item_object->company->users as $user) {
- if (!$user->can('read-notifications')) {
- continue;
- }
-
- $user->notify(new ItemNotification($item_object));
- }
- }
- } elseif (!empty($item['sku'])) {
- $item_sku = $item['sku'];
- }
-
- $tax = $tax_id = 0;
-
- if (!empty($item['tax_id'])) {
- $tax_object = Tax::find($item['tax_id']);
-
- $tax_id = $item['tax_id'];
-
- $tax = (($item['price'] * $item['quantity']) / 100) * $tax_object->rate;
- } elseif (!empty($item['tax'])) {
- $tax = $item['tax'];
- }
-
- $invoice_item['item_id'] = $item_id;
- $invoice_item['name'] = str_limit($item['name'], 180, '');
- $invoice_item['sku'] = $item_sku;
- $invoice_item['quantity'] = $item['quantity'];
- $invoice_item['price'] = $item['price'];
- $invoice_item['tax'] = $tax;
- $invoice_item['tax_id'] = $tax_id;
- $invoice_item['total'] = $item['price'] * $item['quantity'];
-
- InvoiceItem::create($invoice_item);
-
- if (isset($tax_object)) {
- if (array_key_exists($tax_object->id, $taxes)) {
- $taxes[$tax_object->id]['amount'] += $tax;
- } else {
- $taxes[$tax_object->id] = [
- 'name' => $tax_object->name,
- 'amount' => $tax
- ];
- }
- }
-
- $tax_total += $tax;
- $sub_total += $invoice_item['total'];
-
- unset($item_object);
- unset($tax_object);
- }
- }
-
- if (empty($request['amount'])) {
- $request['amount'] = $sub_total + $tax_total;
- }
-
- $invoice->update($request->input());
-
- // Add invoice totals
- $this->addTotals($invoice, $request, $taxes, $sub_total, $tax_total);
-
- $request['invoice_id'] = $invoice->id;
- $request['status_code'] = $request['invoice_status_code'];
- $request['notify'] = 0;
- $request['description'] = trans('messages.success.added', ['type' => $request['invoice_number']]);
-
- InvoiceHistory::create($request->input());
-
- // Update next invoice number
- $next = setting('general.invoice_number_next', 1) + 1;
- setting(['general.invoice_number_next' => $next]);
- setting()->save();
-
- // Fire the event to make it extendible
- event(new InvoiceCreated($invoice));
-
- return $this->response->created(url('api/invoices/'.$invoice->id));
+ return $this->response->created(url('api/invoices/' . $invoice->id));
}
/**
@@ -277,12 +172,9 @@ class Invoices extends ApiController
*/
public function destroy(Invoice $invoice)
{
+ $this->deleteRelationships($invoice, ['items', 'histories', 'payments', 'recurring', 'totals']);
$invoice->delete();
- InvoiceItem::where('invoice_id', $invoice->id)->delete();
- InvoicePayment::where('invoice_id', $invoice->id)->delete();
- InvoiceHistory::where('invoice_id', $invoice->id)->delete();
-
return $this->response->noContent();
}
diff --git a/app/Http/Controllers/Auth/Login.php b/app/Http/Controllers/Auth/Login.php
index e94f61062..f3639a60a 100644
--- a/app/Http/Controllers/Auth/Login.php
+++ b/app/Http/Controllers/Auth/Login.php
@@ -49,7 +49,7 @@ class Login extends Controller
public function store()
{
// Attempt to login
- if (!auth()->attempt(request(['email', 'password']))) {
+ if (!auth()->attempt(request(['email', 'password']), request('remember', false))) {
flash(trans('auth.failed'))->error();
return back();
@@ -79,6 +79,11 @@ class Login extends Controller
return redirect($path);
}
+ // Check wizard
+ if (!setting('general.wizard', false)) {
+ return redirect('wizard');
+ }
+
return redirect()->intended('/');
}
diff --git a/app/Http/Controllers/Auth/Roles.php b/app/Http/Controllers/Auth/Roles.php
index d371c2b83..746714d14 100644
--- a/app/Http/Controllers/Auth/Roles.php
+++ b/app/Http/Controllers/Auth/Roles.php
@@ -29,9 +29,21 @@ class Roles extends Controller
*/
public function create()
{
- $permissions = Permission::all();
+ $names = $permissions = [];
+ $allPermissions = Permission::all();
- return view('auth.roles.create', compact('permissions'));
+ foreach ($allPermissions as $permission) {
+ // permission code explode - and get permission type
+ $n = explode('-', $permission->name);
+
+ if (!in_array($n[0], $names)) {
+ $names[] = $n[0];
+ }
+
+ $permissions[$n[0]][] = $permission;
+ }
+
+ return view('auth.roles.create', compact('names', 'permissions'));
}
/**
@@ -66,11 +78,23 @@ class Roles extends Controller
public function edit(Role $role)
{
//$permissions = Permission::all()->sortBy('display_name');
- $permissions = Permission::all();
+ $names = $permissions = [];
+ $allPermissions = Permission::all();
$rolePermissions = $role->permissions->pluck('id', 'id')->toArray();
- return view('auth.roles.edit', compact('role', 'permissions', 'rolePermissions'));
+ foreach ($allPermissions as $permission) {
+ // permission code explode - and get permission type
+ $n = explode('-', $permission->name);
+
+ if (!in_array($n[0], $names)) {
+ $names[] = $n[0];
+ }
+
+ $permissions[$n[0]][] = $permission;
+ }
+
+ return view('auth.roles.edit', compact('role', 'names', 'permissions', 'rolePermissions'));
}
/**
diff --git a/app/Http/Controllers/Banking/Accounts.php b/app/Http/Controllers/Banking/Accounts.php
index 244001487..51765fe0c 100644
--- a/app/Http/Controllers/Banking/Accounts.php
+++ b/app/Http/Controllers/Banking/Accounts.php
@@ -98,8 +98,15 @@ class Accounts extends Controller
*/
public function update(Account $account, Request $request)
{
- // Check if we can disable it
- if (!$request['enabled']) {
+ // Check if we can disable or change the code
+ if (!$request['enabled'] || ($account->currency_code != $request['currency_code'])) {
+ $relationships = $this->countRelationships($account, [
+ 'invoice_payments' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bill_payments' => 'bills',
+ 'payments' => 'payments',
+ ]);
+
if ($account->id == setting('general.default_account')) {
$relationships[] = strtolower(trans_choice('general.companies', 1));
}
@@ -120,7 +127,7 @@ class Accounts extends Controller
return redirect('banking/accounts');
} else {
- $message = trans('messages.warning.disabled', ['name' => $account->name, 'text' => implode(', ', $relationships)]);
+ $message = trans('messages.warning.disable_code', ['name' => $account->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
diff --git a/app/Http/Controllers/Banking/Reconciliations.php b/app/Http/Controllers/Banking/Reconciliations.php
new file mode 100644
index 000000000..d19c68968
--- /dev/null
+++ b/app/Http/Controllers/Banking/Reconciliations.php
@@ -0,0 +1,315 @@
+orderBy('name')->pluck('name', 'id'));
+
+ return view('banking.reconciliations.index', compact('reconciliations', 'accounts'));
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @return Response
+ */
+ public function show()
+ {
+ return redirect()->route('reconciliations.index');
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return Response
+ */
+ public function create()
+ {
+ $accounts = Account::enabled()->pluck('name', 'id');
+
+ $account_id = request('account_id', setting('general.default_account'));
+ $started_at = request('started_at', '0000-00-00');
+ $ended_at = request('ended_at', '0000-00-00');
+
+ $account = Account::find($account_id);
+
+ $currency = $account->currency;
+
+ $transactions = $this->getTransactions($account, $started_at, $ended_at);
+
+ $opening_balance = $this->getOpeningBalance($account, $started_at, $ended_at);
+
+ return view('banking.reconciliations.create', compact('accounts', 'account', 'currency', 'opening_balance', 'transactions'));
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function store(Request $request)
+ {
+ $reconcile = $request->get('reconcile');
+ $transactions = $request->get('transactions');
+
+ Reconciliation::create([
+ 'company_id' => session('company_id'),
+ 'account_id' => $request->get('account_id'),
+ 'started_at' => $request->get('started_at'),
+ 'ended_at' => $request->get('ended_at'),
+ 'closing_balance' => $request->get('closing_balance'),
+ 'reconciled' => $reconcile ? 1 : 0,
+ ]);
+
+ if ($transactions) {
+ foreach ($transactions as $key => $value) {
+ $t = explode('_', $key);
+ $m = '\\' . $t['1'];
+
+ $transaction = $m::find($t[0]);
+ $transaction->reconciled = 1;
+ $transaction->save();
+ }
+ }
+
+ $message = trans('messages.success.added', ['type' => trans_choice('general.reconciliations', 1)]);
+
+ flash($message)->success();
+
+ return redirect()->route('reconciliations.index');
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param Reconciliation $reconciliation
+ *
+ * @return Response
+ */
+ public function edit(Reconciliation $reconciliation)
+ {
+ $account = $reconciliation->account;
+
+ $currency = $account->currency;
+
+ $transactions = $this->getTransactions($account, $reconciliation->started_at, $reconciliation->ended_at);
+
+ $opening_balance = $this->getOpeningBalance($account, $reconciliation->started_at, $reconciliation->ended_at);
+
+ return view('banking.reconciliations.edit', compact('reconciliation', 'account', 'currency', 'opening_balance', 'transactions'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param Reconciliation $reconciliation
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function update(Reconciliation $reconciliation, Request $request)
+ {
+ $reconcile = $request->get('reconcile');
+ $transactions = $request->get('transactions');
+
+ $reconciliation->reconciled = $reconcile ? 1 : 0;
+ $reconciliation->save();
+
+ if ($transactions) {
+ foreach ($transactions as $key => $value) {
+ $t = explode('_', $key);
+ $m = '\\' . $t['1'];
+
+ $transaction = $m::find($t[0]);
+ $transaction->reconciled = 1;
+ $transaction->save();
+ }
+ }
+
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.reconciliations', 1)]);
+
+ flash($message)->success();
+
+ return redirect()->route('reconciliations.index');
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param Reconciliation $reconciliation
+ *
+ * @return Response
+ */
+ public function destroy(Reconciliation $reconciliation)
+ {
+ $reconciliation->delete();
+
+ $models = [
+ 'App\Models\Expense\Payment',
+ 'App\Models\Expense\BillPayment',
+ 'App\Models\Income\Revenue',
+ 'App\Models\Income\InvoicePayment',
+ ];
+
+ foreach ($models as $model) {
+ $m = '\\' . $model;
+
+ $m::where('account_id', $reconciliation->account_id)
+ ->reconciled()
+ ->whereBetween('paid_at', [$reconciliation->started_at, $reconciliation->ended_at])->each(function ($item) {
+ $item->reconciled = 0;
+ $item->save();
+ });
+ }
+
+ $message = trans('messages.success.deleted', ['type' => trans_choice('general.reconciliations', 1)]);
+
+ flash($message)->success();
+
+ return redirect()->route('reconciliations.index');
+ }
+
+ /**
+ * Add transactions array.
+ *
+ * @param $account_id
+ * @param $started_at
+ * @param $ended_at
+ *
+ * @return array
+ */
+ protected function getTransactions($account, $started_at, $ended_at)
+ {
+ $started = explode(' ', $started_at);
+ $ended = explode(' ', $ended_at);
+
+ $models = [
+ 'App\Models\Expense\Payment',
+ 'App\Models\Expense\BillPayment',
+ 'App\Models\Income\Revenue',
+ 'App\Models\Income\InvoicePayment',
+ ];
+
+ $transactions = [];
+
+ foreach ($models as $model) {
+ $m = '\\' . $model;
+
+ $m::where('account_id', $account->id)->whereBetween('paid_at', [$started[0], $ended[0]])->each(function($item) use(&$transactions, $model) {
+ $item->model = $model;
+
+ if (($model == 'App\Models\Income\Invoice') || ($model == 'App\Models\Income\Revenue')) {
+ if ($item->invoice) {
+ $item->contact = $item->invoice->customer;
+ } else {
+ $item->contact = $item->customer;
+ }
+ } else {
+ if ($item->bill) {
+ $item->contact = $item->bill->vendor;
+ } else {
+ $item->contact = $item->vendor;
+ }
+ }
+
+ $transactions[] = $item;
+ });
+ }
+
+ return collect($transactions)->sortByDesc('paid_at');
+ }
+
+ /**
+ * Get the opening balance
+ *
+ * @param $account
+ * @param $started_at
+ *
+ * @return string
+ */
+ public function getOpeningBalance($account, $started_at)
+ {
+ // Opening Balance
+ $total = $account->opening_balance;
+
+ // Sum invoices
+ $invoice_payments = $account->invoice_payments()->whereDate('paid_at', '<', $started_at)->get();
+ foreach ($invoice_payments as $item) {
+ $total += $item->amount;
+ }
+
+ // Sum revenues
+ $revenues = $account->revenues()->whereDate('paid_at', '<', $started_at)->get();
+ foreach ($revenues as $item) {
+ $total += $item->amount;
+ }
+
+ // Subtract bills
+ $bill_payments = $account->bill_payments()->whereDate('paid_at', '<', $started_at)->get();
+ foreach ($bill_payments as $item) {
+ $total -= $item->amount;
+ }
+
+ // Subtract payments
+ $payments = $account->payments()->whereDate('paid_at', '<', $started_at)->get();
+ foreach ($payments as $item) {
+ $total -= $item->amount;
+ }
+
+ return $total;
+ }
+
+ public function calculate()
+ {
+ $currency_code = request('currency_code');
+ $closing_balance = request('closing_balance');
+
+ $json = new \stdClass();
+
+ $cleared_amount = $difference = $income_total = $expense_total = 0;
+
+ if ($transactions = request('transactions')) {
+ $opening_balance = request('opening_balance');
+
+ foreach ($transactions as $key => $value) {
+ $model = explode('_', $key);
+
+ if (($model[1] == 'App\Models\Income\Invoice') || ($model[1] == 'App\Models\Income\Revenue')) {
+ $income_total += $value;
+ } else {
+ $expense_total += $value;
+ }
+ }
+
+ $cleared_amount = $opening_balance + ($income_total - $expense_total);
+ }
+
+ $difference = $closing_balance - $cleared_amount;
+
+ $json->closing_balance = money($closing_balance, $currency_code, true)->format();
+ $json->cleared_amount = money($cleared_amount, $currency_code, true)->format();
+ $json->difference = money($difference, $currency_code, true)->format();
+ $json->difference_raw = (int) $difference;
+
+ return response()->json($json);
+ }
+}
diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php
index d108eb7fa..ac90099dd 100644
--- a/app/Http/Controllers/Banking/Transactions.php
+++ b/app/Http/Controllers/Banking/Transactions.php
@@ -25,25 +25,24 @@ class Transactions extends Controller
{
$request = request();
- $accounts = collect(Account::enabled()->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.accounts', 2)]), '');
+ $accounts = collect(Account::enabled()->pluck('name', 'id'));
$types = collect(['expense' => 'Expense', 'income' => 'Income'])
->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), '');
-
- $categories = collect(Category::enabled()->type('income')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');
$type = $request->get('type');
+ $type_cats = empty($type) ? ['income', 'expense'] : $type;
+ $categories = collect(Category::enabled()->type($type_cats)->pluck('name', 'id'));
+
if ($type != 'income') {
$this->addTransactions(Payment::collect(['paid_at'=> 'desc']), trans_choice('general.expenses', 1));
- $this->addTransactions(BillPayment::collect(['paid_at'=> 'desc']), trans_choice('general.expenses', 1), trans_choice('general.bills', 1));
+ $this->addTransactions(BillPayment::collect(['paid_at'=> 'desc']), trans_choice('general.expenses', 1));
}
if ($type != 'expense') {
$this->addTransactions(Revenue::collect(['paid_at'=> 'desc']), trans_choice('general.incomes', 1));
- $this->addTransactions(InvoicePayment::collect(['paid_at'=> 'desc']), trans_choice('general.incomes', 1), trans_choice('general.invoices', 1));
+ $this->addTransactions(InvoicePayment::collect(['paid_at'=> 'desc']), trans_choice('general.incomes', 1));
}
$transactions = $this->getTransactions($request);
@@ -56,27 +55,29 @@ class Transactions extends Controller
*
* @param $items
* @param $type
- * @param $category
*/
- protected function addTransactions($items, $type, $category = null)
+ protected function addTransactions($items, $type)
{
foreach ($items as $item) {
- $data = [
+ if (!empty($item->category)) {
+ $category_name = ($item->category) ? $item->category->name : trans('general.na');
+ } else {
+ if ($type == trans_choice('general.incomes', 1)) {
+ $category_name = ($item->invoice->category) ? $item->invoice->category->name : trans('general.na');
+ } else {
+ $category_name = ($item->bill->category) ? $item->bill->category->name : trans('general.na');
+ }
+ }
+
+ $this->transactions[] = (object) [
'paid_at' => $item->paid_at,
'account_name' => $item->account->name,
'type' => $type,
'description' => $item->description,
'amount' => $item->amount,
'currency_code' => $item->currency_code,
+ 'category_name' => $category_name,
];
-
- if (!is_null($category)) {
- $data['category_name'] = $category;
- } else {
- $data['category_name'] = $item->category->name;
- }
-
- $this->transactions[] = (object) $data;
}
}
diff --git a/app/Http/Controllers/Common/Companies.php b/app/Http/Controllers/Common/Companies.php
index 9ed22afe0..1c8efba9e 100644
--- a/app/Http/Controllers/Common/Companies.php
+++ b/app/Http/Controllers/Common/Companies.php
@@ -264,6 +264,11 @@ class Companies extends Controller
event(new CompanySwitched($company));
}
+ // Check wizard
+ if (!setting('general.wizard', false)) {
+ return redirect('wizard');
+ }
+
return redirect('/');
}
diff --git a/app/Http/Controllers/Common/Dashboard.php b/app/Http/Controllers/Common/Dashboard.php
index 50ec8bbcb..176953682 100644
--- a/app/Http/Controllers/Common/Dashboard.php
+++ b/app/Http/Controllers/Common/Dashboard.php
@@ -126,6 +126,7 @@ class Dashboard extends Controller
$start = Date::parse(request('start', $this->today->startOfYear()->format('Y-m-d')));
$end = Date::parse(request('end', $this->today->endOfYear()->format('Y-m-d')));
$period = request('period', 'month');
+ $range = request('range', 'custom');
$start_month = $start->month;
$end_month = $end->month;
@@ -135,6 +136,14 @@ class Dashboard extends Controller
$s = clone $start;
+ if ($range == 'last_12_months') {
+ $end_month = 12;
+ $start_month = 0;
+ } elseif ($range == 'custom') {
+ $end_month = $end->diffInMonths($start);
+ $start_month = 0;
+ }
+
for ($j = $end_month; $j >= $start_month; $j--) {
$labels[$end_month - $j] = $s->format('M Y');
diff --git a/app/Http/Controllers/Common/Items.php b/app/Http/Controllers/Common/Items.php
index 6cfc73ebd..3c3db8559 100644
--- a/app/Http/Controllers/Common/Items.php
+++ b/app/Http/Controllers/Common/Items.php
@@ -26,8 +26,7 @@ class Items extends Controller
{
$items = Item::with('category')->collect();
- $categories = Category::enabled()->orderBy('name')->type('item')->pluck('name', 'id')
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');
+ $categories = Category::enabled()->orderBy('name')->type('item')->pluck('name', 'id');
return view('common.items.index', compact('items', 'categories'));
}
@@ -51,7 +50,7 @@ class Items extends Controller
{
$categories = Category::enabled()->orderBy('name')->type('item')->pluck('name', 'id');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$currency = Currency::where('code', '=', setting('general.default_currency', 'USD'))->first();
@@ -132,7 +131,7 @@ class Items extends Controller
{
$categories = Category::enabled()->orderBy('name')->type('item')->pluck('name', 'id');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$currency = Currency::where('code', '=', setting('general.default_currency', 'USD'))->first();
@@ -323,22 +322,83 @@ class Items extends Controller
$price = (double) $item['price'];
$quantity = (double) $item['quantity'];
- $item_tax_total= 0;
+ $item_tax_total = 0;
+ $item_tax_amount = 0;
+
$item_sub_total = ($price * $quantity);
+ $item_discount_total = $item_sub_total;
+
+ // Apply discount to item
+ if ($discount) {
+ $item_discount_total = $item_sub_total - ($item_sub_total * ($discount / 100));
+ }
if (!empty($item['tax_id'])) {
- $tax = Tax::find($item['tax_id']);
+ $inclusives = $compounds = $taxes = [];
- $item_tax_total = (($price * $quantity) / 100) * $tax->rate;
+ foreach ($item['tax_id'] as $tax_id) {
+ $tax = Tax::find($tax_id);
+
+ switch ($tax->type) {
+ case 'inclusive':
+ $inclusives[] = $tax;
+ break;
+ case 'compound':
+ $compounds[] = $tax;
+ break;
+ case 'normal':
+ default:
+ $taxes[] = $tax;
+
+ $item_tax_amount = ($item_discount_total / 100) * $tax->rate;
+
+ $item_tax_total += $item_tax_amount;
+ break;
+ }
+ }
+
+ if ($inclusives) {
+ if ($discount) {
+ $item_tax_total = 0;
+
+ if ($taxes) {
+ foreach ($taxes as $tax) {
+ $item_tax_amount = ($item_sub_total / 100) * $tax->rate;
+
+ $item_tax_total += $item_tax_amount;
+ }
+ }
+
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_sub_total + $item_tax_total;
+
+ $item_tax_total = $item_sub_and_tax_total - (($item_sub_and_tax_total * (100 - $inclusive->rate)) / 100);
+
+ $item_sub_total = $item_sub_and_tax_total - $item_tax_total;
+
+ $item_discount_total = $item_sub_total - ($item_sub_total * ($discount / 100));
+ }
+ } else {
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_discount_total + $item_tax_total;
+
+ $item_tax_total = $item_sub_and_tax_total - (($item_sub_and_tax_total * (100 - $inclusive->rate)) / 100);
+
+ $item_sub_total = $item_sub_and_tax_total - $item_tax_total;
+
+ $item_discount_total = $item_sub_total - ($item_sub_total * ($discount / 100));
+ }
+ }
+ }
+
+ if ($compounds) {
+ foreach ($compounds as $compound) {
+ $item_tax_total += (($item_discount_total + $item_tax_total) / 100) * $compound->rate;
+ }
+ }
}
$sub_total += $item_sub_total;
-
- // Apply discount to tax
- if ($discount) {
- $item_tax_total = $item_tax_total - ($item_tax_total * ($discount / 100));
- }
-
$tax_total += $item_tax_total;
$items[$key] = money($item_sub_total, $currency_code, true)->format();
diff --git a/app/Http/Controllers/Common/Notifications.php b/app/Http/Controllers/Common/Notifications.php
new file mode 100644
index 000000000..cb0f38a89
--- /dev/null
+++ b/app/Http/Controllers/Common/Notifications.php
@@ -0,0 +1,70 @@
+getNotifications($path);
+
+ 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');
+
+ setting()->save();
+ break;
+ }
+ }
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'data' => null,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Common/Uploads.php b/app/Http/Controllers/Common/Uploads.php
index 3c8bb7377..06c1213f0 100644
--- a/app/Http/Controllers/Common/Uploads.php
+++ b/app/Http/Controllers/Common/Uploads.php
@@ -91,6 +91,10 @@ class Uploads extends Controller
*/
protected function getPath($media)
{
+ if (!is_object($media)) {
+ return false;
+ }
+
$path = $media->basename;
if (!empty($media->directory)) {
diff --git a/app/Http/Controllers/Customers/Invoices.php b/app/Http/Controllers/Customers/Invoices.php
index aea447a7f..aff6c3b32 100644
--- a/app/Http/Controllers/Customers/Invoices.php
+++ b/app/Http/Controllers/Customers/Invoices.php
@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use App\Events\InvoicePrinting;
use App\Models\Banking\Account;
use App\Models\Income\Customer;
+use App\Models\Income\Revenue;
use App\Models\Income\Invoice;
use App\Models\Income\InvoiceStatus;
use App\Models\Setting\Category;
@@ -16,8 +17,10 @@ use App\Traits\DateTime;
use App\Traits\Uploads;
use App\Utilities\Modules;
use File;
+use Illuminate\Http\Request;
use Image;
use Storage;
+use SignedUrl;
class Invoices extends Controller
{
@@ -178,4 +181,52 @@ class Invoices extends Controller
return $logo;
}
+
+ public function link(Invoice $invoice, Request $request)
+ {
+ session(['company_id' => $invoice->company_id]);
+
+ $paid = 0;
+
+ foreach ($invoice->payments as $item) {
+ $amount = $item->amount;
+
+ if ($invoice->currency_code != $item->currency_code) {
+ $item->default_currency_code = $invoice->currency_code;
+
+ $amount = $item->getDynamicConvertedAmount();
+ }
+
+ $paid += $amount;
+ }
+
+ $invoice->paid = $paid;
+
+ $accounts = Account::enabled()->pluck('name', 'id');
+
+ $currencies = Currency::enabled()->pluck('name', 'code')->toArray();
+
+ $account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first();
+
+ $customers = Customer::enabled()->pluck('name', 'id');
+
+ $categories = Category::enabled()->type('income')->pluck('name', 'id');
+
+ $payment_methods = Modules::getPaymentMethods();
+
+ $payment_actions = [];
+
+ foreach ($payment_methods as $payment_method_key => $payment_method_value) {
+ $codes = explode('.', $payment_method_key);
+
+ if (!isset($payment_actions[$codes[0]])) {
+ $payment_actions[$codes[0]] = SignedUrl::sign(url('links/invoices/' . $invoice->id . '/' . $codes[0]), 1);
+ }
+ }
+
+ $print_action = SignedUrl::sign(url('links/invoices/' . $invoice->id . '/print'), 1);
+ $pdf_action = SignedUrl::sign(url('links/invoices/' . $invoice->id . '/pdf'), 1);
+
+ return view('customers.invoices.link', compact('invoice', 'accounts', 'currencies', 'account_currency_code', 'customers', 'categories', 'payment_methods', 'payment_actions', 'print_action', 'pdf_action'));
+ }
}
diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php
index 9beb38e8a..cbd5c5ef6 100644
--- a/app/Http/Controllers/Expenses/Bills.php
+++ b/app/Http/Controllers/Expenses/Bills.php
@@ -8,12 +8,16 @@ use App\Events\BillUpdated;
use App\Http\Controllers\Controller;
use App\Http\Requests\Expense\Bill as Request;
use App\Http\Requests\Expense\BillPayment as PaymentRequest;
+use App\Jobs\Expense\CreateBill;
+use App\Jobs\Expense\UpdateBill;
+use App\Jobs\Expense\CreateBillPayment;
use App\Models\Banking\Account;
use App\Models\Common\Media;
use App\Models\Expense\BillStatus;
use App\Models\Expense\Vendor;
use App\Models\Expense\Bill;
use App\Models\Expense\BillItem;
+use App\Models\Expense\BillItemTax;
use App\Models\Expense\BillTotal;
use App\Models\Expense\BillHistory;
use App\Models\Expense\BillPayment;
@@ -46,13 +50,13 @@ class Bills extends Controller
{
$bills = Bill::with(['vendor', 'status', 'items', 'payments', 'histories'])->collect(['billed_at'=> 'desc']);
- $vendors = collect(Vendor::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.vendors', 2)]), '');
+ $vendors = collect(Vendor::enabled()->orderBy('name')->pluck('name', 'id'));
- $statuses = collect(BillStatus::all()->pluck('name', 'code'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.statuses', 2)]), '');
+ $categories = collect(Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id'));
- return view('expenses.bills.index', compact('bills', 'vendors', 'statuses'));
+ $statuses = collect(BillStatus::all()->pluck('name', 'code'));
+
+ return view('expenses.bills.index', compact('bills', 'vendors', 'categories', 'statuses'));
}
/**
@@ -64,43 +68,6 @@ class Bills extends Controller
*/
public function show(Bill $bill)
{
- $paid = 0;
-
- // Get Bill Payments
- if ($bill->payments->count()) {
- $_currencies = Currency::enabled()->pluck('rate', 'code')->toArray();
-
- foreach ($bill->payments as $item) {
- $default_amount = (double) $item->amount;
-
- if ($bill->currency_code == $item->currency_code) {
- $amount = $default_amount;
- } else {
- $default_amount_model = new BillPayment();
-
- $default_amount_model->default_currency_code = $bill->currency_code;
- $default_amount_model->amount = $default_amount;
- $default_amount_model->currency_code = $item->currency_code;
- $default_amount_model->currency_rate = $_currencies[$item->currency_code];
-
- $default_amount = (double) $default_amount_model->getDivideConvertedAmount();
-
- $convert_amount = new BillPayment();
-
- $convert_amount->default_currency_code = $item->currency_code;
- $convert_amount->amount = $default_amount;
- $convert_amount->currency_code = $bill->currency_code;
- $convert_amount->currency_rate = $_currencies[$bill->currency_code];
-
- $amount = (double) $convert_amount->getDynamicConvertedAmount();
- }
-
- $paid += $amount;
- }
- }
-
- $bill->paid = $paid;
-
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
@@ -131,7 +98,7 @@ class Bills extends Controller
$items = Item::enabled()->orderBy('name')->pluck('name', 'id');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id');
@@ -147,120 +114,7 @@ class Bills extends Controller
*/
public function store(Request $request)
{
- $bill = Bill::create($request->input());
-
- // Upload attachment
- if ($request->file('attachment')) {
- $media = $this->getMedia($request->file('attachment'), 'bills');
-
- $bill->attachMedia($media, 'attachment');
- }
-
- $taxes = [];
-
- $tax_total = 0;
- $sub_total = 0;
- $discount_total = 0;
- $discount = $request['discount'];
-
- $bill_item = [];
- $bill_item['company_id'] = $request['company_id'];
- $bill_item['bill_id'] = $bill->id;
-
- if ($request['item']) {
- foreach ($request['item'] as $item) {
- unset($tax_object);
- $item_sku = '';
-
- if (!empty($item['item_id'])) {
- $item_object = Item::find($item['item_id']);
-
- $item['name'] = $item_object->name;
- $item_sku = $item_object->sku;
-
- // Increase stock (item bought)
- $item_object->quantity += $item['quantity'];
- $item_object->save();
- }
-
- $tax = $tax_id = 0;
-
- if (!empty($item['tax_id'])) {
- $tax_object = Tax::find($item['tax_id']);
-
- $tax_id = $item['tax_id'];
-
- $tax = (((double) $item['price'] * (double) $item['quantity']) / 100) * $tax_object->rate;
-
- // Apply discount to tax
- if ($discount) {
- $tax = $tax - ($tax * ($discount / 100));
- }
- }
-
- $bill_item['item_id'] = $item['item_id'];
- $bill_item['name'] = str_limit($item['name'], 180, '');
- $bill_item['sku'] = $item_sku;
- $bill_item['quantity'] = (double) $item['quantity'];
- $bill_item['price'] = (double) $item['price'];
- $bill_item['tax'] = $tax;
- $bill_item['tax_id'] = $tax_id;
- $bill_item['total'] = (double) $item['price'] * (double) $item['quantity'];
-
- BillItem::create($bill_item);
-
- // Set taxes
- if (isset($tax_object)) {
- if (array_key_exists($tax_object->id, $taxes)) {
- $taxes[$tax_object->id]['amount'] += $tax;
- } else {
- $taxes[$tax_object->id] = [
- 'name' => $tax_object->name,
- 'amount' => $tax
- ];
- }
- }
-
- // Calculate totals
- $tax_total += $tax;
- $sub_total += $bill_item['total'];
-
- unset($tax_object);
- }
- }
-
- $s_total = $sub_total;
-
- // Apply discount to total
- if ($discount) {
- $s_discount = $s_total * ($discount / 100);
- $discount_total += $s_discount;
- $s_total = $s_total - $s_discount;
- }
-
- $amount = $s_total + $tax_total;
-
- $request['amount'] = money($amount, $request['currency_code'])->getAmount();
-
- $bill->update($request->input());
-
- // Add bill totals
- $this->addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total);
-
- // Add bill history
- BillHistory::create([
- 'company_id' => session('company_id'),
- 'bill_id' => $bill->id,
- 'status_code' => 'draft',
- 'notify' => 0,
- 'description' => trans('messages.success.added', ['type' => $bill->bill_number]),
- ]);
-
- // Recurring
- $bill->createRecurring();
-
- // Fire the event to make it extendible
- event(new BillCreated($bill));
+ $bill = dispatch(new CreateBill($request));
$message = trans('messages.success.added', ['type' => trans_choice('general.bills', 1)]);
@@ -373,105 +227,7 @@ class Bills extends Controller
*/
public function update(Bill $bill, Request $request)
{
- $taxes = [];
- $tax_total = 0;
- $sub_total = 0;
- $discount_total = 0;
- $discount = $request['discount'];
-
- $bill_item = [];
- $bill_item['company_id'] = $request['company_id'];
- $bill_item['bill_id'] = $bill->id;
-
- if ($request['item']) {
- $this->deleteRelationships($bill, 'items');
-
- foreach ($request['item'] as $item) {
- unset($tax_object);
- $item_sku = '';
-
- if (!empty($item['item_id'])) {
- $item_object = Item::find($item['item_id']);
-
- $item['name'] = $item_object->name;
- $item_sku = $item_object->sku;
- }
-
- $tax = $tax_id = 0;
-
- if (!empty($item['tax_id'])) {
- $tax_object = Tax::find($item['tax_id']);
-
- $tax_id = $item['tax_id'];
-
- $tax = (((double) $item['price'] * (double) $item['quantity']) / 100) * $tax_object->rate;
-
- // Apply discount to tax
- if ($discount) {
- $tax = $tax - ($tax * ($discount / 100));
- }
- }
-
- $bill_item['item_id'] = $item['item_id'];
- $bill_item['name'] = str_limit($item['name'], 180, '');
- $bill_item['sku'] = $item_sku;
- $bill_item['quantity'] = (double) $item['quantity'];
- $bill_item['price'] = (double) $item['price'];
- $bill_item['tax'] = $tax;
- $bill_item['tax_id'] = $tax_id;
- $bill_item['total'] = (double) $item['price'] * (double) $item['quantity'];
-
- if (isset($tax_object)) {
- if (array_key_exists($tax_object->id, $taxes)) {
- $taxes[$tax_object->id]['amount'] += $tax;
- } else {
- $taxes[$tax_object->id] = [
- 'name' => $tax_object->name,
- 'amount' => $tax
- ];
- }
- }
-
- $tax_total += $tax;
- $sub_total += $bill_item['total'];
-
- BillItem::create($bill_item);
- }
- }
-
- $s_total = $sub_total;
-
- // Apply discount to total
- if ($discount) {
- $s_discount = $s_total * ($discount / 100);
- $discount_total += $s_discount;
- $s_total = $s_total - $s_discount;
- }
-
- $amount = $s_total + $tax_total;
-
- $request['amount'] = money($amount, $request['currency_code'])->getAmount();
-
- $bill->update($request->input());
-
- // Upload attachment
- if ($request->file('attachment')) {
- $media = $this->getMedia($request->file('attachment'), 'bills');
-
- $bill->attachMedia($media, 'attachment');
- }
-
- // Delete previous bill totals
- $this->deleteRelationships($bill, 'totals');
-
- // Add bill totals
- $this->addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total);
-
- // Recurring
- $bill->updateRecurring();
-
- // Fire the event to make it extendible
- event(new BillUpdated($bill));
+ $bill = dispatch(new UpdateBill($bill, $request));
$message = trans('messages.success.updated', ['type' => trans_choice('general.bills', 1)]);
@@ -509,9 +265,9 @@ class Bills extends Controller
\Excel::create('bills', function ($excel) {
$bills = Bill::with(['items', 'histories', 'payments', 'totals'])->filter(request()->input())->get();
- $excel->sheet('invoices', function ($sheet) use ($bills) {
+ $excel->sheet('bills', function ($sheet) use ($bills) {
$sheet->fromModel($bills->makeHidden([
- 'company_id', 'parent_id', 'created_at', 'updated_at', 'deleted_at', 'attachment', 'discount', 'items', 'histories', 'payments', 'totals', 'media'
+ 'company_id', 'parent_id', 'created_at', 'updated_at', 'deleted_at', 'attachment', 'discount', 'items', 'histories', 'payments', 'totals', 'media', 'paid'
]));
});
@@ -581,7 +337,9 @@ class Bills extends Controller
{
$bill = $this->prepareBill($bill);
- $html = view($bill->template_path, compact('bill'))->render();
+ $currency_style = true;
+
+ $html = view($bill->template_path, compact('bill', 'currency_style'))->render();
$pdf = \App::make('dompdf.wrapper');
$pdf->loadHTML($html);
@@ -652,20 +410,7 @@ class Bills extends Controller
$bill->save();
- $bill_payment_request = [
- 'company_id' => $request['company_id'],
- 'bill_id' => $request['bill_id'],
- 'account_id' => $request['account_id'],
- 'paid_at' => $request['paid_at'],
- 'amount' => $request['amount'],
- 'currency_code' => $request['currency_code'],
- 'currency_rate' => $request['currency_rate'],
- 'description' => $request['description'],
- 'payment_method' => $request['payment_method'],
- 'reference' => $request['reference']
- ];
-
- $bill_payment = BillPayment::create($bill_payment_request);
+ $bill_payment = dispatch(new CreateBillPayment($request, $bill));
// Upload attachment
if ($request->file('attachment')) {
@@ -674,15 +419,6 @@ class Bills extends Controller
$bill_payment->attachMedia($media, 'attachment');
}
- $request['status_code'] = $bill->bill_status_code;
- $request['notify'] = 0;
-
- $desc_amount = money((float) $request['amount'], (string) $request['currency_code'], true)->format();
-
- $request['description'] = $desc_amount . ' ' . trans_choice('general.payments', 1);
-
- BillHistory::create($request->input());
-
$message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]);
return response()->json([
@@ -791,64 +527,4 @@ class Bills extends Controller
return $bill;
}
-
- protected function addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total)
- {
- $sort_order = 1;
-
- // Added bill sub total
- BillTotal::create([
- 'company_id' => $request['company_id'],
- 'bill_id' => $bill->id,
- 'code' => 'sub_total',
- 'name' => 'bills.sub_total',
- 'amount' => $sub_total,
- 'sort_order' => $sort_order,
- ]);
-
- $sort_order++;
-
- // Added bill discount
- if ($discount_total) {
- BillTotal::create([
- 'company_id' => $request['company_id'],
- 'bill_id' => $bill->id,
- 'code' => 'discount',
- 'name' => 'bills.discount',
- 'amount' => $discount_total,
- 'sort_order' => $sort_order,
- ]);
-
- // This is for total
- $sub_total = $sub_total - $discount_total;
- }
-
- $sort_order++;
-
- // Added bill taxes
- if ($taxes) {
- foreach ($taxes as $tax) {
- BillTotal::create([
- 'company_id' => $request['company_id'],
- 'bill_id' => $bill->id,
- 'code' => 'tax',
- 'name' => $tax['name'],
- 'amount' => $tax['amount'],
- 'sort_order' => $sort_order,
- ]);
-
- $sort_order++;
- }
- }
-
- // Added bill total
- BillTotal::create([
- 'company_id' => $request['company_id'],
- 'bill_id' => $bill->id,
- 'code' => 'total',
- 'name' => 'bills.total',
- 'amount' => $sub_total + $tax_total,
- 'sort_order' => $sort_order,
- ]);
- }
}
diff --git a/app/Http/Controllers/Expenses/Payments.php b/app/Http/Controllers/Expenses/Payments.php
index 6a7fb1ecf..3a98eb908 100644
--- a/app/Http/Controllers/Expenses/Payments.php
+++ b/app/Http/Controllers/Expenses/Payments.php
@@ -27,14 +27,11 @@ class Payments extends Controller
{
$payments = Payment::with(['vendor', 'account', 'category'])->isNotTransfer()->collect(['paid_at'=> 'desc']);
- $vendors = collect(Vendor::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.vendors', 2)]), '');
+ $vendors = collect(Vendor::enabled()->orderBy('name')->pluck('name', 'id'));
- $categories = collect(Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');
+ $categories = collect(Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id'));
- $accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.accounts', 2)]), '');
+ $accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'));
$transfer_cat_id = Category::transfer();
@@ -64,7 +61,7 @@ class Payments extends Controller
$account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first();
- $currency = Currency::where('code', '=', $account_currency_code)->first();
+ $currency = Currency::where('code', $account_currency_code)->first();
$vendors = Vendor::enabled()->orderBy('name')->pluck('name', 'id');
@@ -154,9 +151,7 @@ class Payments extends Controller
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
- $account_currency_code = Account::where('id', $payment->account_id)->pluck('currency_code')->first();
-
- $currency = Currency::where('code', '=', $account_currency_code)->first();
+ $currency = Currency::where('code', $payment->currency_code)->first();
$vendors = Vendor::enabled()->orderBy('name')->pluck('name', 'id');
@@ -164,7 +159,7 @@ class Payments extends Controller
$payment_methods = Modules::getPaymentMethods();
- return view('expenses.payments.edit', compact('payment', 'accounts', 'currencies', 'account_currency_code', 'currency', 'vendors', 'categories', 'payment_methods'));
+ return view('expenses.payments.edit', compact('payment', 'accounts', 'currencies', 'currency', 'vendors', 'categories', 'payment_methods'));
}
/**
diff --git a/app/Http/Controllers/Expenses/Vendors.php b/app/Http/Controllers/Expenses/Vendors.php
index d8506dc39..ebf19aecd 100644
--- a/app/Http/Controllers/Expenses/Vendors.php
+++ b/app/Http/Controllers/Expenses/Vendors.php
@@ -100,8 +100,10 @@ class Vendors extends Controller
$limit = request('limit', setting('general.list_limit', '25'));
$transactions = $this->paginate($items->merge($bill_payments)->sortByDesc('paid_at'), $limit);
+ $bills = $this->paginate($bills->sortByDesc('paid_at'), $limit);
+ $payments = $this->paginate($payments->sortByDesc('paid_at'), $limit);
- return view('expenses.vendors.show', compact('vendor', 'counts', 'amounts', 'transactions'));
+ return view('expenses.vendors.show', compact('vendor', 'counts', 'amounts', 'transactions', 'bills', 'payments'));
}
/**
@@ -309,7 +311,7 @@ class Vendors extends Controller
if (empty($vendor_id)) {
return response()->json([]);
}
-
+
$vendor = Vendor::find($vendor_id);
if (empty($vendor)) {
@@ -332,6 +334,12 @@ class Vendors extends Controller
$vendor->currency_code = $currency_code;
$vendor->currency_rate = $currency->rate;
+ $vendor->thousands_separator = $currency->thousands_separator;
+ $vendor->decimal_mark = $currency->decimal_mark;
+ $vendor->precision = (int) $currency->precision;
+ $vendor->symbol_first = $currency->symbol_first;
+ $vendor->symbol = $currency->symbol;
+
return response()->json($vendor);
}
diff --git a/app/Http/Controllers/Incomes/Customers.php b/app/Http/Controllers/Incomes/Customers.php
index 8bb67dc30..ed9dbadd5 100644
--- a/app/Http/Controllers/Incomes/Customers.php
+++ b/app/Http/Controllers/Incomes/Customers.php
@@ -100,8 +100,10 @@ class Customers extends Controller
$limit = request('limit', setting('general.list_limit', '25'));
$transactions = $this->paginate($items->merge($invoice_payments)->sortByDesc('paid_at'), $limit);
+ $invoices = $this->paginate($invoices->sortByDesc('paid_at'), $limit);
+ $revenues = $this->paginate($revenues->sortByDesc('paid_at'), $limit);
- return view('incomes.customers.show', compact('customer', 'counts', 'amounts', 'transactions'));
+ return view('incomes.customers.show', compact('customer', 'counts', 'amounts', 'transactions', 'invoices', 'revenues'));
}
/**
diff --git a/app/Http/Controllers/Incomes/Invoices.php b/app/Http/Controllers/Incomes/Invoices.php
index 4fb908994..020c9874d 100644
--- a/app/Http/Controllers/Incomes/Invoices.php
+++ b/app/Http/Controllers/Incomes/Invoices.php
@@ -8,21 +8,26 @@ use App\Events\InvoiceUpdated;
use App\Http\Controllers\Controller;
use App\Http\Requests\Income\Invoice as Request;
use App\Http\Requests\Income\InvoicePayment as PaymentRequest;
+use App\Jobs\Income\CreateInvoice;
+use App\Jobs\Income\UpdateInvoice;
+use App\Jobs\Income\CreateInvoicePayment;
use App\Models\Banking\Account;
+use App\Models\Common\Item;
use App\Models\Common\Media;
use App\Models\Income\Customer;
use App\Models\Income\Invoice;
use App\Models\Income\InvoiceHistory;
use App\Models\Income\InvoiceItem;
+use App\Models\Income\InvoiceItemTax;
use App\Models\Income\InvoiceTotal;
use App\Models\Income\InvoicePayment;
use App\Models\Income\InvoiceStatus;
-use App\Models\Common\Item;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Models\Setting\Tax;
use App\Notifications\Income\Invoice as Notification;
use App\Notifications\Common\Item as ItemNotification;
+use App\Notifications\Common\ItemReminder as ItemReminderNotification;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Incomes;
@@ -35,6 +40,7 @@ use File;
use Illuminate\Http\Request as ItemRequest;
use Image;
use Storage;
+use SignedUrl;
class Invoices extends Controller
{
@@ -49,13 +55,13 @@ class Invoices extends Controller
{
$invoices = Invoice::with(['customer', 'status', 'items', 'payments', 'histories'])->collect(['invoice_number'=> 'desc']);
- $customers = collect(Customer::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.customers', 2)]), '');
+ $customers = collect(Customer::enabled()->orderBy('name')->pluck('name', 'id'));
- $status = collect(InvoiceStatus::all()->pluck('name', 'code'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.statuses', 2)]), '');
+ $categories = collect(Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id'));
- return view('incomes.invoices.index', compact('invoices', 'customers', 'status'));
+ $statuses = collect(InvoiceStatus::all()->pluck('name', 'code'));
+
+ return view('incomes.invoices.index', compact('invoices', 'customers', 'categories', 'statuses'));
}
/**
@@ -67,43 +73,6 @@ class Invoices extends Controller
*/
public function show(Invoice $invoice)
{
- $paid = 0;
-
- // Get Invoice Payments
- if ($invoice->payments->count()) {
- $_currencies = Currency::enabled()->pluck('rate', 'code')->toArray();
-
- foreach ($invoice->payments as $item) {
- $default_amount = $item->amount;
-
- if ($invoice->currency_code == $item->currency_code) {
- $amount = (double)$default_amount;
- } else {
- $default_amount_model = new InvoicePayment();
-
- $default_amount_model->default_currency_code = $invoice->currency_code;
- $default_amount_model->amount = $default_amount;
- $default_amount_model->currency_code = $item->currency_code;
- $default_amount_model->currency_rate = $_currencies[$item->currency_code];
-
- $default_amount = (double) $default_amount_model->getDivideConvertedAmount();
-
- $convert_amount = new InvoicePayment();
-
- $convert_amount->default_currency_code = $item->currency_code;
- $convert_amount->amount = $default_amount;
- $convert_amount->currency_code = $invoice->currency_code;
- $convert_amount->currency_rate = $_currencies[$invoice->currency_code];
-
- $amount = (double) $convert_amount->getDynamicConvertedAmount();
- }
-
- $paid += $amount;
- }
- }
-
- $invoice->paid = $paid;
-
$accounts = Account::enabled()->orderBy('name')->pluck('name', 'id');
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
@@ -116,7 +85,9 @@ class Invoices extends Controller
$payment_methods = Modules::getPaymentMethods();
- return view('incomes.invoices.show', compact('invoice', 'accounts', 'currencies', 'account_currency_code', 'customers', 'categories', 'payment_methods'));
+ $customer_share = SignedUrl::sign(url('links/invoices/' . $invoice->id));
+
+ return view('incomes.invoices.show', compact('invoice', 'accounts', 'currencies', 'account_currency_code', 'customers', 'categories', 'payment_methods', 'customer_share'));
}
/**
@@ -134,7 +105,7 @@ class Invoices extends Controller
$items = Item::enabled()->orderBy('name')->pluck('name', 'id');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id');
@@ -152,133 +123,7 @@ class Invoices extends Controller
*/
public function store(Request $request)
{
- $invoice = Invoice::create($request->input());
-
- // Upload attachment
- if ($request->file('attachment')) {
- $media = $this->getMedia($request->file('attachment'), 'invoices');
-
- $invoice->attachMedia($media, 'attachment');
- }
-
- $taxes = [];
-
- $tax_total = 0;
- $sub_total = 0;
- $discount_total = 0;
- $discount = $request['discount'];
-
- $invoice_item = [];
- $invoice_item['company_id'] = $request['company_id'];
- $invoice_item['invoice_id'] = $invoice->id;
-
- if ($request['item']) {
- foreach ($request['item'] as $item) {
- $item_sku = '';
-
- if (!empty($item['item_id'])) {
- $item_object = Item::find($item['item_id']);
-
- $item['name'] = $item_object->name;
- $item_sku = $item_object->sku;
-
- // Decrease stock (item sold)
- $item_object->quantity -= $item['quantity'];
- $item_object->save();
-
- // Notify users if out of stock
- if ($item_object->quantity == 0) {
- foreach ($item_object->company->users as $user) {
- if (!$user->can('read-notifications')) {
- continue;
- }
-
- $user->notify(new ItemNotification($item_object));
- }
- }
- }
-
- $tax = $tax_id = 0;
-
- if (!empty($item['tax_id'])) {
- $tax_object = Tax::find($item['tax_id']);
-
- $tax_id = $item['tax_id'];
-
- $tax = (((double) $item['price'] * (double) $item['quantity']) / 100) * $tax_object->rate;
-
- // Apply discount to tax
- if ($discount) {
- $tax = $tax - ($tax * ($discount / 100));
- }
- }
-
- $invoice_item['item_id'] = $item['item_id'];
- $invoice_item['name'] = str_limit($item['name'], 180, '');
- $invoice_item['sku'] = $item_sku;
- $invoice_item['quantity'] = (double) $item['quantity'];
- $invoice_item['price'] = (double) $item['price'];
- $invoice_item['tax'] = $tax;
- $invoice_item['tax_id'] = $tax_id;
- $invoice_item['total'] = (double) $item['price'] * (double) $item['quantity'];
-
- InvoiceItem::create($invoice_item);
-
- // Set taxes
- if (isset($tax_object)) {
- if (array_key_exists($tax_object->id, $taxes)) {
- $taxes[$tax_object->id]['amount'] += $tax;
- } else {
- $taxes[$tax_object->id] = [
- 'name' => $tax_object->name,
- 'amount' => $tax
- ];
- }
- }
-
- // Calculate totals
- $tax_total += $tax;
- $sub_total += $invoice_item['total'];
-
- unset($tax_object);
- }
- }
-
- $s_total = $sub_total;
-
- // Apply discount to total
- if ($discount) {
- $s_discount = $s_total * ($discount / 100);
- $discount_total += $s_discount;
- $s_total = $s_total - $s_discount;
- }
-
- $amount = $s_total + $tax_total;
-
- $request['amount'] = money($amount, $request['currency_code'])->getAmount();
-
- $invoice->update($request->input());
-
- // Add invoice totals
- $this->addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total);
-
- // Add invoice history
- InvoiceHistory::create([
- 'company_id' => session('company_id'),
- 'invoice_id' => $invoice->id,
- 'status_code' => 'draft',
- 'notify' => 0,
- 'description' => trans('messages.success.added', ['type' => $invoice->invoice_number]),
- ]);
-
- // Update next invoice number
- $this->increaseNextInvoiceNumber();
-
- // Recurring
- $invoice->createRecurring();
-
- // Fire the event to make it extendible
- event(new InvoiceCreated($invoice));
+ $invoice = dispatch(new CreateInvoice($request));
$message = trans('messages.success.added', ['type' => trans_choice('general.invoices', 1)]);
@@ -377,7 +222,7 @@ class Invoices extends Controller
$items = Item::enabled()->orderBy('name')->pluck('name', 'id');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id');
@@ -394,105 +239,7 @@ class Invoices extends Controller
*/
public function update(Invoice $invoice, Request $request)
{
- $taxes = [];
- $tax_total = 0;
- $sub_total = 0;
- $discount_total = 0;
- $discount = $request['discount'];
-
- $invoice_item = [];
- $invoice_item['company_id'] = $request['company_id'];
- $invoice_item['invoice_id'] = $invoice->id;
-
- if ($request['item']) {
- $this->deleteRelationships($invoice, 'items');
-
- foreach ($request['item'] as $item) {
- unset($tax_object);
- $item_sku = '';
-
- if (!empty($item['item_id'])) {
- $item_object = Item::find($item['item_id']);
-
- $item['name'] = $item_object->name;
- $item_sku = $item_object->sku;
- }
-
- $tax = $tax_id = 0;
-
- if (!empty($item['tax_id'])) {
- $tax_object = Tax::find($item['tax_id']);
-
- $tax_id = $item['tax_id'];
-
- $tax = (((double) $item['price'] * (double) $item['quantity']) / 100) * $tax_object->rate;
-
- // Apply discount to tax
- if ($discount) {
- $tax = $tax - ($tax * ($discount / 100));
- }
- }
-
- $invoice_item['item_id'] = $item['item_id'];
- $invoice_item['name'] = str_limit($item['name'], 180, '');
- $invoice_item['sku'] = $item_sku;
- $invoice_item['quantity'] = (double) $item['quantity'];
- $invoice_item['price'] = (double) $item['price'];
- $invoice_item['tax'] = $tax;
- $invoice_item['tax_id'] = $tax_id;
- $invoice_item['total'] = (double) $item['price'] * (double) $item['quantity'];
-
- if (isset($tax_object)) {
- if (array_key_exists($tax_object->id, $taxes)) {
- $taxes[$tax_object->id]['amount'] += $tax;
- } else {
- $taxes[$tax_object->id] = [
- 'name' => $tax_object->name,
- 'amount' => $tax
- ];
- }
- }
-
- $tax_total += $tax;
- $sub_total += $invoice_item['total'];
-
- InvoiceItem::create($invoice_item);
- }
- }
-
- $s_total = $sub_total;
-
- // Apply discount to total
- if ($discount) {
- $s_discount = $s_total * ($discount / 100);
- $discount_total += $s_discount;
- $s_total = $s_total - $s_discount;
- }
-
- $amount = $s_total + $tax_total;
-
- $request['amount'] = money($amount, $request['currency_code'])->getAmount();
-
- $invoice->update($request->input());
-
- // Upload attachment
- if ($request->file('attachment')) {
- $media = $this->getMedia($request->file('attachment'), 'invoices');
-
- $invoice->attachMedia($media, 'attachment');
- }
-
- // Delete previous invoice totals
- $this->deleteRelationships($invoice, 'totals');
-
- // Add invoice totals
- $this->addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total);
-
- // Recurring
- $invoice->updateRecurring();
-
- // Fire the event to make it extendible
- event(new InvoiceUpdated($invoice));
+ $invoice = dispatch(new UpdateInvoice($invoice, $request));
$message = trans('messages.success.updated', ['type' => trans_choice('general.invoices', 1)]);
@@ -532,7 +279,7 @@ class Invoices extends Controller
$excel->sheet('invoices', function ($sheet) use ($invoices) {
$sheet->fromModel($invoices->makeHidden([
- 'company_id', 'parent_id', 'created_at', 'updated_at', 'deleted_at', 'attachment', 'discount', 'items', 'histories', 'payments', 'totals', 'media'
+ 'company_id', 'parent_id', 'created_at', 'updated_at', 'deleted_at', 'attachment', 'discount', 'items', 'histories', 'payments', 'totals', 'media', 'paid'
]));
});
@@ -623,6 +370,7 @@ class Invoices extends Controller
unset($invoice->paid);
unset($invoice->template_path);
unset($invoice->pdf_path);
+ unset($invoice->reconciled);
// Mark invoice as sent
if ($invoice->invoice_status_code != 'partial') {
@@ -670,7 +418,9 @@ class Invoices extends Controller
{
$invoice = $this->prepareInvoice($invoice);
- $html = view($invoice->template_path, compact('invoice'))->render();
+ $currency_style = true;
+
+ $html = view($invoice->template_path, compact('invoice', 'currency_style'))->render();
$pdf = app('dompdf.wrapper');
$pdf->loadHTML($html);
@@ -789,20 +539,7 @@ class Invoices extends Controller
$invoice->save();
- $invoice_payment_request = [
- 'company_id' => $request['company_id'],
- 'invoice_id' => $request['invoice_id'],
- 'account_id' => $request['account_id'],
- 'paid_at' => $request['paid_at'],
- 'amount' => $request['amount'],
- 'currency_code' => $request['currency_code'],
- 'currency_rate' => $request['currency_rate'],
- 'description' => $request['description'],
- 'payment_method' => $request['payment_method'],
- 'reference' => $request['reference']
- ];
-
- $invoice_payment = InvoicePayment::create($invoice_payment_request);
+ $invoice_payment = dispatch(new CreateInvoicePayment($request, $invoice));
// Upload attachment
if ($request->file('attachment')) {
@@ -811,15 +548,6 @@ class Invoices extends Controller
$invoice_payment->attachMedia($media, 'attachment');
}
- $request['status_code'] = $invoice->invoice_status_code;
- $request['notify'] = 0;
-
- $desc_amount = money((float) $request['amount'], (string) $request['currency_code'], true)->format();
-
- $request['description'] = $desc_amount . ' ' . trans_choice('general.payments', 1);
-
- InvoiceHistory::create($request->input());
-
$message = trans('messages.success.added', ['type' => trans_choice('general.payments', 1)]);
return response()->json([
@@ -928,64 +656,4 @@ class Invoices extends Controller
return $invoice;
}
-
- protected function addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total)
- {
- $sort_order = 1;
-
- // Added invoice sub total
- InvoiceTotal::create([
- 'company_id' => $request['company_id'],
- 'invoice_id' => $invoice->id,
- 'code' => 'sub_total',
- 'name' => 'invoices.sub_total',
- 'amount' => $sub_total,
- 'sort_order' => $sort_order,
- ]);
-
- $sort_order++;
-
- // Added invoice discount
- if ($discount_total) {
- InvoiceTotal::create([
- 'company_id' => $request['company_id'],
- 'invoice_id' => $invoice->id,
- 'code' => 'discount',
- 'name' => 'invoices.discount',
- 'amount' => $discount_total,
- 'sort_order' => $sort_order,
- ]);
-
- // This is for total
- $sub_total = $sub_total - $discount_total;
- }
-
- $sort_order++;
-
- // Added invoice taxes
- if ($taxes) {
- foreach ($taxes as $tax) {
- InvoiceTotal::create([
- 'company_id' => $request['company_id'],
- 'invoice_id' => $invoice->id,
- 'code' => 'tax',
- 'name' => $tax['name'],
- 'amount' => $tax['amount'],
- 'sort_order' => $sort_order,
- ]);
-
- $sort_order++;
- }
- }
-
- // Added invoice total
- InvoiceTotal::create([
- 'company_id' => $request['company_id'],
- 'invoice_id' => $invoice->id,
- 'code' => 'total',
- 'name' => 'invoices.total',
- 'amount' => $sub_total + $tax_total,
- 'sort_order' => $sort_order,
- ]);
- }
}
diff --git a/app/Http/Controllers/Incomes/Revenues.php b/app/Http/Controllers/Incomes/Revenues.php
index a8a87d56f..f506d917a 100644
--- a/app/Http/Controllers/Incomes/Revenues.php
+++ b/app/Http/Controllers/Incomes/Revenues.php
@@ -29,14 +29,11 @@ class Revenues extends Controller
{
$revenues = Revenue::with(['account', 'category', 'customer'])->isNotTransfer()->collect(['paid_at'=> 'desc']);
- $customers = collect(Customer::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.customers', 2)]), '');
+ $customers = collect(Customer::enabled()->orderBy('name')->pluck('name', 'id'));
- $categories = collect(Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), '');
+ $categories = collect(Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id'));
- $accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'))
- ->prepend(trans('general.all_type', ['type' => trans_choice('general.accounts', 2)]), '');
+ $accounts = collect(Account::enabled()->orderBy('name')->pluck('name', 'id'));
$transfer_cat_id = Category::transfer();
@@ -66,7 +63,7 @@ class Revenues extends Controller
$account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first();
- $currency = Currency::where('code', '=', $account_currency_code)->first();
+ $currency = Currency::where('code', $account_currency_code)->first();
$customers = Customer::enabled()->orderBy('name')->pluck('name', 'id');
@@ -156,9 +153,7 @@ class Revenues extends Controller
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
- $account_currency_code = Account::where('id', $revenue->account_id)->pluck('currency_code')->first();
-
- $currency = Currency::where('code', '=', $account_currency_code)->first();
+ $currency = Currency::where('code', $revenue->currency_code)->first();
$customers = Customer::enabled()->orderBy('name')->pluck('name', 'id');
@@ -166,7 +161,7 @@ class Revenues extends Controller
$payment_methods = Modules::getPaymentMethods();
- return view('incomes.revenues.edit', compact('revenue', 'accounts', 'currencies', 'account_currency_code', 'currency', 'customers', 'categories', 'payment_methods'));
+ return view('incomes.revenues.edit', compact('revenue', 'accounts', 'currencies', 'currency', 'customers', 'categories', 'payment_methods'));
}
/**
diff --git a/app/Http/Controllers/Install/Updates.php b/app/Http/Controllers/Install/Updates.php
index 855050e75..c4b171ce4 100644
--- a/app/Http/Controllers/Install/Updates.php
+++ b/app/Http/Controllers/Install/Updates.php
@@ -6,8 +6,10 @@ use App\Http\Controllers\Controller;
use App\Events\UpdateFinished;
use App\Utilities\Updater;
use App\Utilities\Versions;
+use Illuminate\Http\Request;
use Artisan;
use Module;
+use File;
class Updates extends Controller
{
@@ -80,15 +82,20 @@ class Updates extends Controller
*/
public function update($alias, $version)
{
- set_time_limit(600); // 10 minutes
+ if ($alias == 'core') {
+ $name = 'Akaunting v' . $version;
- if (Updater::update($alias, $version)) {
- return redirect('install/updates/post/' . $alias . '/' . version('short') . '/' . $version);
+ $installed = version('short');
+ } else {
+ // Get module instance
+ $module = Module::findByAlias($alias);
+
+ $name = $module->get('name');
+
+ $installed = $module->get('version');
}
- flash(trans('updates.error'))->error()->important();
-
- return redirect()->back();
+ return view('install.updates.edit', compact('alias', 'name', 'installed', 'version'));
}
/**
@@ -117,4 +124,229 @@ class Updates extends Controller
return redirect('install/updates');
}
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function steps(Request $request)
+ {
+ $json = [];
+ $json['step'] = [];
+
+ $name = $request['name'];
+ $version = $request['version'];
+
+ // Download
+ $json['step'][] = [
+ 'text' => trans('modules.installation.download', ['module' => $name]),
+ 'url' => url('install/updates/download')
+ ];
+
+ // Unzip
+ $json['step'][] = [
+ 'text' => trans('modules.installation.unzip', ['module' => $name]),
+ 'url' => url('install/updates/unzip')
+ ];
+
+ // File Copy
+ $json['step'][] = [
+ 'text' => trans('modules.installation.file_copy', ['module' => $name]),
+ 'url' => url('install/updates/file-copy')
+ ];
+
+ // Migrate DB and trigger event UpdateFinish event
+ $json['step'][] = [
+ 'text' => trans('modules.installation.migrate', ['module' => $name]),
+ 'url' => url('install/updates/migrate')
+ ];
+
+ // redirect update page
+ $json['step'][] = [
+ 'text' => trans('modules.installation.finish'),
+ 'url' => url('install/updates/finish')
+ ];
+
+ return response()->json($json);
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function download(Request $request)
+ {
+ set_time_limit(600); // 10 minutes
+
+ $status = true;
+
+ if ($request['alias'] != 'core') {
+ $this->checkApiToken();
+ }
+
+ // Download file
+ if (!$data = Updater::download($request['alias'], $request['version'])) {
+ $status = false;
+
+ $message = trans('modules.errors.download', ['module' => $request['name']]);
+ }
+
+ // Create temp directory
+ $path = 'temp-' . md5(mt_rand());
+ $temp_path = storage_path('app/temp') . '/' . $path;
+
+ if (!File::isDirectory($temp_path)) {
+ File::makeDirectory($temp_path);
+ }
+
+ $file = $temp_path . '/upload.zip';
+
+ // Add content to the Zip file
+ $uploaded = is_int(file_put_contents($file, $data)) ? true : false;
+
+ if (!$uploaded) {
+ $status = false;
+
+ $message = trans('modules.errors.upload', ['module' => $request['name']]);
+ }
+
+ $json = [
+ 'success' => ($status) ? true : false,
+ 'errors' => (!$status) ? $message : false,
+ 'data' => [
+ 'path' => $path
+ ]
+ ];
+
+ return response()->json($json);
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function unzip(Request $request)
+ {
+ set_time_limit(600); // 10 minutes
+
+ if ($request['alias'] != 'core') {
+ $this->checkApiToken();
+ }
+
+ $path = storage_path('app/temp') . '/' . $request['path'];
+
+ $file = $path . '/upload.zip';
+
+ $result = Updater::unzip($file, $path);
+
+ $json = [
+ 'success' => ($result) ? true : false,
+ 'errors' => (!$result) ? trans('modules.errors.unzip', ['module' => $request['name']]) : false,
+ 'data' => [
+ 'path' => $request['path']
+ ]
+ ];
+
+ return response()->json($json);
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function fileCopy(Request $request)
+ {
+ set_time_limit(600); // 10 minutes
+
+ if ($request['alias'] != 'core') {
+ $this->checkApiToken();
+ }
+
+ $path = storage_path('app/temp') . '/' . $request['path'];
+
+ $result = Updater::fileCopy($request['alias'], $path, $request['version']);
+
+ $json = [
+ 'success' => ($result) ? true : false,
+ 'errors' => (!$result) ? trans('modules.errors.file_copy', ['module' => $request['name']]) : false,
+ 'data' => [
+ 'path' => $request['path']
+ ]
+ ];
+
+ return response()->json($json);
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function migrate(Request $request)
+ {
+ // Check if the file mirror was successful
+ if (($request['alias'] == 'core') && (version('short') != $request['version'])) {
+ $json = [
+ 'success' => false,
+ 'errors' => trans('modules.errors.migrate core', ['module' => $request['name']]),
+ 'data' => []
+ ];
+
+ return response()->json($json);
+ }
+
+ // Clear cache after update
+ Artisan::call('cache:clear');
+
+ try {
+ event(new UpdateFinished($request['alias'], $request['installed'], $request['version']));
+
+ $json = [
+ 'success' => true,
+ 'errors' => false,
+ 'data' => []
+ ];
+ } catch (\Exception $e) {
+ $json = [
+ 'success' => false,
+ 'errors' => trans('modules.errors.migrate', ['module' => $request['name']]),
+ 'data' => []
+ ];
+ }
+
+ return response()->json($json);
+ }
+
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $request
+ *
+ * @return Response
+ */
+ public function finish(Request $request)
+ {
+ $json = [
+ 'success' => true,
+ 'errors' => false,
+ 'redirect' => url("install/updates"),
+ 'data' => [],
+ ];
+
+ return response()->json($json);
+ }
}
diff --git a/app/Http/Controllers/Modals/BillPayments.php b/app/Http/Controllers/Modals/BillPayments.php
index 0446ea9bf..f66e08444 100644
--- a/app/Http/Controllers/Modals/BillPayments.php
+++ b/app/Http/Controllers/Modals/BillPayments.php
@@ -39,10 +39,10 @@ class BillPayments extends Controller
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code')->toArray();
- $currency = Currency::where('code', setting('general.default_currency'))->first();
-
$account_currency_code = Account::where('id', setting('general.default_account'))->pluck('currency_code')->first();
+ $currency = Currency::where('code', $account_currency_code)->first();
+
$payment_methods = Modules::getPaymentMethods();
$bill->paid = $this->getPaid($bill);
@@ -52,7 +52,9 @@ class BillPayments extends Controller
$bill->{$bill_total->code} = $bill_total->amount;
}
- $bill->grand_total = $bill->total;
+ $total = money($bill->total, $currency->code, true)->format();
+
+ $bill->grand_total = money($total, $currency->code)->getAmount();
if (!empty($paid)) {
$bill->grand_total = $bill->total - $paid;
diff --git a/app/Http/Controllers/Modals/InvoicePayments.php b/app/Http/Controllers/Modals/InvoicePayments.php
index 737dd13a6..6bd543a12 100644
--- a/app/Http/Controllers/Modals/InvoicePayments.php
+++ b/app/Http/Controllers/Modals/InvoicePayments.php
@@ -52,7 +52,9 @@ class InvoicePayments extends Controller
$invoice->{$invoice_total->code} = $invoice_total->amount;
}
- $invoice->grand_total = $invoice->total;
+ $total = money($invoice->total, $currency->code, true)->format();
+
+ $invoice->grand_total = money($total, $currency->code)->getAmount();
if (!empty($paid)) {
$invoice->grand_total = $invoice->total - $paid;
@@ -147,7 +149,7 @@ class InvoicePayments extends Controller
$error_amount = (double) $convert_amount->getDynamicConvertedAmount();
}
- $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $request['currency_code'],true)]);
+ $message = trans('messages.error.over_payment', ['amount' => money($error_amount, $request['currency_code'], true)]);
return response()->json([
'success' => false,
diff --git a/app/Http/Controllers/Modals/Taxes.php b/app/Http/Controllers/Modals/Taxes.php
new file mode 100644
index 000000000..1cb1512b8
--- /dev/null
+++ b/app/Http/Controllers/Modals/Taxes.php
@@ -0,0 +1,69 @@
+middleware('permission:create-settings-taxes')->only(['create', 'store']);
+ $this->middleware('permission:read-settings-taxes')->only(['index', 'edit']);
+ $this->middleware('permission:update-settings-taxes')->only(['update', 'enable', 'disable']);
+ $this->middleware('permission:delete-settings-taxes')->only('destroy');
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return Response
+ */
+ public function create()
+ {
+ $types = [
+ 'normal' => trans('taxes.normal'),
+ 'inclusive' => trans('taxes.inclusive'),
+ 'compound' => trans('taxes.compound'),
+ ];
+
+ $html = view('modals.taxes.create', compact('types'))->render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => 'null',
+ 'html' => $html,
+ ]);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function store(Request $request)
+ {
+ $request['enabled'] = 1;
+
+ $tax = Tax::create($request->all());
+
+ $message = trans('messages.success.added', ['type' => trans_choice('general.taxes', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'data' => $tax,
+ 'message' => $message,
+ 'html' => 'null',
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Modules/Item.php b/app/Http/Controllers/Modules/Item.php
index 016e912d4..b5d64e6d6 100644
--- a/app/Http/Controllers/Modules/Item.php
+++ b/app/Http/Controllers/Modules/Item.php
@@ -67,7 +67,7 @@ class Item extends Controller
$module->action_url .= $character . http_build_query($parameters);
}
- return view('modules.item.show', compact('module', 'about', 'installed', 'enable'));
+ return view('modules.item.show', compact('module', 'installed', 'enable'));
}
/**
@@ -302,4 +302,42 @@ class Item extends Controller
return redirect('apps/' . $alias);
}
+
+ public function reviews($alias, Request $request)
+ {
+ $page = $request['page'];
+
+ $data = [
+ 'query' => [
+ 'page' => ($page) ? $page : 1,
+ ]
+ ];
+
+ $reviews = $this->getModuleReviews($alias, $data);
+
+ $html = view('partials.modules.reviews', compact('reviews'))->render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'data' => null,
+ 'message' => null,
+ 'html' => $html,
+ ]);
+ }
+
+ public function documentation($alias)
+ {
+ $this->checkApiToken();
+
+ $documentation = $this->getDocumentation($alias);
+
+ if (empty($documentation)) {
+ return redirect('apps/' . $alias)->send();
+ }
+
+ $back = 'apps/' . $alias;
+
+ return view('modules.item.documentation', compact('documentation', 'back'));
+ }
}
diff --git a/app/Http/Controllers/Modules/Tiles.php b/app/Http/Controllers/Modules/Tiles.php
index f910bea5b..155d3b3f7 100644
--- a/app/Http/Controllers/Modules/Tiles.php
+++ b/app/Http/Controllers/Modules/Tiles.php
@@ -23,7 +23,15 @@ class Tiles extends Controller
{
$this->checkApiToken();
- $data = $this->getModulesByCategory($alias);
+ $page = request('page', 1);
+
+ $request = [
+ 'query' => [
+ 'page' => $page,
+ ]
+ ];
+
+ $data = $this->getModulesByCategory($alias, $request);
$title = $data->category->name;
$modules = $data->modules;
@@ -32,6 +40,34 @@ class Tiles extends Controller
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
}
+ /**
+ * Show the form for viewing the specified resource.
+ *
+ * @param $alias
+ *
+ * @return Response
+ */
+ public function vendorModules($alias)
+ {
+ $this->checkApiToken();
+
+ $page = request('page', 1);
+
+ $request = [
+ 'query' => [
+ 'page' => $page,
+ ]
+ ];
+
+ $data = $this->getModulesByVendor($alias, $request);
+
+ $title = $data->vendor->name;
+ $modules = $data->modules;
+ $installed = Module::all()->pluck('status', 'alias')->toArray();
+
+ return view('modules.tiles.index', compact('title', 'modules', 'installed'));
+ }
+
/**
* Show the form for viewing the specified resource.
*
@@ -41,8 +77,16 @@ class Tiles extends Controller
{
$this->checkApiToken();
+ $page = request('page', 1);
+
+ $data = [
+ 'query' => [
+ 'page' => $page,
+ ]
+ ];
+
$title = trans('modules.top_paid');
- $modules = $this->getPaidModules();
+ $modules = $this->getPaidModules($data);
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
@@ -57,8 +101,16 @@ class Tiles extends Controller
{
$this->checkApiToken();
+ $page = request('page', 1);
+
+ $data = [
+ 'query' => [
+ 'page' => $page,
+ ]
+ ];
+
$title = trans('modules.new');
- $modules = $this->getNewModules();
+ $modules = $this->getNewModules($data);
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
@@ -73,8 +125,16 @@ class Tiles extends Controller
{
$this->checkApiToken();
+ $page = request('page', 1);
+
+ $data = [
+ 'query' => [
+ 'page' => $page,
+ ]
+ ];
+
$title = trans('modules.top_free');
- $modules = $this->getFreeModules();
+ $modules = $this->getFreeModules($data);
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
@@ -90,10 +150,12 @@ class Tiles extends Controller
$this->checkApiToken();
$keyword = $request['keyword'];
+ $page = request('page', 1);
$data = [
'query' => [
'keyword' => $keyword,
+ 'page' => $page,
]
];
diff --git a/app/Http/Controllers/Reports/ExpenseSummary.php b/app/Http/Controllers/Reports/ExpenseSummary.php
index ff19da333..d3d5ea2fe 100644
--- a/app/Http/Controllers/Reports/ExpenseSummary.php
+++ b/app/Http/Controllers/Reports/ExpenseSummary.php
@@ -3,10 +3,13 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\Controller;
+use App\Models\Banking\Account;
use App\Models\Expense\Bill;
use App\Models\Expense\BillPayment;
use App\Models\Expense\Payment;
+use App\Models\Expense\Vendor;
use App\Models\Setting\Category;
+use App\Utilities\Recurring;
use Charts;
use Date;
@@ -22,13 +25,16 @@ class ExpenseSummary extends Controller
$dates = $totals = $expenses = $expenses_graph = $categories = [];
$status = request('status');
+ $year = request('year', Date::now()->year);
- $categories = Category::enabled()->type('expense')->pluck('name', 'id')->toArray();
+ $categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id')->toArray();
- // Get year
- $year = request('year');
- if (empty($year)) {
- $year = Date::now()->year;
+ if ($categories_filter = request('categories')) {
+ $cats = collect($categories)->filter(function ($value, $key) use ($categories_filter) {
+ return in_array($key, $categories_filter);
+ });
+ } else {
+ $cats = $categories;
}
// Dates
@@ -44,7 +50,7 @@ class ExpenseSummary extends Controller
'currency_rate' => 1
);
- foreach ($categories as $category_id => $category_name) {
+ foreach ($cats as $category_id => $category_name) {
$expenses[$category_id][$dates[$j]] = array(
'category_id' => $category_id,
'name' => $category_name,
@@ -55,27 +61,47 @@ class ExpenseSummary extends Controller
}
}
- // Bills
+ $payments = Payment::monthsOfYear('paid_at')->account(request('accounts'))->vendor(request('vendors'))->isNotTransfer()->get();
+
switch ($status) {
case 'paid':
- $bills = BillPayment::monthsOfYear('paid_at')->get();
+ // Bills
+ $bills = BillPayment::monthsOfYear('paid_at')->account(request('accounts'))->get();
$this->setAmount($expenses_graph, $totals, $expenses, $bills, 'bill', 'paid_at');
+
+ // Payments
+ $this->setAmount($expenses_graph, $totals, $expenses, $payments, 'payment', 'paid_at');
break;
case 'upcoming':
- $bills = Bill::accrued()->monthsOfYear('due_at')->get();
+ // Bills
+ $bills = Bill::accrued()->monthsOfYear('due_at')->vendor(request('vendors'))->get();
+ Recurring::reflect($bills, 'bill', 'billed_at', $status);
$this->setAmount($expenses_graph, $totals, $expenses, $bills, 'bill', 'due_at');
+
+ // Payments
+ Recurring::reflect($payments, 'payment', 'paid_at', $status);
+ $this->setAmount($expenses_graph, $totals, $expenses, $payments, 'payment', 'paid_at');
break;
default:
- $bills = Bill::accrued()->monthsOfYear('billed_at')->get();
+ // Bills
+ $bills = Bill::accrued()->monthsOfYear('billed_at')->vendor(request('vendors'))->get();
+ Recurring::reflect($bills, 'bill', 'billed_at', $status);
$this->setAmount($expenses_graph, $totals, $expenses, $bills, 'bill', 'billed_at');
+
+ // Payments
+ Recurring::reflect($payments, 'payment', 'paid_at', $status);
+ $this->setAmount($expenses_graph, $totals, $expenses, $payments, 'payment', 'paid_at');
break;
}
- // Payments
- if ($status != 'upcoming') {
- $payments = Payment::monthsOfYear('paid_at')->isNotTransfer()->get();
- $this->setAmount($expenses_graph, $totals, $expenses, $payments, 'payment', 'paid_at');
- }
+ $statuses = collect([
+ 'all' => trans('general.all'),
+ 'paid' => trans('invoices.paid'),
+ 'upcoming' => trans('dashboard.payables'),
+ ]);
+
+ $accounts = Account::enabled()->pluck('name', 'id')->toArray();
+ $vendors = Vendor::enabled()->pluck('name', 'id')->toArray();
// Check if it's a print or normal request
if (request('print')) {
@@ -86,6 +112,8 @@ class ExpenseSummary extends Controller
$view_template = 'reports.expense_summary.index';
}
+ $print_url = $this->getPrintUrl($year);
+
// Expenses chart
$chart = Charts::multi('line', 'chartjs')
->dimensions(0, 300)
@@ -95,21 +123,49 @@ class ExpenseSummary extends Controller
->credits(false)
->view($chart_template);
- return view($view_template, compact('chart', 'dates', 'categories', 'expenses', 'totals'));
+ return view($view_template, compact(
+ 'chart',
+ 'dates',
+ 'categories',
+ 'statuses',
+ 'accounts',
+ 'vendors',
+ 'expenses',
+ 'totals',
+ 'print_url'
+ ));
}
private function setAmount(&$graph, &$totals, &$expenses, $items, $type, $date_field)
{
foreach ($items as $item) {
- if ($item['table'] == 'bill_payments') {
- $bill = $item->bill;
+ switch ($item->getTable()) {
+ case 'bill_payments':
+ $bill = $item->bill;
- $item->category_id = $bill->category_id;
+ if ($vendors = request('vendors')) {
+ if (!in_array($bill->vendor_id, $vendors)) {
+ continue;
+ }
+ }
+
+ $item->category_id = $bill->category_id;
+ break;
+ case 'bills':
+ if ($accounts = request('accounts')) {
+ foreach ($item->payments as $payment) {
+ if (!in_array($payment->account_id, $accounts)) {
+ continue 2;
+ }
+ }
+ }
+ break;
}
- $date = Date::parse($item->$date_field)->format('F');
+ $month = Date::parse($item->$date_field)->format('F');
+ $month_year = Date::parse($item->$date_field)->format('F-Y');
- if (!isset($expenses[$item->category_id])) {
+ if (!isset($expenses[$item->category_id]) || !isset($expenses[$item->category_id][$month]) || !isset($graph[$month_year])) {
continue;
}
@@ -122,13 +178,34 @@ class ExpenseSummary extends Controller
}
}
- $expenses[$item->category_id][$date]['amount'] += $amount;
- $expenses[$item->category_id][$date]['currency_code'] = $item->currency_code;
- $expenses[$item->category_id][$date]['currency_rate'] = $item->currency_rate;
+ $expenses[$item->category_id][$month]['amount'] += $amount;
+ $expenses[$item->category_id][$month]['currency_code'] = $item->currency_code;
+ $expenses[$item->category_id][$month]['currency_rate'] = $item->currency_rate;
- $graph[Date::parse($item->$date_field)->format('F-Y')] += $amount;
+ $graph[$month_year] += $amount;
- $totals[$date]['amount'] += $amount;
+ $totals[$month]['amount'] += $amount;
}
}
+
+ private function getPrintUrl($year)
+ {
+ $print_url = 'reports/expense-summary?print=1'
+ . '&status=' . request('status')
+ . '&year='. request('year', $year);
+
+ collect(request('accounts'))->each(function($item) use(&$print_url) {
+ $print_url .= '&accounts[]=' . $item;
+ });
+
+ collect(request('vendors'))->each(function($item) use(&$print_url) {
+ $print_url .= '&vendors[]=' . $item;
+ });
+
+ collect(request('categories'))->each(function($item) use(&$print_url) {
+ $print_url .= '&categories[]=' . $item;
+ });
+
+ return $print_url;
+ }
}
diff --git a/app/Http/Controllers/Reports/IncomeExpenseSummary.php b/app/Http/Controllers/Reports/IncomeExpenseSummary.php
index b09cc7dc1..0f80a0bbd 100644
--- a/app/Http/Controllers/Reports/IncomeExpenseSummary.php
+++ b/app/Http/Controllers/Reports/IncomeExpenseSummary.php
@@ -3,13 +3,17 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\Controller;
+use App\Models\Banking\Account;
+use App\Models\Income\Customer;
use App\Models\Income\Invoice;
use App\Models\Income\InvoicePayment;
use App\Models\Income\Revenue;
use App\Models\Expense\Bill;
use App\Models\Expense\BillPayment;
use App\Models\Expense\Payment;
+use App\Models\Expense\Vendor;
use App\Models\Setting\Category;
+use App\Utilities\Recurring;
use Charts;
use Date;
@@ -25,16 +29,16 @@ class IncomeExpenseSummary extends Controller
$dates = $totals = $compares = $profit_graph = $categories = [];
$status = request('status');
+ $year = request('year', Date::now()->year);
+ $categories_filter = request('categories');
- $income_categories = Category::enabled()->type('income')->pluck('name', 'id')->toArray();
+ $income_categories = Category::enabled()->type('income')->when($categories_filter, function ($query) use ($categories_filter) {
+ return $query->whereIn('id', $categories_filter);
+ })->orderBy('name')->pluck('name', 'id')->toArray();
- $expense_categories = Category::enabled()->type('expense')->pluck('name', 'id')->toArray();
-
- // Get year
- $year = request('year');
- if (empty($year)) {
- $year = Date::now()->year;
- }
+ $expense_categories = Category::enabled()->type('expense')->when($categories_filter, function ($query) use ($categories_filter) {
+ return $query->whereIn('id', $categories_filter);
+ })->orderBy('name')->pluck('name', 'id')->toArray();
// Dates
for ($j = 1; $j <= 12; $j++) {
@@ -70,49 +74,75 @@ class IncomeExpenseSummary extends Controller
}
}
- // Invoices
+ $revenues = Revenue::monthsOfYear('paid_at')->account(request('accounts'))->customer(request('customers'))->isNotTransfer()->get();
+ $payments = Payment::monthsOfYear('paid_at')->account(request('accounts'))->vendor(request('vendors'))->isNotTransfer()->get();
+
switch ($status) {
case 'paid':
- $invoices = InvoicePayment::monthsOfYear('paid_at')->get();
+ // Invoices
+ $invoices = InvoicePayment::monthsOfYear('paid_at')->account(request('accounts'))->get();
$this->setAmount($profit_graph, $totals, $compares, $invoices, 'invoice', 'paid_at');
- break;
- case 'upcoming':
- $invoices = Invoice::accrued()->monthsOfYear('due_at')->get();
- $this->setAmount($profit_graph, $totals, $compares, $invoices, 'invoice', 'due_at');
- break;
- default:
- $invoices = Invoice::accrued()->monthsOfYear('invoiced_at')->get();
- $this->setAmount($profit_graph, $totals, $compares, $invoices, 'invoice', 'invoiced_at');
- break;
- }
- // Revenues
- if ($status != 'upcoming') {
- $revenues = Revenue::monthsOfYear('paid_at')->isNotTransfer()->get();
- $this->setAmount($profit_graph, $totals, $compares, $revenues, 'revenue', 'paid_at');
- }
+ // Revenues
+ $this->setAmount($profit_graph, $totals, $compares, $revenues, 'revenue', 'paid_at');
- // Bills
- switch ($status) {
- case 'paid':
- $bills = BillPayment::monthsOfYear('paid_at')->get();
+ // Bills
+ $bills = BillPayment::monthsOfYear('paid_at')->account(request('accounts'))->get();
$this->setAmount($profit_graph, $totals, $compares, $bills, 'bill', 'paid_at');
+
+ // Payments
+ $this->setAmount($profit_graph, $totals, $compares, $payments, 'payment', 'paid_at');
break;
case 'upcoming':
- $bills = Bill::accrued()->monthsOfYear('due_at')->get();
+ // Invoices
+ $invoices = Invoice::accrued()->monthsOfYear('due_at')->customer(request('customers'))->get();
+ Recurring::reflect($invoices, 'invoice', 'due_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $invoices, 'invoice', 'due_at');
+
+ // Revenues
+ Recurring::reflect($revenues, 'revenue', 'paid_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $revenues, 'revenue', 'paid_at');
+
+ // Bills
+ $bills = Bill::accrued()->monthsOfYear('due_at')->vendor(request('vendors'))->get();
+ Recurring::reflect($bills, 'bill', 'billed_at', $status);
$this->setAmount($profit_graph, $totals, $compares, $bills, 'bill', 'due_at');
+
+ // Payments
+ Recurring::reflect($payments, 'payment', 'paid_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $payments, 'payment', 'paid_at');
break;
default:
- $bills = Bill::accrued()->monthsOfYear('billed_at')->get();
+ // Invoices
+ $invoices = Invoice::accrued()->monthsOfYear('invoiced_at')->customer(request('customers'))->get();
+ Recurring::reflect($invoices, 'invoice', 'invoiced_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $invoices, 'invoice', 'invoiced_at');
+
+ // Revenues
+ Recurring::reflect($revenues, 'revenue', 'paid_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $revenues, 'revenue', 'paid_at');
+
+ // Bills
+ $bills = Bill::accrued()->monthsOfYear('billed_at')->vendor(request('vendors'))->get();
+ Recurring::reflect($bills, 'bill', 'billed_at', $status);
$this->setAmount($profit_graph, $totals, $compares, $bills, 'bill', 'billed_at');
+
+ // Payments
+ Recurring::reflect($payments, 'payment', 'paid_at', $status);
+ $this->setAmount($profit_graph, $totals, $compares, $payments, 'payment', 'paid_at');
break;
}
-
- // Payments
- if ($status != 'upcoming') {
- $payments = Payment::monthsOfYear('paid_at')->isNotTransfer()->get();
- $this->setAmount($profit_graph, $totals, $compares, $payments, 'payment', 'paid_at');
- }
+
+ $statuses = collect([
+ 'all' => trans('general.all'),
+ 'paid' => trans('invoices.paid'),
+ 'upcoming' => trans('general.upcoming'),
+ ]);
+
+ $accounts = Account::enabled()->pluck('name', 'id')->toArray();
+ $customers = Customer::enabled()->pluck('name', 'id')->toArray();
+ $vendors = Vendor::enabled()->pluck('name', 'id')->toArray();
+ $categories = Category::enabled()->type(['income', 'expense'])->pluck('name', 'id')->toArray();
// Check if it's a print or normal request
if (request('print')) {
@@ -123,6 +153,8 @@ class IncomeExpenseSummary extends Controller
$view_template = 'reports.income_expense_summary.index';
}
+ $print_url = $this->getPrintUrl($year);
+
// Profit chart
$chart = Charts::multi('line', 'chartjs')
->dimensions(0, 300)
@@ -132,23 +164,72 @@ class IncomeExpenseSummary extends Controller
->credits(false)
->view($chart_template);
- return view($view_template, compact('chart', 'dates', 'income_categories', 'expense_categories', 'compares', 'totals'));
+ return view($view_template, compact(
+ 'chart',
+ 'dates',
+ 'income_categories',
+ 'expense_categories',
+ 'categories',
+ 'statuses',
+ 'accounts',
+ 'customers',
+ 'vendors',
+ 'compares',
+ 'totals',
+ 'print_url'
+ ));
}
private function setAmount(&$graph, &$totals, &$compares, $items, $type, $date_field)
{
foreach ($items as $item) {
- if ($item['table'] == 'bill_payments' || $item['table'] == 'invoice_payments') {
+ if ($item->getTable() == 'bill_payments' || $item->getTable() == 'invoice_payments') {
$type_item = $item->$type;
$item->category_id = $type_item->category_id;
}
- $date = Date::parse($item->$date_field)->format('F');
+ switch ($item->getTable()) {
+ case 'invoice_payments':
+ $invoice = $item->invoice;
+
+ if ($customers = request('customers')) {
+ if (!in_array($invoice->customer_id, $customers)) {
+ continue;
+ }
+ }
+
+ $item->category_id = $invoice->category_id;
+ break;
+ case 'bill_payments':
+ $bill = $item->bill;
+
+ if ($vendors = request('vendors')) {
+ if (!in_array($bill->vendor_id, $vendors)) {
+ continue;
+ }
+ }
+
+ $item->category_id = $bill->category_id;
+ break;
+ case 'invoices':
+ case 'bills':
+ if ($accounts = request('accounts')) {
+ foreach ($item->payments as $payment) {
+ if (!in_array($payment->account_id, $accounts)) {
+ continue 2;
+ }
+ }
+ }
+ break;
+ }
+
+ $month = Date::parse($item->$date_field)->format('F');
+ $month_year = Date::parse($item->$date_field)->format('F-Y');
$group = (($type == 'invoice') || ($type == 'revenue')) ? 'income' : 'expense';
- if (!isset($compares[$group][$item->category_id])) {
+ if (!isset($compares[$group][$item->category_id]) || !isset($compares[$group][$item->category_id][$month]) || !isset($graph[$month_year])) {
continue;
}
@@ -161,19 +242,44 @@ class IncomeExpenseSummary extends Controller
}
}
- $compares[$group][$item->category_id][$date]['amount'] += $amount;
- $compares[$group][$item->category_id][$date]['currency_code'] = $item->currency_code;
- $compares[$group][$item->category_id][$date]['currency_rate'] = $item->currency_rate;
+ $compares[$group][$item->category_id][$month]['amount'] += $amount;
+ $compares[$group][$item->category_id][$month]['currency_code'] = $item->currency_code;
+ $compares[$group][$item->category_id][$month]['currency_rate'] = $item->currency_rate;
if ($group == 'income') {
- $graph[Date::parse($item->$date_field)->format('F-Y')] += $amount;
+ $graph[$month_year] += $amount;
- $totals[$date]['amount'] += $amount;
+ $totals[$month]['amount'] += $amount;
} else {
- $graph[Date::parse($item->$date_field)->format('F-Y')] -= $amount;
+ $graph[$month_year] -= $amount;
- $totals[$date]['amount'] -= $amount;
+ $totals[$month]['amount'] -= $amount;
}
}
}
+
+ private function getPrintUrl($year)
+ {
+ $print_url = 'reports/income-expense-summary?print=1'
+ . '&status=' . request('status')
+ . '&year='. request('year', $year);
+
+ collect(request('accounts'))->each(function($item) use(&$print_url) {
+ $print_url .= '&accounts[]=' . $item;
+ });
+
+ collect(request('customers'))->each(function($item) use(&$print_url) {
+ $print_url .= '&customers[]=' . $item;
+ });
+
+ collect(request('vendors'))->each(function($item) use(&$print_url) {
+ $print_url .= '&vendors[]=' . $item;
+ });
+
+ collect(request('categories'))->each(function($item) use(&$print_url) {
+ $print_url .= '&categories[]=' . $item;
+ });
+
+ return $print_url;
+ }
}
diff --git a/app/Http/Controllers/Reports/IncomeSummary.php b/app/Http/Controllers/Reports/IncomeSummary.php
index 0d72c6ecc..50a02a5f4 100644
--- a/app/Http/Controllers/Reports/IncomeSummary.php
+++ b/app/Http/Controllers/Reports/IncomeSummary.php
@@ -3,10 +3,13 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\Controller;
+use App\Models\Banking\Account;
+use App\Models\Income\Customer;
use App\Models\Income\Invoice;
use App\Models\Income\InvoicePayment;
use App\Models\Income\Revenue;
use App\Models\Setting\Category;
+use App\Utilities\Recurring;
use Charts;
use Date;
@@ -22,13 +25,16 @@ class IncomeSummary extends Controller
$dates = $totals = $incomes = $incomes_graph = $categories = [];
$status = request('status');
+ $year = request('year', Date::now()->year);
- $categories = Category::enabled()->type('income')->pluck('name', 'id')->toArray();
+ $categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id')->toArray();
- // Get year
- $year = request('year');
- if (empty($year)) {
- $year = Date::now()->year;
+ if ($categories_filter = request('categories')) {
+ $cats = collect($categories)->filter(function ($value, $key) use ($categories_filter) {
+ return in_array($key, $categories_filter);
+ });
+ } else {
+ $cats = $categories;
}
// Dates
@@ -44,38 +50,58 @@ class IncomeSummary extends Controller
'currency_rate' => 1
);
- foreach ($categories as $category_id => $category_name) {
- $incomes[$category_id][$dates[$j]] = array(
+ foreach ($cats as $category_id => $category_name) {
+ $incomes[$category_id][$dates[$j]] = [
'category_id' => $category_id,
'name' => $category_name,
'amount' => 0,
'currency_code' => setting('general.default_currency'),
'currency_rate' => 1
- );
+ ];
}
}
- // Invoices
+ $revenues = Revenue::monthsOfYear('paid_at')->account(request('accounts'))->customer(request('customers'))->isNotTransfer()->get();
+
switch ($status) {
case 'paid':
- $invoices = InvoicePayment::monthsOfYear('paid_at')->get();
+ // Invoices
+ $invoices = InvoicePayment::monthsOfYear('paid_at')->account(request('accounts'))->get();
$this->setAmount($incomes_graph, $totals, $incomes, $invoices, 'invoice', 'paid_at');
+
+ // Revenues
+ $this->setAmount($incomes_graph, $totals, $incomes, $revenues, 'revenue', 'paid_at');
break;
case 'upcoming':
- $invoices = Invoice::accrued()->monthsOfYear('due_at')->get();
+ // Invoices
+ $invoices = Invoice::accrued()->monthsOfYear('due_at')->customer(request('customers'))->get();
+ Recurring::reflect($invoices, 'invoice', 'invoiced_at', $status);
$this->setAmount($incomes_graph, $totals, $incomes, $invoices, 'invoice', 'due_at');
+
+ // Revenues
+ Recurring::reflect($revenues, 'revenue', 'paid_at', $status);
+ $this->setAmount($incomes_graph, $totals, $incomes, $revenues, 'revenue', 'paid_at');
break;
default:
- $invoices = Invoice::accrued()->monthsOfYear('invoiced_at')->get();
+ // Invoices
+ $invoices = Invoice::accrued()->monthsOfYear('invoiced_at')->customer(request('customers'))->get();
+ Recurring::reflect($invoices, 'invoice', 'invoiced_at', $status);
$this->setAmount($incomes_graph, $totals, $incomes, $invoices, 'invoice', 'invoiced_at');
+
+ // Revenues
+ Recurring::reflect($revenues, 'revenue', 'paid_at', $status);
+ $this->setAmount($incomes_graph, $totals, $incomes, $revenues, 'revenue', 'paid_at');
break;
}
- // Revenues
- if ($status != 'upcoming') {
- $revenues = Revenue::monthsOfYear('paid_at')->isNotTransfer()->get();
- $this->setAmount($incomes_graph, $totals, $incomes, $revenues, 'revenue', 'paid_at');
- }
+ $statuses = collect([
+ 'all' => trans('general.all'),
+ 'paid' => trans('invoices.paid'),
+ 'upcoming' => trans('dashboard.receivables'),
+ ]);
+
+ $accounts = Account::enabled()->pluck('name', 'id')->toArray();
+ $customers = Customer::enabled()->pluck('name', 'id')->toArray();
// Check if it's a print or normal request
if (request('print')) {
@@ -86,6 +112,8 @@ class IncomeSummary extends Controller
$view_template = 'reports.income_summary.index';
}
+ $print_url = $this->getPrintUrl($year);
+
// Incomes chart
$chart = Charts::multi('line', 'chartjs')
->dimensions(0, 300)
@@ -95,21 +123,49 @@ class IncomeSummary extends Controller
->credits(false)
->view($chart_template);
- return view($view_template, compact('chart', 'dates', 'categories', 'incomes', 'totals'));
+ return view($view_template, compact(
+ 'chart',
+ 'dates',
+ 'categories',
+ 'statuses',
+ 'accounts',
+ 'customers',
+ 'incomes',
+ 'totals',
+ 'print_url'
+ ));
}
private function setAmount(&$graph, &$totals, &$incomes, $items, $type, $date_field)
{
foreach ($items as $item) {
- if ($item['table'] == 'invoice_payments') {
- $invoice = $item->invoice;
+ switch ($item->getTable()) {
+ case 'invoice_payments':
+ $invoice = $item->invoice;
- $item->category_id = $invoice->category_id;
+ if ($customers = request('customers')) {
+ if (!in_array($invoice->customer_id, $customers)) {
+ continue;
+ }
+ }
+
+ $item->category_id = $invoice->category_id;
+ break;
+ case 'invoices':
+ if ($accounts = request('accounts')) {
+ foreach ($item->payments as $payment) {
+ if (!in_array($payment->account_id, $accounts)) {
+ continue 2;
+ }
+ }
+ }
+ break;
}
- $date = Date::parse($item->$date_field)->format('F');
+ $month = Date::parse($item->$date_field)->format('F');
+ $month_year = Date::parse($item->$date_field)->format('F-Y');
- if (!isset($incomes[$item->category_id])) {
+ if (!isset($incomes[$item->category_id]) || !isset($incomes[$item->category_id][$month]) || !isset($graph[$month_year])) {
continue;
}
@@ -122,13 +178,34 @@ class IncomeSummary extends Controller
}
}
- $incomes[$item->category_id][$date]['amount'] += $amount;
- $incomes[$item->category_id][$date]['currency_code'] = $item->currency_code;
- $incomes[$item->category_id][$date]['currency_rate'] = $item->currency_rate;
+ $incomes[$item->category_id][$month]['amount'] += $amount;
+ $incomes[$item->category_id][$month]['currency_code'] = $item->currency_code;
+ $incomes[$item->category_id][$month]['currency_rate'] = $item->currency_rate;
- $graph[Date::parse($item->$date_field)->format('F-Y')] += $amount;
+ $graph[$month_year] += $amount;
- $totals[$date]['amount'] += $amount;
+ $totals[$month]['amount'] += $amount;
}
}
+
+ private function getPrintUrl($year)
+ {
+ $print_url = 'reports/income-summary?print=1'
+ . '&status=' . request('status')
+ . '&year='. request('year', $year);
+
+ collect(request('accounts'))->each(function($item) use(&$print_url) {
+ $print_url .= '&accounts[]=' . $item;
+ });
+
+ collect(request('customers'))->each(function($item) use(&$print_url) {
+ $print_url .= '&customers[]=' . $item;
+ });
+
+ collect(request('categories'))->each(function($item) use(&$print_url) {
+ $print_url .= '&categories[]=' . $item;
+ });
+
+ return $print_url;
+ }
}
diff --git a/app/Http/Controllers/Reports/ProfitLoss.php b/app/Http/Controllers/Reports/ProfitLoss.php
index 96cecddb1..9b4d6e62b 100644
--- a/app/Http/Controllers/Reports/ProfitLoss.php
+++ b/app/Http/Controllers/Reports/ProfitLoss.php
@@ -25,16 +25,11 @@ class ProfitLoss extends Controller
$dates = $totals = $compares = $categories = [];
$status = request('status');
+ $year = request('year', Date::now()->year);
- $income_categories = Category::enabled()->type('income')->pluck('name', 'id')->toArray();
+ $income_categories = Category::enabled()->type('income')->orderBy('name')->pluck('name', 'id')->toArray();
- $expense_categories = Category::enabled()->type('expense')->pluck('name', 'id')->toArray();
-
- // Get year
- $year = request('year');
- if (empty($year)) {
- $year = Date::now()->year;
- }
+ $expense_categories = Category::enabled()->type('expense')->orderBy('name')->pluck('name', 'id')->toArray();
// Dates
for ($j = 1; $j <= 12; $j++) {
@@ -142,6 +137,12 @@ class ProfitLoss extends Controller
$this->setAmount($totals, $compares, $payments, 'payment', 'paid_at');
}
+ $statuses = collect([
+ 'all' => trans('general.all'),
+ 'paid' => trans('invoices.paid'),
+ 'upcoming' => trans('general.upcoming'),
+ ]);
+
// Check if it's a print or normal request
if (request('print')) {
$view_template = 'reports.profit_loss.print';
@@ -149,7 +150,7 @@ class ProfitLoss extends Controller
$view_template = 'reports.profit_loss.index';
}
- return view($view_template, compact('dates', 'income_categories', 'expense_categories', 'compares', 'totals', 'gross'));
+ return view($view_template, compact('dates', 'income_categories', 'expense_categories', 'compares', 'totals', 'gross', 'statuses'));
}
private function setAmount(&$totals, &$compares, $items, $type, $date_field)
diff --git a/app/Http/Controllers/Reports/TaxSummary.php b/app/Http/Controllers/Reports/TaxSummary.php
index 5638c05e6..1907ac90d 100644
--- a/app/Http/Controllers/Reports/TaxSummary.php
+++ b/app/Http/Controllers/Reports/TaxSummary.php
@@ -27,17 +27,12 @@ class TaxSummary extends Controller
$dates = $incomes = $expenses = $totals = [];
$status = request('status');
+ $year = request('year', Date::now()->year);
$t = Tax::enabled()->where('rate', '<>', '0')->pluck('name')->toArray();
$taxes = array_combine($t, $t);
- // Get year
- $year = request('year');
- if (empty($year)) {
- $year = Date::now()->year;
- }
-
// Dates
for ($j = 1; $j <= 12; $j++) {
$dates[$j] = Date::parse($year . '-' . $j)->format('M');
@@ -90,6 +85,12 @@ class TaxSummary extends Controller
break;
}
+ $statuses = collect([
+ 'all' => trans('general.all'),
+ 'paid' => trans('invoices.paid'),
+ 'upcoming' => trans('general.upcoming'),
+ ]);
+
// Check if it's a print or normal request
if (request('print')) {
$view_template = 'reports.tax_summary.print';
@@ -97,13 +98,13 @@ class TaxSummary extends Controller
$view_template = 'reports.tax_summary.index';
}
- return view($view_template, compact('dates', 'taxes', 'incomes', 'expenses', 'totals'));
+ return view($view_template, compact('dates', 'taxes', 'incomes', 'expenses', 'totals', 'statuses'));
}
private function setAmount(&$items, &$totals, $rows, $type, $date_field)
{
foreach ($rows as $row) {
- if ($row['table'] == 'bill_payments' || $row['table'] == 'invoice_payments') {
+ if ($row->getTable() == 'bill_payments' || $row->getTable() == 'invoice_payments') {
$type_row = $row->$type;
$row->category_id = $type_row->category_id;
@@ -126,7 +127,14 @@ class TaxSummary extends Controller
continue;
}
- $amount = $this->convert($row_total->amount, $row->currency_code, $row->currency_rate);
+ if ($date_field == 'paid_at') {
+ $rate = ($row->amount * 100) / $type_row->amount;
+ $row_amount = ($row_total->amount / 100) * $rate;
+ } else {
+ $row_amount = $row_total->amount;
+ }
+
+ $amount = $this->convert($row_amount, $row->currency_code, $row->currency_rate);
$items[$row_total->name][$date]['amount'] += $amount;
diff --git a/app/Http/Controllers/Settings/Categories.php b/app/Http/Controllers/Settings/Categories.php
index 5b856b953..d84baecb9 100644
--- a/app/Http/Controllers/Settings/Categories.php
+++ b/app/Http/Controllers/Settings/Categories.php
@@ -25,7 +25,7 @@ class Categories extends Controller
'income' => trans_choice('general.incomes', 1),
'item' => trans_choice('general.items', 1),
'other' => trans_choice('general.others', 1),
- ])->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), '');
+ ]);
return view('settings.categories.index', compact('categories', 'types', 'transfer_id'));
}
diff --git a/app/Http/Controllers/Settings/Currencies.php b/app/Http/Controllers/Settings/Currencies.php
index f7c51b70c..4620ff2f0 100644
--- a/app/Http/Controllers/Settings/Currencies.php
+++ b/app/Http/Controllers/Settings/Currencies.php
@@ -162,7 +162,7 @@ class Currencies extends Controller
return redirect('settings/currencies');
} else {
- $message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
+ $message = trans('messages.warning.disable_code', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
diff --git a/app/Http/Controllers/Settings/Settings.php b/app/Http/Controllers/Settings/Settings.php
index 59dddca44..2b99b7b96 100644
--- a/app/Http/Controllers/Settings/Settings.php
+++ b/app/Http/Controllers/Settings/Settings.php
@@ -47,7 +47,7 @@ class Settings extends Controller
$currencies = Currency::enabled()->orderBy('name')->pluck('name', 'code');
- $taxes = Tax::enabled()->orderBy('rate')->get()->pluck('title', 'id');
+ $taxes = Tax::enabled()->orderBy('name')->get()->pluck('title', 'id');
$payment_methods = Modules::getPaymentMethods();
@@ -67,6 +67,24 @@ class Settings extends Controller
'space' => trans('settings.localisation.date.space'),
];
+ $item_names = [
+ 'settings.invoice.item' => trans('settings.invoice.item'),
+ 'settings.invoice.product' => trans('settings.invoice.product'),
+ 'settings.invoice.service' => trans('settings.invoice.service'),
+ 'custom' => trans('settings.invoice.custom'),
+ ];
+
+ $price_names = [
+ 'settings.invoice.price' => trans('settings.invoice.price'),
+ 'settings.invoice.rate' => trans('settings.invoice.rate'),
+ 'custom' => trans('settings.invoice.custom'),
+ ];
+
+ $quantity_names = [
+ 'settings.invoice.quantity' => trans('settings.invoice.quantity'),
+ 'custom' => trans('settings.invoice.custom'),
+ ];
+
$email_protocols = [
'mail' => trans('settings.email.php'),
'smtp' => trans('settings.email.smtp.name'),
@@ -88,6 +106,9 @@ class Settings extends Controller
'payment_methods',
'date_formats',
'date_separators',
+ 'item_names',
+ 'price_names',
+ 'quantity_names',
'email_protocols',
'percent_positions'
));
@@ -160,17 +181,17 @@ class Settings extends Controller
protected function oneCompany($key, $value)
{
switch ($key) {
+ case 'company_name':
+ Installer::updateEnv(['MAIL_FROM_NAME' => '"' . $value . '"']);
+ break;
+ case 'company_email':
+ Installer::updateEnv(['MAIL_FROM_ADDRESS' => $value]);
+ break;
case 'default_locale':
- // Change default locale
- Installer::updateEnv([
- 'APP_LOCALE' => $value
- ]);
+ Installer::updateEnv(['APP_LOCALE' => $value]);
break;
case 'session_handler':
- // Change session handler
- Installer::updateEnv([
- 'SESSION_DRIVER' => $value
- ]);
+ Installer::updateEnv(['SESSION_DRIVER' => $value]);
break;
}
}
diff --git a/app/Http/Controllers/Settings/Taxes.php b/app/Http/Controllers/Settings/Taxes.php
index 89cfa594c..bf296fdd8 100644
--- a/app/Http/Controllers/Settings/Taxes.php
+++ b/app/Http/Controllers/Settings/Taxes.php
@@ -18,7 +18,13 @@ class Taxes extends Controller
{
$taxes = Tax::collect();
- return view('settings.taxes.index', compact('taxes', 'rates'));
+ $types = [
+ 'normal' => trans('taxes.normal'),
+ 'inclusive' => trans('taxes.inclusive'),
+ 'compound' => trans('taxes.compound'),
+ ];
+
+ return view('settings.taxes.index', compact('taxes', 'types'));
}
/**
@@ -38,7 +44,13 @@ class Taxes extends Controller
*/
public function create()
{
- return view('settings.taxes.create');
+ $types = [
+ 'normal' => trans('taxes.normal'),
+ 'inclusive' => trans('taxes.inclusive'),
+ 'compound' => trans('taxes.compound'),
+ ];
+
+ return view('settings.taxes.create', compact('types'));
}
/**
@@ -68,7 +80,13 @@ class Taxes extends Controller
*/
public function edit(Tax $tax)
{
- return view('settings.taxes.edit', compact('tax'));
+ $types = [
+ 'normal' => trans('taxes.normal'),
+ 'inclusive' => trans('taxes.inclusive'),
+ 'compound' => trans('taxes.compound'),
+ ];
+
+ return view('settings.taxes.edit', compact('tax', 'types'));
}
/**
diff --git a/app/Http/Controllers/Wizard/Companies.php b/app/Http/Controllers/Wizard/Companies.php
new file mode 100644
index 000000000..b4f34ee11
--- /dev/null
+++ b/app/Http/Controllers/Wizard/Companies.php
@@ -0,0 +1,81 @@
+setSettings();
+
+ return view('wizard.companies.edit', compact('company'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param Company $company
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function update(Request $request)
+ {
+ // Company
+ $company = Company::find(session('company_id'));
+
+ $fields = $request->all();
+
+ $skip_keys = ['company_id', '_method', '_token'];
+ $file_keys = ['company_logo', 'invoice_logo'];
+
+ foreach ($fields as $key => $value) {
+ // Don't process unwanted keys
+ if (in_array($key, $skip_keys)) {
+ continue;
+ }
+
+ // Process file uploads
+ if (in_array($key, $file_keys)) {
+ // Upload attachment
+ if ($request->file($key)) {
+ $media = $this->getMedia($request->file($key), 'settings');
+
+ $company->attachMedia($media, $key);
+
+ $value = $media->id;
+ }
+
+ // Prevent reset
+ if (empty($value)) {
+ continue;
+ }
+ }
+
+ setting()->set('general.' . $key, $value);
+ }
+
+ // Save all settings
+ setting()->save();
+
+ return redirect('wizard/currencies');
+ }
+}
diff --git a/app/Http/Controllers/Wizard/Currencies.php b/app/Http/Controllers/Wizard/Currencies.php
new file mode 100644
index 000000000..8ae9e6591
--- /dev/null
+++ b/app/Http/Controllers/Wizard/Currencies.php
@@ -0,0 +1,311 @@
+toArray();
+
+ // Prepare codes
+ $codes = array();
+ $currencies = MoneyCurrency::getCurrencies();
+ foreach ($currencies as $key => $item) {
+ // Don't show if already available
+ if (in_array($key, $current)) {
+ continue;
+ }
+
+ $codes[$key] = $key;
+ }
+
+ $html = view('wizard.currencies.create', compact('codes'))->render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => 'null',
+ 'html' => $html,
+ ]);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function store(Request $request)
+ {
+ // Force the rate to be 1 for default currency
+ if ($request['default_currency']) {
+ $request['rate'] = '1';
+ }
+
+ $currency = Currency::create($request->all());
+
+ // Update default currency setting
+ if ($request['default_currency']) {
+ setting()->set('general.default_currency', $request['code']);
+ setting()->save();
+ }
+
+ $message = trans('messages.success.added', ['type' => trans_choice('general.currencies', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param Currency $currency
+ *
+ * @return Response
+ */
+ public function edit(Currency $currency)
+ {
+ if (setting('general.wizard', false)) {
+ return redirect('/');
+ }
+
+ // Get current currencies
+ $current = Currency::pluck('code')->toArray();
+
+ // Prepare codes
+ $codes = array();
+ $currencies = MoneyCurrency::getCurrencies();
+ foreach ($currencies as $key => $item) {
+ // Don't show if already available
+ if (($key != $currency->code) && in_array($key, $current)) {
+ continue;
+ }
+
+ $codes[$key] = $key;
+ }
+
+ $item = $currency;
+
+ $html = view('wizard.currencies.edit', compact('item', 'codes'))->render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => 'null',
+ 'html' => $html,
+ ]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param Currency $currency
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function update(Currency $currency, Request $request)
+ {
+ // Check if we can disable or change the code
+ if (!$request['enabled'] || ($currency->code != $request['code'])) {
+ $relationships = $this->countRelationships($currency, [
+ 'accounts' => 'accounts',
+ 'customers' => 'customers',
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
+
+ if ($currency->code == setting('general.default_currency')) {
+ $relationships[] = strtolower(trans_choice('general.companies', 1));
+ }
+ }
+
+ if (empty($relationships)) {
+ // Force the rate to be 1 for default currency
+ if ($request['default_currency']) {
+ $request['rate'] = '1';
+ }
+
+ $currency->update($request->all());
+
+ // Update default currency setting
+ if ($request['default_currency']) {
+ setting()->set('general.default_currency', $request['code']);
+ setting()->save();
+ }
+
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.currencies', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ }
+ }
+
+ /**
+ * Enable the specified resource.
+ *
+ * @param Currency $currency
+ *
+ * @return Response
+ */
+ public function enable(Currency $currency)
+ {
+ $currency->enabled = 1;
+ $currency->save();
+
+ $message = trans('messages.success.enabled', ['type' => trans_choice('general.currencies', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ }
+
+ /**
+ * Disable the specified resource.
+ *
+ * @param Currency $currency
+ *
+ * @return Response
+ */
+ public function disable(Currency $currency)
+ {
+ $relationships = $this->countRelationships($currency, [
+ 'accounts' => 'accounts',
+ 'customers' => 'customers',
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
+
+ if ($currency->code == setting('general.default_currency')) {
+ $relationships[] = strtolower(trans_choice('general.companies', 1));
+ }
+
+ if (empty($relationships)) {
+ $currency->enabled = 0;
+ $currency->save();
+
+ $message = trans('messages.success.disabled', ['type' => trans_choice('general.currencies', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => false,
+ 'error' => true,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ }
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param Currency $currency
+ *
+ * @return Response
+ */
+ public function destroy(Currency $currency)
+ {
+ $relationships = $this->countRelationships($currency, [
+ 'accounts' => 'accounts',
+ 'customers' => 'customers',
+ 'invoices' => 'invoices',
+ 'revenues' => 'revenues',
+ 'bills' => 'bills',
+ 'payments' => 'payments',
+ ]);
+
+ if ($currency->code == setting('general.default_currency')) {
+ $relationships[] = strtolower(trans_choice('general.companies', 1));
+ }
+
+ if (empty($relationships)) {
+ $currency->delete();
+
+ $message = trans('messages.success.deleted', ['type' => trans_choice('general.currencies', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ } else {
+ $message = trans('messages.warning.deleted', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => false,
+ 'error' => true,
+ 'message' => $message,
+ 'data' => $currency,
+ ]);
+ }
+ }
+}
diff --git a/app/Http/Controllers/Wizard/Finish.php b/app/Http/Controllers/Wizard/Finish.php
new file mode 100644
index 000000000..25a9727fb
--- /dev/null
+++ b/app/Http/Controllers/Wizard/Finish.php
@@ -0,0 +1,39 @@
+set('general.wizard', true);
+
+ // Save all settings
+ setting()->save();
+
+ $data = [
+ 'query' => [
+ 'limit' => 4
+ ]
+ ];
+
+ $modules = $this->getFeaturedModules($data);
+
+ return view('wizard.finish.index', compact('modules'));
+ }
+}
diff --git a/app/Http/Controllers/Wizard/Taxes.php b/app/Http/Controllers/Wizard/Taxes.php
new file mode 100644
index 000000000..c1bbecc6b
--- /dev/null
+++ b/app/Http/Controllers/Wizard/Taxes.php
@@ -0,0 +1,231 @@
+render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => 'null',
+ 'html' => $html,
+ ]);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function store(Request $request)
+ {
+ $tax = Tax::create($request->all());
+
+ $message = trans('messages.success.added', ['type' => trans_choice('general.tax_rates', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param Tax $tax
+ *
+ * @return Response
+ */
+ public function edit(Tax $tax)
+ {
+ if (setting(setting('general.wizard', false))) {
+ return redirect('/');
+ }
+
+ $item = $tax;
+
+ $html = view('wizard.taxes.edit', compact('item'))->render();
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => 'null',
+ 'html' => $html,
+ ]);
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param Tax $tax
+ * @param Request $request
+ *
+ * @return Response
+ */
+ public function update(Tax $tax, Request $request)
+ {
+ $relationships = $this->countRelationships($tax, [
+ 'items' => 'items',
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
+
+ if (empty($relationships) || $request['enabled']) {
+ $tax->update($request->all());
+
+ $message = trans('messages.success.updated', ['type' => trans_choice('general.tax_rates', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ }
+ }
+
+ /**
+ * Enable the specified resource.
+ *
+ * @param Tax $tax
+ *
+ * @return Response
+ */
+ public function enable(Tax $tax)
+ {
+ $tax->enabled = 1;
+ $tax->save();
+
+ $message = trans('messages.success.enabled', ['type' => trans_choice('general.tax_rates', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ }
+
+ /**
+ * Disable the specified resource.
+ *
+ * @param Tax $tax
+ *
+ * @return Response
+ */
+ public function disable(Tax $tax)
+ {
+ $relationships = $this->countRelationships($tax, [
+ 'items' => 'items',
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
+
+ if (empty($relationships)) {
+ $tax->enabled = 0;
+ $tax->save();
+
+ $message = trans('messages.success.disabled', ['type' => trans_choice('general.tax_rates', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ } else {
+ $message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => false,
+ 'error' => true,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ }
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param Tax $tax
+ *
+ * @return Response
+ */
+ public function destroy(Tax $tax)
+ {
+ $relationships = $this->countRelationships($tax, [
+ 'items' => 'items',
+ 'invoice_items' => 'invoices',
+ 'bill_items' => 'bills',
+ ]);
+
+ if (empty($relationships)) {
+ $tax->delete();
+
+ $message = trans('messages.success.deleted', ['type' => trans_choice('general.taxes', 1)]);
+
+ return response()->json([
+ 'success' => true,
+ 'error' => false,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ } else {
+ $message = trans('messages.warning.deleted', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
+
+ return response()->json([
+ 'success' => false,
+ 'error' => true,
+ 'message' => $message,
+ 'data' => $tax,
+ ]);
+ }
+ }
+}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 7ce07c8a5..8f21fcc23 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -41,6 +41,13 @@ class Kernel extends HttpKernel
'company.currencies',
],
+ 'wizard' => [
+ 'web',
+ 'language',
+ 'auth',
+ 'permission:read-admin-panel',
+ ],
+
'admin' => [
'web',
'language',
diff --git a/app/Http/Middleware/AdminMenu.php b/app/Http/Middleware/AdminMenu.php
index 817204b3c..7bbbce09a 100644
--- a/app/Http/Middleware/AdminMenu.php
+++ b/app/Http/Middleware/AdminMenu.php
@@ -70,7 +70,7 @@ class AdminMenu
]);
}
- // Expences
+ // Expenses
if ($user->can(['read-expenses-bills', 'read-expenses-payments', 'read-expenses-vendors'])) {
$menu->dropdown(trans_choice('general.expenses', 2), function ($sub) use($user, $attr) {
if ($user->can('read-expenses-bills')) {
@@ -91,7 +91,7 @@ class AdminMenu
}
// Banking
- if ($user->can(['read-banking-accounts', 'read-banking-transfers', 'read-banking-transactions'])) {
+ if ($user->can(['read-banking-accounts', 'read-banking-transfers', 'read-banking-transactions', 'read-banking-reconciliations'])) {
$menu->dropdown(trans('general.banking'), function ($sub) use($user, $attr) {
if ($user->can('read-banking-accounts')) {
$sub->url('banking/accounts', trans_choice('general.accounts', 2), 1, $attr);
@@ -104,6 +104,10 @@ class AdminMenu
if ($user->can('read-banking-transactions')) {
$sub->url('banking/transactions', trans_choice('general.transactions', 2), 3, $attr);
}
+
+ if ($user->can('read-banking-reconciliations')) {
+ $sub->url('banking/reconciliations', trans_choice('general.reconciliations', 2), 4, $attr);
+ }
}, 5, [
'title' => trans('general.banking'),
'icon' => 'fa fa-university',
@@ -204,4 +208,4 @@ class AdminMenu
return $next($request);
}
-}
\ No newline at end of file
+}
diff --git a/app/Http/Middleware/DateFormat.php b/app/Http/Middleware/DateFormat.php
index b308637f5..df0676bd6 100644
--- a/app/Http/Middleware/DateFormat.php
+++ b/app/Http/Middleware/DateFormat.php
@@ -17,7 +17,7 @@ class DateFormat
public function handle($request, Closure $next)
{
if (($request->method() == 'POST') || ($request->method() == 'PATCH')) {
- $fields = ['paid_at', 'due_at', 'billed_at', 'invoiced_at'];
+ $fields = ['paid_at', 'due_at', 'billed_at', 'invoiced_at', 'started_at', 'ended_at'];
foreach ($fields as $field) {
$date = $request->get($field);
diff --git a/app/Http/Requests/Auth/Permission.php b/app/Http/Requests/Auth/Permission.php
index 1db6dee40..4f8630928 100644
--- a/app/Http/Requests/Auth/Permission.php
+++ b/app/Http/Requests/Auth/Permission.php
@@ -25,7 +25,7 @@ class Permission extends FormRequest
{
// Check if store or update
if ($this->getMethod() == 'PATCH') {
- $id = $this->role->getAttribute('id');
+ $id = $this->permission->getAttribute('id');
} else {
$id = null;
}
diff --git a/app/Http/Requests/Banking/Reconciliation.php b/app/Http/Requests/Banking/Reconciliation.php
new file mode 100644
index 000000000..dd37377a1
--- /dev/null
+++ b/app/Http/Requests/Banking/Reconciliation.php
@@ -0,0 +1,33 @@
+ 'required|integer',
+ 'started_at' => 'required|date_format:Y-m-d H:i:s',
+ 'ended_at' => 'required|date_format:Y-m-d H:i:s',
+ 'closing_balance' => 'required',
+ ];
+ }
+}
diff --git a/app/Http/Requests/Common/Notification.php b/app/Http/Requests/Common/Notification.php
new file mode 100644
index 000000000..3dedd3db8
--- /dev/null
+++ b/app/Http/Requests/Common/Notification.php
@@ -0,0 +1,31 @@
+ 'required|string',
+ 'id' => 'required|integer',
+ ];
+ }
+}
diff --git a/app/Http/Requests/Setting/Tax.php b/app/Http/Requests/Setting/Tax.php
index 15645d2bc..756e8764b 100644
--- a/app/Http/Requests/Setting/Tax.php
+++ b/app/Http/Requests/Setting/Tax.php
@@ -26,6 +26,8 @@ class Tax extends Request
return [
'name' => 'required|string',
'rate' => 'required|min:0|max:100',
+ 'type' => 'required|string',
+ 'enabled' => 'integer|boolean',
];
}
}
diff --git a/app/Http/Requests/Wizard/Company.php b/app/Http/Requests/Wizard/Company.php
new file mode 100644
index 000000000..114f6877f
--- /dev/null
+++ b/app/Http/Requests/Wizard/Company.php
@@ -0,0 +1,30 @@
+ 'mimes:' . setting('general.file_types') . '|between:0,' . setting('general.file_size') * 1024,
+ ];
+ }
+}
diff --git a/app/Http/ViewComposers/All.php b/app/Http/ViewComposers/All.php
index afa649aba..86093ec29 100644
--- a/app/Http/ViewComposers/All.php
+++ b/app/Http/ViewComposers/All.php
@@ -18,9 +18,16 @@ class All
public function compose(View $view)
{
// Make sure it's installed
- if (env('APP_INSTALLED')) {
- // Share date format
- $view->with(['date_format' => $this->getCompanyDateFormat()]);
+ if (!env('APP_INSTALLED') && (env('APP_ENV') !== 'testing')) {
+ return;
}
+
+ // Share user logged in
+ $auth_user = auth()->user();
+
+ // Share date format
+ $date_format = $this->getCompanyDateFormat();
+
+ $view->with(['auth_user' => $auth_user, 'date_format' => $date_format]);
}
}
diff --git a/app/Http/ViewComposers/Header.php b/app/Http/ViewComposers/Header.php
index 2a6d9cb0a..1be216636 100644
--- a/app/Http/ViewComposers/Header.php
+++ b/app/Http/ViewComposers/Header.php
@@ -24,6 +24,7 @@ class Header
$bills = [];
$invoices = [];
$items = [];
+ $items_reminder = [];
$notifications = 0;
$company = null;
@@ -55,6 +56,10 @@ class Header
$items[$data['item_id']] = $data['name'];
$notifications++;
break;
+ case 'App\Notifications\Common\ItemReminder':
+ $items_reminder[$data['item_id']] = $data['name'];
+ $notifications++;
+ break;
}
}
@@ -68,6 +73,7 @@ class Header
'bills' => $bills,
'invoices' => $invoices,
'items' => $items,
+ 'items_reminder' => $items_reminder,
'company' => $company,
'updates' => $updates,
]);
diff --git a/app/Http/ViewComposers/InvoiceText.php b/app/Http/ViewComposers/InvoiceText.php
new file mode 100644
index 000000000..3907aa5c3
--- /dev/null
+++ b/app/Http/ViewComposers/InvoiceText.php
@@ -0,0 +1,45 @@
+with(['text_override' => $text_override]);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Http/ViewComposers/Menu.php b/app/Http/ViewComposers/Menu.php
index 7c8dd8d75..e4de0b5cd 100644
--- a/app/Http/ViewComposers/Menu.php
+++ b/app/Http/ViewComposers/Menu.php
@@ -3,7 +3,6 @@
namespace App\Http\ViewComposers;
use Illuminate\View\View;
-use anlutro\LaravelSettings\Facade as Settingg;
class Menu
{
diff --git a/app/Http/ViewComposers/Notifications.php b/app/Http/ViewComposers/Notifications.php
new file mode 100644
index 000000000..1d8383894
--- /dev/null
+++ b/app/Http/ViewComposers/Notifications.php
@@ -0,0 +1,52 @@
+runningInConsole() || !env('APP_INSTALLED')) {
+ return;
+ }
+
+ $path = Route::current()->uri();
+
+ if (empty($path)) {
+ return;
+ }
+
+ $notifications = $this->getNotifications($path);
+
+ if (empty($notifications)) {
+ return;
+ }
+
+ // Push to a stack
+ foreach ($notifications as $notification) {
+ $setting = 'notifications.'. $notification->path . '.' . $notification->id . '.status';
+
+ $path = str_replace('/', '#', $notification->path);
+
+ $message = str_replace('#path#', $path, $notification->message);
+ $message = str_replace('#token#', csrf_token(), $message);
+
+ if (setting($setting, 1)) {
+ $view->getFactory()->startPush('content_content_start', $message);
+ }
+ }
+ }
+}
diff --git a/app/Jobs/Expense/CreateBill.php b/app/Jobs/Expense/CreateBill.php
new file mode 100644
index 000000000..9c67ee186
--- /dev/null
+++ b/app/Jobs/Expense/CreateBill.php
@@ -0,0 +1,191 @@
+request = $request;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return Invoice
+ */
+ public function handle()
+ {
+ $bill = Bill::create($this->request->input());
+
+ // Upload attachment
+ if ($this->request->file('attachment')) {
+ $media = $this->getMedia($this->request->file('attachment'), 'bills');
+
+ $bill->attachMedia($media, 'attachment');
+ }
+
+ $taxes = [];
+
+ $tax_total = 0;
+ $sub_total = 0;
+ $discount_total = 0;
+ $discount = $this->request['discount'];
+
+ if ($this->request['item']) {
+ foreach ($this->request['item'] as $item) {
+ $bill_item = dispatch(new CreateBillItem($item, $bill, $discount));
+
+ // Calculate totals
+ $tax_total += $bill_item->tax;
+ $sub_total += $bill_item->total;
+
+ // Set taxes
+ if ($bill_item->item_taxes) {
+ foreach ($bill_item->item_taxes as $item_tax) {
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+ }
+ }
+
+ $s_total = $sub_total;
+
+ // Apply discount to total
+ if ($discount) {
+ $s_discount = $s_total * ($discount / 100);
+ $discount_total += $s_discount;
+ $s_total = $s_total - $s_discount;
+ }
+
+ $amount = $s_total + $tax_total;
+
+ $this->request['amount'] = money($amount, $this->request['currency_code'])->getAmount();
+
+ $bill->update($this->request->input());
+
+ // Add bill totals
+ $this->addTotals($bill, $this->request, $taxes, $sub_total, $discount_total, $tax_total);
+
+ // Add bill history
+ BillHistory::create([
+ 'company_id' => session('company_id'),
+ 'bill_id' => $bill->id,
+ 'status_code' => 'draft',
+ 'notify' => 0,
+ 'description' => trans('messages.success.added', ['type' => $bill->bill_number]),
+ ]);
+
+ // Recurring
+ $bill->createRecurring();
+
+ // Fire the event to make it extendible
+ event(new BillCreated($bill));
+
+ return $bill;
+ }
+
+ protected function addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total)
+ {
+ // Check if totals are in request, i.e. api
+ if (!empty($request['totals'])) {
+ $sort_order = 1;
+
+ foreach ($request['totals'] as $total) {
+ $total['bill_id'] = $bill->id;
+
+ if (empty($total['sort_order'])) {
+ $total['sort_order'] = $sort_order;
+ }
+
+ BillTotal::create($total);
+
+ $sort_order++;
+ }
+
+ return;
+ }
+
+ $sort_order = 1;
+
+ // Added bill sub total
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'sub_total',
+ 'name' => 'bills.sub_total',
+ 'amount' => $sub_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+
+ // Added bill discount
+ if ($discount_total) {
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'discount',
+ 'name' => 'bills.discount',
+ 'amount' => $discount_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ // This is for total
+ $sub_total = $sub_total - $discount_total;
+
+ $sort_order++;
+ }
+
+ // Added bill taxes
+ if (isset($taxes)) {
+ foreach ($taxes as $tax) {
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'tax',
+ 'name' => $tax['name'],
+ 'amount' => $tax['amount'],
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+ }
+ }
+
+ // Added bill total
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'total',
+ 'name' => 'bills.total',
+ 'amount' => $sub_total + $tax_total,
+ 'sort_order' => $sort_order,
+ ]);
+ }
+}
diff --git a/app/Jobs/Expense/CreateBillItem.php b/app/Jobs/Expense/CreateBillItem.php
new file mode 100644
index 000000000..1826fa2cc
--- /dev/null
+++ b/app/Jobs/Expense/CreateBillItem.php
@@ -0,0 +1,214 @@
+data = $data;
+ $this->bill = $bill;
+ $this->discount = $discount;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return BillItem
+ */
+ public function handle()
+ {
+ $item_sku = '';
+
+ $item_id = !empty($this->data['item_id']) ? $this->data['item_id'] : 0;
+ $item_amount = (double) $this->data['price'] * (double) $this->data['quantity'];
+
+ $item_discount_amount = $item_amount;
+
+ // Apply discount to tax
+ if ($this->discount) {
+ $item_discount_amount = $item_amount - ($item_amount * ($this->discount / 100));
+ }
+
+ if (!empty($item_id)) {
+ $item_object = Item::find($item_id);
+
+ $this->data['name'] = $item_object->name;
+ $item_sku = $item_object->sku;
+
+ // Increase stock (item bought)
+ $item_object->quantity += (double) $this->data['quantity'];
+ $item_object->save();
+ } elseif (!empty($this->data['sku'])) {
+ $item_sku = $this->data['sku'];
+ }
+
+ $tax_amount = 0;
+ $item_taxes = [];
+ $item_tax_total = 0;
+
+ if (!empty($this->data['tax_id'])) {
+ $inclusives = $compounds = $taxes = [];
+
+ foreach ((array) $this->data['tax_id'] as $tax_id) {
+ $tax = Tax::find($tax_id);
+
+ switch ($tax->type) {
+ case 'included':
+ $inclusives[] = $tax;
+ break;
+ case 'compound':
+ $compounds[] = $tax;
+ break;
+ case 'normal':
+ default:
+ $taxes[] = $tax;
+
+ $tax_amount = ($item_discount_amount / 100) * $tax->rate;
+
+ $item_taxes[] = [
+ 'company_id' => $this->bill->company_id,
+ 'bill_id' => $this->bill->id,
+ 'tax_id' => $tax_id,
+ 'name' => $tax->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_tax_total += $tax_amount;
+ break;
+ }
+ }
+
+ if ($inclusives) {
+ if ($this->discount) {
+ $item_tax_total = 0;
+
+ if ($taxes) {
+ foreach ($taxes as $tax) {
+ $item_tax_amount = ($item_amount / 100) * $tax->rate;
+
+ $item_tax_total += $item_tax_amount;
+ }
+ }
+
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_amount + $item_tax_total;
+
+ $item_tax_total = $item_sub_and_tax_total - (($item_sub_and_tax_total * (100 - $inclusive->rate)) / 100);
+
+ $item_sub_total = $item_sub_and_tax_total - $item_tax_total;
+
+ $item_taxes[] = [
+ 'company_id' => $this->bill->company_id,
+ 'bill_id' => $this->bill->id,
+ 'tax_id' => $inclusive->id,
+ 'name' => $inclusive->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_discount_amount = $item_sub_total - ($item_sub_total * ($this->discount / 100));
+ }
+ } else {
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_discount_amount + $item_tax_total;
+
+ $item_tax_total = $tax_amount = $item_sub_and_tax_total - ($item_sub_and_tax_total / (1 + ($inclusive->rate / 100)));
+
+ $item_taxes[] = [
+ 'company_id' => $this->bill->company_id,
+ 'bill_id' => $this->bill->id,
+ 'tax_id' => $inclusive->id,
+ 'name' => $inclusive->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_amount = $item_sub_and_tax_total - $item_tax_total;
+ }
+ }
+ }
+
+ if ($compounds) {
+ foreach ($compounds as $compound) {
+ $tax_amount = (($item_discount_amount + $item_tax_total) / 100) * $compound->rate;
+
+ $item_tax_total += $tax_amount;
+
+ $item_taxes[] = [
+ 'company_id' => $this->bill->company_id,
+ 'bill_id' => $this->bill->id,
+ 'tax_id' => $compound->id,
+ 'name' => $compound->name,
+ 'amount' => $tax_amount,
+ ];
+ }
+ }
+ }
+
+ $bill_item = BillItem::create([
+ 'company_id' => $this->bill->company_id,
+ 'bill_id' => $this->bill->id,
+ 'item_id' => $item_id,
+ 'name' => str_limit($this->data['name'], 180, ''),
+ 'sku' => $item_sku,
+ 'quantity' => (double) $this->data['quantity'],
+ 'price' => (double) $this->data['price'],
+ 'tax' => $item_tax_total,
+ 'tax_id' => 0,
+ 'total' => $item_amount,
+ ]);
+
+ $bill_item->item_taxes = false;
+ $bill_item->inclusives = false;
+ $bill_item->compounds = false;
+
+ // set item_taxes for
+ if (!empty($this->data['tax_id'])) {
+ $bill_item->item_taxes = $item_taxes;
+ $bill_item->inclusives = $inclusives;
+ $bill_item->compounds = $compounds;
+ }
+
+ if ($item_taxes) {
+ foreach ($item_taxes as $item_tax) {
+ $item_tax['bill_item_id'] = $bill_item->id;
+
+ BillItemTax::create($item_tax);
+
+ // Set taxes
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+
+ return $bill_item;
+ }
+}
diff --git a/app/Jobs/Expense/CreateBillPayment.php b/app/Jobs/Expense/CreateBillPayment.php
new file mode 100644
index 000000000..41770139d
--- /dev/null
+++ b/app/Jobs/Expense/CreateBillPayment.php
@@ -0,0 +1,52 @@
+request = $request;
+ $this->bill = $bill;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return BillPayment
+ */
+ public function handle()
+ {
+ $bill_payment = BillPayment::create($this->request->input());
+
+ $desc_amount = money((float) $bill_payment->amount, (string) $bill_payment->currency_code, true)->format();
+
+ $history_data = [
+ 'company_id' => $bill_payment->company_id,
+ 'bill_id' => $bill_payment->bill_id,
+ 'status_code' => $this->bill->bill_status_code,
+ 'notify' => '0',
+ 'description' => $desc_amount . ' ' . trans_choice('general.payments', 1),
+ ];
+
+ BillHistory::create($history_data);
+
+ return $bill_payment;
+ }
+}
diff --git a/app/Jobs/Expense/UpdateBill.php b/app/Jobs/Expense/UpdateBill.php
new file mode 100644
index 000000000..7abf8d362
--- /dev/null
+++ b/app/Jobs/Expense/UpdateBill.php
@@ -0,0 +1,232 @@
+bill = $bill;
+ $this->request = $request;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return Bill
+ */
+ public function handle()
+ {
+ // Upload attachment
+ if ($this->request->file('attachment')) {
+ $media = $this->getMedia($this->request->file('attachment'), 'bills');
+
+ $this->bill->attachMedia($media, 'attachment');
+ }
+
+ $taxes = [];
+
+ $tax_total = 0;
+ $sub_total = 0;
+ $discount_total = 0;
+ $discount = $this->request['discount'];
+
+ if ($this->request['item']) {
+ $items = $this->bill->items;
+
+ if ($items) {
+ foreach ($items as $item) {
+ if (empty($item->item_id)) {
+ continue;
+ }
+
+ $item_object = Item::find($item->item_id);
+
+ // Decrease stock
+ $item_object->quantity -= (double) $item->quantity;
+ $item_object->save();
+ }
+ }
+
+ $this->deleteRelationships($this->bill, 'items');
+
+ foreach ($this->request['item'] as $item) {
+ $bill_item = dispatch(new CreateBillItem($item, $this->bill, $discount));
+
+ // Calculate totals
+ $tax_total += $bill_item->tax;
+ $sub_total += $bill_item->total;
+
+ // Set taxes
+ if ($bill_item->item_taxes) {
+ foreach ($bill_item->item_taxes as $item_tax) {
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+ }
+ }
+
+ $s_total = $sub_total;
+
+ // Apply discount to total
+ if ($discount) {
+ $s_discount = $s_total * ($discount / 100);
+ $discount_total += $s_discount;
+ $s_total = $s_total - $s_discount;
+ }
+
+ $amount = $s_total + $tax_total;
+
+ $this->request['amount'] = money($amount, $this->request['currency_code'])->getAmount();
+
+ $this->bill->update($this->request->input());
+
+ // Delete previous bill totals
+ $this->deleteRelationships($this->bill, 'totals');
+
+ // Add bill totals
+ $this->addTotals($this->bill, $this->request, $taxes, $sub_total, $discount_total, $tax_total);
+
+ // Recurring
+ $this->bill->updateRecurring();
+
+ // Fire the event to make it extensible
+ event(new BillUpdated($this->bill));
+
+ return $this->bill;
+ }
+
+ protected function addTotals($bill, $request, $taxes, $sub_total, $discount_total, $tax_total)
+ {
+ // Check if totals are in request, i.e. api
+ if (!empty($request['totals'])) {
+ $sort_order = 1;
+
+ foreach ($request['totals'] as $total) {
+ $total['bill_id'] = $bill->id;
+
+ if (empty($total['sort_order'])) {
+ $total['sort_order'] = $sort_order;
+ }
+
+ BillTotal::create($total);
+
+ $sort_order++;
+ }
+
+ return;
+ }
+
+ $sort_order = 1;
+
+ // Added bill sub total
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'sub_total',
+ 'name' => 'bills.sub_total',
+ 'amount' => $sub_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+
+ // Added bill discount
+ if ($discount_total) {
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'discount',
+ 'name' => 'bills.discount',
+ 'amount' => $discount_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ // This is for total
+ $sub_total = $sub_total - $discount_total;
+
+ $sort_order++;
+ }
+
+ // Added bill taxes
+ if (isset($taxes)) {
+ foreach ($taxes as $tax) {
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'tax',
+ 'name' => $tax['name'],
+ 'amount' => $tax['amount'],
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+ }
+ }
+
+ // Added bill total
+ BillTotal::create([
+ 'company_id' => $request['company_id'],
+ 'bill_id' => $bill->id,
+ 'code' => 'total',
+ 'name' => 'bills.total',
+ 'amount' => $sub_total + $tax_total,
+ 'sort_order' => $sort_order,
+ ]);
+ }
+
+ /**
+ * Mass delete relationships with events being fired.
+ *
+ * @param $model
+ * @param $relationships
+ *
+ * @return void
+ */
+ public function deleteRelationships($model, $relationships)
+ {
+ foreach ((array) $relationships as $relationship) {
+ if (empty($model->$relationship)) {
+ continue;
+ }
+
+ $items = $model->$relationship->all();
+
+ if ($items instanceof Collection) {
+ $items = $items->all();
+ }
+
+ foreach ((array) $items as $item) {
+ $item->delete();
+ }
+ }
+ }
+}
diff --git a/app/Jobs/Income/CreateInvoice.php b/app/Jobs/Income/CreateInvoice.php
new file mode 100644
index 000000000..e739a25ac
--- /dev/null
+++ b/app/Jobs/Income/CreateInvoice.php
@@ -0,0 +1,195 @@
+request = $request;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return Invoice
+ */
+ public function handle()
+ {
+ $invoice = Invoice::create($this->request->input());
+
+ // Upload attachment
+ if ($this->request->file('attachment')) {
+ $media = $this->getMedia($this->request->file('attachment'), 'invoices');
+
+ $invoice->attachMedia($media, 'attachment');
+ }
+
+ $taxes = [];
+
+ $tax_total = 0;
+ $sub_total = 0;
+ $discount_total = 0;
+ $discount = $this->request['discount'];
+
+ if ($this->request['item']) {
+ foreach ($this->request['item'] as $item) {
+ $invoice_item = dispatch(new CreateInvoiceItem($item, $invoice, $discount));
+
+ // Calculate totals
+ $tax_total += $invoice_item->tax;
+ $sub_total += $invoice_item->total;
+
+ // Set taxes
+ if ($invoice_item->item_taxes) {
+ foreach ($invoice_item->item_taxes as $item_tax) {
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+ }
+ }
+
+ $s_total = $sub_total;
+
+ // Apply discount to total
+ if ($discount) {
+ $s_discount = $s_total * ($discount / 100);
+ $discount_total += $s_discount;
+ $s_total = $s_total - $s_discount;
+ }
+
+ $amount = $s_total + $tax_total;
+
+ $this->request['amount'] = money($amount, $this->request['currency_code'])->getAmount();
+
+ $invoice->update($this->request->input());
+
+ // Add invoice totals
+ $this->addTotals($invoice, $this->request, $taxes, $sub_total, $discount_total, $tax_total);
+
+ // Add invoice history
+ InvoiceHistory::create([
+ 'company_id' => session('company_id'),
+ 'invoice_id' => $invoice->id,
+ 'status_code' => 'draft',
+ 'notify' => 0,
+ 'description' => trans('messages.success.added', ['type' => $invoice->invoice_number]),
+ ]);
+
+ // Update next invoice number
+ $this->increaseNextInvoiceNumber();
+
+ // Recurring
+ $invoice->createRecurring();
+
+ // Fire the event to make it extensible
+ event(new InvoiceCreated($invoice));
+
+ return $invoice;
+ }
+
+ protected function addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total)
+ {
+ // Check if totals are in request, i.e. api
+ if (!empty($request['totals'])) {
+ $sort_order = 1;
+
+ foreach ($request['totals'] as $total) {
+ $total['invoice_id'] = $invoice->id;
+
+ if (empty($total['sort_order'])) {
+ $total['sort_order'] = $sort_order;
+ }
+
+ InvoiceTotal::create($total);
+
+ $sort_order++;
+ }
+
+ return;
+ }
+
+ $sort_order = 1;
+
+ // Added invoice sub total
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'sub_total',
+ 'name' => 'invoices.sub_total',
+ 'amount' => $sub_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+
+ // Added invoice discount
+ if ($discount_total) {
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'discount',
+ 'name' => 'invoices.discount',
+ 'amount' => $discount_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ // This is for total
+ $sub_total = $sub_total - $discount_total;
+
+ $sort_order++;
+ }
+
+ // Added invoice taxes
+ if (isset($taxes)) {
+ foreach ($taxes as $tax) {
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'tax',
+ 'name' => $tax['name'],
+ 'amount' => $tax['amount'],
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+ }
+ }
+
+ // Added invoice total
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'total',
+ 'name' => 'invoices.total',
+ 'amount' => $sub_total + $tax_total,
+ 'sort_order' => $sort_order,
+ ]);
+ }
+}
diff --git a/app/Jobs/Income/CreateInvoiceItem.php b/app/Jobs/Income/CreateInvoiceItem.php
new file mode 100644
index 000000000..6e6575dff
--- /dev/null
+++ b/app/Jobs/Income/CreateInvoiceItem.php
@@ -0,0 +1,241 @@
+data = $data;
+ $this->invoice = $invoice;
+ $this->discount = $discount;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return InvoiceItem
+ */
+ public function handle()
+ {
+ $item_sku = '';
+
+ $item_id = !empty($this->data['item_id']) ? $this->data['item_id'] : 0;
+ $item_amount = (double) $this->data['price'] * (double) $this->data['quantity'];
+
+ $item_discount_amount = $item_amount;
+
+ // Apply discount to tax
+ if ($this->discount) {
+ $item_discount_amount = $item_amount - ($item_amount * ($this->discount / 100));
+ }
+
+ if (!empty($item_id)) {
+ $item_object = Item::find($item_id);
+
+ $this->data['name'] = $item_object->name;
+ $item_sku = $item_object->sku;
+
+ // Decrease stock (item sold)
+ $item_object->quantity -= (double) $this->data['quantity'];
+ $item_object->save();
+
+ if (setting('general.send_item_reminder')) {
+ $item_stocks = explode(',', setting('general.schedule_item_stocks'));
+
+ foreach ($item_stocks as $item_stock) {
+ if ($item_object->quantity == $item_stock) {
+ foreach ($item_object->company->users as $user) {
+ if (!$user->can('read-notifications')) {
+ continue;
+ }
+
+ $user->notify(new ItemReminderNotification($item_object));
+ }
+ }
+ }
+ }
+
+ // Notify users if out of stock
+ if ($item_object->quantity == 0) {
+ foreach ($item_object->company->users as $user) {
+ if (!$user->can('read-notifications')) {
+ continue;
+ }
+
+ $user->notify(new ItemNotification($item_object));
+ }
+ }
+ } elseif (!empty($this->data['sku'])) {
+ $item_sku = $this->data['sku'];
+ }
+
+ $tax_amount = 0;
+ $item_taxes = [];
+ $item_tax_total = 0;
+
+ if (!empty($this->data['tax_id'])) {
+ $inclusives = $compounds = $taxes = [];
+
+ foreach ((array) $this->data['tax_id'] as $tax_id) {
+ $tax = Tax::find($tax_id);
+
+ switch ($tax->type) {
+ case 'inclusive':
+ $inclusives[] = $tax;
+ break;
+ case 'compound':
+ $compounds[] = $tax;
+ break;
+ case 'normal':
+ default:
+ $taxes[] = $tax;
+
+ $tax_amount = ($item_discount_amount / 100) * $tax->rate;
+
+ $item_taxes[] = [
+ 'company_id' => $this->invoice->company_id,
+ 'invoice_id' => $this->invoice->id,
+ 'tax_id' => $tax_id,
+ 'name' => $tax->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_tax_total += $tax_amount;
+ break;
+ }
+ }
+
+ if ($inclusives) {
+ if ($this->discount) {
+ $item_tax_total = 0;
+
+ if ($taxes) {
+ foreach ($taxes as $tax) {
+ $item_tax_amount = ($item_amount / 100) * $tax->rate;
+
+ $item_tax_total += $item_tax_amount;
+ }
+ }
+
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_amount + $item_tax_total;
+
+ $item_tax_total = $item_sub_and_tax_total - (($item_sub_and_tax_total * (100 - $inclusive->rate)) / 100);
+
+ $item_sub_total = $item_sub_and_tax_total - $item_tax_total;
+
+ $item_taxes[] = [
+ 'company_id' => $this->invoice->company_id,
+ 'invoice_id' => $this->invoice->id,
+ 'tax_id' => $inclusive->id,
+ 'name' => $inclusive->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_discount_amount = $item_sub_total - ($item_sub_total * ($this->discount / 100));
+ }
+ } else {
+ foreach ($inclusives as $inclusive) {
+ $item_sub_and_tax_total = $item_discount_amount + $item_tax_total;
+
+ $item_tax_total = $tax_amount = $item_sub_and_tax_total - ($item_sub_and_tax_total / (1 + ($inclusive->rate / 100)));
+
+ $item_taxes[] = [
+ 'company_id' => $this->invoice->company_id,
+ 'invoice_id' => $this->invoice->id,
+ 'tax_id' => $inclusive->id,
+ 'name' => $inclusive->name,
+ 'amount' => $tax_amount,
+ ];
+
+ $item_amount = $item_sub_and_tax_total - $item_tax_total;
+ }
+ }
+ }
+
+ if ($compounds) {
+ foreach ($compounds as $compound) {
+ $tax_amount = (($item_discount_amount + $item_tax_total) / 100) * $compound->rate;
+
+ $item_tax_total += $tax_amount;
+
+ $item_taxes[] = [
+ 'company_id' => $this->invoice->company_id,
+ 'invoice_id' => $this->invoice->id,
+ 'tax_id' => $compound->id,
+ 'name' => $compound->name,
+ 'amount' => $tax_amount,
+ ];
+ }
+ }
+ }
+
+ $invoice_item = InvoiceItem::create([
+ 'company_id' => $this->invoice->company_id,
+ 'invoice_id' => $this->invoice->id,
+ 'item_id' => $item_id,
+ 'name' => str_limit($this->data['name'], 180, ''),
+ 'sku' => $item_sku,
+ 'quantity' => (double) $this->data['quantity'],
+ 'price' => (double) $this->data['price'],
+ 'tax' => $item_tax_total,
+ 'tax_id' => 0,
+ 'total' => $item_amount,
+ ]);
+
+ $invoice_item->item_taxes = false;
+ $invoice_item->inclusives = false;
+ $invoice_item->compounds = false;
+
+ // set item_taxes for
+ if (!empty($this->data['tax_id'])) {
+ $invoice_item->item_taxes = $item_taxes;
+ $invoice_item->inclusives = $inclusives;
+ $invoice_item->compounds = $compounds;
+ }
+
+ if ($item_taxes) {
+ foreach ($item_taxes as $item_tax) {
+ $item_tax['invoice_item_id'] = $invoice_item->id;
+
+ InvoiceItemTax::create($item_tax);
+
+ // Set taxes
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+
+ return $invoice_item;
+ }
+}
diff --git a/app/Jobs/Income/CreateInvoicePayment.php b/app/Jobs/Income/CreateInvoicePayment.php
new file mode 100644
index 000000000..5ca2d06c9
--- /dev/null
+++ b/app/Jobs/Income/CreateInvoicePayment.php
@@ -0,0 +1,52 @@
+request = $request;
+ $this->invoice = $invoice;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return InvoicePayment
+ */
+ public function handle()
+ {
+ $invoice_payment = InvoicePayment::create($this->request->input());
+
+ $desc_amount = money((float) $invoice_payment->amount, (string) $invoice_payment->currency_code, true)->format();
+
+ $history_data = [
+ 'company_id' => $invoice_payment->company_id,
+ 'invoice_id' => $invoice_payment->invoice_id,
+ 'status_code' => $this->invoice->invoice_status_code,
+ 'notify' => '0',
+ 'description' => $desc_amount . ' ' . trans_choice('general.payments', 1),
+ ];
+
+ InvoiceHistory::create($history_data);
+
+ return $invoice_payment;
+ }
+}
\ No newline at end of file
diff --git a/app/Jobs/Income/UpdateInvoice.php b/app/Jobs/Income/UpdateInvoice.php
new file mode 100644
index 000000000..f2995ff4a
--- /dev/null
+++ b/app/Jobs/Income/UpdateInvoice.php
@@ -0,0 +1,233 @@
+invoice = $invoice;
+ $this->request = $request;
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return Invoice
+ */
+ public function handle()
+ {
+ // Upload attachment
+ if ($this->request->file('attachment')) {
+ $media = $this->getMedia($this->request->file('attachment'), 'invoices');
+
+ $this->invoice->attachMedia($media, 'attachment');
+ }
+
+ $taxes = [];
+
+ $tax_total = 0;
+ $sub_total = 0;
+ $discount_total = 0;
+ $discount = $this->request['discount'];
+
+ if ($this->request['item']) {
+ $items = $this->invoice->items;
+
+ if ($items) {
+ foreach ($items as $item) {
+ if (empty($item->item_id)) {
+ continue;
+ }
+
+ $item_object = Item::find($item->item_id);
+
+ // Increase stock
+ $item_object->quantity += (double) $item->quantity;
+ $item_object->save();
+ }
+ }
+
+ $this->deleteRelationships($this->invoice, 'items');
+
+ foreach ($this->request['item'] as $item) {
+ $invoice_item = dispatch(new CreateInvoiceItem($item, $this->invoice, $discount));
+
+ // Calculate totals
+ $tax_total += $invoice_item->tax;
+ $sub_total += $invoice_item->total;
+
+ // Set taxes
+ if ($invoice_item->item_taxes) {
+ foreach ($invoice_item->item_taxes as $item_tax) {
+ if (isset($taxes) && array_key_exists($item_tax['tax_id'], $taxes)) {
+ $taxes[$item_tax['tax_id']]['amount'] += $item_tax['amount'];
+ } else {
+ $taxes[$item_tax['tax_id']] = [
+ 'name' => $item_tax['name'],
+ 'amount' => $item_tax['amount']
+ ];
+ }
+ }
+ }
+ }
+ }
+
+ $s_total = $sub_total;
+
+ // Apply discount to total
+ if ($discount) {
+ $s_discount = $s_total * ($discount / 100);
+ $discount_total += $s_discount;
+ $s_total = $s_total - $s_discount;
+ }
+
+ $amount = $s_total + $tax_total;
+
+ $this->request['amount'] = money($amount, $this->request['currency_code'])->getAmount();
+
+ $this->invoice->update($this->request->input());
+
+ // Delete previous invoice totals
+ $this->deleteRelationships($this->invoice, 'totals');
+
+ // Add invoice totals
+ $this->addTotals($this->invoice, $this->request, $taxes, $sub_total, $discount_total, $tax_total);
+
+ // Recurring
+ $this->invoice->updateRecurring();
+
+ // Fire the event to make it extensible
+ event(new InvoiceUpdated($this->invoice));
+
+ return $this->invoice;
+ }
+
+ protected function addTotals($invoice, $request, $taxes, $sub_total, $discount_total, $tax_total)
+ {
+ // Check if totals are in request, i.e. api
+ if (!empty($request['totals'])) {
+ $sort_order = 1;
+
+ foreach ($request['totals'] as $total) {
+ $total['invoice_id'] = $invoice->id;
+
+ if (empty($total['sort_order'])) {
+ $total['sort_order'] = $sort_order;
+ }
+
+ InvoiceTotal::create($total);
+
+ $sort_order++;
+ }
+
+ return;
+ }
+
+ $sort_order = 1;
+
+ // Added invoice sub total
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'sub_total',
+ 'name' => 'invoices.sub_total',
+ 'amount' => $sub_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+
+ // Added invoice discount
+ if ($discount_total) {
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'discount',
+ 'name' => 'invoices.discount',
+ 'amount' => $discount_total,
+ 'sort_order' => $sort_order,
+ ]);
+
+ // This is for total
+ $sub_total = $sub_total - $discount_total;
+
+ $sort_order++;
+ }
+
+ // Added invoice taxes
+ if (isset($taxes)) {
+ foreach ($taxes as $tax) {
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'tax',
+ 'name' => $tax['name'],
+ 'amount' => $tax['amount'],
+ 'sort_order' => $sort_order,
+ ]);
+
+ $sort_order++;
+ }
+ }
+
+ // Added invoice total
+ InvoiceTotal::create([
+ 'company_id' => $request['company_id'],
+ 'invoice_id' => $invoice->id,
+ 'code' => 'total',
+ 'name' => 'invoices.total',
+ 'amount' => $sub_total + $tax_total,
+ 'sort_order' => $sort_order,
+ ]);
+ }
+
+ /**
+ * Mass delete relationships with events being fired.
+ *
+ * @param $model
+ * @param $relationships
+ *
+ * @return void
+ */
+ public function deleteRelationships($model, $relationships)
+ {
+ foreach ((array) $relationships as $relationship) {
+ if (empty($model->$relationship)) {
+ continue;
+ }
+
+ $items = $model->$relationship->all();
+
+ if ($items instanceof Collection) {
+ $items = $items->all();
+ }
+
+ foreach ((array) $items as $item) {
+ $item->delete();
+ }
+ }
+ }
+}
diff --git a/app/Listeners/Incomes/Invoice/Paid.php b/app/Listeners/Incomes/Invoice/Paid.php
index 3aa88633d..6f90bfdce 100644
--- a/app/Listeners/Incomes/Invoice/Paid.php
+++ b/app/Listeners/Incomes/Invoice/Paid.php
@@ -3,11 +3,9 @@
namespace App\Listeners\Incomes\Invoice;
use App\Events\InvoicePaid;
-
-use App\Models\Income\Invoice;
-use App\Models\Income\InvoicePayment;
-use App\Models\Income\InvoiceHistory;
-
+use App\Http\Requests\Income\InvoicePayment as PaymentRequest;
+use App\Jobs\Income\CreateInvoicePayment;
+use App\Notifications\Customer\Invoice as Notification;
use App\Traits\DateTime;
use Date;
@@ -19,24 +17,14 @@ class Paid
* Handle the event.
*
* @param $event
- * @return void
+ * @return array
*/
public function handle(InvoicePaid $event)
{
$invoice = $event->invoice;
$request = $event->request;
- $request['invoice_id'] = $invoice->id;
- $request['account_id'] = setting('general.default_account');
-
- if (!isset($request['amount'])) {
- $request['amount'] = $invoice->amount;
- }
-
- $request['currency_code'] = $invoice->currency_code;
- $request['currency_rate'] = $invoice->currency_rate;
-
- $request['paid_at'] = Date::parse('now')->format('Y-m-d');
+ $invoice_payment = $this->createPayment($invoice, $request);
if ($request['amount'] > $invoice->amount) {
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);
@@ -53,23 +41,41 @@ class Paid
$invoice->save();
- InvoicePayment::create($request->input());
+ // Customer add payment on invoice send user notification
+ foreach ($invoice->company->users as $user) {
+ if (!$user->can('read-notifications')) {
+ continue;
+ }
- $request['status_code'] = $invoice->invoice_status_code;
-
- $request['notify'] = 0;
-
- $desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());
-
- $desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();
-
- $request['description'] = $desc_date . ' ' . $desc_amount;
-
- InvoiceHistory::create($request->input());
+ $user->notify(new Notification($invoice, $invoice_payment));
+ }
return [
'success' => true,
'error' => false,
];
}
+
+ protected function createPayment($invoice, $request)
+ {
+ if (!is_array($request)) {
+ $request = $request->input();
+ }
+
+ $request['invoice_id'] = $invoice->id;
+ $request['paid_at'] = Date::parse('now')->format('Y-m-d');
+ $request['company_id'] = isset($request['company_id']) ? $request['company_id'] : session('company_id');
+ $request['account_id'] = isset($request['account_id']) ? $request['account_id'] : setting('general.default_account');
+ $request['payment_method'] = isset($request['payment_method']) ? $request['payment_method'] : setting('general.default_payment_method');
+ $request['currency_code'] = isset($request['currency_code']) ? $request['currency_code'] : $invoice->currency_code;
+ $request['currency_rate'] = isset($request['currency_rate']) ? $request['currency_rate'] : $invoice->currency_rate;
+ $request['notify'] = isset($request['notify']) ? $request['notify'] : 0;
+
+ $payment_request = new PaymentRequest();
+ $payment_request->merge($request);
+
+ $invoice_payment = dispatch(new CreateInvoicePayment($payment_request, $invoice));
+
+ return $invoice_payment;
+ }
}
diff --git a/app/Listeners/Updates/Version130.php b/app/Listeners/Updates/Version130.php
new file mode 100644
index 000000000..252a92daa
--- /dev/null
+++ b/app/Listeners/Updates/Version130.php
@@ -0,0 +1,164 @@
+check($event)) {
+ return;
+ }
+
+ // Set new Item Reminder settings
+ setting(['general.send_item_reminder' => '0']);
+ setting(['general.schedule_item_stocks' => '3,5,7']);
+ setting(['general.wizard' => '1']);
+ setting(['general.invoice_item' => 'settings.invoice.item']);
+ setting(['general.invoice_price' => 'settings.invoice.price']);
+ setting(['general.invoice_quantity' => 'settings.invoice.quantity']);
+
+ setting()->save();
+
+ $this->updatePermissions();
+
+ // Update database
+ Artisan::call('migrate', ['--force' => true]);
+ }
+
+ protected function updatePermissions()
+ {
+ $permissions = [];
+
+ // Banking Reconciliations
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-banking-reconciliations',
+ 'display_name' => 'Read Banking Reconciliations',
+ 'description' => 'Read Banking Reconciliations',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-banking-reconciliations',
+ 'display_name' => 'Create Banking Reconciliations',
+ 'description' => 'Create Banking Reconciliations',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-banking-reconciliations',
+ 'display_name' => 'Update Banking Reconciliations',
+ 'description' => 'Update Banking Reconciliations',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'delete-banking-reconciliations',
+ 'display_name' => 'Delete Banking Reconciliations',
+ 'description' => 'Delete Banking Reconciliations',
+ ]);
+
+ // Create Wizard Permissions
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-wizard-companies',
+ 'display_name' => 'Create Wizard Compaines',
+ 'description' => 'Create Wizard Compaines',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-wizard-currencies',
+ 'display_name' => 'Create Wizard Currencies',
+ 'description' => 'Create Wizard Currencies',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-wizard-taxes',
+ 'display_name' => 'Create Wizard Taxes',
+ 'description' => 'Create Wizard Taxes',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-wizard-finish',
+ 'display_name' => 'Create Wizard Finish',
+ 'description' => 'Create Wizard Finish',
+ ]);
+
+ // Read Wizard Permissions
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-wizard-companies',
+ 'display_name' => 'Read Wizard Compaines',
+ 'description' => 'Read Wizard Compaines',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-wizard-currencies',
+ 'display_name' => 'Read Wizard Currencies',
+ 'description' => 'Read Wizard Currencies',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-wizard-taxes',
+ 'display_name' => 'Read Wizard Taxes',
+ 'description' => 'Read Wizard Taxes',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-wizard-finish',
+ 'display_name' => 'Read Wizard Finish',
+ 'description' => 'Read Wizard Finish',
+ ]);
+
+ // Update Wizard Permissions
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-wizard-companies',
+ 'display_name' => 'Update Wizard Compaines',
+ 'description' => 'Update Wizard Compaines',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-wizard-currencies',
+ 'display_name' => 'Update Wizard Currencies',
+ 'description' => 'Update Wizard Currencies',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-wizard-taxes',
+ 'display_name' => 'Update Wizard Taxes',
+ 'description' => 'Update Wizard Taxes',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-wizard-finish',
+ 'display_name' => 'Update Wizard Finish',
+ 'description' => 'Update Wizard Finish',
+ ]);
+
+ // Attach permission to roles
+ $roles = Role::all();
+
+ foreach ($roles as $role) {
+ $allowed = ['admin', 'manager'];
+
+ if (!in_array($role->name, $allowed)) {
+ continue;
+ }
+
+ foreach ($permissions as $permission) {
+ $role->attachPermission($permission);
+ }
+ }
+ }
+}
diff --git a/app/Listeners/Updates/Version132.php b/app/Listeners/Updates/Version132.php
new file mode 100644
index 000000000..094a71be3
--- /dev/null
+++ b/app/Listeners/Updates/Version132.php
@@ -0,0 +1,79 @@
+check($event)) {
+ return;
+ }
+
+ $this->updatePermissions();
+
+ // Update database
+ Artisan::call('migrate', ['--force' => true]);
+ }
+
+ protected function updatePermissions()
+ {
+ $permissions = [];
+
+ // Banking Reconciliations
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'read-common-notifications',
+ 'display_name' => 'Read Common Notifications',
+ 'description' => 'Read Common Notifications',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'create-common-notifications',
+ 'display_name' => 'Create Common Notifications',
+ 'description' => 'Create Common Notifications',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'update-common-notifications',
+ 'display_name' => 'Update Common Notifications',
+ 'description' => 'Update Common Notifications',
+ ]);
+
+ $permissions[] = Permission::firstOrCreate([
+ 'name' => 'delete-common-notifications',
+ 'display_name' => 'Delete Common Notifications',
+ 'description' => 'Delete Common Notifications',
+ ]);
+
+ // Attach permission to roles
+ $roles = Role::all();
+
+ foreach ($roles as $role) {
+ $allowed = ['admin', 'manager'];
+
+ if (!in_array($role->name, $allowed)) {
+ continue;
+ }
+
+ foreach ($permissions as $permission) {
+ $role->attachPermission($permission);
+ }
+ }
+ }
+}
diff --git a/app/Models/Banking/Reconciliation.php b/app/Models/Banking/Reconciliation.php
new file mode 100644
index 000000000..a3c0d728e
--- /dev/null
+++ b/app/Models/Banking/Reconciliation.php
@@ -0,0 +1,45 @@
+belongsTo('App\Models\Banking\Account');
+ }
+
+ /**
+ * Convert closing balance to double.
+ *
+ * @param string $value
+ * @return void
+ */
+ public function setClosingBalanceAttribute($value)
+ {
+ $this->attributes['closing_balance'] = (double) $value;
+ }
+}
diff --git a/app/Models/Expense/Bill.php b/app/Models/Expense/Bill.php
index 3ae017282..35b997a40 100644
--- a/app/Models/Expense/Bill.php
+++ b/app/Models/Expense/Bill.php
@@ -3,6 +3,7 @@
namespace App\Models\Expense;
use App\Models\Model;
+use App\Models\Setting\Currency;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Media;
@@ -22,7 +23,7 @@ class Bill extends Model
*
* @var array
*/
- protected $appends = ['attachment', 'discount'];
+ protected $appends = ['attachment', 'discount', 'paid'];
protected $dates = ['deleted_at', 'billed_at', 'due_at'];
@@ -82,6 +83,11 @@ class Bill extends Model
return $this->hasMany('App\Models\Expense\BillItem');
}
+ public function itemTaxes()
+ {
+ return $this->hasMany('App\Models\Expense\BillItemTax');
+ }
+
public function payments()
{
return $this->hasMany('App\Models\Expense\BillPayment');
@@ -194,4 +200,59 @@ class Bill extends Model
return $percent;
}
+
+ /**
+ * Get the paid amount.
+ *
+ * @return string
+ */
+ public function getPaidAttribute()
+ {
+ if (empty($this->amount)) {
+ return false;
+ }
+
+ $paid = 0;
+ $reconciled = $reconciled_amount = 0;
+
+ if ($this->payments->count()) {
+ $currencies = Currency::enabled()->pluck('rate', 'code')->toArray();
+
+ foreach ($this->payments as $item) {
+ if ($this->currency_code == $item->currency_code) {
+ $amount = (double) $item->amount;
+ } else {
+ $default_model = new BillPayment();
+ $default_model->default_currency_code = $this->currency_code;
+ $default_model->amount = $item->amount;
+ $default_model->currency_code = $item->currency_code;
+ $default_model->currency_rate = $currencies[$item->currency_code];
+
+ $default_amount = (double) $default_model->getDivideConvertedAmount();
+
+ $convert_model = new BillPayment();
+ $convert_model->default_currency_code = $item->currency_code;
+ $convert_model->amount = $default_amount;
+ $convert_model->currency_code = $this->currency_code;
+ $convert_model->currency_rate = $currencies[$this->currency_code];
+
+ $amount = (double) $convert_model->getDynamicConvertedAmount();
+ }
+
+ $paid += $amount;
+
+ if ($item->reconciled) {
+ $reconciled_amount = +$amount;
+ }
+ }
+ }
+
+ if ($this->amount == $reconciled_amount) {
+ $reconciled = 1;
+ }
+
+ $this->setAttribute('reconciled', $reconciled);
+
+ return $paid;
+ }
}
diff --git a/app/Models/Expense/BillItem.php b/app/Models/Expense/BillItem.php
index ae2c026c0..b40f6fdf5 100644
--- a/app/Models/Expense/BillItem.php
+++ b/app/Models/Expense/BillItem.php
@@ -29,6 +29,11 @@ class BillItem extends Model
return $this->belongsTo('App\Models\Common\Item');
}
+ public function itemTaxes()
+ {
+ return $this->hasMany('App\Models\Expense\BillItemTax', 'bill_item_id', 'id');
+ }
+
public function tax()
{
return $this->belongsTo('App\Models\Setting\Tax');
@@ -66,4 +71,23 @@ class BillItem extends Model
{
$this->attributes['tax'] = (double) $value;
}
+
+ /**
+ * Convert tax to double.
+ *
+ * @param string $value
+ * @return void
+ */
+ public function getTaxIdAttribute($value)
+ {
+ $tax_ids = [];
+
+ if (!empty($value)) {
+ $tax_ids[] = $value;
+
+ return $tax_ids;
+ }
+
+ return $this->itemTaxes->pluck('tax_id');
+ }
}
diff --git a/app/Models/Expense/BillItemTax.php b/app/Models/Expense/BillItemTax.php
new file mode 100644
index 000000000..8f7e2862a
--- /dev/null
+++ b/app/Models/Expense/BillItemTax.php
@@ -0,0 +1,47 @@
+belongsTo('App\Models\Expense\Bill');
+ }
+
+ public function item()
+ {
+ return $this->belongsTo('App\Models\Common\Item');
+ }
+
+ public function tax()
+ {
+ return $this->belongsTo('App\Models\Setting\Tax');
+ }
+
+ /**
+ * Convert amount to double.
+ *
+ * @param string $value
+ * @return void
+ */
+ public function setAmountAttribute($value)
+ {
+ $this->attributes['amount'] = (double) $value;
+ }
+}
diff --git a/app/Models/Expense/Vendor.php b/app/Models/Expense/Vendor.php
index 3c5d246f5..541a4b307 100644
--- a/app/Models/Expense/Vendor.php
+++ b/app/Models/Expense/Vendor.php
@@ -4,12 +4,13 @@ namespace App\Models\Expense;
use App\Models\Model;
use Bkwld\Cloner\Cloneable;
+use App\Traits\Currencies;
use Sofa\Eloquence\Eloquence;
use App\Traits\Media;
class Vendor extends Model
{
- use Cloneable, Eloquence, Media;
+ use Cloneable, Currencies, Eloquence, Media;
protected $table = 'vendors';
@@ -18,7 +19,7 @@ class Vendor extends Model
*
* @var array
*/
- protected $fillable = ['company_id', 'name', 'email', 'tax_number', 'phone', 'address', 'website', 'currency_code', 'enabled'];
+ protected $fillable = ['company_id', 'name', 'email', 'tax_number', 'phone', 'address', 'website', 'currency_code', 'reference', 'enabled'];
/**
* Sortable columns.
@@ -70,4 +71,19 @@ class Vendor extends Model
return $this->getMedia('logo')->last();
}
+
+ public function getUnpaidAttribute()
+ {
+ $amount = 0;
+
+ $bills = $this->bills()->accrued()->notPaid()->get();
+
+ foreach ($bills as $bill) {
+ $bill_amount = $bill->amount - $bill->paid;
+
+ $amount += $this->dynamicConvert(setting('general.default_currency'), $bill_amount, $bill->currency_code, $bill->currency_rate, false);
+ }
+
+ return $amount;
+ }
}
diff --git a/app/Models/Income/Customer.php b/app/Models/Income/Customer.php
index e4aa09a14..9c7299445 100644
--- a/app/Models/Income/Customer.php
+++ b/app/Models/Income/Customer.php
@@ -4,12 +4,13 @@ namespace App\Models\Income;
use App\Models\Model;
use Bkwld\Cloner\Cloneable;
+use App\Traits\Currencies;
use Illuminate\Notifications\Notifiable;
use Sofa\Eloquence\Eloquence;
class Customer extends Model
{
- use Cloneable, Eloquence, Notifiable;
+ use Cloneable, Currencies, Eloquence, Notifiable;
protected $table = 'customers';
@@ -18,7 +19,7 @@ class Customer extends Model
*
* @var array
*/
- protected $fillable = ['company_id', 'user_id', 'name', 'email', 'tax_number', 'phone', 'address', 'website', 'currency_code', 'enabled'];
+ protected $fillable = ['company_id', 'user_id', 'name', 'email', 'tax_number', 'phone', 'address', 'website', 'currency_code', 'reference', 'enabled'];
/**
* Sortable columns.
@@ -64,4 +65,19 @@ class Customer extends Model
{
$this->user_id = null;
}
+
+ public function getUnpaidAttribute()
+ {
+ $amount = 0;
+
+ $invoices = $this->invoices()->accrued()->notPaid()->get();
+
+ foreach ($invoices as $invoice) {
+ $invoice_amount = $invoice->amount - $invoice->paid;
+
+ $amount += $this->dynamicConvert(setting('general.default_currency'), $invoice_amount, $invoice->currency_code, $invoice->currency_rate, false);
+ }
+
+ return $amount;
+ }
}
diff --git a/app/Models/Income/Invoice.php b/app/Models/Income/Invoice.php
index f07e31eb1..5b6ec8aff 100644
--- a/app/Models/Income/Invoice.php
+++ b/app/Models/Income/Invoice.php
@@ -3,6 +3,7 @@
namespace App\Models\Income;
use App\Models\Model;
+use App\Models\Setting\Currency;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Incomes;
@@ -23,7 +24,7 @@ class Invoice extends Model
*
* @var array
*/
- protected $appends = ['attachment', 'discount'];
+ protected $appends = ['attachment', 'discount', 'paid'];
protected $dates = ['deleted_at', 'invoiced_at', 'due_at'];
@@ -56,6 +57,8 @@ class Invoice extends Model
'notes' => 2,
];
+ protected $reconciled_amount = [];
+
/**
* Clonable relationships.
*
@@ -83,6 +86,11 @@ class Invoice extends Model
return $this->hasMany('App\Models\Income\InvoiceItem');
}
+ public function itemTaxes()
+ {
+ return $this->hasMany('App\Models\Income\InvoiceItemTax');
+ }
+
public function histories()
{
return $this->hasMany('App\Models\Income\InvoiceHistory');
@@ -196,4 +204,59 @@ class Invoice extends Model
return $percent;
}
+
+ /**
+ * Get the paid amount.
+ *
+ * @return string
+ */
+ public function getPaidAttribute()
+ {
+ if (empty($this->amount)) {
+ return false;
+ }
+
+ $paid = 0;
+ $reconciled = $reconciled_amount = 0;
+
+ if ($this->payments->count()) {
+ $currencies = Currency::enabled()->pluck('rate', 'code')->toArray();
+
+ foreach ($this->payments as $item) {
+ if ($this->currency_code == $item->currency_code) {
+ $amount = (double) $item->amount;
+ } else {
+ $default_model = new InvoicePayment();
+ $default_model->default_currency_code = $this->currency_code;
+ $default_model->amount = $item->amount;
+ $default_model->currency_code = $item->currency_code;
+ $default_model->currency_rate = $currencies[$item->currency_code];
+
+ $default_amount = (double) $default_model->getDivideConvertedAmount();
+
+ $convert_model = new InvoicePayment();
+ $convert_model->default_currency_code = $item->currency_code;
+ $convert_model->amount = $default_amount;
+ $convert_model->currency_code = $this->currency_code;
+ $convert_model->currency_rate = $currencies[$this->currency_code];
+
+ $amount = (double) $convert_model->getDynamicConvertedAmount();
+ }
+
+ $paid += $amount;
+
+ if ($item->reconciled) {
+ $reconciled_amount = +$amount;
+ }
+ }
+ }
+
+ if ($this->amount == $reconciled_amount) {
+ $reconciled = 1;
+ }
+
+ $this->setAttribute('reconciled', $reconciled);
+
+ return $paid;
+ }
}
diff --git a/app/Models/Income/InvoiceItem.php b/app/Models/Income/InvoiceItem.php
index c6e50c9e8..dff192aec 100644
--- a/app/Models/Income/InvoiceItem.php
+++ b/app/Models/Income/InvoiceItem.php
@@ -29,6 +29,11 @@ class InvoiceItem extends Model
return $this->belongsTo('App\Models\Common\Item');
}
+ public function itemTaxes()
+ {
+ return $this->hasMany('App\Models\Income\InvoiceItemTax', 'invoice_item_id', 'id');
+ }
+
public function tax()
{
return $this->belongsTo('App\Models\Setting\Tax');
@@ -66,4 +71,23 @@ class InvoiceItem extends Model
{
$this->attributes['tax'] = (double) $value;
}
+
+ /**
+ * Convert tax to double.
+ *
+ * @param string $value
+ * @return void
+ */
+ public function getTaxIdAttribute($value)
+ {
+ $tax_ids = [];
+
+ if (!empty($value)) {
+ $tax_ids[] = $value;
+
+ return $tax_ids;
+ }
+
+ return $this->itemTaxes->pluck('tax_id');
+ }
}
diff --git a/app/Models/Income/InvoiceItemTax.php b/app/Models/Income/InvoiceItemTax.php
new file mode 100644
index 000000000..ddaea16ad
--- /dev/null
+++ b/app/Models/Income/InvoiceItemTax.php
@@ -0,0 +1,47 @@
+belongsTo('App\Models\Income\Invoice');
+ }
+
+ public function item()
+ {
+ return $this->belongsTo('App\Models\Common\Item');
+ }
+
+ public function tax()
+ {
+ return $this->belongsTo('App\Models\Setting\Tax');
+ }
+
+ /**
+ * Convert amount to double.
+ *
+ * @param string $value
+ * @return void
+ */
+ public function setAmountAttribute($value)
+ {
+ $this->attributes['amount'] = (double) $value;
+ }
+}
diff --git a/app/Models/Model.php b/app/Models/Model.php
index df758de33..9d78d5ba5 100644
--- a/app/Models/Model.php
+++ b/app/Models/Model.php
@@ -115,4 +115,43 @@ class Model extends Eloquent
{
return $query->where('enabled', 0);
}
+
+ /**
+ * Scope to only include reconciled models.
+ *
+ * @param \Illuminate\Database\Eloquent\Builder $query
+ * @param $value
+ * @return \Illuminate\Database\Eloquent\Builder
+ */
+ public function scopeReconciled($query, $value = 1)
+ {
+ return $query->where('reconciled', $value);
+ }
+
+ public function scopeAccount($query, $accounts)
+ {
+ if (empty($accounts)) {
+ return;
+ }
+
+ return $query->whereIn('account_id', (array) $accounts);
+ }
+
+ public function scopeCustomer($query, $customers)
+ {
+ if (empty($customers)) {
+ return;
+ }
+
+ return $query->whereIn('customer_id', (array) $customers);
+ }
+
+ public function scopeVendor($query, $vendors)
+ {
+ if (empty($vendors)) {
+ return;
+ }
+
+ return $query->whereIn('vendor_id', (array) $vendors);
+ }
}
diff --git a/app/Models/Setting/Category.php b/app/Models/Setting/Category.php
index 11c715ccf..bec76d73e 100644
--- a/app/Models/Setting/Category.php
+++ b/app/Models/Setting/Category.php
@@ -56,7 +56,7 @@ class Category extends Model
*/
public function scopeType($query, $type)
{
- return $query->where('type', $type);
+ return $query->whereIn('type', (array) $type);
}
/**
diff --git a/app/Models/Setting/Currency.php b/app/Models/Setting/Currency.php
index bdba35591..3551fbf44 100644
--- a/app/Models/Setting/Currency.php
+++ b/app/Models/Setting/Currency.php
@@ -81,7 +81,7 @@ class Currency extends Model
*/
public function getPrecisionAttribute($value)
{
- if (empty($value)) {
+ if (is_null($value)) {
return config('money.' . $this->code . '.precision');
}
@@ -95,7 +95,7 @@ class Currency extends Model
*/
public function getSymbolAttribute($value)
{
- if (empty($value)) {
+ if (is_null($value)) {
return config('money.' . $this->code . '.symbol');
}
@@ -109,7 +109,7 @@ class Currency extends Model
*/
public function getSymbolFirstAttribute($value)
{
- if (empty($value)) {
+ if (is_null($value)) {
return config('money.' . $this->code . '.symbol_first');
}
@@ -123,7 +123,7 @@ class Currency extends Model
*/
public function getDecimalMarkAttribute($value)
{
- if (empty($value)) {
+ if (is_null($value)) {
return config('money.' . $this->code . '.decimal_mark');
}
@@ -137,7 +137,7 @@ class Currency extends Model
*/
public function getThousandsSeparatorAttribute($value)
{
- if (empty($value)) {
+ if (is_null($value)) {
return config('money.' . $this->code . '.thousands_separator');
}
diff --git a/app/Models/Setting/Tax.php b/app/Models/Setting/Tax.php
index 9d19d8776..f3a1ae00c 100644
--- a/app/Models/Setting/Tax.php
+++ b/app/Models/Setting/Tax.php
@@ -21,7 +21,7 @@ class Tax extends Model
*
* @var array
*/
- protected $fillable = ['company_id', 'name', 'rate', 'enabled'];
+ protected $fillable = ['company_id', 'name', 'rate', 'type', 'enabled'];
/**
* Sortable columns.
diff --git a/app/Notifications/Auth/Reset.php b/app/Notifications/Auth/Reset.php
index 7353221f1..645a2de6b 100644
--- a/app/Notifications/Auth/Reset.php
+++ b/app/Notifications/Auth/Reset.php
@@ -43,11 +43,9 @@ class Reset extends Notification
*/
public function toMail($notifiable)
{
- setting(['general.company_name' => config('app.name')]);
-
return (new MailMessage)
->line(trans('auth.notification.message_1'))
- ->action(trans('auth.notification.button'), url('auth/reset', $this->token, true))
+ ->action(trans('auth.notification.button'), url('auth/reset', $this->token))
->line(trans('auth.notification.message_2'));
}
}
diff --git a/app/Notifications/Common/Item.php b/app/Notifications/Common/Item.php
index 208edb6e9..335ecc1a3 100644
--- a/app/Notifications/Common/Item.php
+++ b/app/Notifications/Common/Item.php
@@ -44,8 +44,8 @@ class Item extends Notification
public function toMail($notifiable)
{
$message = (new MailMessage)
- ->line(trans('items.notification.message', ['name' => $this->item->name]))
- ->action(trans('items.notification.button'), url('items/items', $this->item->id, true));
+ ->line(trans('items.notification.message.out_of_stock', ['name' => $this->item->name]))
+ ->action(trans('items.notification.button'), url('items/items', $this->item->id));
// Override per company as Laravel doesn't read config
$message->from(config('mail.from.address'), config('mail.from.name'));
diff --git a/app/Notifications/Common/ItemReminder.php b/app/Notifications/Common/ItemReminder.php
new file mode 100644
index 000000000..c8a801582
--- /dev/null
+++ b/app/Notifications/Common/ItemReminder.php
@@ -0,0 +1,69 @@
+item = $item;
+ }
+
+ /**
+ * Get the notification's channels.
+ *
+ * @param mixed $notifiable
+ * @return array|string
+ */
+ public function via($notifiable)
+ {
+ return ['mail', 'database'];
+ }
+
+ /**
+ * Build the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ $message = (new MailMessage)
+ ->line(trans('items.notification.message.reminder', ['name' => $this->item->name, 'quantity' => $this->item->quantity]))
+ ->action(trans('items.notification.button'), url('items/items', $this->item->id));
+
+ // Override per company as Laravel doesn't read config
+ $message->from(config('mail.from.address'), config('mail.from.name'));
+
+ return $message;
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ 'item_id' => $this->item->id,
+ 'name' => $this->item->name,
+ ];
+ }
+}
diff --git a/app/Notifications/Customer/Invoice.php b/app/Notifications/Customer/Invoice.php
new file mode 100644
index 000000000..94210f12c
--- /dev/null
+++ b/app/Notifications/Customer/Invoice.php
@@ -0,0 +1,83 @@
+queue = 'high';
+ $this->delay = config('queue.connections.database.delay');
+
+ $this->invoice = $invoice;
+ $this->invoice_payment = $invoice_payment;
+ }
+
+ /**
+ * Get the notification's channels.
+ *
+ * @param mixed $notifiable
+ * @return array|string
+ */
+ public function via($notifiable)
+ {
+ return ['mail', 'database'];
+ }
+
+ /**
+ * Build the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ $message = (new MailMessage)
+ ->line(trans('customers.notification.message', ['invoice_number' => $this->invoice->invoice_number, 'amount' => money($this->invoice_payment->amount, $this->invoice_payment->currency_code, true), 'customer' => $this->invoice->customer_name]));
+
+ // Override per company as Laravel doesn't read config
+ $message->from(config('mail.from.address'), config('mail.from.name'));
+
+ // Attach the PDF file if available
+ if (isset($this->invoice->pdf_path)) {
+ $message->attach($this->invoice->pdf_path, [
+ 'mime' => 'application/pdf',
+ ]);
+ }
+
+ $message->action(trans('customers.notification.button'), url('incomes/invoices', $this->invoice->id));
+
+ return $message;
+ }
+
+ /**
+ * Get the array representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function toArray($notifiable)
+ {
+ return [
+ 'invoice_id' => $this->invoice->id,
+ 'amount' => $this->invoice->amount,
+ ];
+ }
+}
diff --git a/app/Notifications/Expense/Bill.php b/app/Notifications/Expense/Bill.php
index 85fa96668..73a751cdd 100644
--- a/app/Notifications/Expense/Bill.php
+++ b/app/Notifications/Expense/Bill.php
@@ -48,7 +48,7 @@ class Bill extends Notification
{
$message = (new MailMessage)
->line('You are receiving this email because you have an upcoming ' . money($this->bill->amount, $this->bill->currency_code, true) . ' bill to ' . $this->bill->vendor_name . ' vendor.')
- ->action('Add Payment', url('expenses/bills', $this->bill->id, true));
+ ->action('Add Payment', url('expenses/bills', $this->bill->id));
// Override per company as Laravel doesn't read config
$message->from(config('mail.from.address'), config('mail.from.name'));
diff --git a/app/Notifications/Income/Invoice.php b/app/Notifications/Income/Invoice.php
index ad6dd01bb..5a06a646a 100644
--- a/app/Notifications/Income/Invoice.php
+++ b/app/Notifications/Income/Invoice.php
@@ -60,7 +60,7 @@ class Invoice extends Notification
}
if ($this->invoice->customer->user) {
- $message->action(trans('invoices.notification.button'), url('customers/invoices', $this->invoice->id, true));
+ $message->action(trans('invoices.notification.button'), url('customers/invoices', $this->invoice->id));
}
return $message;
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 9c1cb6664..a6e7fd145 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -28,6 +28,8 @@ class EventServiceProvider extends ServiceProvider
'App\Listeners\Updates\Version129',
'App\Listeners\Updates\Version1210',
'App\Listeners\Updates\Version1211',
+ 'App\Listeners\Updates\Version130',
+ 'App\Listeners\Updates\Version132',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login',
diff --git a/app/Providers/FormServiceProvider.php b/app/Providers/FormServiceProvider.php
index 39e66eb40..fe4d30725 100644
--- a/app/Providers/FormServiceProvider.php
+++ b/app/Providers/FormServiceProvider.php
@@ -66,6 +66,14 @@ class FormServiceProvider extends ServiceProvider
Form::component('recurring', 'partials.form.recurring', [
'page', 'model' => null,
]);
+
+ Form::component('invoice_text', 'partials.form.invoice_text', [
+ 'name', 'text', 'icon', 'values', 'selected' => null, 'attributes' => ['required' => 'required'], 'input_name', 'input_value', 'col' => 'col-md-6',
+ ]);
+
+ Form::component('dateRange', 'partials.form.date_range', [
+ 'name', 'text', 'icon', 'attributes' => ['required' => 'required'], 'value' => null, 'col' => 'col-md-6',
+ ]);
}
/**
diff --git a/app/Providers/ViewComposerServiceProvider.php b/app/Providers/ViewComposerServiceProvider.php
index 689827c36..83b3676af 100644
--- a/app/Providers/ViewComposerServiceProvider.php
+++ b/app/Providers/ViewComposerServiceProvider.php
@@ -24,6 +24,11 @@ class ViewComposerServiceProvider extends ServiceProvider
['partials.admin.content'], 'App\Http\ViewComposers\Suggestions'
);
+ // Notifications
+ View::composer(
+ ['partials.admin.content'], 'App\Http\ViewComposers\Notifications'
+ );
+
// Add company info to menu
View::composer(
['partials.admin.menu', 'partials.customer.menu'], 'App\Http\ViewComposers\Menu'
@@ -31,7 +36,7 @@ class ViewComposerServiceProvider extends ServiceProvider
// Add notifications to header
View::composer(
- ['partials.admin.header', 'partials.customer.header'], 'App\Http\ViewComposers\Header'
+ ['partials.wizard.header', 'partials.admin.header', 'partials.customer.header'], 'App\Http\ViewComposers\Header'
);
// Add limits to index
@@ -53,6 +58,11 @@ class ViewComposerServiceProvider extends ServiceProvider
View::composer(
['incomes.invoices.invoice', 'expenses.bills.bill'], 'App\Http\ViewComposers\Logo'
);
+
+ // Add Invoice Text
+ View::composer(
+ ['incomes.invoices.*'], 'App\Http\ViewComposers\InvoiceText'
+ );
}
/**
diff --git a/app/Scopes/Company.php b/app/Scopes/Company.php
index 5f04c1f1d..12416909b 100644
--- a/app/Scopes/Company.php
+++ b/app/Scopes/Company.php
@@ -18,11 +18,6 @@ class Company implements Scope
*/
public function apply(Builder $builder, Model $model)
{
- $company_id = session('company_id');
- if (empty($company_id)) {
- return;
- }
-
$table = $model->getTable();
// Skip for specific tables
@@ -37,7 +32,7 @@ class Company implements Scope
}
// Apply company scope
- $builder->where($table . '.company_id', '=', $company_id);
+ $builder->where($table . '.company_id', '=', session('company_id'));
}
/**
diff --git a/app/Traits/DateTime.php b/app/Traits/DateTime.php
index 974fffeef..afa8e346b 100644
--- a/app/Traits/DateTime.php
+++ b/app/Traits/DateTime.php
@@ -25,12 +25,7 @@ trait DateTime
public function scopeMonthsOfYear($query, $field)
{
- $year = request('year');
-
- // Get current year if not set
- if (empty($year)) {
- $year = Date::now()->year;
- }
+ $year = request('year', Date::now()->year);
$start = Date::parse($year . '-01-01')->format('Y-m-d');
$end = Date::parse($year . '-12-31')->format('Y-m-d');
diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php
index 5ff860f2b..89df5c919 100644
--- a/app/Traits/Modules.php
+++ b/app/Traits/Modules.php
@@ -57,6 +57,28 @@ trait Modules
return [];
}
+ public function getDocumentation($alias)
+ {
+ $response = $this->getRemote('apps/docs/' . $alias);
+
+ if ($response && ($response->getStatusCode() == 200)) {
+ return json_decode($response->getBody())->data;
+ }
+
+ return [];
+ }
+
+ public function getModuleReviews($alias, $data = [])
+ {
+ $response = $this->getRemote('apps/' . $alias . '/reviews', 'GET', $data);
+
+ if ($response && ($response->getStatusCode() == 200)) {
+ return json_decode($response->getBody())->data;
+ }
+
+ return [];
+ }
+
public function getCategories()
{
$response = $this->getRemote('apps/categories');
@@ -68,9 +90,31 @@ trait Modules
return [];
}
- public function getModulesByCategory($alias)
+ public function getModulesByCategory($alias, $data = [])
{
- $response = $this->getRemote('apps/categories/' . $alias);
+ $response = $this->getRemote('apps/categories/' . $alias, 'GET', $data);
+
+ if ($response && ($response->getStatusCode() == 200)) {
+ return json_decode($response->getBody())->data;
+ }
+
+ return [];
+ }
+
+ public function getVendors()
+ {
+ $response = $this->getRemote('apps/vendors');
+
+ if ($response && ($response->getStatusCode() == 200)) {
+ return json_decode($response->getBody())->data;
+ }
+
+ return [];
+ }
+
+ public function getModulesByVendor($alias, $data = [])
+ {
+ $response = $this->getRemote('apps/vendors/' . $alias, 'GET', $data);
if ($response && ($response->getStatusCode() == 200)) {
return json_decode($response->getBody())->data;
@@ -167,6 +211,17 @@ trait Modules
return [];
}
+ public function getFeaturedModules($data = [])
+ {
+ $response = $this->getRemote('apps/featured', 'GET', $data);
+
+ if ($response && ($response->getStatusCode() == 200)) {
+ return json_decode($response->getBody())->data;
+ }
+
+ return [];
+ }
+
public function getCoreVersion()
{
$data['query'] = Info::all();
@@ -394,6 +449,42 @@ trait Modules
return $data;
}
+ public function loadNotifications()
+ {
+ // Get data from cache
+ $data = Cache::get('notifications');
+
+ if (!empty($data)) {
+ return $data;
+ }
+
+ $data = [];
+
+ $url = 'apps/notifications';
+
+ $response = $this->getRemote($url, 'GET', ['timeout' => 30, 'referer' => true]);
+
+ // Exception
+ if ($response instanceof RequestException) {
+ return false;
+ }
+
+ // Bad response
+ if (!$response || ($response->getStatusCode() != 200)) {
+ return false;
+ }
+
+ $notifications = json_decode($response->getBody())->data;
+
+ foreach ($notifications as $notification) {
+ $data[$notification->path][] = $notification;
+ }
+
+ Cache::put('notifications', $data, Date::now()->addHour(6));
+
+ return $data;
+ }
+
public function getSuggestions($path)
{
// Get data from cache
@@ -410,6 +501,22 @@ trait Modules
return false;
}
+ public function getNotifications($path)
+ {
+ // Get data from cache
+ $data = Cache::get('notifications');
+
+ if (empty($data)) {
+ $data = $this->loadNotifications();
+ }
+
+ if (!empty($data) && array_key_exists($path, $data)) {
+ return $data[$path];
+ }
+
+ return false;
+ }
+
protected function getRemote($path, $method = 'GET', $data = array())
{
$base = 'https://akaunting.com/api/';
diff --git a/app/Traits/Recurring.php b/app/Traits/Recurring.php
index 5e07980f6..4b520a933 100644
--- a/app/Traits/Recurring.php
+++ b/app/Traits/Recurring.php
@@ -13,7 +13,7 @@ trait Recurring
{
$request = request();
- if ($request->get('recurring_frequency') == 'no') {
+ if ($request->get('recurring_frequency', 'no') == 'no') {
return;
}
@@ -34,7 +34,7 @@ trait Recurring
{
$request = request();
- if ($request->get('recurring_frequency') == 'no') {
+ if ($request->get('recurring_frequency', 'no') == 'no') {
$this->recurring()->delete();
return;
}
diff --git a/app/Utilities/Installer.php b/app/Utilities/Installer.php
index 5d6f8116f..c9d434b63 100644
--- a/app/Utilities/Installer.php
+++ b/app/Utilities/Installer.php
@@ -39,6 +39,14 @@ class Installer
$requirements[] = trans('install.requirements.enabled', ['feature' => 'File Uploads']);
}
+ if (!function_exists('proc_open')) {
+ $requirements[] = trans('install.requirements.enabled', ['feature' => 'proc_open']);
+ }
+
+ if (!function_exists('proc_close')) {
+ $requirements[] = trans('install.requirements.enabled', ['feature' => 'proc_close']);
+ }
+
if (!class_exists('PDO')) {
$requirements[] = trans('install.requirements.extension', ['extension' => 'MySQL PDO']);
}
@@ -157,7 +165,7 @@ class Installer
try {
DB::connection('install_test')->getPdo();
- } catch (\Exception $e) {;
+ } catch (\Exception $e) {
return false;
}
@@ -261,16 +269,24 @@ class Installer
$env = explode("\n", $env);
foreach ($data as $data_key => $data_value) {
+ $updated = false;
+
foreach ($env as $env_key => $env_value) {
$entry = explode('=', $env_value, 2);
// Check if new or old key
if ($entry[0] == $data_key) {
$env[$env_key] = $data_key . '=' . $data_value;
+ $updated = true;
} else {
$env[$env_key] = $env_value;
}
}
+
+ // Lets create if not available
+ if (!$updated) {
+ $env[] = $data_key . '=' . $data_value;
+ }
}
$env = implode("\n", $env);
diff --git a/app/Utilities/Modules.php b/app/Utilities/Modules.php
index f5495c2f4..eba746c9c 100644
--- a/app/Utilities/Modules.php
+++ b/app/Utilities/Modules.php
@@ -20,7 +20,11 @@ class Modules
$payment_methods = Cache::get($cache_admin);
- $customer = auth()->user()->customer;
+ $customer = true;
+
+ if (auth()->user()) {
+ $customer = auth()->user()->customer;
+ }
if ($customer && $type != 'all') {
$payment_methods = Cache::get($cache_customer);
diff --git a/app/Utilities/Recurring.php b/app/Utilities/Recurring.php
new file mode 100644
index 000000000..d81a0ace0
--- /dev/null
+++ b/app/Utilities/Recurring.php
@@ -0,0 +1,59 @@
+ $item) {
+ if (($item->getTable() == 'bill_payments') || ($item->getTable() == 'invoice_payments')) {
+ $i = $item->$type;
+ $i->category_id = $item->category_id;
+
+ $item = $i;
+ }
+
+ if (($status == 'upcoming') && (($type == 'revenue') || ($type == 'payment'))) {
+ $items->forget($key);
+ }
+
+ if (!$item->recurring || !empty($item->parent_id)) {
+ continue;
+ }
+
+ foreach ($item->recurring->schedule() as $recurr) {
+ $issued = Date::parse($item->$issued_date_field);
+ $start = $recurr->getStart();
+
+ if ($issued->format('Y') != $start->format('Y')) {
+ continue;
+ }
+
+ if (($issued->format('Y-m') == $start->format('Y-m')) && ($issued->format('d') >= $start->format('d'))) {
+ continue;
+ }
+
+ $clone = clone $item;
+
+ $start_date = Date::parse($start->format('Y-m-d'));
+
+ if (($type == 'invoice') || ($type == 'bill')) {
+ // Days between invoiced/billed and due date
+ $diff_days = Date::parse($clone->due_at)->diffInDays(Date::parse($clone->invoiced_at));
+
+ $clone->due_at = $start_date->addDays($diff_days)->format('Y-m-d');
+ }
+
+ $clone->parent_id = $item->id;
+ $clone->created_at = $start_date->format('Y-m-d');
+ $clone->$issued_date_field = $start_date->format('Y-m-d');
+
+ $items->push($clone);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/Utilities/Updater.php b/app/Utilities/Updater.php
index 6890f1038..2deddb51b 100644
--- a/app/Utilities/Updater.php
+++ b/app/Utilities/Updater.php
@@ -121,6 +121,56 @@ class Updater
return $file;
}
+ public static function unzip($file, $temp_path)
+ {
+ // Unzip the file
+ $zip = new ZipArchive();
+
+ if (($zip->open($file) !== true) || !$zip->extractTo($temp_path)) {
+ return false;
+ }
+
+ $zip->close();
+
+ // Delete zip file
+ File::delete($file);
+
+ return true;
+ }
+
+ public static function fileCopy($alias, $temp_path, $version)
+ {
+ if ($alias == 'core') {
+ // Move all files/folders from temp path
+ if (!File::copyDirectory($temp_path, base_path())) {
+ return false;
+ }
+ } else {
+ // Get module instance
+ $module = Module::findByAlias($alias);
+ $model = Model::where('alias', $alias)->first();
+
+ // Move all files/folders from temp path
+ if (!File::copyDirectory($temp_path, module_path($module->get('name')))) {
+ return false;
+ }
+
+ // Add history
+ ModelHistory::create([
+ 'company_id' => session('company_id'),
+ 'module_id' => $model->id,
+ 'category' => $module->get('category'),
+ 'version' => $version,
+ 'description' => trans('modules.history.updated', ['module' => $module->get('name')]),
+ ]);
+ }
+
+ // Delete temp directory
+ File::deleteDirectory($temp_path);
+
+ return true;
+ }
+
public static function all()
{
// Get data from cache
@@ -159,4 +209,4 @@ class Updater
return $data;
}
-}
\ No newline at end of file
+}
diff --git a/composer.json b/composer.json
index 537d12f00..bc092a99f 100644
--- a/composer.json
+++ b/composer.json
@@ -10,6 +10,7 @@
"akaunting/language": "1.0.*",
"akaunting/money": "1.0.*",
"akaunting/setting": "1.0.*",
+ "akaunting/signed-url": "1.0.*",
"akaunting/version": "1.0.*",
"almasaeed2010/adminlte": "2.3.*",
"barryvdh/laravel-debugbar": "2.3.*",
@@ -38,7 +39,7 @@
"tucker-eric/eloquentfilter": "1.1.*"
},
"require-dev": {
- "fzaninotto/faker": "1.6.*",
+ "fzaninotto/faker": "1.8.*",
"phpunit/phpunit": "5.7.*"
},
"autoload": {
diff --git a/composer.lock b/composer.lock
index 332e0c011..743010581 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "2c9fbfe0965420dc5fef6aaff8b62779",
+ "content-hash": "fde8a556b03a35a6abeee8ef5da3727f",
"packages": [
{
"name": "akaunting/language",
- "version": "1.0.6",
+ "version": "1.0.7",
"source": {
"type": "git",
"url": "https://github.com/akaunting/language.git",
- "reference": "18ceaa6d8c0b89c4077dfa61dd15d493b6eccbe4"
+ "reference": "e7ec08bed9fa942f01a9b893f5c1a373e3bc0f2a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/akaunting/language/zipball/18ceaa6d8c0b89c4077dfa61dd15d493b6eccbe4",
- "reference": "18ceaa6d8c0b89c4077dfa61dd15d493b6eccbe4",
+ "url": "https://api.github.com/repos/akaunting/language/zipball/e7ec08bed9fa942f01a9b893f5c1a373e3bc0f2a",
+ "reference": "e7ec08bed9fa942f01a9b893f5c1a373e3bc0f2a",
"shasum": ""
},
"require": {
@@ -62,20 +62,20 @@
"laravel",
"switcher"
],
- "time": "2018-08-06T09:05:13+00:00"
+ "time": "2018-10-09T07:56:15+00:00"
},
{
"name": "akaunting/money",
- "version": "1.0.6",
+ "version": "1.0.7",
"source": {
"type": "git",
"url": "https://github.com/akaunting/money.git",
- "reference": "d56221b2cbf4771c50da0c2e0273869cc659ed2e"
+ "reference": "e5d038fe38f6400261dfff6f7ed0e0a8245719af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/akaunting/money/zipball/d56221b2cbf4771c50da0c2e0273869cc659ed2e",
- "reference": "d56221b2cbf4771c50da0c2e0273869cc659ed2e",
+ "url": "https://api.github.com/repos/akaunting/money/zipball/e5d038fe38f6400261dfff6f7ed0e0a8245719af",
+ "reference": "e5d038fe38f6400261dfff6f7ed0e0a8245719af",
"shasum": ""
},
"require": {
@@ -123,7 +123,7 @@
"laravel",
"money"
],
- "time": "2018-09-01T11:56:07+00:00"
+ "time": "2018-11-04T07:12:33+00:00"
},
{
"name": "akaunting/setting",
@@ -188,6 +188,65 @@
],
"time": "2018-07-19T08:04:53+00:00"
},
+ {
+ "name": "akaunting/signed-url",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/akaunting/signed-url.git",
+ "reference": "23e4c0d50f2074ad882cb9febee4459f60027e2a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/akaunting/signed-url/zipball/23e4c0d50f2074ad882cb9febee4459f60027e2a",
+ "reference": "23e4c0d50f2074ad882cb9febee4459f60027e2a",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/http": ">=5.2 <5.6.12",
+ "illuminate/support": ">=5.2 <5.6.12",
+ "php": ">=5.6.0",
+ "spatie/url-signer": "^1.0.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Akaunting\\SignedUrl\\Provider"
+ ],
+ "aliases": {
+ "SignedUrl": "Akaunting\\SignedUrl\\Facade"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Akaunting\\SignedUrl\\": "./src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Cüneyt Şentürk",
+ "email": "info@akaunting.com",
+ "homepage": "https://akaunting.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Signed (unique) URL package for Laravel.",
+ "keywords": [
+ "laravel",
+ "signed",
+ "unique",
+ "unique link",
+ "unique url",
+ "url"
+ ],
+ "time": "2018-10-15T08:14:36+00:00"
+ },
{
"name": "akaunting/version",
"version": "1.0.0",
@@ -462,16 +521,16 @@
},
{
"name": "barryvdh/reflection-docblock",
- "version": "v2.0.4",
+ "version": "v2.0.5",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
- "reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c"
+ "reference": "64165bd4ba9a550d11ea57569463b7c722dc6b0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/3dcbd98b5d9384a5357266efba8fd29884458e5c",
- "reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c",
+ "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/64165bd4ba9a550d11ea57569463b7c722dc6b0a",
+ "reference": "64165bd4ba9a550d11ea57569463b7c722dc6b0a",
"shasum": ""
},
"require": {
@@ -507,7 +566,7 @@
"email": "mike.vanriel@naenius.com"
}
],
- "time": "2016-06-13T19:28:20+00:00"
+ "time": "2018-10-25T19:09:52+00:00"
},
{
"name": "bkwld/cloner",
@@ -606,7 +665,7 @@
],
"authors": [
{
- "name": "Èrik Campobadal",
+ "name": "Erik Campobadal",
"email": "soc@erik.cat"
}
],
@@ -1713,32 +1772,32 @@
},
{
"name": "jakub-onderka/php-console-color",
- "version": "0.1",
+ "version": "v0.2",
"source": {
"type": "git",
"url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1"
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1",
- "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": ">=5.4.0"
},
"require-dev": {
"jakub-onderka/php-code-style": "1.0",
- "jakub-onderka/php-parallel-lint": "0.*",
+ "jakub-onderka/php-parallel-lint": "1.0",
"jakub-onderka/php-var-dump-check": "0.*",
- "phpunit/phpunit": "3.7.*",
+ "phpunit/phpunit": "~4.3",
"squizlabs/php_codesniffer": "1.*"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleColor": "src/"
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleColor\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1748,41 +1807,41 @@
"authors": [
{
"name": "Jakub Onderka",
- "email": "jakub.onderka@gmail.com",
- "homepage": "http://www.acci.cz"
+ "email": "jakub.onderka@gmail.com"
}
],
- "time": "2014-04-08T15:00:19+00:00"
+ "time": "2018-09-29T17:23:10+00:00"
},
{
"name": "jakub-onderka/php-console-highlighter",
- "version": "v0.3.2",
+ "version": "v0.4",
"source": {
"type": "git",
"url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5"
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5",
- "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
"shasum": ""
},
"require": {
- "jakub-onderka/php-console-color": "~0.1",
- "php": ">=5.3.0"
+ "ext-tokenizer": "*",
+ "jakub-onderka/php-console-color": "~0.2",
+ "php": ">=5.4.0"
},
"require-dev": {
"jakub-onderka/php-code-style": "~1.0",
- "jakub-onderka/php-parallel-lint": "~0.5",
+ "jakub-onderka/php-parallel-lint": "~1.0",
"jakub-onderka/php-var-dump-check": "~0.1",
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.5"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JakubOnderka\\PhpConsoleHighlighter": "src/"
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1796,7 +1855,8 @@
"homepage": "http://www.acci.cz/"
}
],
- "time": "2015-04-20T18:58:01+00:00"
+ "description": "Highlight PHP code in terminal",
+ "time": "2018-09-29T18:48:56+00:00"
},
{
"name": "jenssegers/date",
@@ -2245,16 +2305,16 @@
},
{
"name": "laravel/tinker",
- "version": "v1.0.7",
+ "version": "v1.0.8",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d"
+ "reference": "cafbf598a90acde68985660e79b2b03c5609a405"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/e3086ee8cb1f54a39ae8dcb72d1c37d10128997d",
- "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405",
+ "reference": "cafbf598a90acde68985660e79b2b03c5609a405",
"shasum": ""
},
"require": {
@@ -2304,7 +2364,7 @@
"laravel",
"psysh"
],
- "time": "2018-05-17T13:42:07+00:00"
+ "time": "2018-10-12T19:39:35+00:00"
},
{
"name": "laravelcollective/html",
@@ -2362,26 +2422,26 @@
},
{
"name": "league/flysystem",
- "version": "1.0.46",
+ "version": "1.0.49",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2"
+ "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2",
- "reference": "f3e0d925c18b92cf3ce84ea5cc58d62a1762a2b2",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd",
+ "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd",
"shasum": ""
},
"require": {
+ "ext-fileinfo": "*",
"php": ">=5.5.9"
},
"conflict": {
"league/flysystem-sftp": "<1.0.6"
},
"require-dev": {
- "ext-fileinfo": "*",
"phpspec/phpspec": "^3.4",
"phpunit/phpunit": "^5.7.10"
},
@@ -2442,7 +2502,7 @@
"sftp",
"storage"
],
- "time": "2018-08-22T07:45:22+00:00"
+ "time": "2018-11-23T23:41:29+00:00"
},
{
"name": "league/fractal",
@@ -2508,6 +2568,61 @@
],
"time": "2017-06-12T11:04:56+00:00"
},
+ {
+ "name": "league/url",
+ "version": "3.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/url.git",
+ "reference": "1ae2c3ce29a7c5438339ff6388225844e6479da8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/url/zipball/1ae2c3ce29a7c5438339ff6388225844e6479da8",
+ "reference": "1ae2c3ce29a7c5438339ff6388225844e6479da8",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=5.3.0",
+ "true/punycode": "^2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Url\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://github.com/nyamsprod/",
+ "role": "Developer"
+ }
+ ],
+ "description": "League/url is a lightweight PHP Url manipulating library",
+ "homepage": "http://url.thephpleague.com",
+ "keywords": [
+ "parse_url",
+ "php",
+ "url"
+ ],
+ "abandoned": "league/uri",
+ "time": "2015-07-15T08:24:12+00:00"
+ },
{
"name": "maatwebsite/excel",
"version": "2.1.30",
@@ -2649,16 +2764,16 @@
},
{
"name": "monolog/monolog",
- "version": "1.23.0",
+ "version": "1.24.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
"shasum": ""
},
"require": {
@@ -2723,7 +2838,7 @@
"logging",
"psr-3"
],
- "time": "2017-06-19T01:22:40+00:00"
+ "time": "2018-11-05T09:00:11+00:00"
},
{
"name": "mtdowling/cron-expression",
@@ -2771,16 +2886,16 @@
},
{
"name": "nesbot/carbon",
- "version": "1.33.0",
+ "version": "1.36.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "55667c1007a99e82030874b1bb14d24d07108413"
+ "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413",
- "reference": "55667c1007a99e82030874b1bb14d24d07108413",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
+ "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
"shasum": ""
},
"require": {
@@ -2788,9 +2903,12 @@
"symfony/translation": "~2.6 || ~3.0 || ~4.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "~2",
"phpunit/phpunit": "^4.8.35 || ^5.7"
},
+ "suggest": {
+ "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.",
+ "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors."
+ },
"type": "library",
"extra": {
"laravel": {
@@ -2822,7 +2940,7 @@
"datetime",
"time"
],
- "time": "2018-08-07T08:39:47+00:00"
+ "time": "2018-11-22T18:23:02+00:00"
},
{
"name": "nikic/php-parser",
@@ -3283,22 +3401,26 @@
},
{
"name": "phpoffice/phpexcel",
- "version": "1.8.1",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PHPExcel.git",
- "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32"
+ "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/372c7cbb695a6f6f1e62649381aeaa37e7e70b32",
- "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32",
+ "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/1441011fb7ecdd8cc689878f54f8b58a6805f870",
+ "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870",
"shasum": ""
},
"require": {
+ "ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "php": ">=5.2.0"
+ "php": "^5.2|^7.0"
+ },
+ "require-dev": {
+ "squizlabs/php_codesniffer": "2.*"
},
"type": "library",
"autoload": {
@@ -3308,7 +3430,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL"
+ "LGPL-2.1"
],
"authors": [
{
@@ -3316,18 +3438,19 @@
"homepage": "http://blog.maartenballiauw.be"
},
{
- "name": "Mark Baker"
+ "name": "Erik Tilt"
},
{
"name": "Franck Lefevre",
- "homepage": "http://blog.rootslabs.net"
+ "homepage": "http://rootslabs.net"
},
{
- "name": "Erik Tilt"
+ "name": "Mark Baker",
+ "homepage": "http://markbakeruk.net"
}
],
"description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
- "homepage": "http://phpexcel.codeplex.com",
+ "homepage": "https://github.com/PHPOffice/PHPExcel",
"keywords": [
"OpenXML",
"excel",
@@ -3337,7 +3460,7 @@
"xlsx"
],
"abandoned": "phpoffice/phpspreadsheet",
- "time": "2015-05-01T07:00:55+00:00"
+ "time": "2018-11-22T23:07:24+00:00"
},
{
"name": "plank/laravel-mediable",
@@ -3456,16 +3579,16 @@
},
{
"name": "psr/log",
- "version": "1.0.2",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
"shasum": ""
},
"require": {
@@ -3499,27 +3622,27 @@
"psr",
"psr-3"
],
- "time": "2016-10-10T12:19:37+00:00"
+ "time": "2018-11-20T15:27:04+00:00"
},
{
"name": "psy/psysh",
- "version": "v0.9.8",
+ "version": "v0.9.9",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "ed3c32c4304e1a678a6e0f9dc11dd2d927d89555"
+ "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ed3c32c4304e1a678a6e0f9dc11dd2d927d89555",
- "reference": "ed3c32c4304e1a678a6e0f9dc11dd2d927d89555",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+ "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
"shasum": ""
},
"require": {
"dnoegel/php-xdg-base-dir": "0.1",
"ext-json": "*",
"ext-tokenizer": "*",
- "jakub-onderka/php-console-highlighter": "0.3.*",
+ "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
"nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
"php": ">=5.4.0",
"symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
@@ -3573,7 +3696,7 @@
"interactive",
"shell"
],
- "time": "2018-09-05T11:40:09+00:00"
+ "time": "2018-10-13T15:16:03+00:00"
},
{
"name": "ramsey/uuid",
@@ -3771,16 +3894,16 @@
},
{
"name": "simshaun/recurr",
- "version": "v3.0.6",
+ "version": "v3.0.7",
"source": {
"type": "git",
"url": "https://github.com/simshaun/recurr.git",
- "reference": "60a23de5afab820e6c65655f6ce4f3b8cc465e6b"
+ "reference": "f729bfd715f4fdf2fc2d8f400e89c9753e479c7c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simshaun/recurr/zipball/60a23de5afab820e6c65655f6ce4f3b8cc465e6b",
- "reference": "60a23de5afab820e6c65655f6ce4f3b8cc465e6b",
+ "url": "https://api.github.com/repos/simshaun/recurr/zipball/f729bfd715f4fdf2fc2d8f400e89c9753e479c7c",
+ "reference": "f729bfd715f4fdf2fc2d8f400e89c9753e479c7c",
"shasum": ""
},
"require": {
@@ -3822,7 +3945,7 @@
"recurring",
"rrule"
],
- "time": "2018-07-16T18:28:28+00:00"
+ "time": "2018-09-19T05:26:21+00:00"
},
{
"name": "sinergi/browser-detector",
@@ -3982,6 +4105,62 @@
],
"time": "2017-05-27T15:48:52+00:00"
},
+ {
+ "name": "spatie/url-signer",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/url-signer.git",
+ "reference": "945bf049d50eeaadd774e777114c6507eb6df58a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/url-signer/zipball/945bf049d50eeaadd774e777114c6507eb6df58a",
+ "reference": "945bf049d50eeaadd774e777114c6507eb6df58a",
+ "shasum": ""
+ },
+ "require": {
+ "league/url": "^3.3",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "henrikbjorn/phpspec-code-coverage": "^1.0",
+ "phpspec/phpspec": "^2.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Spatie\\UrlSigner\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian De Deyne",
+ "email": "sebastian@spatie.be",
+ "homepage": "https://github.com/sebastiandedeyne",
+ "role": "Developer"
+ }
+ ],
+ "description": "Generate a url with an expiration date and signature to prevent unauthorized access",
+ "homepage": "https://github.com/spatie/url-signer",
+ "keywords": [
+ "encryption",
+ "security",
+ "sign",
+ "spatie",
+ "url"
+ ],
+ "time": "2017-04-09T08:13:03+00:00"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.12",
@@ -4038,16 +4217,16 @@
},
{
"name": "symfony/class-loader",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/class-loader.git",
- "reference": "31db283fc86d3143e7ff87e922177b457d909c30"
+ "reference": "420458095cf60025eb0841276717e0da7f75e50e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/class-loader/zipball/31db283fc86d3143e7ff87e922177b457d909c30",
- "reference": "31db283fc86d3143e7ff87e922177b457d909c30",
+ "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e",
+ "reference": "420458095cf60025eb0841276717e0da7f75e50e",
"shasum": ""
},
"require": {
@@ -4090,20 +4269,20 @@
],
"description": "Symfony ClassLoader Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-11T19:48:54+00:00"
},
{
"name": "symfony/console",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73"
+ "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/6b217594552b9323bcdcfc14f8a0ce126e84cd73",
- "reference": "6b217594552b9323bcdcfc14f8a0ce126e84cd73",
+ "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
+ "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb",
"shasum": ""
},
"require": {
@@ -4159,20 +4338,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-26T12:48:07+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416"
+ "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/edda5a6155000ff8c3a3f85ee5c421af93cca416",
- "reference": "edda5a6155000ff8c3a3f85ee5c421af93cca416",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8",
+ "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8",
"shasum": ""
},
"require": {
@@ -4212,20 +4391,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T09:06:28+00:00"
+ "time": "2018-11-11T19:48:54+00:00"
},
{
"name": "symfony/debug",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "c4625e75341e4fb309ce0c049cbf7fb84b8897cd"
+ "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/c4625e75341e4fb309ce0c049cbf7fb84b8897cd",
- "reference": "c4625e75341e4fb309ce0c049cbf7fb84b8897cd",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d",
+ "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d",
"shasum": ""
},
"require": {
@@ -4268,20 +4447,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2018-08-03T10:42:44+00:00"
+ "time": "2018-11-11T19:48:54+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb"
+ "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb",
- "reference": "b2e1f19280c09a42dc64c0b72b80fe44dd6e88fb",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a",
+ "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a",
"shasum": ""
},
"require": {
@@ -4331,20 +4510,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T09:06:28+00:00"
+ "time": "2018-11-26T10:17:44+00:00"
},
{
"name": "symfony/finder",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a"
+ "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/8a84fcb207451df0013b2c74cbbf1b62d47b999a",
- "reference": "8a84fcb207451df0013b2c74cbbf1b62d47b999a",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
+ "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442",
"shasum": ""
},
"require": {
@@ -4380,20 +4559,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-11T19:48:54+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "2fb33cb6eefe6e790e4023f7c534a9e4214252fc"
+ "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/2fb33cb6eefe6e790e4023f7c534a9e4214252fc",
- "reference": "2fb33cb6eefe6e790e4023f7c534a9e4214252fc",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38",
+ "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38",
"shasum": ""
},
"require": {
@@ -4434,20 +4613,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2018-08-27T17:45:33+00:00"
+ "time": "2018-11-26T10:17:44+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "2819693b25f480966cbfa13b651abccfed4871ca"
+ "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2819693b25f480966cbfa13b651abccfed4871ca",
- "reference": "2819693b25f480966cbfa13b651abccfed4871ca",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa",
+ "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa",
"shasum": ""
},
"require": {
@@ -4523,11 +4702,11 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2018-08-28T06:06:12+00:00"
+ "time": "2018-11-26T14:04:48+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.9.0",
+ "version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -4585,16 +4764,16 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.9.0",
+ "version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
- "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
"shasum": ""
},
"require": {
@@ -4640,20 +4819,20 @@
"portable",
"shim"
],
- "time": "2018-08-06T14:22:27+00:00"
+ "time": "2018-09-21T13:07:52+00:00"
},
{
"name": "symfony/polyfill-php56",
- "version": "v1.9.0",
+ "version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
- "reference": "7b4fc009172cc0196535b0328bd1226284a28000"
+ "reference": "ff208829fe1aa48ab9af356992bb7199fed551af"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/7b4fc009172cc0196535b0328bd1226284a28000",
- "reference": "7b4fc009172cc0196535b0328bd1226284a28000",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ff208829fe1aa48ab9af356992bb7199fed551af",
+ "reference": "ff208829fe1aa48ab9af356992bb7199fed551af",
"shasum": ""
},
"require": {
@@ -4696,20 +4875,20 @@
"portable",
"shim"
],
- "time": "2018-08-06T14:22:27+00:00"
+ "time": "2018-09-21T06:26:08+00:00"
},
{
"name": "symfony/polyfill-php70",
- "version": "v1.9.0",
+ "version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
- "reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934"
+ "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/1e24b0c4a56d55aaf368763a06c6d1c7d3194934",
- "reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224",
+ "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224",
"shasum": ""
},
"require": {
@@ -4755,20 +4934,20 @@
"portable",
"shim"
],
- "time": "2018-08-06T14:22:27+00:00"
+ "time": "2018-09-21T06:26:08+00:00"
},
{
"name": "symfony/polyfill-util",
- "version": "v1.9.0",
+ "version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
- "reference": "8e15d04ba3440984d23e7964b2ee1d25c8de1581"
+ "reference": "3b58903eae668d348a7126f999b0da0f2f93611c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8e15d04ba3440984d23e7964b2ee1d25c8de1581",
- "reference": "8e15d04ba3440984d23e7964b2ee1d25c8de1581",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/3b58903eae668d348a7126f999b0da0f2f93611c",
+ "reference": "3b58903eae668d348a7126f999b0da0f2f93611c",
"shasum": ""
},
"require": {
@@ -4807,20 +4986,20 @@
"polyfill",
"shim"
],
- "time": "2018-08-06T14:22:27+00:00"
+ "time": "2018-09-30T16:36:12+00:00"
},
{
"name": "symfony/process",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7"
+ "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/4d6b125d5293cbceedc2aa10f2c71617e76262e7",
- "reference": "4d6b125d5293cbceedc2aa10f2c71617e76262e7",
+ "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2",
+ "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2",
"shasum": ""
},
"require": {
@@ -4856,20 +5035,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2018-08-03T10:42:44+00:00"
+ "time": "2018-11-20T16:10:26+00:00"
},
{
"name": "symfony/routing",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "e20f4bb79502c3c0db86d572f7683a30d4143911"
+ "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/e20f4bb79502c3c0db86d572f7683a30d4143911",
- "reference": "e20f4bb79502c3c0db86d572f7683a30d4143911",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c",
+ "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c",
"shasum": ""
},
"require": {
@@ -4933,20 +5112,20 @@
"uri",
"url"
],
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-26T08:40:22+00:00"
},
{
"name": "symfony/translation",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "9749930bfc825139aadd2d28461ddbaed6577862"
+ "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/9749930bfc825139aadd2d28461ddbaed6577862",
- "reference": "9749930bfc825139aadd2d28461ddbaed6577862",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f",
+ "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f",
"shasum": ""
},
"require": {
@@ -5001,20 +5180,20 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-26T10:17:44+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3"
+ "reference": "6867713afe6c50ade2f34ed6435563b065a52145"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f62a394bd3de96f2f5e8f4c7d685035897fb3cb3",
- "reference": "f62a394bd3de96f2f5e8f4c7d685035897fb3cb3",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145",
+ "reference": "6867713afe6c50ade2f34ed6435563b065a52145",
"shasum": ""
},
"require": {
@@ -5070,7 +5249,7 @@
"debug",
"dump"
],
- "time": "2018-07-26T11:19:56+00:00"
+ "time": "2018-11-20T16:10:26+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -5119,6 +5298,52 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"time": "2017-11-27T11:13:29+00:00"
},
+ {
+ "name": "true/punycode",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/true/php-punycode.git",
+ "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
+ "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "symfony/polyfill-mbstring": "^1.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.7",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "TrueBV\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Renan Gonçalves",
+ "email": "renan.saddam@gmail.com"
+ }
+ ],
+ "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)",
+ "homepage": "https://github.com/true/php-punycode",
+ "keywords": [
+ "idna",
+ "punycode"
+ ],
+ "time": "2016-11-16T10:37:54+00:00"
+ },
{
"name": "tucker-eric/eloquentfilter",
"version": "1.1.2",
@@ -5330,29 +5555,31 @@
},
{
"name": "fzaninotto/faker",
- "version": "v1.6.0",
+ "version": "v1.8.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
- "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123"
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123",
- "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de",
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de",
"shasum": ""
},
"require": {
- "php": "^5.3.3|^7.0"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
"ext-intl": "*",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
+ "squizlabs/php_codesniffer": "^1.5"
},
"type": "library",
"extra": {
- "branch-alias": []
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
},
"autoload": {
"psr-4": {
@@ -5374,7 +5601,7 @@
"faker",
"fixtures"
],
- "time": "2016-04-29T12:21:54+00:00"
+ "time": "2018-07-12T10:23:15+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -6389,16 +6616,16 @@
},
{
"name": "symfony/yaml",
- "version": "v3.4.15",
+ "version": "v3.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8"
+ "reference": "291e13d808bec481eab83f301f7bff3e699ef603"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/c2f4812ead9f847cb69e90917ca7502e6892d6b8",
- "reference": "c2f4812ead9f847cb69e90917ca7502e6892d6b8",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603",
+ "reference": "291e13d808bec481eab83f301f7bff3e699ef603",
"shasum": ""
},
"require": {
@@ -6444,7 +6671,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2018-08-10T07:34:36+00:00"
+ "time": "2018-11-11T19:48:54+00:00"
}
],
"aliases": [],
diff --git a/config/app.php b/config/app.php
index 6bedfcac7..b820e9bd0 100644
--- a/config/app.php
+++ b/config/app.php
@@ -187,6 +187,7 @@ return [
Akaunting\Language\Provider::class,
Akaunting\Money\Provider::class,
Akaunting\Setting\Provider::class,
+ Akaunting\SignedUrl\Provider::class,
Akaunting\Version\Provider::class,
Barryvdh\DomPDF\ServiceProvider::class,
Bkwld\Cloner\ServiceProvider::class,
@@ -273,6 +274,7 @@ return [
'Module' => Nwidart\Modules\Facades\Module::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
'Setting' => Akaunting\Setting\Facade::class,
+ 'SignedUrl' => Akaunting\SignedUrl\Facade::class,
'Version' => Akaunting\Version\Facade::class,
],
diff --git a/config/database.php b/config/database.php
index de9839e3f..b56ce317e 100644
--- a/config/database.php
+++ b/config/database.php
@@ -58,7 +58,6 @@ return [
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
- 'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION',
],
],
diff --git a/config/language.php b/config/language.php
index d5dbc4087..df777dbd2 100644
--- a/config/language.php
+++ b/config/language.php
@@ -115,7 +115,7 @@ return [
|
*/
- 'allowed' => ['ar-SA', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-GB', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hr-HR', 'id-ID', 'it-IT', 'lv-LV', 'nb-NO', 'nl-NL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW'],
+ 'allowed' => ['ar-SA', 'bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-GB', 'es-ES', 'es-MX', 'fa-IR', 'fr-FR', 'he-IL', 'hr-HR', 'id-ID', 'it-IT', 'lt-LT', 'lv-LV', 'mk-MK', 'nb-NO', 'nl-NL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK', 'sr-RS', 'sq-AL', 'sv-SE', 'th-TH', 'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW'],
/*
|--------------------------------------------------------------------------
@@ -156,16 +156,22 @@ return [
['short' => 'ko', 'long' => 'ko-KR', 'english' => 'Korean', 'native' => '한국어'],
['short' => 'lt', 'long' => 'lt-LT', 'english' => 'Lithuanian', 'native' => 'Lietuvių'],
['short' => 'lv', 'long' => 'lv-LV', 'english' => 'Latvian', 'native' => 'Latviešu valoda'],
+ ['short' => 'mk', 'long' => 'mk-MK', 'english' => 'Macedonian', 'native' => 'Македонски јазик'],
['short' => 'ms', 'long' => 'ms-MY', 'english' => 'Malay', 'native' => 'Bahasa Melayu'],
['short' => 'mx', 'long' => 'es-MX', 'english' => 'Mexico', 'native' => 'Español de México'],
['short' => 'nb', 'long' => 'nb-NO', 'english' => 'Norwegian', 'native' => 'Norsk Bokmål'],
+ ['short' => 'ne', 'long' => 'ne-NP', 'english' => 'Nepali', 'native' => 'नेपाली'],
['short' => 'nl', 'long' => 'nl-NL', 'english' => 'Dutch', 'native' => 'Nederlands'],
['short' => 'pl', 'long' => 'pl-PL', 'english' => 'Polish', 'native' => 'Polski'],
['short' => 'pt-BR', 'long' => 'pt-BR', 'english' => 'Brazilian', 'native' => 'Português do Brasil'],
['short' => 'pt', 'long' => 'pt-PT', 'english' => 'Portuguese', 'native' => 'Português'],
['short' => 'ro', 'long' => 'ro-RO', 'english' => 'Romanian', 'native' => 'Română'],
['short' => 'ru', 'long' => 'ru-RU', 'english' => 'Russian', 'native' => 'Русский'],
+ ['short' => 'sr', 'long' => 'sr-RS', 'english' => 'Serbian (Cyrillic)', 'native' => 'Српски језик'],
+ ['short' => 'sr', 'long' => 'sr-CS', 'english' => 'Serbian (Latin)', 'native' => 'Српски језик'],
['short' => 'sq', 'long' => 'sq-AL', 'english' => 'Albanian', 'native' => 'Shqip'],
+ ['short' => 'sk', 'long' => 'sk-SK', 'english' => 'Slovak', 'native' => 'Slovenčina'],
+ ['short' => 'sl', 'long' => 'sl-SL', 'english' => 'Slovenian', 'native' => 'Slovenščina'],
['short' => 'sv', 'long' => 'sv-SE', 'english' => 'Swedish', 'native' => 'Svenska'],
['short' => 'th', 'long' => 'th-TH', 'english' => 'Thai', 'native' => 'ไทย'],
['short' => 'tr', 'long' => 'tr-TR', 'english' => 'Turkish', 'native' => 'Türkçe'],
diff --git a/config/money.php b/config/money.php
index f00de574f..d5e337b5a 100644
--- a/config/money.php
+++ b/config/money.php
@@ -266,7 +266,7 @@ return [
'thousands_separator' => ',',
],
- 'BYR' => [
+ 'BYN' => [
'name' => 'Belarussian Ruble',
'code' => 974,
'precision' => 0,
diff --git a/config/version.php b/config/version.php
index f2ddd08bc..eb032ddcd 100644
--- a/config/version.php
+++ b/config/version.php
@@ -4,21 +4,21 @@ return [
'name' => 'Akaunting',
- 'code' => 'Recurring',
+ 'code' => 'Reconciliation',
'major' => '1',
- 'minor' => '2',
+ 'minor' => '3',
- 'patch' => '16',
+ 'patch' => '4',
'build' => '',
'status' => 'Stable',
- 'date' => '14-September-2018',
+ 'date' => '30-November-2018',
- 'time' => '12:30',
+ 'time' => '18:30',
'zone' => 'GMT +3',
diff --git a/database/migrations/2018_09_26_000000_add_reference_column_customers.php b/database/migrations/2018_09_26_000000_add_reference_column_customers.php
new file mode 100644
index 000000000..ee4a2bda4
--- /dev/null
+++ b/database/migrations/2018_09_26_000000_add_reference_column_customers.php
@@ -0,0 +1,30 @@
+string('reference')->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('customers', function ($table) {
+ $table->dropColumn('reference');
+ });
+ }
+}
diff --git a/database/migrations/2018_09_26_000000_add_reference_column_vendors.php b/database/migrations/2018_09_26_000000_add_reference_column_vendors.php
new file mode 100644
index 000000000..168647908
--- /dev/null
+++ b/database/migrations/2018_09_26_000000_add_reference_column_vendors.php
@@ -0,0 +1,30 @@
+string('reference')->nullable();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('vendors', function ($table) {
+ $table->dropColumn('reference');
+ });
+ }
+}
diff --git a/database/migrations/2018_10_22_000000_create_bill_item_taxes_table.php b/database/migrations/2018_10_22_000000_create_bill_item_taxes_table.php
new file mode 100644
index 000000000..7338aca0d
--- /dev/null
+++ b/database/migrations/2018_10_22_000000_create_bill_item_taxes_table.php
@@ -0,0 +1,39 @@
+increments('id');
+ $table->integer('company_id');
+ $table->integer('bill_id');
+ $table->integer('bill_item_id');
+ $table->integer('tax_id');
+ $table->string('name');
+ $table->double('amount', 15, 4)->default('0.0000');
+ $table->timestamps();
+ $table->softDeletes();
+
+ $table->index('company_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('bill_item_taxes');
+ }
+}
diff --git a/database/migrations/2018_10_22_000000_create_invoice_item_taxes_table.php b/database/migrations/2018_10_22_000000_create_invoice_item_taxes_table.php
new file mode 100644
index 000000000..db24d8471
--- /dev/null
+++ b/database/migrations/2018_10_22_000000_create_invoice_item_taxes_table.php
@@ -0,0 +1,39 @@
+increments('id');
+ $table->integer('company_id');
+ $table->integer('invoice_id');
+ $table->integer('invoice_item_id');
+ $table->integer('tax_id');
+ $table->string('name');
+ $table->double('amount', 15, 4)->default('0.0000');
+ $table->timestamps();
+ $table->softDeletes();
+
+ $table->index('company_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('invoice_item_taxes');
+ }
+}
diff --git a/database/migrations/2018_10_27_000000_add_reconciled_column.php b/database/migrations/2018_10_27_000000_add_reconciled_column.php
new file mode 100644
index 000000000..9aa23f498
--- /dev/null
+++ b/database/migrations/2018_10_27_000000_add_reconciled_column.php
@@ -0,0 +1,54 @@
+boolean('reconciled')->default(0);
+ });
+
+ Schema::table('invoice_payments', function ($table) {
+ $table->boolean('reconciled')->default(0);
+ });
+
+ Schema::table('payments', function ($table) {
+ $table->boolean('reconciled')->default(0);
+ });
+
+ Schema::table('revenues', function ($table) {
+ $table->boolean('reconciled')->default(0);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('bill_payments', function ($table) {
+ $table->dropColumn('reconciled');
+ });
+
+ Schema::table('invoice_payments', function ($table) {
+ $table->dropColumn('reconciled');
+ });
+
+ Schema::table('payments', function ($table) {
+ $table->dropColumn('reconciled');
+ });
+
+ Schema::table('revenues', function ($table) {
+ $table->dropColumn('reconciled');
+ });
+ }
+}
diff --git a/database/migrations/2018_10_27_000000_create_reconciliations_table.php b/database/migrations/2018_10_27_000000_create_reconciliations_table.php
new file mode 100644
index 000000000..1f0fb4f13
--- /dev/null
+++ b/database/migrations/2018_10_27_000000_create_reconciliations_table.php
@@ -0,0 +1,39 @@
+increments('id');
+ $table->integer('company_id');
+ $table->integer('account_id');
+ $table->dateTime('started_at');
+ $table->dateTime('ended_at');
+ $table->double('closing_balance', 15, 4)->default('0.0000');
+ $table->boolean('reconciled');
+ $table->timestamps();
+ $table->softDeletes();
+
+ $table->index('company_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('reconciliations');
+ }
+}
diff --git a/database/migrations/2018_11_05_000000_add_tax_columns.php b/database/migrations/2018_11_05_000000_add_tax_columns.php
new file mode 100644
index 000000000..9edb97750
--- /dev/null
+++ b/database/migrations/2018_11_05_000000_add_tax_columns.php
@@ -0,0 +1,32 @@
+string('type')->default('normal');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('taxes', function ($table) {
+ $table->dropColumn([
+ 'type',
+ ]);
+ });
+ }
+}
diff --git a/database/seeds/Roles.php b/database/seeds/Roles.php
index b6d1b93eb..088d369ac 100644
--- a/database/seeds/Roles.php
+++ b/database/seeds/Roles.php
@@ -37,6 +37,7 @@ class Roles extends Seeder
'common-import' => 'c',
'common-items' => 'c,r,u,d',
'common-uploads' => 'd',
+ 'common-notifications' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',
'incomes-customers' => 'c,r,u,d',
@@ -46,6 +47,7 @@ class Roles extends Seeder
'banking-accounts' => 'c,r,u,d',
'banking-transfers' => 'c,r,u,d',
'banking-transactions' => 'r',
+ 'banking-reconciliations' => 'c,r,u,d',
'settings-categories' => 'c,r,u,d',
'settings-settings' => 'r,u',
'settings-taxes' => 'c,r,u,d',
@@ -63,6 +65,10 @@ class Roles extends Seeder
'reports-income-expense-summary' => 'r',
'reports-profit-loss' => 'r',
'reports-tax-summary' => 'r',
+ 'wizard-companies' => 'c,r,u',
+ 'wizard-currencies' => 'c,r,u',
+ 'wizard-taxes' => 'c,r,u',
+ 'wizard-finish' => 'c,r,u',
],
'manager' => [
'admin-panel' => 'r',
@@ -70,6 +76,7 @@ class Roles extends Seeder
'common-companies' => 'c,r,u,d',
'common-import' => 'c',
'common-items' => 'c,r,u,d',
+ 'common-notifications' => 'c,r,u,d',
'incomes-invoices' => 'c,r,u,d',
'incomes-revenues' => 'c,r,u,d',
'incomes-customers' => 'c,r,u,d',
@@ -79,6 +86,7 @@ class Roles extends Seeder
'banking-accounts' => 'c,r,u,d',
'banking-transfers' => 'c,r,u,d',
'banking-transactions' => 'r',
+ 'banking-reconciliations' => 'c,r,u,d',
'settings-settings' => 'r,u',
'settings-categories' => 'c,r,u,d',
'settings-taxes' => 'c,r,u,d',
diff --git a/database/seeds/Settings.php b/database/seeds/Settings.php
index 5c27b9392..6856a7540 100644
--- a/database/seeds/Settings.php
+++ b/database/seeds/Settings.php
@@ -41,6 +41,8 @@ class Settings extends Seeder
'general.schedule_invoice_days' => '1,3,5,10',
'general.send_bill_reminder' => '0',
'general.schedule_bill_days' => '10,5,3,1',
+ 'general.send_item_reminder' => '0',
+ 'general.schedule_item_stocks' => '3,5,7',
'general.schedule_time' => '09:00',
'general.admin_theme' => 'skin-green-light',
'general.list_limit' => '25',
@@ -49,7 +51,11 @@ class Settings extends Seeder
'general.session_lifetime' => '30',
'general.file_size' => '2',
'general.file_types' => 'pdf,jpeg,jpg,png',
- 'offlinepayment.methods' => '[{"code":"offlinepayment.cash.1","name":"Cash","order":"1","description":null},{"code":"offlinepayment.bank_transfer.2","name":"Bank Transfer","order":"2","description":null}]',
+ 'general.wizard' => '0',
+ 'general.invoice_item' => 'settings.invoice.item',
+ 'general.invoice_price' => 'settings.invoice.price',
+ 'general.invoice_quantity' => 'settings.invoice.quantity',
+ 'offlinepayment.methods' => '[{"code":"offlinepayment.cash.1","name":"Cash","order":"1","description":null},{"code":"offlinepayment.bank_transfer.2","name":"Bank Transfer","order":"2","description":null}]',
]);
}
}
diff --git a/database/seeds/Taxes.php b/database/seeds/Taxes.php
index 20b8dda39..dc3cd6a80 100644
--- a/database/seeds/Taxes.php
+++ b/database/seeds/Taxes.php
@@ -4,7 +4,6 @@ namespace Database\Seeds;
use App\Models\Model;
use App\Models\Setting\Tax;
-
use Illuminate\Database\Seeder;
class Taxes extends Seeder
diff --git a/modules/OfflinePayment/Http/Controllers/OfflinePayment.php b/modules/OfflinePayment/Http/Controllers/OfflinePayment.php
index fb73fd927..61218ae71 100644
--- a/modules/OfflinePayment/Http/Controllers/OfflinePayment.php
+++ b/modules/OfflinePayment/Http/Controllers/OfflinePayment.php
@@ -7,10 +7,12 @@ use App\Events\InvoicePaid;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
+use Illuminate\Http\Request;
use App\Http\Requests\Customer\InvoicePayment as PaymentRequest;
use App\Http\Requests\Customer\InvoiceConfirm as ConfirmRequest;
use App\Models\Income\Invoice;
+use SignedUrl;
class OfflinePayment extends Controller
{
@@ -44,4 +46,53 @@ class OfflinePayment extends Controller
'html' => $html,
]);
}
+ /**
+ * Show the form for editing the specified resource.
+ * @param $invoice
+ * @param $request
+ * @return Response
+ */
+ public function link(Invoice $invoice, PaymentRequest $request)
+ {
+ $gateway = [];
+
+ $payment_methods = json_decode(setting('offlinepayment.methods'), true);
+
+ foreach ($payment_methods as $payment_method) {
+ if ($payment_method['code'] == $request['payment_method']) {
+ $gateway = $payment_method;
+
+ break;
+ }
+ }
+
+ $confirm_action = SignedUrl::sign(url('links/invoices/' . $invoice->id . '/offlinepayment/confirm'), 1);
+
+ $html = view('offlinepayment::link', compact('gateway', 'invoice', 'confirm_action'))->render();
+
+ return response()->json([
+ 'code' => $gateway['code'],
+ 'name' => $gateway['name'],
+ 'description' => $gateway['description'],
+ 'redirect' => false,
+ 'html' => $html,
+ ]);
+ }
+
+ public function confirm(Invoice $invoice, Request $request)
+ {
+ $message = trans('messages.success.added', ['type' => trans_choice('general.customers', 1)]);
+
+ flash($message)->success();
+
+ $event_response = event(new InvoicePaid($invoice, [
+ 'amount' => $invoice->amount,
+ 'payment_method' => $request['payment_method'],
+ ]));
+
+ return response()->json([
+ 'error' => false,
+ 'success' => true,
+ ]);
+ }
}
diff --git a/modules/OfflinePayment/Http/routes.php b/modules/OfflinePayment/Http/routes.php
index 553a9405f..c2c27f400 100644
--- a/modules/OfflinePayment/Http/routes.php
+++ b/modules/OfflinePayment/Http/routes.php
@@ -9,4 +9,12 @@ Route::group(['middleware' => ['web', 'auth', 'language', 'adminmenu', 'permissi
Route::group(['middleware' => ['web', 'auth', 'language', 'customermenu', 'permission:read-customer-panel'], 'prefix' => 'customers', 'namespace' => 'Modules\OfflinePayment\Http\Controllers'], function () {
Route::get('invoices/{invoice}/offlinepayment', 'OfflinePayment@show');
+ Route::post('invoices/{invoice}/offlinepayment/confirm', 'OfflinePayment@confirm');
+});
+
+Route::group(['middleware' => ['web', 'language'], 'prefix' => 'links', 'namespace' => 'Modules\OfflinePayment\Http\Controllers'], function () {
+ Route::group(['middleware' => 'signed-url'], function () {
+ Route::post('invoices/{invoice}/offlinepayment', 'OfflinePayment@link');
+ Route::post('invoices/{invoice}/offlinepayment/confirm', 'OfflinePayment@confirm');
+ });
});
diff --git a/modules/OfflinePayment/Resources/views/link.blade.php b/modules/OfflinePayment/Resources/views/link.blade.php
new file mode 100644
index 000000000..9ddcc5455
--- /dev/null
+++ b/modules/OfflinePayment/Resources/views/link.blade.php
@@ -0,0 +1,39 @@
+
{{ $gateway['name'] }}
+
+@if ($gateway['description'])
+
+ {{ $gateway['description'] }}
+
+@endif
+
+
diff --git a/modules/PaypalStandard/Http/routes.php b/modules/PaypalStandard/Http/routes.php
index e229a748c..aac395ac4 100644
--- a/modules/PaypalStandard/Http/routes.php
+++ b/modules/PaypalStandard/Http/routes.php
@@ -8,3 +8,9 @@ Route::group(['prefix' => 'customers', 'namespace' => 'Modules\PaypalStandard\Ht
Route::post('invoices/{invoice}/paypalstandard/result', 'PaypalStandard@result');
Route::post('invoices/{invoice}/paypalstandard/callback', 'PaypalStandard@callback');
});
+
+Route::group(['middleware' => ['web', 'language'], 'prefix' => 'links', 'namespace' => 'Modules\PaypalStandard\Http\Controllers'], function () {
+ Route::group(['middleware' => 'signed-url'], function () {
+ Route::post('invoices/{invoice}/paypalstandard', 'PaypalStandard@show');
+ });
+});
diff --git a/public/css/app.css b/public/css/app.css
index c84672263..39fb24970 100644
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -46,6 +46,7 @@
.btn-filter {
margin-bottom: 1px;
+ vertical-align: top;
}
.setting-buttons {
@@ -514,6 +515,9 @@ ul.add-new.nav.navbar-nav.pull-left {
.amount-space {
padding-right: 30px !important;
}
+ .amount-space-left {
+ padding-left: 30px !important;
+ }
}
.text-disabled {
@@ -676,4 +680,240 @@ input[type="number"] {
.pull-right.rating {
margin-top: -30px;
-}
\ No newline at end of file
+}
+
+#role-permissions .form-group.col-md-12 .col-md-3 {
+ overflow: hidden;
+}
+
+.input-checkbox {
+ white-space: nowrap;
+}
+
+.input-checkbox:after {
+ content: "";
+ position: absolute;
+ right: -10px;
+ height: 25px;
+ width: 25px;
+ background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 1)));
+ background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
+ background: linear-gradient(to right, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 1));
+}
+
+#role-permissions .permission-select-button {
+ cursor: pointer;
+}
+
+#role-permissions .permission-unselect-button {
+ cursor: pointer;
+}
+
+#role-permissions .nav-tabs-custom {
+ margin-top: 15px;
+ box-shadow: 0 1px 0px rgba(0,0,0,0.1);
+}
+
+#role-permissions .nav-tabs-custom .nav.nav-tabs {
+ border-style: unset;
+}
+
+#role-permissions .nav-tabs-custom .tab-content {
+ padding: 0px;
+}
+
+#role-permissions .nav-tabs-custom .tab-content .tab-pane {
+ block-size: 0;
+}
+
+#role-permissions .nav-tabs-custom .tab-content .tab-pane .permission-button-group {
+ padding: 15px 0 0 30px;
+}
+
+#role-permissions .nav-tabs-custom .tab-content .form-group.col-md-12 .col-md-3 .input-checkbox {
+ font-weight: normal;
+}
+
+.btn-filter.date-range-btn {
+ background-color: inherit;
+ border-radius: 0px;
+ vertical-align: top;
+}
+
+.link .content-wrapper, .link .right-side, .link .main-footer {
+ margin-left: inherit;
+}
+
+.col-md-6.input-group-invoice-text {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+#items .select2-container--default .select2-selection--multiple .select2-selection__choice {
+ background-color: #f4f4f4;
+ color: #444;
+ border: 1px solid #ddd;
+ margin-bottom: 5px;
+}
+
+#items .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
+ color: #444;
+}
+
+#items span.select2.select2-container.select2-container--default .select2-selection.select2-selection--multiple {
+ border-color: #d2d6de;
+ border-radius: 0;
+}
+
+#items .select2-container--default.select2-container--focus .select2-selection--multiple {
+ border-color: #6da252;
+ border-radius: 0;
+}
+
+#items .select2-search__field {
+ padding-left: 15px;
+ margin-top: 6px;
+}
+
+#tax-add-new {
+ padding: 6px 12px;
+}
+
+.stepwizard-step p {
+ margin-top: 5px;
+ font-size: 16px;
+ color:#666;
+}
+
+.stepwizard-row {
+ display: table-row;
+}
+
+.stepwizard {
+ display: table;
+ width: 100%;
+ position: relative;
+ margin-top: 20px;
+}
+
+.stepwizard-step button[disabled] {
+ /*opacity: 1 !important;
+ filter: alpha(opacity=100) !important;*/
+}
+
+.stepwizard .btn.disabled, .stepwizard .btn[disabled], .stepwizard fieldset[disabled] .btn {
+ opacity:1 !important;
+ color:#bbb;
+}
+
+.stepwizard-row:before {
+ top: 26px;
+ bottom: 0;
+ position: absolute;
+ content:" ";
+ width: 100%;
+ height: 1px;
+ background-color: #ccc;
+ z-index: 0;
+}
+
+.stepwizard-step {
+ display: table-cell;
+ text-align: center;
+ position: relative;
+}
+
+.btn-circle.btn-success {
+ color: #fff;
+}
+
+.btn-circle {
+ width: 50px;
+ height: 50px;
+ text-align: center;
+ padding: 1px 0;
+ font-size: 30px;
+ line-height: 1.428571;
+ border-radius: 30px;
+}
+
+.row.show-invoice .timeline>li {
+ margin-right: 0;
+}
+
+.row.show-invoice .timeline>li a:first-child {
+ margin-left: 10px;
+}
+
+.box-filter {
+ margin-left: 5px;
+}
+
+.box-filter .select2.select2-container.select2-container--default {
+ width: 160px !important;
+ margin-top: -2px;
+}
+
+.box-filter .select2-container--default .select2-selection--multiple .select2-selection__choice {
+ margin-top: 3px;
+}
+.box-filter .select2.select2-container .select2-selection__choice {
+ font-size: 13px !important;
+ margin-top: 4px;
+ margin-bottom: -1px !important;
+}
+
+.box-filter .select2-container .select2-selection--multiple {
+ min-height: 30px !important;
+}
+
+.box-filter .select2-search__field {
+ font-size: 12px !important;
+}
+
+/* App Detail Page Sliders Start */
+.row.module #description .img-fluid.d-block.w-100 {
+ height: 410px;
+ width: 100%;
+}
+
+.row.module #description .image-description.text-center {
+ color: white;
+ padding-top: 14px;
+ position: absolute;
+ width: 100%;
+}
+
+.row.module #description #carousel-screenshot-generic .carousel-control {
+ top: inherit;
+ bottom: inherit;
+ margin-top: 30px;
+ margin-right: 5px;
+ width: 5%;
+}
+
+.row.module #description #carousel-screenshot-generic .carousel-control.left {
+ margin-left: -10px;
+}
+
+.row.module #description #carousel-screenshot-generic .carousel-control .fa {
+ font-size: 1em;
+}
+
+.row.module #description .carousel-navigation-message {
+ background-color: #333333;
+ height:40px;
+}
+
+.row.module #description .carousel-inner .item {
+ padding: 4px 4px 4px 4px;
+ line-height: 1.42857143;
+ background-color: #ffffff;
+ border-top: 1px solid #dddddd;
+ border-left: 1px solid #dddddd;
+ border-right: 1px solid #dddddd;
+ -webkit-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+/* App Detail Page Sliders Finish */
diff --git a/public/css/ekko-lightbox.css b/public/css/ekko-lightbox.css
new file mode 100644
index 000000000..48bf0abd2
--- /dev/null
+++ b/public/css/ekko-lightbox.css
@@ -0,0 +1,2 @@
+.ekko-lightbox{display:-ms-flexbox!important;display:flex!important;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding-right:0!important}.ekko-lightbox-container{position:relative}.ekko-lightbox-container>div.ekko-lightbox-item{position:absolute;top:0;left:0;bottom:0;right:0;width:100%}.ekko-lightbox iframe{width:100%;height:100%}.ekko-lightbox-nav-overlay{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;display:-ms-flexbox;display:flex}.ekko-lightbox-nav-overlay a{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0;transition:opacity .5s;color:#fff;font-size:30px;z-index:1}.ekko-lightbox-nav-overlay a>*{-ms-flex-positive:1;flex-grow:1}.ekko-lightbox-nav-overlay a>:focus{outline:none}.ekko-lightbox-nav-overlay a span{padding:0 30px}.ekko-lightbox-nav-overlay a:last-child span{text-align:right}.ekko-lightbox-nav-overlay a:hover{text-decoration:none}.ekko-lightbox-nav-overlay a:focus{outline:none}.ekko-lightbox-nav-overlay a.disabled{cursor:default;visibility:hidden}.ekko-lightbox a:hover{opacity:1;text-decoration:none}.ekko-lightbox .modal-dialog{display:none}.ekko-lightbox .modal-footer{text-align:left}.ekko-lightbox-loader{position:absolute;top:0;left:0;bottom:0;right:0;width:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.ekko-lightbox-loader>div{width:40px;height:40px;position:relative;text-align:center}.ekko-lightbox-loader>div>div{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;left:0;animation:a 2s infinite ease-in-out}.ekko-lightbox-loader>div>div:last-child{animation-delay:-1s}.modal-dialog .ekko-lightbox-loader>div>div{background-color:#333}@keyframes a{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVra28tbGlnaHRib3guY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQ0UsOEJBQXlCLEFBQXpCLHVCQUF5QixBQUN6QixzQkFBb0IsQUFBcEIsbUJBQW9CLEFBQ3BCLHFCQUF3QixBQUF4Qix1QkFBd0IsQUFDeEIseUJBQTZCLENBQzlCLEFBQ0QseUJBQ0UsaUJBQW1CLENBQ3BCLEFBQ0QsZ0RBQ0Usa0JBQW1CLEFBQ25CLE1BQU8sQUFDUCxPQUFRLEFBQ1IsU0FBVSxBQUNWLFFBQVMsQUFDVCxVQUFZLENBQ2IsQUFDRCxzQkFDRSxXQUFZLEFBQ1osV0FBYSxDQUNkLEFBQ0QsMkJBQ0UsVUFBYSxBQUNiLGtCQUFtQixBQUNuQixNQUFPLEFBQ1AsT0FBUSxBQUNSLFdBQVksQUFDWixZQUFhLEFBQ2Isb0JBQWMsQUFBZCxZQUFjLENBQ2YsQUFDRCw2QkFDRSxXQUFRLEFBQVIsT0FBUSxBQUNSLG9CQUFjLEFBQWQsYUFBYyxBQUNkLHNCQUFvQixBQUFwQixtQkFBb0IsQUFDcEIsVUFBVyxBQUNYLHVCQUF5QixBQUN6QixXQUFZLEFBQ1osZUFBZ0IsQUFDaEIsU0FBYSxDQUNkLEFBQ0QsK0JBQ0Usb0JBQWEsQUFBYixXQUFhLENBQ2QsQUFDRCxvQ0FDRSxZQUFjLENBQ2YsQUFDRCxrQ0FDRSxjQUFnQixDQUNqQixBQUNELDZDQUNFLGdCQUFrQixDQUNuQixBQUNELG1DQUNFLG9CQUFzQixDQUN2QixBQUNELG1DQUNFLFlBQWMsQ0FDZixBQUNELHNDQUNFLGVBQWdCLEFBQ2hCLGlCQUFtQixDQUNwQixBQUNELHVCQUNFLFVBQVcsQUFDWCxvQkFBc0IsQ0FDdkIsQUFDRCw2QkFDRSxZQUFjLENBQ2YsQUFDRCw2QkFDRSxlQUFpQixDQUNsQixBQUNELHNCQUNFLGtCQUFtQixBQUNuQixNQUFPLEFBQ1AsT0FBUSxBQUNSLFNBQVUsQUFDVixRQUFTLEFBQ1QsV0FBWSxBQUNaLG9CQUFjLEFBQWQsYUFBYyxBQUVkLDBCQUF1QixBQUF2QixzQkFBdUIsQUFFdkIscUJBQXdCLEFBQXhCLHVCQUF3QixBQUV4QixzQkFBb0IsQUFBcEIsa0JBQW9CLENBQ3JCLEFBQ0QsMEJBQ0UsV0FBWSxBQUNaLFlBQWEsQUFDYixrQkFBbUIsQUFDbkIsaUJBQW1CLENBQ3BCLEFBQ0QsOEJBQ0UsV0FBWSxBQUNaLFlBQWEsQUFDYixrQkFBbUIsQUFDbkIsc0JBQXVCLEFBQ3ZCLFdBQWEsQUFDYixrQkFBbUIsQUFDbkIsTUFBTyxBQUNQLE9BQVEsQUFDUixtQ0FBNkMsQ0FDOUMsQUFDRCx5Q0FDRSxtQkFBcUIsQ0FDdEIsQUFDRCw0Q0FDRSxxQkFBdUIsQ0FDeEIsQUFVRCxhQUNFLE1BRUUsbUJBQW9CLEFBQ3BCLDBCQUE0QixDQUM3QixBQUNELElBQ0UsbUJBQW9CLEFBQ3BCLDBCQUE0QixDQUM3QixDQUNGIiwiZmlsZSI6ImVra28tbGlnaHRib3guY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVra28tbGlnaHRib3gge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLXJpZ2h0OiAwcHghaW1wb3J0YW50O1xufVxuLmVra28tbGlnaHRib3gtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmVra28tbGlnaHRib3gtY29udGFpbmVyID4gZGl2LmVra28tbGlnaHRib3gtaXRlbSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5la2tvLWxpZ2h0Ym94IGlmcmFtZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSB7XG4gIHotaW5kZXg6IDEwMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhIHtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAzMHB4O1xuICB6LWluZGV4OiAxMDA7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhID4gKiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGEgPiAqOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGEgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMzBweDtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGE6bGFzdC1jaGlsZCBzcGFuIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmVra28tbGlnaHRib3gtbmF2LW92ZXJsYXkgYTpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhLmRpc2FibGVkIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4uZWtrby1saWdodGJveCBhOmhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmVra28tbGlnaHRib3ggLm1vZGFsLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZWtrby1saWdodGJveCAubW9kYWwtZm9vdGVyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5la2tvLWxpZ2h0Ym94LWxvYWRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgLyogZXN0YWJsaXNoIGZsZXggY29udGFpbmVyICovXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC8qIG1ha2UgbWFpbiBheGlzIHZlcnRpY2FsICovXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvKiBjZW50ZXIgaXRlbXMgdmVydGljYWxseSwgaW4gdGhpcyBjYXNlICovXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5la2tvLWxpZ2h0Ym94LWxvYWRlciA+IGRpdiA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC42O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYW5pbWF0aW9uOiBzay1ib3VuY2UgMnMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XG59XG4uZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYgPiBkaXY6bGFzdC1jaGlsZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTFzO1xufVxuLm1vZGFsLWRpYWxvZyAuZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xufVxuQC13ZWJraXQta2V5ZnJhbWVzIHNrLWJvdW5jZSB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XG4gIH1cbiAgNTAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2stYm91bmNlIHtcbiAgMCUsXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbiJdfQ== */
\ No newline at end of file
diff --git a/public/css/invoice.css b/public/css/invoice.css
new file mode 100644
index 000000000..ba31b028d
--- /dev/null
+++ b/public/css/invoice.css
@@ -0,0 +1,100 @@
+body {
+ margin: 0 10px;
+ padding: 0;
+ font-family: Arial, sans-serif;
+ color: #000;
+}
+
+table {
+ width: 100%;
+}
+
+th, td {
+ text-align: left;
+ padding: 8px;
+}
+
+.row {
+ font-size: 0; /* prevent whitespace from stuffing up inline-block column layouts */
+}
+
+.col-58 {
+ display: inline-block;
+ width: 58%;
+ vertical-align: top;
+}
+
+.col-42 {
+ display: inline-block;
+ width: 42%;
+ vertical-align: top;
+}
+
+.text {
+ font-size: 16px;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-success {
+ color: #28a745;
+}
+
+.header {
+ padding-bottom: 9px;
+ margin: 10px 0 20px 0;
+ border-bottom: 1px solid #eee;
+}
+
+.company {
+ padding-left: 10px;
+}
+
+.logo {
+ max-width: 430px;
+ max-height: 120px;
+}
+
+.lines {
+ margin: 30px 0;
+ border-collapse: collapse;
+ table-layout: fixed;
+ border: 1px solid #ccc;
+}
+
+.lines thead tr {
+ background-color: #eee;
+}
+
+.lines tbody td {
+ border-bottom: 1px solid #ccc;
+}
+
+.lines .item {
+ width: 40%;
+}
+
+.lines .quantity {
+ width: 20%;
+ text-align: center;
+}
+
+.lines .price {
+ width: 20%;
+ text-align: right;
+}
+
+.lines .total {
+ width: 20%;
+ text-align: right;
+}
+
+.notes {
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/public/files/import/payments.xlsx b/public/files/import/payments.xlsx
index c7c9e1a12..c71c57c55 100644
Binary files a/public/files/import/payments.xlsx and b/public/files/import/payments.xlsx differ
diff --git a/public/js/app.js b/public/js/app.js
index 589cbb2f6..52e017bb4 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -87,7 +87,7 @@ $(document).ready(function () {
});
};
- $('input[name=\'live-search\']').liveSearch({
+ $('#live-search input[name=\'live-search\']').liveSearch({
'source': function (request, response) {
if (request != '' && request.length > 2) {
$.ajax({
@@ -115,7 +115,7 @@ $(document).ready(function () {
last_radio = '';
- $("input:radio").each(function () {
+ $('input:radio').each(function () {
if ($(this).parent().parent().hasClass('radio-inline')) {
input_name = $(this).attr("name");
input_value = $(this).attr("value");
@@ -188,42 +188,21 @@ $(document).ready(function () {
});
if (document.getElementById('recurring_frequency')) {
- $(".input-group-recurring #recurring_frequency").select2();
+ $('.input-group-recurring #recurring_frequency').select2();
$('.input-group-recurring #recurring_frequency').trigger('change');
}
+
+ $('.form-loading-button').submit(function( event ) {
+ $('.button-submit').button('loading');
+
+ return true;
+ });
+
+ if (document.getElementsByClassName('input-group-invoice-text').length) {
+ $('.input-group-invoice-text select').select2();
+ }
});
-function confirmDelete(form_id, title, message, button_cancel, button_delete) {
- $('#confirm-modal').remove();
-
- var html = '';
-
- html += '';
- html += '
';
- html += '
';
- html += ' ';
- html += '
';
- html += '
' + message + '
';
- html += '
';
- html += '
';
- html += ' ';
- html += '
';
- html += '
';
- html += '
';
-
- $('body').append(html);
-
- $('#confirm-modal').modal('show');
-}
-
$(document).on('click', '.popup', function(e) {
e.preventDefault();
@@ -270,7 +249,7 @@ $(document).on('change', '.input-group-recurring #recurring_frequency', function
recurring_custom_frequency.removeClass('hidden');
recurring_count.removeClass('hidden');
- $("#recurring_custom_frequency").select2();
+ $('#recurring_custom_frequency').select2();
} else if (value == 'no' || value == '') {
recurring_frequency.removeClass('col-md-10').removeClass('col-md-4').addClass('col-md-12');
@@ -285,3 +264,94 @@ $(document).on('change', '.input-group-recurring #recurring_frequency', function
recurring_count.removeClass('hidden');
}
});
+
+$(document).on('change', '.input-group-invoice-text select', function () {
+ var invoice_text_custom = $(this).parent().parent().parent().find('input');
+
+ if ($(this).val() == 'custom') {
+ $(this).parent().parent().removeClass('col-md-12').addClass('col-md-6');
+
+ invoice_text_custom.parent().removeClass('hidden');
+
+ $(this).select2();
+ } else {
+ $(this).parent().parent().removeClass('col-md-6').addClass('col-md-12');
+
+ invoice_text_custom.parent().addClass('hidden');
+ }
+});
+
+function confirmDelete(form_id, title, message, button_cancel, button_delete) {
+ $('#confirm-modal').remove();
+
+ var html = '';
+
+ html += '';
+ html += '
';
+ html += '
';
+ html += ' ';
+ html += '
';
+ html += '
' + message + '
';
+ html += '
';
+ html += '
';
+ html += ' ';
+ html += '
';
+ html += '
';
+ html += '
';
+
+ $('body').append(html);
+
+ $('#confirm-modal').modal('show');
+}
+
+function convertDateFormat(date, split_character) {
+ var result = [];
+ var formats = {
+ 'd': 'DD',
+ 'M': 'MMM',
+ 'Y': 'YYYY',
+ 'F': 'MMMM',
+ 'm': 'MM'
+ };
+
+ dates = date.split(split_character);
+
+ dates.forEach(function(value) {
+ result.push(formats[value]);
+ });
+
+ return result.join(split_character);
+}
+
+function itemTableResize() {
+ colspan = $('#items.table.table-bordered thead tr th').length - 1;
+
+ $('#items.table.table-bordered tbody #addItem .text-right').attr('colspan', colspan);
+ $('#items.table.table-bordered tbody #tr-subtotal .text-right:first').attr('colspan', colspan);
+ $('#items.table.table-bordered tbody #tr-discount .text-right:first').attr('colspan', colspan);
+ $('#items.table.table-bordered tbody #tr-tax .text-right:first').attr('colspan', colspan);
+ $('#items.table.table-bordered tbody #tr-total .text-right:first').attr('colspan', colspan);
+}
+
+function notificationHide(path, id, token) {
+ $.ajax({
+ url: app_url + '/common/notifications/disable',
+ type: 'POST',
+ dataType: 'JSON',
+ data: {path: path, id: id},
+ headers: { 'X-CSRF-TOKEN': token },
+ success: function(json) {
+ if (json['success']) {
+ $('#notification-' + id).remove();
+ }
+ }
+ });
+}
diff --git a/public/js/lightbox/ekko-lightbox.js b/public/js/lightbox/ekko-lightbox.js
new file mode 100644
index 000000000..b7be6e15e
--- /dev/null
+++ b/public/js/lightbox/ekko-lightbox.js
@@ -0,0 +1,694 @@
+/*!
+ * Lightbox for Bootstrap by @ashleydw
+ * https://github.com/ashleydw/lightbox
+ *
+ * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
+ */
++function ($) {
+
+'use strict';
+
+var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+var Lightbox = (function ($) {
+
+ var NAME = 'ekkoLightbox';
+ var JQUERY_NO_CONFLICT = $.fn[NAME];
+
+ var Default = {
+ title: '',
+ footer: '',
+ maxWidth: 9999,
+ maxHeight: 9999,
+ showArrows: true, //display the left / right arrows or not
+ wrapping: true, //if true, gallery loops infinitely
+ type: null, //force the lightbox into image / youtube mode. if null, or not image|youtube|vimeo; detect it
+ alwaysShowClose: false, //always show the close button, even if there is no title
+ loadingMessage: '', // http://tobiasahlin.com/spinkit/
+ leftArrow: '❮ ',
+ rightArrow: '❯ ',
+ strings: {
+ close: 'Close',
+ fail: 'Failed to load image:',
+ type: 'Could not detect remote target type. Force the type using data-type'
+ },
+ doc: document, // if in an iframe can specify top.document
+ onShow: function onShow() {},
+ onShown: function onShown() {},
+ onHide: function onHide() {},
+ onHidden: function onHidden() {},
+ onNavigate: function onNavigate() {},
+ onContentLoaded: function onContentLoaded() {}
+ };
+
+ var Lightbox = (function () {
+ _createClass(Lightbox, null, [{
+ key: 'Default',
+
+ /**
+ Class properties:
+ _$element: null -> the element currently being displayed
+ _$modal: The bootstrap modal generated
+ _$modalDialog: The .modal-dialog
+ _$modalContent: The .modal-content
+ _$modalBody: The .modal-body
+ _$modalHeader: The .modal-header
+ _$modalFooter: The .modal-footer
+ _$lightboxContainerOne: Container of the first lightbox element
+ _$lightboxContainerTwo: Container of the second lightbox element
+ _$lightboxBody: First element in the container
+ _$modalArrows: The overlayed arrows container
+ _$galleryItems: Other 's available for this gallery
+ _galleryName: Name of the current data('gallery') showing
+ _galleryIndex: The current index of the _$galleryItems being shown
+ _config: {} the options for the modal
+ _modalId: unique id for the current lightbox
+ _padding / _border: CSS properties for the modal container; these are used to calculate the available space for the content
+ */
+
+ get: function get() {
+ return Default;
+ }
+ }]);
+
+ function Lightbox($element, config) {
+ var _this = this;
+
+ _classCallCheck(this, Lightbox);
+
+ this._config = $.extend({}, Default, config);
+ this._$modalArrows = null;
+ this._galleryIndex = 0;
+ this._galleryName = null;
+ this._padding = null;
+ this._border = null;
+ this._titleIsShown = false;
+ this._footerIsShown = false;
+ this._wantedWidth = 0;
+ this._wantedHeight = 0;
+ this._touchstartX = 0;
+ this._touchendX = 0;
+
+ this._modalId = 'ekkoLightbox-' + Math.floor(Math.random() * 1000 + 1);
+ this._$element = $element instanceof jQuery ? $element : $($element);
+
+ this._isBootstrap3 = $.fn.modal.Constructor.VERSION[0] == 3;
+
+ var h4 = '' + (this._config.title || " ") + ' ';
+ var btn = '× ';
+
+ var header = '';
+ var footer = '';
+ var body = '';
+ var dialog = '' + header + body + footer + '
';
+ $(this._config.doc.body).append('' + dialog + '
');
+
+ this._$modal = $('#' + this._modalId, this._config.doc);
+ this._$modalDialog = this._$modal.find('.modal-dialog').first();
+ this._$modalContent = this._$modal.find('.modal-content').first();
+ this._$modalBody = this._$modal.find('.modal-body').first();
+ this._$modalHeader = this._$modal.find('.modal-header').first();
+ this._$modalFooter = this._$modal.find('.modal-footer').first();
+
+ this._$lightboxContainer = this._$modalBody.find('.ekko-lightbox-container').first();
+ this._$lightboxBodyOne = this._$lightboxContainer.find('> div:first-child').first();
+ this._$lightboxBodyTwo = this._$lightboxContainer.find('> div:last-child').first();
+
+ this._border = this._calculateBorders();
+ this._padding = this._calculatePadding();
+
+ this._galleryName = this._$element.data('gallery');
+ if (this._galleryName) {
+ this._$galleryItems = $(document.body).find('*[data-gallery="' + this._galleryName + '"]');
+ this._galleryIndex = this._$galleryItems.index(this._$element);
+ $(document).on('keydown.ekkoLightbox', this._navigationalBinder.bind(this));
+
+ // add the directional arrows to the modal
+ if (this._config.showArrows && this._$galleryItems.length > 1) {
+ this._$lightboxContainer.append('');
+ this._$modalArrows = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay').first();
+ this._$lightboxContainer.on('click', 'a:first-child', function (event) {
+ event.preventDefault();
+ return _this.navigateLeft();
+ });
+ this._$lightboxContainer.on('click', 'a:last-child', function (event) {
+ event.preventDefault();
+ return _this.navigateRight();
+ });
+ this.updateNavigation();
+ }
+ }
+
+ this._$modal.on('show.bs.modal', this._config.onShow.bind(this)).on('shown.bs.modal', function () {
+ _this._toggleLoading(true);
+ _this._handle();
+ return _this._config.onShown.call(_this);
+ }).on('hide.bs.modal', this._config.onHide.bind(this)).on('hidden.bs.modal', function () {
+ if (_this._galleryName) {
+ $(document).off('keydown.ekkoLightbox');
+ $(window).off('resize.ekkoLightbox');
+ }
+ _this._$modal.remove();
+ return _this._config.onHidden.call(_this);
+ }).modal(this._config);
+
+ $(window).on('resize.ekkoLightbox', function () {
+ _this._resize(_this._wantedWidth, _this._wantedHeight);
+ });
+ this._$lightboxContainer.on('touchstart', function () {
+ _this._touchstartX = event.changedTouches[0].screenX;
+ }).on('touchend', function () {
+ _this._touchendX = event.changedTouches[0].screenX;
+ _this._swipeGesure();
+ });
+ }
+
+ _createClass(Lightbox, [{
+ key: 'element',
+ value: function element() {
+ return this._$element;
+ }
+ }, {
+ key: 'modal',
+ value: function modal() {
+ return this._$modal;
+ }
+ }, {
+ key: 'navigateTo',
+ value: function navigateTo(index) {
+
+ if (index < 0 || index > this._$galleryItems.length - 1) return this;
+
+ this._galleryIndex = index;
+
+ this.updateNavigation();
+
+ this._$element = $(this._$galleryItems.get(this._galleryIndex));
+ this._handle();
+ }
+ }, {
+ key: 'navigateLeft',
+ value: function navigateLeft() {
+
+ if (!this._$galleryItems) return;
+
+ if (this._$galleryItems.length === 1) return;
+
+ if (this._galleryIndex === 0) {
+ if (this._config.wrapping) this._galleryIndex = this._$galleryItems.length - 1;else return;
+ } else //circular
+ this._galleryIndex--;
+
+ this._config.onNavigate.call(this, 'left', this._galleryIndex);
+ return this.navigateTo(this._galleryIndex);
+ }
+ }, {
+ key: 'navigateRight',
+ value: function navigateRight() {
+
+ if (!this._$galleryItems) return;
+
+ if (this._$galleryItems.length === 1) return;
+
+ if (this._galleryIndex === this._$galleryItems.length - 1) {
+ if (this._config.wrapping) this._galleryIndex = 0;else return;
+ } else //circular
+ this._galleryIndex++;
+
+ this._config.onNavigate.call(this, 'right', this._galleryIndex);
+ return this.navigateTo(this._galleryIndex);
+ }
+ }, {
+ key: 'updateNavigation',
+ value: function updateNavigation() {
+ if (!this._config.wrapping) {
+ var $nav = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay');
+ if (this._galleryIndex === 0) $nav.find('a:first-child').addClass('disabled');else $nav.find('a:first-child').removeClass('disabled');
+
+ if (this._galleryIndex === this._$galleryItems.length - 1) $nav.find('a:last-child').addClass('disabled');else $nav.find('a:last-child').removeClass('disabled');
+ }
+ }
+ }, {
+ key: 'close',
+ value: function close() {
+ return this._$modal.modal('hide');
+ }
+
+ // helper private methods
+ }, {
+ key: '_navigationalBinder',
+ value: function _navigationalBinder(event) {
+ event = event || window.event;
+ if (event.keyCode === 39) return this.navigateRight();
+ if (event.keyCode === 37) return this.navigateLeft();
+ }
+
+ // type detection private methods
+ }, {
+ key: '_detectRemoteType',
+ value: function _detectRemoteType(src, type) {
+
+ type = type || false;
+
+ if (!type && this._isImage(src)) type = 'image';
+ if (!type && this._getYoutubeId(src)) type = 'youtube';
+ if (!type && this._getVimeoId(src)) type = 'vimeo';
+ if (!type && this._getInstagramId(src)) type = 'instagram';
+ if (type == 'audio' || type == 'video' || !type && this._isMedia(src)) type = 'media';
+ if (!type || ['image', 'youtube', 'vimeo', 'instagram', 'media', 'url'].indexOf(type) < 0) type = 'url';
+
+ return type;
+ }
+ }, {
+ key: '_getRemoteContentType',
+ value: function _getRemoteContentType(src) {
+ var response = $.ajax({
+ type: 'HEAD',
+ url: src,
+ async: false
+ });
+ var contentType = response.getResponseHeader('Content-Type');
+ return contentType;
+ }
+ }, {
+ key: '_isImage',
+ value: function _isImage(string) {
+ return string && string.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+ }
+ }, {
+ key: '_isMedia',
+ value: function _isMedia(string) {
+ return string && string.match(/(\.(mp3|mp4|ogg|webm|wav)((\?|#).*)?$)/i);
+ }
+ }, {
+ key: '_containerToUse',
+ value: function _containerToUse() {
+ var _this2 = this;
+
+ // if currently showing an image, fade it out and remove
+ var $toUse = this._$lightboxBodyTwo;
+ var $current = this._$lightboxBodyOne;
+
+ if (this._$lightboxBodyTwo.hasClass('in')) {
+ $toUse = this._$lightboxBodyOne;
+ $current = this._$lightboxBodyTwo;
+ }
+
+ $current.removeClass('in show');
+ setTimeout(function () {
+ if (!_this2._$lightboxBodyTwo.hasClass('in')) _this2._$lightboxBodyTwo.empty();
+ if (!_this2._$lightboxBodyOne.hasClass('in')) _this2._$lightboxBodyOne.empty();
+ }, 500);
+
+ $toUse.addClass('in show');
+ return $toUse;
+ }
+ }, {
+ key: '_handle',
+ value: function _handle() {
+
+ var $toUse = this._containerToUse();
+ this._updateTitleAndFooter();
+
+ var currentRemote = this._$element.attr('data-remote') || this._$element.attr('href');
+ var currentType = this._detectRemoteType(currentRemote, this._$element.attr('data-type') || false);
+
+ if (['image', 'youtube', 'vimeo', 'instagram', 'media', 'url'].indexOf(currentType) < 0) return this._error(this._config.strings.type);
+
+ switch (currentType) {
+ case 'image':
+ this._preloadImage(currentRemote, $toUse);
+ this._preloadImageByIndex(this._galleryIndex, 3);
+ break;
+ case 'youtube':
+ this._showYoutubeVideo(currentRemote, $toUse);
+ break;
+ case 'vimeo':
+ this._showVimeoVideo(this._getVimeoId(currentRemote), $toUse);
+ break;
+ case 'instagram':
+ this._showInstagramVideo(this._getInstagramId(currentRemote), $toUse);
+ break;
+ case 'media':
+ this._showHtml5Media(currentRemote, $toUse);
+ break;
+ default:
+ // url
+ this._loadRemoteContent(currentRemote, $toUse);
+ break;
+ }
+
+ return this;
+ }
+ }, {
+ key: '_getYoutubeId',
+ value: function _getYoutubeId(string) {
+ if (!string) return false;
+ var matches = string.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);
+ return matches && matches[2].length === 11 ? matches[2] : false;
+ }
+ }, {
+ key: '_getVimeoId',
+ value: function _getVimeoId(string) {
+ return string && string.indexOf('vimeo') > 0 ? string : false;
+ }
+ }, {
+ key: '_getInstagramId',
+ value: function _getInstagramId(string) {
+ return string && string.indexOf('instagram') > 0 ? string : false;
+ }
+
+ // layout private methods
+ }, {
+ key: '_toggleLoading',
+ value: function _toggleLoading(show) {
+ show = show || false;
+ if (show) {
+ this._$modalDialog.css('display', 'none');
+ this._$modal.removeClass('in show');
+ $('.modal-backdrop').append(this._config.loadingMessage);
+ } else {
+ this._$modalDialog.css('display', 'block');
+ this._$modal.addClass('in show');
+ $('.modal-backdrop').find('.ekko-lightbox-loader').remove();
+ }
+ return this;
+ }
+ }, {
+ key: '_calculateBorders',
+ value: function _calculateBorders() {
+ return {
+ top: this._totalCssByAttribute('border-top-width'),
+ right: this._totalCssByAttribute('border-right-width'),
+ bottom: this._totalCssByAttribute('border-bottom-width'),
+ left: this._totalCssByAttribute('border-left-width')
+ };
+ }
+ }, {
+ key: '_calculatePadding',
+ value: function _calculatePadding() {
+ return {
+ top: this._totalCssByAttribute('padding-top'),
+ right: this._totalCssByAttribute('padding-right'),
+ bottom: this._totalCssByAttribute('padding-bottom'),
+ left: this._totalCssByAttribute('padding-left')
+ };
+ }
+ }, {
+ key: '_totalCssByAttribute',
+ value: function _totalCssByAttribute(attribute) {
+ return parseInt(this._$modalDialog.css(attribute), 10) + parseInt(this._$modalContent.css(attribute), 10) + parseInt(this._$modalBody.css(attribute), 10);
+ }
+ }, {
+ key: '_updateTitleAndFooter',
+ value: function _updateTitleAndFooter() {
+ var title = this._$element.data('title') || "";
+ var caption = this._$element.data('footer') || "";
+
+ this._titleIsShown = false;
+ if (title || this._config.alwaysShowClose) {
+ this._titleIsShown = true;
+ this._$modalHeader.css('display', '').find('.modal-title').html(title || " ");
+ } else this._$modalHeader.css('display', 'none');
+
+ this._footerIsShown = false;
+ if (caption) {
+ this._footerIsShown = true;
+ this._$modalFooter.css('display', '').html(caption);
+ } else this._$modalFooter.css('display', 'none');
+
+ return this;
+ }
+ }, {
+ key: '_showYoutubeVideo',
+ value: function _showYoutubeVideo(remote, $containerForElement) {
+ var id = this._getYoutubeId(remote);
+ var query = remote.indexOf('&') > 0 ? remote.substr(remote.indexOf('&')) : '';
+ var width = this._$element.data('width') || 560;
+ var height = this._$element.data('height') || width / (560 / 315);
+ return this._showVideoIframe('//www.youtube.com/embed/' + id + '?badge=0&autoplay=1&html5=1' + query, width, height, $containerForElement);
+ }
+ }, {
+ key: '_showVimeoVideo',
+ value: function _showVimeoVideo(id, $containerForElement) {
+ var width = this._$element.data('width') || 500;
+ var height = this._$element.data('height') || width / (560 / 315);
+ return this._showVideoIframe(id + '?autoplay=1', width, height, $containerForElement);
+ }
+ }, {
+ key: '_showInstagramVideo',
+ value: function _showInstagramVideo(id, $containerForElement) {
+ // instagram load their content into iframe's so this can be put straight into the element
+ var width = this._$element.data('width') || 612;
+ var height = width + 80;
+ id = id.substr(-1) !== '/' ? id + '/' : id; // ensure id has trailing slash
+ $containerForElement.html('');
+ this._resize(width, height);
+ this._config.onContentLoaded.call(this);
+ if (this._$modalArrows) //hide the arrows when showing video
+ this._$modalArrows.css('display', 'none');
+ this._toggleLoading(false);
+ return this;
+ }
+ }, {
+ key: '_showVideoIframe',
+ value: function _showVideoIframe(url, width, height, $containerForElement) {
+ // should be used for videos only. for remote content use loadRemoteContent (data-type=url)
+ height = height || width; // default to square
+ $containerForElement.html('
');
+ this._resize(width, height);
+ this._config.onContentLoaded.call(this);
+ if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video
+ this._toggleLoading(false);
+ return this;
+ }
+ }, {
+ key: '_showHtml5Media',
+ value: function _showHtml5Media(url, $containerForElement) {
+ // should be used for videos only. for remote content use loadRemoteContent (data-type=url)
+ var contentType = this._getRemoteContentType(url);
+ if (!contentType) {
+ return this._error(this._config.strings.type);
+ }
+ var mediaType = '';
+ if (contentType.indexOf('audio') > 0) {
+ mediaType = 'audio';
+ } else {
+ mediaType = 'video';
+ }
+ var width = this._$element.data('width') || 560;
+ var height = this._$element.data('height') || width / (560 / 315);
+ $containerForElement.html('<' + mediaType + ' width="' + width + '" height="' + height + '" preload="auto" autoplay controls class="embed-responsive-item">' + this._config.strings.type + '' + mediaType + '>
');
+ this._resize(width, height);
+ this._config.onContentLoaded.call(this);
+ if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video
+ this._toggleLoading(false);
+ return this;
+ }
+ }, {
+ key: '_loadRemoteContent',
+ value: function _loadRemoteContent(url, $containerForElement) {
+ var _this3 = this;
+
+ var width = this._$element.data('width') || 560;
+ var height = this._$element.data('height') || 560;
+
+ var disableExternalCheck = this._$element.data('disableExternalCheck') || false;
+ this._toggleLoading(false);
+
+ // external urls are loading into an iframe
+ // local ajax can be loaded into the container itself
+ if (!disableExternalCheck && !this._isExternal(url)) {
+ $containerForElement.load(url, $.proxy(function () {
+ return _this3._$element.trigger('loaded.bs.modal');l;
+ }));
+ } else {
+ $containerForElement.html('');
+ this._config.onContentLoaded.call(this);
+ }
+
+ if (this._$modalArrows) //hide the arrows when remote content
+ this._$modalArrows.css('display', 'none');
+
+ this._resize(width, height);
+ return this;
+ }
+ }, {
+ key: '_isExternal',
+ value: function _isExternal(url) {
+ var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
+ if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
+
+ if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(':(' + ({
+ "http:": 80,
+ "https:": 443
+ })[location.protocol] + ')?$'), "") !== location.host) return true;
+
+ return false;
+ }
+ }, {
+ key: '_error',
+ value: function _error(message) {
+ console.error(message);
+ this._containerToUse().html(message);
+ this._resize(300, 300);
+ return this;
+ }
+ }, {
+ key: '_preloadImageByIndex',
+ value: function _preloadImageByIndex(startIndex, numberOfTimes) {
+
+ if (!this._$galleryItems) return;
+
+ var next = $(this._$galleryItems.get(startIndex), false);
+ if (typeof next == 'undefined') return;
+
+ var src = next.attr('data-remote') || next.attr('href');
+ if (next.attr('data-type') === 'image' || this._isImage(src)) this._preloadImage(src, false);
+
+ if (numberOfTimes > 0) return this._preloadImageByIndex(startIndex + 1, numberOfTimes - 1);
+ }
+ }, {
+ key: '_preloadImage',
+ value: function _preloadImage(src, $containerForImage) {
+ var _this4 = this;
+
+ $containerForImage = $containerForImage || false;
+
+ var img = new Image();
+ if ($containerForImage) {
+ (function () {
+
+ // if loading takes > 200ms show a loader
+ var loadingTimeout = setTimeout(function () {
+ $containerForImage.append(_this4._config.loadingMessage);
+ }, 200);
+
+ img.onload = function () {
+ if (loadingTimeout) clearTimeout(loadingTimeout);
+ loadingTimeout = null;
+ var image = $(' ');
+ image.attr('src', img.src);
+ image.addClass('img-fluid');
+
+ // backward compatibility for bootstrap v3
+ image.css('width', '100%');
+
+ $containerForImage.html(image);
+ if (_this4._$modalArrows) _this4._$modalArrows.css('display', ''); // remove display to default to css property
+
+ _this4._resize(img.width, img.height);
+ _this4._toggleLoading(false);
+ return _this4._config.onContentLoaded.call(_this4);
+ };
+ img.onerror = function () {
+ _this4._toggleLoading(false);
+ return _this4._error(_this4._config.strings.fail + (' ' + src));
+ };
+ })();
+ }
+
+ img.src = src;
+ return img;
+ }
+ }, {
+ key: '_swipeGesure',
+ value: function _swipeGesure() {
+ if (this._touchendX < this._touchstartX) {
+ return this.navigateRight();
+ }
+ if (this._touchendX > this._touchstartX) {
+ return this.navigateLeft();
+ }
+ }
+ }, {
+ key: '_resize',
+ value: function _resize(width, height) {
+
+ height = height || width;
+ this._wantedWidth = width;
+ this._wantedHeight = height;
+
+ var imageAspecRatio = width / height;
+
+ // if width > the available space, scale down the expected width and height
+ var widthBorderAndPadding = this._padding.left + this._padding.right + this._border.left + this._border.right;
+
+ // force 10px margin if window size > 575px
+ var addMargin = this._config.doc.body.clientWidth > 575 ? 20 : 0;
+ var discountMargin = this._config.doc.body.clientWidth > 575 ? 0 : 20;
+
+ var maxWidth = Math.min(width + widthBorderAndPadding, this._config.doc.body.clientWidth - addMargin, this._config.maxWidth);
+
+ if (width + widthBorderAndPadding > maxWidth) {
+ height = (maxWidth - widthBorderAndPadding - discountMargin) / imageAspecRatio;
+ width = maxWidth;
+ } else width = width + widthBorderAndPadding;
+
+ var headerHeight = 0,
+ footerHeight = 0;
+
+ // as the resize is performed the modal is show, the calculate might fail
+ // if so, default to the default sizes
+ if (this._footerIsShown) footerHeight = this._$modalFooter.outerHeight(true) || 55;
+
+ if (this._titleIsShown) headerHeight = this._$modalHeader.outerHeight(true) || 67;
+
+ var borderPadding = this._padding.top + this._padding.bottom + this._border.bottom + this._border.top;
+
+ //calculated each time as resizing the window can cause them to change due to Bootstraps fluid margins
+ var margins = parseFloat(this._$modalDialog.css('margin-top')) + parseFloat(this._$modalDialog.css('margin-bottom'));
+
+ var maxHeight = Math.min(height, $(window).height() - borderPadding - margins - headerHeight - footerHeight, this._config.maxHeight - borderPadding - headerHeight - footerHeight);
+
+ if (height > maxHeight) {
+ // if height > the available height, scale down the width
+ width = Math.ceil(maxHeight * imageAspecRatio) + widthBorderAndPadding;
+ }
+
+ this._$lightboxContainer.css('height', maxHeight);
+ this._$modalDialog.css('flex', 1).css('maxWidth', width);
+
+ var modal = this._$modal.data('bs.modal');
+ if (modal) {
+ // v4 method is mistakenly protected
+ try {
+ modal._handleUpdate();
+ } catch (Exception) {
+ modal.handleUpdate();
+ }
+ }
+ return this;
+ }
+ }], [{
+ key: '_jQueryInterface',
+ value: function _jQueryInterface(config) {
+ var _this5 = this;
+
+ config = config || {};
+ return this.each(function () {
+ var $this = $(_this5);
+ var _config = $.extend({}, Lightbox.Default, $this.data(), typeof config === 'object' && config);
+
+ new Lightbox(_this5, _config);
+ });
+ }
+ }]);
+
+ return Lightbox;
+ })();
+
+ $.fn[NAME] = Lightbox._jQueryInterface;
+ $.fn[NAME].Constructor = Lightbox;
+ $.fn[NAME].noConflict = function () {
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
+ return Lightbox._jQueryInterface;
+ };
+
+ return Lightbox;
+})(jQuery);
+//# sourceMappingURL=ekko-lightbox.js.map
+
+}(jQuery);
diff --git a/public/js/lightbox/ekko-lightbox.min.js b/public/js/lightbox/ekko-lightbox.min.js
new file mode 100644
index 000000000..0289642ba
--- /dev/null
+++ b/public/js/lightbox/ekko-lightbox.min.js
@@ -0,0 +1,2 @@
++function(a){"use strict";function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}var c=function(){function a(a,b){for(var c=0;c',leftArrow:"❮ ",rightArrow:"❯ ",strings:{close:"Close",fail:"Failed to load image:",type:"Could not detect remote target type. Force the type using data-type"},doc:document,onShow:function(){},onShown:function(){},onHide:function(){},onHidden:function(){},onNavigate:function(){},onContentLoaded:function(){}},g=function(){function d(c,e){var g=this;b(this,d),this._config=a.extend({},f,e),this._$modalArrows=null,this._galleryIndex=0,this._galleryName=null,this._padding=null,this._border=null,this._titleIsShown=!1,this._footerIsShown=!1,this._wantedWidth=0,this._wantedHeight=0,this._touchstartX=0,this._touchendX=0,this._modalId="ekkoLightbox-"+Math.floor(1e3*Math.random()+1),this._$element=c instanceof jQuery?c:a(c),this._isBootstrap3=3==a.fn.modal.Constructor.VERSION[0];var h=''+(this._config.title||" ")+" ",i='× ',j='",k='",l='',m='";a(this._config.doc.body).append(''+m+"
"),this._$modal=a("#"+this._modalId,this._config.doc),this._$modalDialog=this._$modal.find(".modal-dialog").first(),this._$modalContent=this._$modal.find(".modal-content").first(),this._$modalBody=this._$modal.find(".modal-body").first(),this._$modalHeader=this._$modal.find(".modal-header").first(),this._$modalFooter=this._$modal.find(".modal-footer").first(),this._$lightboxContainer=this._$modalBody.find(".ekko-lightbox-container").first(),this._$lightboxBodyOne=this._$lightboxContainer.find("> div:first-child").first(),this._$lightboxBodyTwo=this._$lightboxContainer.find("> div:last-child").first(),this._border=this._calculateBorders(),this._padding=this._calculatePadding(),this._galleryName=this._$element.data("gallery"),this._galleryName&&(this._$galleryItems=a(document.body).find('*[data-gallery="'+this._galleryName+'"]'),this._galleryIndex=this._$galleryItems.index(this._$element),a(document).on("keydown.ekkoLightbox",this._navigationalBinder.bind(this)),this._config.showArrows&&this._$galleryItems.length>1&&(this._$lightboxContainer.append('"),this._$modalArrows=this._$lightboxContainer.find("div.ekko-lightbox-nav-overlay").first(),this._$lightboxContainer.on("click","a:first-child",function(a){return a.preventDefault(),g.navigateLeft()}),this._$lightboxContainer.on("click","a:last-child",function(a){return a.preventDefault(),g.navigateRight()}),this.updateNavigation())),this._$modal.on("show.bs.modal",this._config.onShow.bind(this)).on("shown.bs.modal",function(){return g._toggleLoading(!0),g._handle(),g._config.onShown.call(g)}).on("hide.bs.modal",this._config.onHide.bind(this)).on("hidden.bs.modal",function(){return g._galleryName&&(a(document).off("keydown.ekkoLightbox"),a(window).off("resize.ekkoLightbox")),g._$modal.remove(),g._config.onHidden.call(g)}).modal(this._config),a(window).on("resize.ekkoLightbox",function(){g._resize(g._wantedWidth,g._wantedHeight)}),this._$lightboxContainer.on("touchstart",function(){g._touchstartX=event.changedTouches[0].screenX}).on("touchend",function(){g._touchendX=event.changedTouches[0].screenX,g._swipeGesure()})}return c(d,null,[{key:"Default",get:function(){return f}}]),c(d,[{key:"element",value:function(){return this._$element}},{key:"modal",value:function(){return this._$modal}},{key:"navigateTo",value:function(b){return b<0||b>this._$galleryItems.length-1?this:(this._galleryIndex=b,this.updateNavigation(),this._$element=a(this._$galleryItems.get(this._galleryIndex)),void this._handle())}},{key:"navigateLeft",value:function(){if(this._$galleryItems&&1!==this._$galleryItems.length){if(0===this._galleryIndex){if(!this._config.wrapping)return;this._galleryIndex=this._$galleryItems.length-1}else this._galleryIndex--;return this._config.onNavigate.call(this,"left",this._galleryIndex),this.navigateTo(this._galleryIndex)}}},{key:"navigateRight",value:function(){if(this._$galleryItems&&1!==this._$galleryItems.length){if(this._galleryIndex===this._$galleryItems.length-1){if(!this._config.wrapping)return;this._galleryIndex=0}else this._galleryIndex++;return this._config.onNavigate.call(this,"right",this._galleryIndex),this.navigateTo(this._galleryIndex)}}},{key:"updateNavigation",value:function(){if(!this._config.wrapping){var a=this._$lightboxContainer.find("div.ekko-lightbox-nav-overlay");0===this._galleryIndex?a.find("a:first-child").addClass("disabled"):a.find("a:first-child").removeClass("disabled"),this._galleryIndex===this._$galleryItems.length-1?a.find("a:last-child").addClass("disabled"):a.find("a:last-child").removeClass("disabled")}}},{key:"close",value:function(){return this._$modal.modal("hide")}},{key:"_navigationalBinder",value:function(a){return a=a||window.event,39===a.keyCode?this.navigateRight():37===a.keyCode?this.navigateLeft():void 0}},{key:"_detectRemoteType",value:function(a,b){return b=b||!1,!b&&this._isImage(a)&&(b="image"),!b&&this._getYoutubeId(a)&&(b="youtube"),!b&&this._getVimeoId(a)&&(b="vimeo"),!b&&this._getInstagramId(a)&&(b="instagram"),("audio"==b||"video"==b||!b&&this._isMedia(a))&&(b="media"),(!b||["image","youtube","vimeo","instagram","media","url"].indexOf(b)<0)&&(b="url"),b}},{key:"_getRemoteContentType",value:function(b){var c=a.ajax({type:"HEAD",url:b,async:!1}),d=c.getResponseHeader("Content-Type");return d}},{key:"_isImage",value:function(a){return a&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)}},{key:"_isMedia",value:function(a){return a&&a.match(/(\.(mp3|mp4|ogg|webm|wav)((\?|#).*)?$)/i)}},{key:"_containerToUse",value:function(){var a=this,b=this._$lightboxBodyTwo,c=this._$lightboxBodyOne;return this._$lightboxBodyTwo.hasClass("in")&&(b=this._$lightboxBodyOne,c=this._$lightboxBodyTwo),c.removeClass("in show"),setTimeout(function(){a._$lightboxBodyTwo.hasClass("in")||a._$lightboxBodyTwo.empty(),a._$lightboxBodyOne.hasClass("in")||a._$lightboxBodyOne.empty()},500),b.addClass("in show"),b}},{key:"_handle",value:function(){var a=this._containerToUse();this._updateTitleAndFooter();var b=this._$element.attr("data-remote")||this._$element.attr("href"),c=this._detectRemoteType(b,this._$element.attr("data-type")||!1);if(["image","youtube","vimeo","instagram","media","url"].indexOf(c)<0)return this._error(this._config.strings.type);switch(c){case"image":this._preloadImage(b,a),this._preloadImageByIndex(this._galleryIndex,3);break;case"youtube":this._showYoutubeVideo(b,a);break;case"vimeo":this._showVimeoVideo(this._getVimeoId(b),a);break;case"instagram":this._showInstagramVideo(this._getInstagramId(b),a);break;case"media":this._showHtml5Media(b,a);break;default:this._loadRemoteContent(b,a)}return this}},{key:"_getYoutubeId",value:function(a){if(!a)return!1;var b=a.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);return!(!b||11!==b[2].length)&&b[2]}},{key:"_getVimeoId",value:function(a){return!!(a&&a.indexOf("vimeo")>0)&&a}},{key:"_getInstagramId",value:function(a){return!!(a&&a.indexOf("instagram")>0)&&a}},{key:"_toggleLoading",value:function(b){return b=b||!1,b?(this._$modalDialog.css("display","none"),this._$modal.removeClass("in show"),a(".modal-backdrop").append(this._config.loadingMessage)):(this._$modalDialog.css("display","block"),this._$modal.addClass("in show"),a(".modal-backdrop").find(".ekko-lightbox-loader").remove()),this}},{key:"_calculateBorders",value:function(){return{top:this._totalCssByAttribute("border-top-width"),right:this._totalCssByAttribute("border-right-width"),bottom:this._totalCssByAttribute("border-bottom-width"),left:this._totalCssByAttribute("border-left-width")}}},{key:"_calculatePadding",value:function(){return{top:this._totalCssByAttribute("padding-top"),right:this._totalCssByAttribute("padding-right"),bottom:this._totalCssByAttribute("padding-bottom"),left:this._totalCssByAttribute("padding-left")}}},{key:"_totalCssByAttribute",value:function(a){return parseInt(this._$modalDialog.css(a),10)+parseInt(this._$modalContent.css(a),10)+parseInt(this._$modalBody.css(a),10)}},{key:"_updateTitleAndFooter",value:function(){var a=this._$element.data("title")||"",b=this._$element.data("footer")||"";return this._titleIsShown=!1,a||this._config.alwaysShowClose?(this._titleIsShown=!0,this._$modalHeader.css("display","").find(".modal-title").html(a||" ")):this._$modalHeader.css("display","none"),this._footerIsShown=!1,b?(this._footerIsShown=!0,this._$modalFooter.css("display","").html(b)):this._$modalFooter.css("display","none"),this}},{key:"_showYoutubeVideo",value:function(a,b){var c=this._getYoutubeId(a),d=a.indexOf("&")>0?a.substr(a.indexOf("&")):"",e=this._$element.data("width")||560,f=this._$element.data("height")||e/(560/315);return this._showVideoIframe("//www.youtube.com/embed/"+c+"?badge=0&autoplay=1&html5=1"+d,e,f,b)}},{key:"_showVimeoVideo",value:function(a,b){var c=this._$element.data("width")||500,d=this._$element.data("height")||c/(560/315);return this._showVideoIframe(a+"?autoplay=1",c,d,b)}},{key:"_showInstagramVideo",value:function(a,b){var c=this._$element.data("width")||612,d=c+80;return a="/"!==a.substr(-1)?a+"/":a,b.html(''),this._resize(c,d),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_showVideoIframe",value:function(a,b,c,d){return c=c||b,d.html('
'),this._resize(b,c),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_showHtml5Media",value:function(a,b){var c=this._getRemoteContentType(a);if(!c)return this._error(this._config.strings.type);var d="";d=c.indexOf("audio")>0?"audio":"video";var e=this._$element.data("width")||560,f=this._$element.data("height")||e/(560/315);return b.html('<'+d+' width="'+e+'" height="'+f+'" preload="auto" autoplay controls class="embed-responsive-item">'+this._config.strings.type+""+d+">
"),this._resize(e,f),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_loadRemoteContent",value:function(b,c){var d=this,e=this._$element.data("width")||560,f=this._$element.data("height")||560,g=this._$element.data("disableExternalCheck")||!1;return this._toggleLoading(!1),g||this._isExternal(b)?(c.html(''),this._config.onContentLoaded.call(this)):c.load(b,a.proxy(function(){return d._$element.trigger("loaded.bs.modal")})),this._$modalArrows&&this._$modalArrows.css("display","none"),this._resize(e,f),this}},{key:"_isExternal",value:function(a){var b=a.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);return"string"==typeof b[1]&&b[1].length>0&&b[1].toLowerCase()!==location.protocol||"string"==typeof b[2]&&b[2].length>0&&b[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"),"")!==location.host}},{key:"_error",value:function(a){return console.error(a),this._containerToUse().html(a),this._resize(300,300),this}},{key:"_preloadImageByIndex",value:function(b,c){if(this._$galleryItems){var d=a(this._$galleryItems.get(b),!1);if("undefined"!=typeof d){var e=d.attr("data-remote")||d.attr("href");return("image"===d.attr("data-type")||this._isImage(e))&&this._preloadImage(e,!1),c>0?this._preloadImageByIndex(b+1,c-1):void 0}}}},{key:"_preloadImage",value:function(b,c){var d=this;c=c||!1;var e=new Image;return c&&!function(){var f=setTimeout(function(){c.append(d._config.loadingMessage)},200);e.onload=function(){f&&clearTimeout(f),f=null;var b=a(" ");return b.attr("src",e.src),b.addClass("img-fluid"),b.css("width","100%"),c.html(b),d._$modalArrows&&d._$modalArrows.css("display",""),d._resize(e.width,e.height),d._toggleLoading(!1),d._config.onContentLoaded.call(d)},e.onerror=function(){return d._toggleLoading(!1),d._error(d._config.strings.fail+(" "+b))}}(),e.src=b,e}},{key:"_swipeGesure",value:function(){return this._touchendXthis._touchstartX?this.navigateLeft():void 0}},{key:"_resize",value:function(b,c){c=c||b,this._wantedWidth=b,this._wantedHeight=c;var d=b/c,e=this._padding.left+this._padding.right+this._border.left+this._border.right,f=this._config.doc.body.clientWidth>575?20:0,g=this._config.doc.body.clientWidth>575?0:20,h=Math.min(b+e,this._config.doc.body.clientWidth-f,this._config.maxWidth);b+e>h?(c=(h-e-g)/d,b=h):b+=e;var i=0,j=0;this._footerIsShown&&(j=this._$modalFooter.outerHeight(!0)||55),this._titleIsShown&&(i=this._$modalHeader.outerHeight(!0)||67);var k=this._padding.top+this._padding.bottom+this._border.bottom+this._border.top,l=parseFloat(this._$modalDialog.css("margin-top"))+parseFloat(this._$modalDialog.css("margin-bottom")),m=Math.min(c,a(window).height()-k-l-i-j,this._config.maxHeight-k-i-j);c>m&&(b=Math.ceil(m*d)+e),this._$lightboxContainer.css("height",m),this._$modalDialog.css("flex",1).css("maxWidth",b);var n=this._$modal.data("bs.modal");if(n)try{n._handleUpdate()}catch(o){n.handleUpdate()}return this}}],[{key:"_jQueryInterface",value:function(b){var c=this;return b=b||{},this.each(function(){var e=a(c),f=a.extend({},d.Default,e.data(),"object"==typeof b&&b);new d(c,f)})}}]),d}();return a.fn[d]=g._jQueryInterface,a.fn[d].Constructor=g,a.fn[d].noConflict=function(){return a.fn[d]=e,g._jQueryInterface},g})(jQuery)}(jQuery);
+//# sourceMappingURL=ekko-lightbox.min.js.map
\ No newline at end of file
diff --git a/resources/lang/ar-SA/bills.php b/resources/lang/ar-SA/bills.php
index 4c25cd37d..f1192962d 100644
--- a/resources/lang/ar-SA/bills.php
+++ b/resources/lang/ar-SA/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'تم تحويل فاتورة الشراء إلى فاتورة مستلمة بنجاح!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/ar-SA/customers.php b/resources/lang/ar-SA/customers.php
index 2054a6d05..e1eee985e 100644
--- a/resources/lang/ar-SA/customers.php
+++ b/resources/lang/ar-SA/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'البريد الإلكتروني مسجل مسبقاً.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/ar-SA/footer.php b/resources/lang/ar-SA/footer.php
index 6ce14d9ea..bf51366d3 100644
--- a/resources/lang/ar-SA/footer.php
+++ b/resources/lang/ar-SA/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'إصدار',
'powered' => 'بواسطة أكاونتينج',
+ 'link' => 'https://akaunting.com',
'software' => 'برنامج محاسبي مجاني',
];
diff --git a/resources/lang/ar-SA/general.php b/resources/lang/ar-SA/general.php
index f5426da2f..74f0d18e0 100644
--- a/resources/lang/ar-SA/general.php
+++ b/resources/lang/ar-SA/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'الرقم|الأرقام',
'statuses' => 'الحالة|الحالات',
'others' => 'الأخرى|الأخريات',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'لوحة التحكم',
'banking' => 'الخدمات المصرفية',
@@ -81,6 +85,7 @@ return [
'color' => 'اللون',
'save' => 'حفظ',
'cancel' => 'إلغاء',
+ 'loading' => 'Loading...',
'from' => 'من',
'to' => 'إلى',
'print' => 'طباعة',
@@ -101,12 +106,27 @@ return [
'partially' => 'جزئي',
'partially_paid' => 'مدفوع جزئياً',
'export' => 'تصدير',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'تفعيل',
'disable' => 'تعطيل',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'إضافة :type',
'edit' => 'تعديل :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'لم يتم اختيار أي ملف...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/ar-SA/header.php b/resources/lang/ar-SA/header.php
index bd257ed99..500476663 100644
--- a/resources/lang/ar-SA/header.php
+++ b/resources/lang/ar-SA/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count منتج غير متوفر|[2,*] :count منتجات غير متوفرة',
'view_all' => 'عرض الكل'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/ar-SA/invoices.php b/resources/lang/ar-SA/invoices.php
index 2b3627cb4..0a906d9f5 100644
--- a/resources/lang/ar-SA/invoices.php
+++ b/resources/lang/ar-SA/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'التحديد كمرسل',
'download_pdf' => 'تحميل PDF',
'send_mail' => 'إرسال بريد إلكتروني',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'مسودة',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'تم إرسال الفاتورة بنجاح!',
'marked_sent' => 'تم تحديد الفاتورة كفاتورة مرسلة بنجاح!',
'email_required' => 'لا يوجد عنوان البريد إلكتروني لهذا العميل!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/ar-SA/items.php b/resources/lang/ar-SA/items.php
index 61b5bf174..179287c8a 100644
--- a/resources/lang/ar-SA/items.php
+++ b/resources/lang/ar-SA/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'رمز SKU',
'notification' => [
- 'message' => 'تم إرسال هذه الرسالة لإبلاغك بأن :name قد نفد من المخزون.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'عرض الآن',
],
diff --git a/resources/lang/ar-SA/messages.php b/resources/lang/ar-SA/messages.php
index a69086a08..6e9c3199d 100644
--- a/resources/lang/ar-SA/messages.php
+++ b/resources/lang/ar-SA/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => 'تم تعطيل :type!',
],
'error' => [
- 'over_payment' => 'خطأ: لم تتم إضافة الدفع! القيمة المتبقية تجاوزت المجموع.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'خطأ: غير مسموح لك بإدارة هذه الشركة!',
'customer' => 'خطأ: لم تتم إضافة المستخدم! :name يستخدم هذا البريد الإلكتروني مسبقاً.',
'no_file' => 'خطأ: لم يتم تحديد أي ملف!',
diff --git a/resources/lang/ar-SA/modules.php b/resources/lang/ar-SA/modules.php
index 5bc800fe2..a4a9e9b4a 100644
--- a/resources/lang/ar-SA/modules.php
+++ b/resources/lang/ar-SA/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'لا توجد تطبيقات فى هذه الفئة حتى الآن.',
'developer' => 'هل أنت مطوّر؟ هنا يمكنك أن تتعلم كيفية إنشاء تطبيق وبدء البيع من اليوم!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'حول',
'added' => 'تمت الإضافة',
@@ -32,15 +34,28 @@ return [
'installation' => 'التثبيت',
'faq' => 'الأسئلة الشائعة',
'changelog' => 'سجل التغييرات',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'تثبيت التطبيق',
'download' => 'جاري تحميل ملف :module.',
'unzip' => 'جاري استخراج ملفات :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'جاري تثبيت ملفات :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'مثبت',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'التي تم شراؤها',
'installed' => 'التي تم تثبيتها',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/ar-SA/reconciliations.php b/resources/lang/ar-SA/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/ar-SA/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/ar-SA/settings.php b/resources/lang/ar-SA/settings.php
index f2bd4c81f..94461a482 100644
--- a/resources/lang/ar-SA/settings.php
+++ b/resources/lang/ar-SA/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'عدد الأرقام',
'next' => 'الرقم التالي',
'logo' => 'الشعار',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'الافتراضي',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'إرسال قبل ميعاد الاستحقاق بأيام',
'cron_command' => 'أمر التكرار',
'schedule_time' => 'ساعة البدء',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'الظهور',
diff --git a/resources/lang/ar-SA/validation.php b/resources/lang/ar-SA/validation.php
index 3985272fd..8ac19d287 100644
--- a/resources/lang/ar-SA/validation.php
+++ b/resources/lang/ar-SA/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'رسالة مخصصة',
],
'invalid_currency' => 'رمز خانة :attribute غير صحيحة.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/bg-BG/bills.php b/resources/lang/bg-BG/bills.php
index 34df438b5..ab769eb04 100644
--- a/resources/lang/bg-BG/bills.php
+++ b/resources/lang/bg-BG/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Фактура, отбелязана като платена!',
+ 'draft' => 'Това е ЧЕРНОВА фактура и няма да бъде отразена в графиките след като бъде получена.',
+
+ 'status' => [
+ 'created' => 'Създадено на :date',
+ 'receive' => [
+ 'draft' => 'Не е изпратено',
+ 'received' => 'Получено на :date',
+ ],
+ 'paid' => [
+ 'await' => 'Очакващо плащане',
+ ],
+ ],
],
];
diff --git a/resources/lang/bg-BG/customers.php b/resources/lang/bg-BG/customers.php
index e795ea981..14cb14b58 100644
--- a/resources/lang/bg-BG/customers.php
+++ b/resources/lang/bg-BG/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Този имейл вече е бил регистриран.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer направи плащане от :amount по фактура номер :invoice_number.',
+ 'button' => 'Покажи',
+ ],
];
diff --git a/resources/lang/bg-BG/footer.php b/resources/lang/bg-BG/footer.php
index 8b50bb57b..4a8f44cb6 100644
--- a/resources/lang/bg-BG/footer.php
+++ b/resources/lang/bg-BG/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Версия',
'powered' => 'С подкрепата на Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Безплатен счетоводен софтуер',
];
diff --git a/resources/lang/bg-BG/general.php b/resources/lang/bg-BG/general.php
index 10aff9b89..1e79140ae 100644
--- a/resources/lang/bg-BG/general.php
+++ b/resources/lang/bg-BG/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Номер | Числа',
'statuses' => 'Статус | Статуси',
'others' => 'Други|други',
+ 'contacts' => 'Контакт|Контакти',
+ 'reconciliations' => 'Оспорване|Оспорвания',
+ 'deposits' => 'Депозит|Депозити',
+ 'withdrawals' => 'Теглене |Тегления',
'dashboard' => 'Табло',
'banking' => 'Банкиране',
@@ -81,6 +85,7 @@ return [
'color' => 'Цвят',
'save' => 'Запиши',
'cancel' => 'Отмени',
+ 'loading' => 'Зареждане...',
'from' => 'От',
'to' => 'До',
'print' => 'Печат',
@@ -101,12 +106,27 @@ return [
'partially' => 'Частичен',
'partially_paid' => 'Частично платено',
'export' => 'Експорт',
+ 'finish' => 'Завърши',
+ 'wizard' => 'Съветник',
+ 'skip' => 'Пропусни',
'enable' => 'Включи',
'disable' => 'Изключи',
+ 'select_all' => 'Избери Всички',
+ 'unselect_all' => 'Отмени всички',
+ 'go_to' => 'Отидете на :name',
+ 'created_date' => 'Дата на създаване',
+ 'period' => 'Период',
+ 'start' => 'Начало',
+ 'end' => 'Край',
+ 'clear' => 'Изчисти',
+ 'difference' => 'Разлика',
'title' => [
'new' => 'Нов :type',
'edit' => 'Редактирай :type',
+ 'create' => 'Създай :type',
+ 'send' => 'Изпрати :type',
+ 'get' => 'Получи :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Не е избран файл...',
],
+ 'date_range' => [
+ 'today' => 'Днес',
+ 'yesterday' => 'Вчера',
+ 'last_days' => 'Последни :day дни',
+ 'this_month' => 'Този месец',
+ 'last_month' => 'Последния месец',
+ ],
];
diff --git a/resources/lang/bg-BG/header.php b/resources/lang/bg-BG/header.php
index 211b19582..0cf61696b 100644
--- a/resources/lang/bg-BG/header.php
+++ b/resources/lang/bg-BG/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count стока без наличност|[2,*] :count стоки без наличност',
'view_all' => 'Вижте всички'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/bg-BG/invoices.php b/resources/lang/bg-BG/invoices.php
index 19ef40499..3a8fe6c2c 100644
--- a/resources/lang/bg-BG/invoices.php
+++ b/resources/lang/bg-BG/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Маркирай като изпратено',
'download_pdf' => 'Изтегляне на PDF',
'send_mail' => 'Изпращане на имейл',
+ 'all_invoices' => 'Вход за да видите всички фактури',
'status' => [
'draft' => 'Чернова',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'И-мейла беше изпратен успешно!',
'marked_sent' => 'Фактурата беше изпратена успешно!',
'email_required' => 'Няма имейл адрес за този клиент!',
+ 'draft' => 'Това е ЧЕРНОВА фактура и няма да бъде отразена в графиките след като бъде изпратена.',
+
+ 'status' => [
+ 'created' => 'Създадено на :date',
+ 'send' => [
+ 'draft' => 'Не е изпратено',
+ 'sent' => 'Изпратено на :date',
+ ],
+ 'paid' => [
+ 'await' => 'Очакващо плащане',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/bg-BG/items.php b/resources/lang/bg-BG/items.php
index f5db258ae..8aca8fb48 100644
--- a/resources/lang/bg-BG/items.php
+++ b/resources/lang/bg-BG/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Вие получавате този имейл, защото :name е на изчерпване.',
+ 'message' => [
+ 'reminder' => 'Вие получавате този имейл, защото са останали само :quantity от :name.',
+ 'out_of_stock' => 'Вие получавате този имейл, защото :name е на изчерпване.',
+ ],
'button' => 'Покажи сега',
],
diff --git a/resources/lang/bg-BG/messages.php b/resources/lang/bg-BG/messages.php
index 7a39131d3..e1c3b8708 100644
--- a/resources/lang/bg-BG/messages.php
+++ b/resources/lang/bg-BG/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type изключен!',
],
'error' => [
- 'over_payment' => 'Грешка: Плащането не е добавено! Сумата преминава общата сума.',
+ 'over_payment' => 'Грешка: Плащането не е добавено! Сумата, която сте въвели минава общо: :amount',
'not_user_company' => 'Грешка: Не ви е позволено да управлявате тази компания!',
'customer' => 'Грешка: Потребителят не е създаден! :name вече използва този имейл адрес.',
'no_file' => 'Грешка: Няма избран файл!',
diff --git a/resources/lang/bg-BG/modules.php b/resources/lang/bg-BG/modules.php
index e5ccea66f..1599a6d5e 100644
--- a/resources/lang/bg-BG/modules.php
+++ b/resources/lang/bg-BG/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Все още няма приложения в тази категория.',
'developer' => 'Вие сте разработчик? Тук можете да научите как да създадете приложение и да започнете да продавате днес!',
+ 'recommended_apps' => 'Препоръчани Добавки',
+
'about' => 'Относно',
'added' => 'Добавено',
@@ -32,15 +34,28 @@ return [
'installation' => 'Инсталация',
'faq' => 'ЧЗВ',
'changelog' => 'Списък на промените',
+ 'reviews' => 'Отзиви',
],
'installation' => [
'header' => 'Инсталиране на приложение',
'download' => 'Изтегляне :module файл.',
'unzip' => 'Извличане :module файлове.',
+ 'file_copy' => 'Копиране на :module файлове.',
+ 'migrate' => 'Прилагане на :module обновявания.',
+ 'finish' => 'Обновяването е инсталирано успешно. Ще бъдете препратени към Центъра за Обновявания.',
'install' => 'Инсталиране :module файлове.',
],
+ 'errors' => [
+ 'download' => ':module не може да се изтегли!',
+ 'upload' => 'Изтегления :module не може да бъде запаметен!',
+ 'unzip' => ':module не може да се деархивира!',
+ 'file_copy' => ':module файлове не могат да се копират!',
+ 'migrate' => ':module е счупен!',
+ 'migrate core' => ':module има вече последната версия и не може да се обнови.',
+ ],
+
'badge' => [
'installed' => 'Инсталирано',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Закупени',
'installed' => 'Инсталирани',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Добави отзив'
+ ],
+ 'na' => 'Няма отзиви.'
+ ]
];
diff --git a/resources/lang/bg-BG/reconciliations.php b/resources/lang/bg-BG/reconciliations.php
new file mode 100644
index 000000000..e151e6b9f
--- /dev/null
+++ b/resources/lang/bg-BG/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Оспори',
+ 'reconciled' => 'Оспорен',
+ 'closing_balance' => 'Краен Баланс',
+ 'unreconciled' => 'Не подлежи на оспорване',
+ 'list_transactions' => 'Списък на Трансакциите',
+ 'start_date' => 'Начална дата',
+ 'end_date' => 'Крайна дата',
+ 'cleared_amount' => 'Изчистена Сума',
+
+];
diff --git a/resources/lang/bg-BG/settings.php b/resources/lang/bg-BG/settings.php
index 48e447417..7dc2d5606 100644
--- a/resources/lang/bg-BG/settings.php
+++ b/resources/lang/bg-BG/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Брой цифри',
'next' => 'Следващия номер',
'logo' => 'Лого',
+ 'custom' => 'По избор',
+ 'item_name' => 'Име',
+ 'item' => 'Продукти',
+ 'product' => 'Продукти',
+ 'service' => 'Услуги',
+ 'price_name' => 'Цена Име',
+ 'price' => 'Цена',
+ 'rate' => 'Данък',
+ 'quantity_name' => 'Количество Име',
+ 'quantity' => 'Количество',
],
'default' => [
'tab' => 'По подразбиране',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Изпрати преди забавени дни',
'cron_command' => 'Грешна команда',
'schedule_time' => 'Час за стартиране',
+ 'send_item_reminder'=> 'Изпрати напомняне',
+ 'item_stocks' => 'Изпрати когато продукта е наличен',
],
'appearance' => [
'tab' => 'Външен вид',
diff --git a/resources/lang/bg-BG/validation.php b/resources/lang/bg-BG/validation.php
index 96e42b42c..0d8c98911 100644
--- a/resources/lang/bg-BG/validation.php
+++ b/resources/lang/bg-BG/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'custom-message',
],
'invalid_currency' => ':attribute код е невалиден.',
+ 'invalid_amount' => 'Сумата :attribute е невалидна.',
],
/*
diff --git a/resources/lang/cs-CZ/auth.php b/resources/lang/cs-CZ/auth.php
index 0ec7d09e9..1a901f9df 100644
--- a/resources/lang/cs-CZ/auth.php
+++ b/resources/lang/cs-CZ/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'Aktuální email',
'reset' => 'Resetovat',
'never' => 'nikdy',
+
'password' => [
'current' => 'Heslo',
'current_confirm' => 'Potvrzení hesla',
'new' => 'Nové heslo',
'new_confirm' => 'Potvrzení nového hesla',
],
+
'error' => [
- 'self_delete' => 'Chyba: nemůžeš smazat sám sebe!'
+ 'self_delete' => 'Chyba: nemůžeš smazat sám sebe!',
+ 'no_company' => 'Chyba: Tvůj účet nemá přidelenou firmu/společnost. Prosím, kontaktujte systémového administrátora.',
],
'failed' => 'Tyto přihlašovací údaje neodpovídají žadnému záznamu.',
'disabled' => 'Tento účet je zakázán. Obraťte se na správce systému.',
'throttle' => 'Příliš mnoho pokusů o přihlášení. Zkuste to prosím znovu za :seconds vteřin.',
+ 'notification' => [
+ 'message_1' => 'Posíláme Vám tento email, protože jsme obdrželi žádost o resetování hesla.',
+ 'message_2' => 'Pokud jste o reset hesla nežádal, neberte jej v potaz.',
+ 'button' => 'Reset hesla',
+ ],
+
];
diff --git a/resources/lang/cs-CZ/bills.php b/resources/lang/cs-CZ/bills.php
index e95ad8e79..b8e564b3d 100644
--- a/resources/lang/cs-CZ/bills.php
+++ b/resources/lang/cs-CZ/bills.php
@@ -12,15 +12,15 @@ return [
'quantity' => 'Množství',
'price' => 'Cena',
'sub_total' => 'Mezisoučet',
- 'discount' => 'Discount',
+ 'discount' => 'Sleva',
'tax_total' => 'Dph celkem',
'total' => 'Celkem',
'item_name' => 'Jméno položky | Jméno položek',
- 'show_discount' => ':discount% Discount',
- 'add_discount' => 'Add Discount',
- 'discount_desc' => 'of subtotal',
+ 'show_discount' => ':discount% Sleva',
+ 'add_discount' => 'Přidat slevu',
+ 'discount_desc' => 'z propočtu',
'payment_due' => 'Splatnost platby',
'amount_due' => 'Dlužná částka',
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Bylo úspěšně označeno jako přijaté!',
+ 'draft' => 'Toto je KONCEPT faktury a bude promítnut do grafů jakmile bude zaplacen.',
+
+ 'status' => [
+ 'created' => 'Vytvořeno :date',
+ 'receive' => [
+ 'draft' => 'Neodesláno',
+ 'received' => 'Přijato :date',
+ ],
+ 'paid' => [
+ 'await' => 'Čekání na platbu',
+ ],
+ ],
],
];
diff --git a/resources/lang/cs-CZ/customers.php b/resources/lang/cs-CZ/customers.php
index f1c255dc3..e3a396ccf 100644
--- a/resources/lang/cs-CZ/customers.php
+++ b/resources/lang/cs-CZ/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Tato emailová adresa je už obsazena.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer provedl platbu v částce :amount k faktuře číslo :invoice_number.',
+ 'button' => 'Zobrazit',
+ ],
];
diff --git a/resources/lang/cs-CZ/demo.php b/resources/lang/cs-CZ/demo.php
index d78a812cf..52ba16dc0 100644
--- a/resources/lang/cs-CZ/demo.php
+++ b/resources/lang/cs-CZ/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'Hotovost',
- 'categories_uncat' => 'Bez kategorie',
'categories_deposit' => 'Vklad',
'categories_sales' => 'Prodeje',
'currencies_usd' => 'Americký dolar',
diff --git a/resources/lang/cs-CZ/footer.php b/resources/lang/cs-CZ/footer.php
index 1d7a1bbe7..d98cbfb94 100644
--- a/resources/lang/cs-CZ/footer.php
+++ b/resources/lang/cs-CZ/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Verze',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Učetní software zdarma',
];
diff --git a/resources/lang/cs-CZ/general.php b/resources/lang/cs-CZ/general.php
index 7d1327897..28403ce50 100644
--- a/resources/lang/cs-CZ/general.php
+++ b/resources/lang/cs-CZ/general.php
@@ -26,7 +26,7 @@ return [
'companies' => 'Společnost | Společnosti',
'profits' => 'Zisk | Zisky',
'taxes' => 'Daň | Daně',
- 'logos' => 'Logo|Logos',
+ 'logos' => 'Logo | Loga',
'pictures' => 'Obrázek | Obrázky',
'types' => 'Typ | Typy',
'payment_methods' => 'Způsob platby | Způsoby platby',
@@ -37,7 +37,11 @@ return [
'updates' => 'Aktualizace | Aktualizace',
'numbers' => 'Číslo | Čísla',
'statuses' => 'Stav | Stav',
- 'others' => 'Other|Others',
+ 'others' => 'Ostatní|Ostatní',
+ 'contacts' => 'Kontakt|Kontakty',
+ 'reconciliations' => 'Smír|Smír',
+ 'deposits' => 'Vklad|Vklady',
+ 'withdrawals' => 'Výběr|Výběry',
'dashboard' => 'Ovládací panel',
'banking' => 'Bankovnictví',
@@ -81,6 +85,7 @@ return [
'color' => 'Barva',
'save' => 'Uložit',
'cancel' => 'Storno',
+ 'loading' => 'Načítání...',
'from' => 'Od',
'to' => 'Pro',
'print' => 'Tisk',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Po splatnosti',
'partially' => 'Částečně',
'partially_paid' => 'Částečně zaplaceno',
+ 'export' => 'Export',
+ 'finish' => 'Dokončit',
+ 'wizard' => 'Průvodce',
+ 'skip' => 'Přeskočit',
+ 'enable' => 'Povolit',
+ 'disable' => 'Zakázat',
+ 'select_all' => 'Vybrat vše',
+ 'unselect_all' => 'Odznačit vše',
+ 'go_to' => 'Jdi na :name',
+ 'created_date' => 'Datum vytvoření',
+ 'period' => 'Období',
+ 'start' => 'Začátek',
+ 'end' => 'Konec',
+ 'clear' => 'Vyčistit',
+ 'difference' => 'Rozdíl',
'title' => [
'new' => 'Nová(ý) :type',
'edit' => 'Upravit :type',
+ 'create' => 'Vytvořit :type',
+ 'send' => 'Odeslat :type',
+ 'get' => 'Získat :type',
],
+
'form' => [
'enter' => 'Vyplň :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Nebyl vybrán žádný soubor...',
],
+ 'date_range' => [
+ 'today' => 'Dnes',
+ 'yesterday' => 'Včera',
+ 'last_days' => 'Poslednich :day dnů',
+ 'this_month' => 'Aktuální měsíc',
+ 'last_month' => 'Minulý měsíc',
+ ],
];
diff --git a/resources/lang/cs-CZ/header.php b/resources/lang/cs-CZ/header.php
index 08dc8be02..0ac97d91f 100644
--- a/resources/lang/cs-CZ/header.php
+++ b/resources/lang/cs-CZ/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count položka není skladem|[2,*] :count položek není skladem',
'view_all' => 'Zobrazit vše'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/cs-CZ/install.php b/resources/lang/cs-CZ/install.php
index 2a64a8d40..5df9af9c7 100644
--- a/resources/lang/cs-CZ/install.php
+++ b/resources/lang/cs-CZ/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Aktualizovat',
'steps' => [
- 'requirements' => 'Prosím splň následující požadavky!',
+ 'requirements' => 'Prosím, požádej svého poskytovatele hostingu o opravu chyb!',
'language' => 'Krok 1/3: Výběr jazyka',
'database' => 'Krok 2/3: Nastavení databáze',
'settings' => 'Krok 3/3: Údaje o společnosti a administrátorovi',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => 'Musíš povolit :feature!',
'disabled' => 'Musiš vypnout :feature!',
- 'extension' => 'Musíš zavést rozšíření:extension!',
+ 'extension' => 'Koncovka :extension musí být nainstalována nebo nahrána!',
'directory' => 'Do složky:directory se musí dát zapisovat!',
],
diff --git a/resources/lang/cs-CZ/invoices.php b/resources/lang/cs-CZ/invoices.php
index 76949adcd..a58113fc4 100644
--- a/resources/lang/cs-CZ/invoices.php
+++ b/resources/lang/cs-CZ/invoices.php
@@ -12,15 +12,15 @@ return [
'quantity' => 'Množství',
'price' => 'Cena',
'sub_total' => 'Mezisoučet',
- 'discount' => 'Discount',
+ 'discount' => 'Sleva',
'tax_total' => 'Daň celkem',
'total' => 'Celkem',
'item_name' => 'Jméno položky | Jméno položek',
- 'show_discount' => ':discount% Discount',
- 'add_discount' => 'Add Discount',
- 'discount_desc' => 'of subtotal',
+ 'show_discount' => ':discount% Sleva',
+ 'add_discount' => 'Přidat slevu',
+ 'discount_desc' => 'z propočtu',
'payment_due' => 'Splatnost platby',
'paid' => 'Zaplaceno',
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Označit odesláno',
'download_pdf' => 'Stáhnout PDF',
'send_mail' => 'Poslat email',
+ 'all_invoices' => 'Přihlašte se pro zobrazení všech faktur',
'status' => [
'draft' => 'Koncept',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Fakturační email byl úspěšně odeslán!',
'marked_sent' => 'Faktura byla úspěšně označena jako odeslaná!',
'email_required' => 'Zákazník nemá uvedenou emailovou adresu!',
+ 'draft' => 'Toto je KONCEPT faktury a bude promítnut do grafů jakmile bude odeslán.',
+
+ 'status' => [
+ 'created' => 'Vytvořeno :date',
+ 'send' => [
+ 'draft' => 'Neodesláno',
+ 'sent' => 'Odesláno dne :date',
+ ],
+ 'paid' => [
+ 'await' => 'Čekání na platbu',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/cs-CZ/items.php b/resources/lang/cs-CZ/items.php
index 6a413b949..7c87d6943 100644
--- a/resources/lang/cs-CZ/items.php
+++ b/resources/lang/cs-CZ/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Dostáváš tento email, protože :name brzo dojde.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'Dostáváš tento email, protože :name brzo dojde.',
+ ],
'button' => 'Zobrazit',
],
diff --git a/resources/lang/cs-CZ/messages.php b/resources/lang/cs-CZ/messages.php
index 88346a7a3..5b9cd016d 100644
--- a/resources/lang/cs-CZ/messages.php
+++ b/resources/lang/cs-CZ/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type odstraněno!',
'duplicated' => ':type duplikováno!',
'imported' => ':type importováno!',
+ 'enabled' => ':type aktivován!',
+ 'disabled' => ':type deaktivován!',
],
'error' => [
- 'over_payment' => 'Error: Payment not added! Amount passes the total.',
+ 'over_payment' => 'Chyba: Platba nebyla přidána! Zadaná částka překračuje celkové množství :amount',
'not_user_company' => 'Chyba: nemůžeš provádět správu společností!',
- 'customer' => 'Error: User not created! :name already uses this email address.',
+ 'customer' => 'Chyba: uživatel nebyl vytvořen! Uživatel :name již používá tuto emailovou adresu.',
'no_file' => 'Chyba: Nebyl vybrán žádný soubor!',
- 'last_category' => 'Error: Can not delete the last :type category!',
- 'invalid_token' => 'Error: The token entered is invalid!',
+ 'last_category' => 'Chyba: Nemohu smazat poslední kategorii :type ! ',
+ 'invalid_token' => 'Chyba: Zadaný token je neplatný!',
+ 'import_column' => 'Chyba: :message Tabulka :sheet. Řádek: :line.',
+ 'import_sheet' => 'Chyba: Tabulka je neplatná. Prosím, podívej se na vzorový soubor.',
],
'warning' => [
'deleted' => 'Upozornění: Nemůžeš odstranit :name protože je spojená s :text.',
diff --git a/resources/lang/cs-CZ/modules.php b/resources/lang/cs-CZ/modules.php
index 92acbd0ed..0c13346ec 100644
--- a/resources/lang/cs-CZ/modules.php
+++ b/resources/lang/cs-CZ/modules.php
@@ -4,17 +4,20 @@ return [
'title' => 'API Token',
'api_token' => 'Token',
+ 'my_apps' => 'Moje aplikace',
'top_paid' => 'Nejlépe prodávané',
'new' => 'Nové',
'top_free' => 'Nejlepší zdarma',
'free' => 'ZDARMA',
- 'search' => 'Search',
+ 'search' => 'Hledat',
'install' => 'Instalovat',
'buy_now' => 'Koupit',
'token_link' => 'Klikni sem pro získání tokenu k API.',
'no_apps' => 'V této kategorii zatím nejsou žádné aplikace.',
'developer' => 'Jste vývojář? Zde se můžete naučit jak vytvořit aplikaci a začít hned prodávat!',
+ 'recommended_apps' => 'Doporučené aplikace',
+
'about' => 'O aplikaci',
'added' => 'Přidáno',
@@ -31,18 +34,47 @@ return [
'installation' => 'Instalace',
'faq' => 'ČKD',
'changelog' => 'Seznam změn',
+ 'reviews' => 'Recenze',
],
'installation' => [
'header' => 'Instalace aplikace',
'download' => 'Stahuji soubor :module.',
'unzip' => 'Rozbaluji soubory :module.',
+ 'file_copy' => 'Kopíruji soubory :module .',
+ 'migrate' => 'Aplikuji aktualizace :module .',
+ 'finish' => 'Aktualizace byla úspěšně nainstalována. Budete přesměrováni do centra aktualizací.',
'install' => 'Instaluji soubory :module.',
],
+ 'errors' => [
+ 'download' => 'nemůžu stáhnout :module !',
+ 'upload' => 'Stažený :module nelze uložit!',
+ 'unzip' => ':module nelze rozbalit!',
+ 'file_copy' => 'Soubory :module nelze kopírovat!',
+ 'migrate' => 'migrace :module je rozbitá!',
+ 'migrate core' => ':module je již v aktuální verzi, nelze instalovat.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Nainstalováno',
+ ],
+
'button' => [
'uninstall' => 'Odinstalovat',
'disable' => 'Zakázat',
'enable' => 'Povolit',
],
+
+ 'my' => [
+ 'purchased' => 'Objednáno',
+ 'installed' => 'Nainstalováno',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Přidat recenzi'
+ ],
+ 'na' => 'Žádné recenze.'
+ ]
];
diff --git a/resources/lang/cs-CZ/notifications.php b/resources/lang/cs-CZ/notifications.php
new file mode 100644
index 000000000..a78532e95
--- /dev/null
+++ b/resources/lang/cs-CZ/notifications.php
@@ -0,0 +1,10 @@
+ 'Jejda!',
+ 'hello' => 'Ahoj!',
+ 'salutation' => 'S pozdravem, :company_name',
+ 'subcopy' => 'Pokud vám nefunguje tlačítko ":text", zkopírujte a vložte adresu URL do prohlížeče: [:url](:url)',
+
+];
diff --git a/resources/lang/cs-CZ/reconciliations.php b/resources/lang/cs-CZ/reconciliations.php
new file mode 100644
index 000000000..f033ee7cf
--- /dev/null
+++ b/resources/lang/cs-CZ/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Vyrovnat',
+ 'reconciled' => 'Vyrovnáno',
+ 'closing_balance' => 'Zůstatek po ukončení',
+ 'unreconciled' => 'Nevyrovnáno',
+ 'list_transactions' => 'Seznam transakcí',
+ 'start_date' => 'Počáteční datum',
+ 'end_date' => 'Koncové datum',
+ 'cleared_amount' => 'Vykrytá částka',
+
+];
diff --git a/resources/lang/cs-CZ/recurring.php b/resources/lang/cs-CZ/recurring.php
index 92099c71c..725c77036 100644
--- a/resources/lang/cs-CZ/recurring.php
+++ b/resources/lang/cs-CZ/recurring.php
@@ -2,19 +2,19 @@
return [
- 'recurring' => 'Recurring',
- 'every' => 'Every',
- 'period' => 'Period',
- 'times' => 'Times',
- 'daily' => 'Daily',
- 'weekly' => 'Weekly',
- 'monthly' => 'Monthly',
- 'yearly' => 'Yearly',
- 'custom' => 'Custom',
- 'days' => 'Day(s)',
- 'weeks' => 'Week(s)',
- 'months' => 'Month(s)',
- 'years' => 'Year(s)',
- 'message' => 'This is a recurring :type and the next :type will be automatically generated at :date',
+ 'recurring' => 'Opakující se',
+ 'every' => 'Každý',
+ 'period' => 'Období',
+ 'times' => 'Krát',
+ 'daily' => 'Denně',
+ 'weekly' => 'Týdně',
+ 'monthly' => 'Měsíčně',
+ 'yearly' => 'Ročně',
+ 'custom' => 'Vlastní',
+ 'days' => 'Dnů(í)',
+ 'weeks' => 'Týden(Týdny)',
+ 'months' => 'Měsíc(e)',
+ 'years' => 'rok(y)',
+ 'message' => 'Toto je opakovaný :type a další :type bude automaticky generován dne :date',
];
diff --git a/resources/lang/cs-CZ/reports.php b/resources/lang/cs-CZ/reports.php
index c1cb551a2..08d304288 100644
--- a/resources/lang/cs-CZ/reports.php
+++ b/resources/lang/cs-CZ/reports.php
@@ -7,24 +7,24 @@ return [
'this_quarter' => 'Aktuální čtvrtletí',
'previous_quarter' => 'Předchozí čtvrtletí',
'last_12_months' => 'Posledních 12 měsíců',
- 'profit_loss' => 'Profit & Loss',
- 'gross_profit' => 'Gross Profit',
- 'net_profit' => 'Net Profit',
- 'total_expenses' => 'Total Expenses',
- 'net' => 'NET',
+ 'profit_loss' => 'Zisk a ztráty',
+ 'gross_profit' => 'Hrubý zisk',
+ 'net_profit' => 'Čistý zisk',
+ 'total_expenses' => 'Celkové výdaje',
+ 'net' => 'NETTO',
'summary' => [
'income' => 'Přehled příjmů',
'expense' => 'Přehled výdajů',
'income_expense' => 'Příjmy vs Výdaje',
- 'tax' => 'Tax Summary',
+ 'tax' => 'Souhrn daně',
],
'quarter' => [
- '1' => 'Jan-Mar',
- '2' => 'Apr-Jun',
- '3' => 'Jul-Sep',
- '4' => 'Oct-Dec',
+ '1' => 'Led-Bře',
+ '2' => 'Dub-Čer',
+ '3' => 'Červ-Zář',
+ '4' => 'Říj-Pro',
],
];
diff --git a/resources/lang/cs-CZ/settings.php b/resources/lang/cs-CZ/settings.php
index 0ac5a7820..12b8188b9 100644
--- a/resources/lang/cs-CZ/settings.php
+++ b/resources/lang/cs-CZ/settings.php
@@ -22,9 +22,9 @@ return [
],
'timezone' => 'Časové pásmo',
'percent' => [
- 'title' => 'Percent (%) Position',
- 'before' => 'Before Number',
- 'after' => 'After Number',
+ 'title' => 'Pozice (%) procenta',
+ 'before' => 'Před číslem',
+ 'after' => 'Za číslem',
],
],
'invoice' => [
@@ -33,6 +33,16 @@ return [
'digit' => 'Předčíslí',
'next' => 'Další číslo',
'logo' => 'Logo',
+ 'custom' => 'Vlastní',
+ 'item_name' => 'Jméno položky',
+ 'item' => 'Položky',
+ 'product' => 'Produkty',
+ 'service' => 'Služby',
+ 'price_name' => 'Jméno ceny',
+ 'price' => 'Cena',
+ 'rate' => 'Sazba',
+ 'quantity_name' => 'Jméno množství',
+ 'quantity' => 'Množství',
],
'default' => [
'tab' => 'Výchozí',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Odeslat před splatností',
'cron_command' => 'Příkaz Cronu',
'schedule_time' => 'Hodina spuštění',
+ 'send_item_reminder'=> 'Odesílat upozornění na položku',
+ 'item_stocks' => 'Odeslat když bude naskladněno',
],
'appearance' => [
'tab' => 'Vzhled',
diff --git a/resources/lang/cs-CZ/transfers.php b/resources/lang/cs-CZ/transfers.php
index 61dde0578..0366b8c77 100644
--- a/resources/lang/cs-CZ/transfers.php
+++ b/resources/lang/cs-CZ/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'Z účtu',
'to_account' => 'Na účet',
+ 'messages' => [
+ 'delete' => ':from na :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/cs-CZ/validation.php b/resources/lang/cs-CZ/validation.php
index cba34a321..b37b5619a 100644
--- a/resources/lang/cs-CZ/validation.php
+++ b/resources/lang/cs-CZ/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'custom-message',
],
+ 'invalid_currency' => 'Formát :attribute je neplatný.',
+ 'invalid_amount' => 'Zvolená hodnota pro :attribute je neplatná.',
],
/*
diff --git a/resources/lang/da-DK/accounts.php b/resources/lang/da-DK/accounts.php
index afe6adc5d..595423324 100644
--- a/resources/lang/da-DK/accounts.php
+++ b/resources/lang/da-DK/accounts.php
@@ -4,7 +4,7 @@ return [
'account_name' => 'Kontonavn',
'number' => 'Nummer',
- 'opening_balance' => 'Åbningsbalancen',
+ 'opening_balance' => 'Primo',
'current_balance' => 'Nuværende saldo',
'bank_name' => 'Banknavn',
'bank_phone' => 'Telefon nr. til bank',
diff --git a/resources/lang/da-DK/auth.php b/resources/lang/da-DK/auth.php
index f6745d3ee..7709c7bb0 100644
--- a/resources/lang/da-DK/auth.php
+++ b/resources/lang/da-DK/auth.php
@@ -12,19 +12,28 @@ return [
'enter_email' => 'Indtast din mailadresse',
'current_email' => 'Nuværende E-mail',
'reset' => 'Nulstil',
- 'never' => 'aldrig',
+ 'never' => 'Aldrig',
+
'password' => [
'current' => 'Adgangskode',
'current_confirm' => 'Bekræft adgangskode',
'new' => 'Ny adgangskode',
'new_confirm' => 'Bekræftelse af ny adgangskode',
],
+
'error' => [
- 'self_delete' => 'Fejl: du Kan ikke slette dig selv!'
+ 'self_delete' => 'Fejl: Du kan ikke slette dig selv!',
+ 'no_company' => 'Error: Ingen virksomhed er tilknyttet din konto. Kontakt systemadministratoren.',
],
'failed' => 'Disse legitimationsoplysninger passer ikke i vores database.',
'disabled' => 'Denne konto er deaktiveret. Kontakt systemadministratoren.',
- 'throttle' => 'For mange login forsøg. Prøv igen i :seconds sekunder.',
+ 'throttle' => 'For mange login forsøg. Prøv igen om :seconds sekunder.',
+
+ 'notification' => [
+ 'message_1' => 'Du modtager denne e-mail, fordi vi modtog en anmodning om nulstilling af password.',
+ 'message_2' => 'Hvis du ikke har bedt om en nulstilling af adgangskoden, skal du ikke gøre yderligere.',
+ 'button' => 'Nulstil adgangskode',
+ ],
];
diff --git a/resources/lang/da-DK/bills.php b/resources/lang/da-DK/bills.php
index 0168bfdfb..dc4253dfb 100644
--- a/resources/lang/da-DK/bills.php
+++ b/resources/lang/da-DK/bills.php
@@ -30,10 +30,10 @@ return [
'add_payment' => 'Tilføj betaling',
'mark_received' => 'Modtagelse godkendt',
'download_pdf' => 'Download som PDF',
- 'send_mail' => 'Send e-mail',
+ 'send_mail' => 'Send E-mail',
'status' => [
- 'draft' => 'Udkast',
+ 'draft' => 'Kladde',
'received' => 'Modtaget',
'partial' => 'Delvis',
'paid' => 'Betalt',
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Regning registreret som modtaget!',
+ 'draft' => 'Dette er et UDKAST til faktura og vil blive vist som diagrammer, når det bliver sendt.',
+
+ 'status' => [
+ 'created' => 'Oprettet den :date',
+ 'receive' => [
+ 'draft' => 'Ikke sendt',
+ 'received' => 'Modtaget den :date',
+ ],
+ 'paid' => [
+ 'await' => 'Afventer betaling',
+ ],
+ ],
],
];
diff --git a/resources/lang/da-DK/companies.php b/resources/lang/da-DK/companies.php
index 7128209b2..0fd103b68 100644
--- a/resources/lang/da-DK/companies.php
+++ b/resources/lang/da-DK/companies.php
@@ -7,7 +7,7 @@ return [
'manage' => 'Administrer virksomheder',
'all' => 'Alle virksomheder',
'error' => [
- 'delete_active' => 'Fejl: Kan ikke slette aktiv virksomhed! ændre dette først!',
+ 'delete_active' => 'Fejl: Kan ikke slette aktiv virksomhed! Ændre dette først!',
],
];
diff --git a/resources/lang/da-DK/currencies.php b/resources/lang/da-DK/currencies.php
index 20e6d4616..cf48e8c1d 100644
--- a/resources/lang/da-DK/currencies.php
+++ b/resources/lang/da-DK/currencies.php
@@ -5,12 +5,12 @@ return [
'code' => 'Kode',
'rate' => 'Sats',
'default' => 'Standardvaluta',
- 'decimal_mark' => 'Decimalseparator',
- 'thousands_separator' => 'Tusinder Separator',
+ 'decimal_mark' => 'Decimaltegn',
+ 'thousands_separator' => 'Tusindetalsseparator',
'precision' => 'Præcision',
'symbol' => [
'symbol' => 'Symbol',
- 'position' => 'Symbol Position',
+ 'position' => 'Symbol position',
'before' => 'Før beløbet',
'after' => 'Efter beløb',
]
diff --git a/resources/lang/da-DK/customers.php b/resources/lang/da-DK/customers.php
index 17c37f67f..06c9cfffc 100644
--- a/resources/lang/da-DK/customers.php
+++ b/resources/lang/da-DK/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Denne mail er allerede registreret.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer har betalt :amount af faktura nummer :invoice_number.',
+ 'button' => 'Vis',
+ ],
];
diff --git a/resources/lang/da-DK/footer.php b/resources/lang/da-DK/footer.php
index e0d7d48c2..ada0a85dc 100644
--- a/resources/lang/da-DK/footer.php
+++ b/resources/lang/da-DK/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Version',
'powered' => 'Drevet af Akaunting',
- 'software' => 'Gratis regnskabs Software',
+ 'link' => 'https://akaunting.com',
+ 'software' => 'Gratis regnskabsprogram',
];
diff --git a/resources/lang/da-DK/general.php b/resources/lang/da-DK/general.php
index eb78daf10..88f315ca2 100644
--- a/resources/lang/da-DK/general.php
+++ b/resources/lang/da-DK/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Nummer|Numre',
'statuses' => 'Status|Statusser',
'others' => 'Andre | Andre',
+ 'contacts' => 'Kontakt|kontakter',
+ 'reconciliations' => 'Afstemt|afstemninger',
+ 'deposits' => 'Depositum|indskud',
+ 'withdrawals' => 'Tilbagetrukket|tilbagetrækninger',
'dashboard' => 'Oversigt',
'banking' => 'Bank',
@@ -81,6 +85,7 @@ return [
'color' => 'Farve',
'save' => 'Gem',
'cancel' => 'Annullér',
+ 'loading' => 'Indlæser...',
'from' => 'Fra:',
'to' => 'Til',
'print' => 'Udskriv',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Forfalden',
'partially' => 'Delvist',
'partially_paid' => 'Delvist betalt',
+ 'export' => 'Eksportér',
+ 'finish' => 'Færdig',
+ 'wizard' => 'Guide',
+ 'skip' => 'Spring over',
+ 'enable' => 'Aktivér',
+ 'disable' => 'Deaktiver',
+ 'select_all' => 'Vælg alle',
+ 'unselect_all' => 'Fravælge alle',
+ 'go_to' => 'Gå til :name',
+ 'created_date' => 'Oprettelsesdato',
+ 'period' => 'Periode',
+ 'start' => 'Start',
+ 'end' => 'Slut',
+ 'clear' => 'Ryd',
+ 'difference' => 'Forskel',
'title' => [
'new' => 'Ny :type',
'edit' => 'Rediger :type',
+ 'create' => 'Opret !type',
+ 'send' => 'Send :type',
+ 'get' => 'Hent :type',
],
+
'form' => [
'enter' => 'Indtast: :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Ingen fil valgt...',
],
+ 'date_range' => [
+ 'today' => 'I dag',
+ 'yesterday' => 'I går',
+ 'last_days' => 'Sidste :days dage',
+ 'this_month' => 'Denne måned',
+ 'last_month' => 'Sidste måned',
+ ],
];
diff --git a/resources/lang/da-DK/header.php b/resources/lang/da-DK/header.php
index 16cd4bc74..3ca81255e 100644
--- a/resources/lang/da-DK/header.php
+++ b/resources/lang/da-DK/header.php
@@ -5,11 +5,12 @@ return [
'change_language' => 'Skift sprog',
'last_login' => 'Sidste login :time',
'notifications' => [
- 'counter' => '{0} du har ingen notifikationer|{1} du har :count notifikationer|[2, *] Du har :count notifikationer',
+ 'counter' => '{0} du har ingen notifikationer|{1} Du har :count notifikation|[2, *] Du har :count notifikationer',
'overdue_invoices' => '{1} :count forfalden regning|[2,*] :count forfaldne regninger',
'upcoming_bills' => '{1} :count kommende regning|[2,*] :count kommende regninger',
- 'items_stock' => '{1} :count vare ikke på lager|[2,*] :count varer ikke på lager',
+ 'items_stock' => '{1} :count vare er ikke på lager|[2,*] :count varer er ikke på lager',
'view_all' => 'Vis alle'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/da-DK/import.php b/resources/lang/da-DK/import.php
index 4762e2e1c..5a6b03269 100644
--- a/resources/lang/da-DK/import.php
+++ b/resources/lang/da-DK/import.php
@@ -3,7 +3,7 @@
return [
'import' => 'Importer',
- 'title' => 'Import :type',
+ 'title' => 'Importer :type',
'message' => 'Tilladte filtyper: CSV, XLS. Venligst, download eksempelfilen.',
];
diff --git a/resources/lang/da-DK/install.php b/resources/lang/da-DK/install.php
index 7451d1978..15ae8dc12 100644
--- a/resources/lang/da-DK/install.php
+++ b/resources/lang/da-DK/install.php
@@ -9,7 +9,7 @@ return [
'requirements' => 'Venligst, opfyld følgende krav!',
'language' => 'Trin 1/3: Valg af sprog',
'database' => 'Trin 2/3: Database opsætning',
- 'settings' => 'Trin 3/3: Virksomhed og Admin detaljer',
+ 'settings' => 'Trin 3/3: Virksomhed og administrator detaljer',
],
'language' => [
@@ -34,7 +34,7 @@ return [
'company_name' => 'Firmanavn',
'company_email' => 'Firma E-mail',
'admin_email' => 'Administrator e-mail',
- 'admin_password' => 'Admin Password',
+ 'admin_password' => 'Administrator Password',
],
'error' => [
diff --git a/resources/lang/da-DK/invoices.php b/resources/lang/da-DK/invoices.php
index 7eacf374f..f046dd14e 100644
--- a/resources/lang/da-DK/invoices.php
+++ b/resources/lang/da-DK/invoices.php
@@ -2,8 +2,8 @@
return [
- 'invoice_number' => 'Faktura nummer',
- 'invoice_date' => 'Faktura dato',
+ 'invoice_number' => 'Fakturanummer',
+ 'invoice_date' => 'Fakturadato',
'total_price' => 'Total pris',
'due_date' => 'Forfaldsdato',
'order_number' => 'Ordrenummer',
@@ -30,7 +30,8 @@ return [
'mark_paid' => 'Marker som betalt',
'mark_sent' => 'Marker som sendt',
'download_pdf' => 'Download som PDF',
- 'send_mail' => 'Send e-mail',
+ 'send_mail' => 'Send E-mail',
+ 'all_invoices' => 'Log ind for at se alle fakturaer',
'status' => [
'draft' => 'Kladde',
@@ -42,13 +43,25 @@ return [
],
'messages' => [
- 'email_sent' => 'E-maiil med faktura er afsendt!',
+ 'email_sent' => 'Faktura sendt over E-mail!',
'marked_sent' => 'Faktura markeret som sendt!',
- 'email_required' => 'Ingen e-mail-adresse for denne kunde!',
+ 'email_required' => 'Ingen E-mail-adresse for kunden!',
+ 'draft' => 'Dette er et UDKAST til faktura og vil blive vist som diagrammer, når det bliver sendt.',
+
+ 'status' => [
+ 'created' => 'Oprettet den :date',
+ 'send' => [
+ 'draft' => 'Ikke sendt',
+ 'sent' => 'Sendt den :date',
+ ],
+ 'paid' => [
+ 'await' => 'Afventer betaling',
+ ],
+ ],
],
'notification' => [
- 'message' => 'Du modtager denne e-mail, fordi du har en faktura på :amount til :customer kunde.',
+ 'message' => 'Du modtager denne E-mail, fordi du har en faktura på :amount til :customer kunde.',
'button' => 'Betal nu',
],
diff --git a/resources/lang/da-DK/items.php b/resources/lang/da-DK/items.php
index 612773e62..369359a23 100644
--- a/resources/lang/da-DK/items.php
+++ b/resources/lang/da-DK/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Varenummer',
'notification' => [
- 'message' => 'Du modtager denne e-mail, fordi følgende vare snart ikke er på lager længere. :name.',
+ 'message' => [
+ 'reminder' => 'Du modtager denne e-mail, fordi kun :quanty af :name er tilbage.',
+ 'out_of_stock' => 'Du modtager denne E-mail, fordi følgende vare snart ikke er på lager længere. :name.',
+ ],
'button' => 'Vis nu',
],
diff --git a/resources/lang/da-DK/messages.php b/resources/lang/da-DK/messages.php
index f3b23447c..4393586ad 100644
--- a/resources/lang/da-DK/messages.php
+++ b/resources/lang/da-DK/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type slettet!',
'duplicated' => ':type duplikeret!',
'imported' => ':type importeret!',
+ 'enabled' => ':type aktiveret!',
+ 'disabled' => ':type deaktiveret!',
],
'error' => [
- 'over_payment' => 'Fejl: Betaling ikke tilføjet! Beløbet overskrider total porisen.',
+ 'over_payment' => 'Error: Betaling blev ikke tilføjet! Beløbet du har angivet overstiger: :amount',
'not_user_company' => 'Fejl: Du har ikke tilladelse til at kontrollere denne virksomhed!',
- 'customer' => 'Fejl: Brugeren ikke oprettet! :name bruger allerede denne e-mail.',
+ 'customer' => 'Fejl: Brugeren ikke oprettet! :name bruger allerede denne E-mail.',
'no_file' => 'Fejl: Ingen fil valgt!',
'last_category' => 'Fejl: Kan ikke slette sidste :type kategori!',
'invalid_token' => 'Fejl: Token indtastet er ugyldig!',
+ 'import_column' => 'Error: :message arkets navn: :sheet. Linje nummer: :line.',
+ 'import_sheet' => 'Error: Ark navn er ikke valid. Kontroller venligst eksempel filen.',
],
'warning' => [
'deleted' => 'Advarsel: Du har ikke tilladelse tiil at slette :name fordi den er :text relateret.',
diff --git a/resources/lang/da-DK/modules.php b/resources/lang/da-DK/modules.php
index 3d46997a7..656c96553 100644
--- a/resources/lang/da-DK/modules.php
+++ b/resources/lang/da-DK/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API Token',
'api_token' => 'Token',
+ 'my_apps' => 'Mine apps',
'top_paid' => 'Top betalt',
'new' => 'Ny',
'top_free' => 'Top gratis',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'Der er ingen apps i denne kategori endnu.',
'developer' => 'Er du udvikler? her kan du lære hvordan du opretter en app og begynde at sælge i dag!',
+ 'recommended_apps' => 'Anbefalede programmer',
+
'about' => 'Om',
'added' => 'Tilføjet',
@@ -31,18 +34,47 @@ return [
'installation' => 'Installation',
'faq' => 'FAQ',
'changelog' => 'Ændringslog',
+ 'reviews' => 'Gennemsyn',
],
'installation' => [
'header' => 'App installation',
'download' => 'Downloading :modul filen.',
'unzip' => 'Udpakker :module filer.',
+ 'file_copy' => 'Kopiere :modul filer.',
+ 'migrate' => 'Anvende :module opdateringer.',
+ 'finish' => 'Opdateringen blev installeret. Du vil blive sendt til Update Center.',
'install' => 'Installere :module filer.',
],
+ 'errors' => [
+ 'download' => ':module kan ikke downloades!',
+ 'upload' => 'Downloadet :module kan ikke gemmes!',
+ 'unzip' => ':module kan ikke udpakkes!',
+ 'file_copy' => ':module filer kan ikke kopieres!',
+ 'migrate' => ':module migrering afbrudt!',
+ 'migrate core' => ':module er allerede nyeste version, så kan ikke opdateres.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Installeret',
+ ],
+
'button' => [
'uninstall' => 'Afinstaller',
'disable' => 'Deaktiver',
'enable' => 'Aktivér',
],
+
+ 'my' => [
+ 'purchased' => 'Købt',
+ 'installed' => 'Installeret',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Tilføj en anmeldelse'
+ ],
+ 'na' => 'Der er ingen anmeldelser.'
+ ]
];
diff --git a/resources/lang/da-DK/notifications.php b/resources/lang/da-DK/notifications.php
new file mode 100644
index 000000000..561c273bd
--- /dev/null
+++ b/resources/lang/da-DK/notifications.php
@@ -0,0 +1,10 @@
+ 'Ups!',
+ 'hello' => 'Hallo!',
+ 'salutation' => 'Med venlig hilsen, : company_name',
+ 'subcopy' => 'Hvis du har problemer med at klikke på ":text" knappen, kopier og indsæt Webadressen nedenfor i din browser: [: url](:url)',
+
+];
diff --git a/resources/lang/da-DK/passwords.php b/resources/lang/da-DK/passwords.php
index 91a810f26..c3b406b07 100644
--- a/resources/lang/da-DK/passwords.php
+++ b/resources/lang/da-DK/passwords.php
@@ -13,10 +13,10 @@ return [
|
*/
- 'password' => 'Adgangskoder skal være mindst 6 tegn og matche.',
+ 'password' => 'Adgangskoder skal være mindst 6 tegn og være ens.',
'reset' => 'Din adgangskode er blevet nulstillet!',
- 'sent' => 'Vi har sendt dig en e-mail med reset password link!',
+ 'sent' => 'Vi har sendt dig en E-mail med nulstil password link!',
'token' => 'Denne adgangskodes nulstillings token er ugyldig.',
- 'user' => "Vi kan ikke finde en bruger med den e-mail adresse.",
+ 'user' => "Vi kan ikke finde en bruger med den E-mail adresse.",
];
diff --git a/resources/lang/da-DK/reconciliations.php b/resources/lang/da-DK/reconciliations.php
new file mode 100644
index 000000000..55268b97e
--- /dev/null
+++ b/resources/lang/da-DK/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Afstemme',
+ 'reconciled' => 'Afstemt',
+ 'closing_balance' => 'Primo saldo',
+ 'unreconciled' => 'Uafstemt',
+ 'list_transactions' => 'Vis transaktioner',
+ 'start_date' => 'Start dato',
+ 'end_date' => 'Slut dato',
+ 'cleared_amount' => 'Afstemt beløb',
+
+];
diff --git a/resources/lang/da-DK/recurring.php b/resources/lang/da-DK/recurring.php
index 3c26a8fde..e8a56c9f1 100644
--- a/resources/lang/da-DK/recurring.php
+++ b/resources/lang/da-DK/recurring.php
@@ -5,7 +5,7 @@ return [
'recurring' => 'Tilbagevendende',
'every' => 'Hver',
'period' => 'Periode',
- 'times' => 'Tid',
+ 'times' => 'Gange',
'daily' => 'Daglig',
'weekly' => 'Ugentlig',
'monthly' => 'Månedlig',
diff --git a/resources/lang/da-DK/settings.php b/resources/lang/da-DK/settings.php
index dd6820756..fbc43574a 100644
--- a/resources/lang/da-DK/settings.php
+++ b/resources/lang/da-DK/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Antal cifre',
'next' => 'Næste nummer',
'logo' => 'Logo',
+ 'custom' => 'Tilpasset',
+ 'item_name' => 'Varenavn',
+ 'item' => 'Varer',
+ 'product' => 'Produkter',
+ 'service' => 'Services',
+ 'price_name' => 'Pris navn',
+ 'price' => 'Pris',
+ 'rate' => 'Sats',
+ 'quantity_name' => 'Mængde navn',
+ 'quantity' => 'Antal',
],
'default' => [
'tab' => 'Standarder',
@@ -66,14 +76,16 @@ return [
'bill_days' => 'Send før forfalds dage',
'cron_command' => 'Cron kommando',
'schedule_time' => 'Timer at køre',
+ 'send_item_reminder'=> 'Send vare påmindelse',
+ 'item_stocks' => 'Send når varen er på lager',
],
'appearance' => [
'tab' => 'Udseende',
- 'theme' => 'Theme',
+ 'theme' => 'Tema',
'light' => 'Lys',
'dark' => 'Mørk',
'list_limit' => 'Poster pr. side',
- 'use_gravatar' => 'Bruge Gravatar',
+ 'use_gravatar' => 'Brug Gravatar',
],
'system' => [
'tab' => 'System',
diff --git a/resources/lang/da-DK/transfers.php b/resources/lang/da-DK/transfers.php
index 5de0931a4..387bb2234 100644
--- a/resources/lang/da-DK/transfers.php
+++ b/resources/lang/da-DK/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'Fra konto',
'to_account' => 'Til konto',
+ 'messages' => [
+ 'delete' => ':from til :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/da-DK/validation.php b/resources/lang/da-DK/validation.php
index c851a4afc..12c0540ae 100644
--- a/resources/lang/da-DK/validation.php
+++ b/resources/lang/da-DK/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'brugerdefineret besked',
],
+ 'invalid_currency' => 'Koden :attribute er ugyldig.',
+ 'invalid_amount' => 'Det valgte :attribute er ugyldigt.',
],
/*
diff --git a/resources/lang/de-DE/bills.php b/resources/lang/de-DE/bills.php
index c8aeb95ac..49a100da7 100644
--- a/resources/lang/de-DE/bills.php
+++ b/resources/lang/de-DE/bills.php
@@ -18,9 +18,9 @@ return [
'item_name' => 'Artikel-Name|Artikel-Namen',
- 'show_discount' => ':discount % Rabatt',
+ 'show_discount' => ':discount% Rabatt',
'add_discount' => 'füge Rabatt hinzu',
- 'discount_desc' => 'Zwischensumme',
+ 'discount_desc' => 'der Zwischensumme',
'payment_due' => 'Fälligkeit der Zahlung',
'amount_due' => 'Fälliger Betrag',
@@ -40,7 +40,19 @@ return [
],
'messages' => [
- 'received' => 'Rechnung als erfolgreich erhalten markiert!',
+ 'received' => 'Rechnung wurde als erfolgreich erhalten markiert!',
+ 'draft' => 'Dies ist eine Rechnungs-Vorschau . Die Rechnung erscheint in den Diagrammen nachdem sie als erhalten markiert wurde.',
+
+ 'status' => [
+ 'created' => 'Erstellt am :date',
+ 'receive' => [
+ 'draft' => 'Noch nicht versandt',
+ 'received' => 'Empfangen am :date',
+ ],
+ 'paid' => [
+ 'await' => 'Bezahlung erwartet',
+ ],
+ ],
],
];
diff --git a/resources/lang/de-DE/customers.php b/resources/lang/de-DE/customers.php
index 902582824..e661eba6b 100644
--- a/resources/lang/de-DE/customers.php
+++ b/resources/lang/de-DE/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Diese Email ist bereits in Benutzung.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer hat eine Zahlung von :amount für die Rechnungsnummer :invoice_number vorgenommen.',
+ 'button' => 'Anzeigen',
+ ],
];
diff --git a/resources/lang/de-DE/demo.php b/resources/lang/de-DE/demo.php
index a826c71c2..de508c2cf 100644
--- a/resources/lang/de-DE/demo.php
+++ b/resources/lang/de-DE/demo.php
@@ -3,7 +3,7 @@
return [
'accounts_cash' => 'Bar',
- 'categories_deposit' => 'Einzahlen',
+ 'categories_deposit' => 'Einzahlung',
'categories_sales' => 'Verkäufe',
'currencies_usd' => 'US-Dollar',
'currencies_eur' => 'Euro',
diff --git a/resources/lang/de-DE/footer.php b/resources/lang/de-DE/footer.php
index 84a73ee2b..d18b2eb68 100644
--- a/resources/lang/de-DE/footer.php
+++ b/resources/lang/de-DE/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Version',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Kostenlose Buchhaltungssoftware',
];
diff --git a/resources/lang/de-DE/general.php b/resources/lang/de-DE/general.php
index 64339be84..b03de57f1 100644
--- a/resources/lang/de-DE/general.php
+++ b/resources/lang/de-DE/general.php
@@ -7,19 +7,19 @@ return [
'invoices' => 'Rechnung|Rechnungen',
'revenues' => 'Einnahme|Einnahmen',
'customers' => 'Kunde|Kunden',
- 'expenses' => 'Ausgabe| Ausgaben',
+ 'expenses' => 'Ausgabe|Ausgaben',
'bills' => 'Rechnung|Rechnungen',
'payments' => 'Zahlung|Zahlungen',
'vendors' => 'Kreditor|Kreditoren',
'accounts' => 'Konto|Konten',
- 'transfers' => 'Übertragung|Übertragungen',
+ 'transfers' => 'Transfer|Transfers',
'transactions' => 'Transaktion|Transaktionen',
'reports' => 'Bericht|Berichte',
'settings' => 'Einstellung|Einstellungen',
'categories' => 'Kategorie|Kategorien',
'currencies' => 'Währung|Währungen',
'tax_rates' => 'Steuersatz|Steuersätze',
- 'users' => 'Benutzer | Benutzer',
+ 'users' => 'Benutzer|Benutzer',
'roles' => 'Rolle|Rollen',
'permissions' => 'Berechtigung|Berechtigungen',
'modules' => 'App|Apps',
@@ -37,9 +37,11 @@ return [
'updates' => 'Aktualisierung|Aktualisierungen',
'numbers' => 'Nummer|Nummern',
'statuses' => 'Status|Stati',
- 'others' => 'Anderer|Andere',
+ 'others' => 'Andere|Andere',
+ 'contacts' => 'Kontakt|Kontakte',
+ 'reconciliations' => 'Kontenabgleich|Kontenabgleiche',
- 'dashboard' => 'Kontrollzentrum',
+ 'dashboard' => 'Dashboard',
'banking' => 'Bankwesen',
'general' => 'Allgemein',
'no_records' => 'Keine Einträge.',
@@ -81,6 +83,7 @@ return [
'color' => 'Farbe',
'save' => 'Speichern',
'cancel' => 'Abbrechen',
+ 'loading' => 'Wird geladen...',
'from' => 'Von',
'to' => 'An',
'print' => 'Drucken',
@@ -101,21 +104,43 @@ return [
'partially' => 'Teilweise',
'partially_paid' => 'Teilweise bezahlt',
'export' => 'Exportieren',
+ 'finish' => 'Abschluss',
+ 'wizard' => 'Assistent',
+ 'skip' => 'Weiter',
'enable' => 'Aktivieren',
'disable' => 'Deaktivieren',
+ 'select_all' => 'Alle auswählen',
+ 'unselect_all' => 'Alle abwählen',
+ 'go_to' => 'Gehe zu :name',
+ 'created_date' => 'Erstellungsdatum',
+ 'period' => 'Zeitraum',
+ 'start' => 'Start',
+ 'end' => 'Ende',
+ 'clear' => 'Löschen',
+ 'difference' => 'Differenz',
'title' => [
'new' => 'Neu :type',
- 'edit' => 'Bearbeiten :type',
+ 'edit' => ':type bearbeiten',
+ 'create' => ':type erstellen',
+ 'send' => ':type versendet',
+ 'get' => ':type werden',
],
'form' => [
- 'enter' => 'Geben Sie :field an',
+ 'enter' => ':field angeben',
'select' => [
- 'field' => '- Auswählen :field -',
+ 'field' => '- :field auswählen -',
'file' => 'Datei auswählen',
],
'no_file_selected' => 'Keine Datei ausgewählt...',
],
+ 'date_range' => [
+ 'today' => 'Heute',
+ 'yesterday' => 'Gestern',
+ 'last_days' => 'Die letzten :day Tage',
+ 'this_month' => 'Dieser Monat',
+ 'last_month' => 'Letzter Monat',
+ ],
];
diff --git a/resources/lang/de-DE/header.php b/resources/lang/de-DE/header.php
index 61cb150f3..cf6544419 100644
--- a/resources/lang/de-DE/header.php
+++ b/resources/lang/de-DE/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1}:count Artikel ausverkauft|[2,*]:count Artikel ausverkauft',
'view_all' => 'Alle anzeigen'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/de-DE/install.php b/resources/lang/de-DE/install.php
index 5fd816e08..e288f4179 100644
--- a/resources/lang/de-DE/install.php
+++ b/resources/lang/de-DE/install.php
@@ -24,7 +24,7 @@ return [
],
'database' => [
- 'hostname' => 'Hostname',
+ 'hostname' => 'Servername',
'username' => 'Benutzername',
'password' => 'Passwort',
'name' => 'Datenbank',
diff --git a/resources/lang/de-DE/invoices.php b/resources/lang/de-DE/invoices.php
index 22865cba6..a46287401 100644
--- a/resources/lang/de-DE/invoices.php
+++ b/resources/lang/de-DE/invoices.php
@@ -9,18 +9,18 @@ return [
'order_number' => 'Bestellnummer',
'bill_to' => 'Rechnung an',
- 'quantity' => 'Betrag',
+ 'quantity' => 'Menge',
'price' => 'Preis',
'sub_total' => 'Zwischensumme',
'discount' => 'Rabatt',
'tax_total' => 'Steuern Gesamt',
'total' => 'Gesamt',
- 'item_name' => 'Artikelname|Artikel Namen',
+ 'item_name' => 'Artikelname|Artikelnamen',
- 'show_discount' => ':discount % Rabatt',
- 'add_discount' => 'füge Rabatt hinzu',
- 'discount_desc' => 'Zwischensumme',
+ 'show_discount' => ':discount% Rabatt',
+ 'add_discount' => 'Rabatt hinzufügen',
+ 'discount_desc' => 'der Zwischensumme',
'payment_due' => 'Fälligkeit der Zahlung',
'paid' => 'Bezahlt',
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Als gesendet markieren',
'download_pdf' => 'PDF herunterladen',
'send_mail' => 'E-Mail senden',
+ 'all_invoices' => 'Melden Sie sich an, um alle Rechnungen anzuzeigen',
'status' => [
'draft' => 'Entwurf',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Rechnungsemail wurde erfolgreich versendet!',
'marked_sent' => 'Rechnung als erfolgreich versendet markiert!',
'email_required' => 'Es existiert keine E-Mailadresse zu diesem Kunden!',
+ 'draft' => 'Dies ist eine Vorschau -Rechnung und wird nach dem Versand in den Charts ersichtlich.',
+
+ 'status' => [
+ 'created' => 'Erstellt am :date',
+ 'send' => [
+ 'draft' => 'Noch nicht versandt',
+ 'sent' => 'Gesendet am :date',
+ ],
+ 'paid' => [
+ 'await' => 'Zahlung erwartet',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/de-DE/items.php b/resources/lang/de-DE/items.php
index 3b26afedd..a0ccc90bd 100644
--- a/resources/lang/de-DE/items.php
+++ b/resources/lang/de-DE/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Artikelnummer',
'notification' => [
- 'message' => 'Sie erhalten diese E-Mail, da :name nur noch begrenzt verfügbar ist.',
+ 'message' => [
+ 'reminder' => 'Sie erhalten diese E-Mail, weil nur noch :quantity :name verfügbar sind.',
+ 'out_of_stock' => 'Sie erhalten diese E-Mail, weil :name nicht mehr auf Lager ist.',
+ ],
'button' => 'Jetzt ansehen',
],
diff --git a/resources/lang/de-DE/messages.php b/resources/lang/de-DE/messages.php
index de129a178..12976d3de 100644
--- a/resources/lang/de-DE/messages.php
+++ b/resources/lang/de-DE/messages.php
@@ -11,19 +11,22 @@ return [
'enabled' => ':type aktiviert!',
'disabled' => ':type deaktiviert!',
],
+
'error' => [
- 'over_payment' => 'Fehler: Zahlung wurde nicht hinzugefügt! Betrag überschreitet die Gesamtsumme.',
+ 'over_payment' => 'Fehler: Zahlung wurde nicht gebucht! Der eingegebenen Betrag überschreitet die Gesamtsumme: :amount',
'not_user_company' => 'Fehler: Sie haben nicht die Berechtigung um diese Firma zu verwalten!',
'customer' => 'Fehler: User wurde nicht angelegt! :name benutzt schon diese Email-Adresse.',
'no_file' => 'Fehler: Keine Datei ausgewählt!',
'last_category' => 'Fehler: Kann die letzte Kategorie :type nicht löschen!',
'invalid_token' => 'Fehler: Der eingegebene Token ist ungültig!',
- 'import_column' => 'Fehler: :message Name des Blattes: :sheet. Zeilennummer: :line.',
+ 'import_column' => 'Fehler: :message. Name des Blattes: :sheet. Zeilennummer: :line.',
'import_sheet' => 'Fehler: Name des Blattes ist nicht gültig. Bitte die Beispieldatei überprüfen.',
],
+
'warning' => [
'deleted' => 'Warnung: Sie dürfen :name nicht löschen, da :text dazu in Bezug steht.',
'disabled' => 'Warnung: Sie dürfen :name nicht deaktivieren, da :text dazu in Bezug steht.',
+ 'disable_code' => 'Warning: You are not allowed to disable or change the currency of :name because it has :text related.',
],
];
diff --git a/resources/lang/de-DE/modules.php b/resources/lang/de-DE/modules.php
index 8a257baf8..e9a83233e 100644
--- a/resources/lang/de-DE/modules.php
+++ b/resources/lang/de-DE/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Bisher existieren noch keine Apps in dieser Kategorie.',
'developer' => 'Sind sie ein Entwickler? Hier lernen Sie wie Sie eine App erzeugen und verkaufen können!',
+ 'recommended_apps' => 'Empfohlene Apps',
+
'about' => 'Über',
'added' => 'Hinzugefügt',
@@ -32,15 +34,28 @@ return [
'installation' => 'Installation',
'faq' => 'Häufige Fragen / FAQ',
'changelog' => 'Changelog',
+ 'reviews' => 'Rezensionen',
],
'installation' => [
'header' => 'App Installation',
'download' => 'Lade :module Dateien herunter.',
'unzip' => 'Extrahiere :module Dateien.',
+ 'file_copy' => ':module Dateien werden kopiert.',
+ 'migrate' => ':module wird geupdated.',
+ 'finish' => 'Das Update wurde erfolgreich installiert. Sie werden zum Update Center weiterleiten.',
'install' => 'Installiere :module Dateien.',
],
+ 'errors' => [
+ 'download' => ':module kann nicht heruntergeladen werden!',
+ 'upload' => 'Heruntergeladenes Modul :module konnte nicht gespeichert werden!',
+ 'unzip' => ':module kann nicht entpackt werden!',
+ 'file_copy' => ':module Dateien können nicht kopiert werden!',
+ 'migrate' => ':module Migration fehlerhaft!',
+ 'migrate core' => ':module bereits auf der neuesten Version, Aktualisierung nicht nötig.',
+ ],
+
'badge' => [
'installed' => 'Installiert',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Gekauft',
'installed' => 'Installiert',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Eine Rezension verfassen'
+ ],
+ 'na' => 'Es existieren noch keine Rezensionen.'
+ ]
];
diff --git a/resources/lang/de-DE/reconciliations.php b/resources/lang/de-DE/reconciliations.php
new file mode 100644
index 000000000..627d47c0d
--- /dev/null
+++ b/resources/lang/de-DE/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Abstimmen',
+ 'reconciled' => 'Abgeglichen',
+ 'closing_balance' => 'Endsaldo',
+ 'unreconciled' => 'Nicht abgeglichen',
+ 'list_transactions' => 'Transaktion anzeigen',
+ 'start_date' => 'Startdatum',
+ 'end_date' => 'Enddatum',
+ 'cleared_amount' => 'Ausgeglichener Betrag',
+ 'deposit' => 'Deposit',
+ 'withdrawal' => 'Withdrawal',
+
+];
diff --git a/resources/lang/de-DE/recurring.php b/resources/lang/de-DE/recurring.php
index bd90a4994..d5174b236 100644
--- a/resources/lang/de-DE/recurring.php
+++ b/resources/lang/de-DE/recurring.php
@@ -15,6 +15,6 @@ return [
'weeks' => 'Woche(n)',
'months' => 'Monat(e)',
'years' => 'Jahr(e)',
- 'message' => 'Dies ist ein sich wiederholender :type und der nächste :type wird automatisch am :date erzeugt',
+ 'message' => 'Dies ist ein(e) sich wiederholende :type und die/der nächste :type wird automatisch am :date erzeugt',
];
diff --git a/resources/lang/de-DE/settings.php b/resources/lang/de-DE/settings.php
index 3773fe433..3c4e026c6 100644
--- a/resources/lang/de-DE/settings.php
+++ b/resources/lang/de-DE/settings.php
@@ -29,10 +29,20 @@ return [
],
'invoice' => [
'tab' => 'Rechnung',
- 'prefix' => 'Zahlenprefix',
+ 'prefix' => 'Rechnungsprefix',
'digit' => 'Nachkommastellen',
'next' => 'Nächste Nummer',
'logo' => 'Logo',
+ 'custom' => 'Benutzerdefiniert',
+ 'item_name' => 'Artikelbezeichnung',
+ 'item' => 'Artikel',
+ 'product' => 'Produkte',
+ 'service' => 'Dienste',
+ 'price_name' => 'Preisbezeichnung',
+ 'price' => 'Preis',
+ 'rate' => 'Satz',
+ 'quantity_name' => 'Mengenbezeichnung',
+ 'quantity' => 'Menge',
],
'default' => [
'tab' => 'Standardeinstellungen',
@@ -47,25 +57,27 @@ return [
'php' => 'PHP-Mail',
'smtp' => [
'name' => 'SMTP',
- 'host' => 'SMTP Server',
+ 'host' => 'SMTP-Server',
'port' => 'SMTP-Port',
- 'username' => 'SMTP Benutzername',
+ 'username' => 'SMTP-Benutzername',
'password' => 'SMTP-Passwort',
'encryption' => 'SMTP-Sicherheit',
'none' => 'Keine',
],
'sendmail' => 'Sendmail',
'sendmail_path' => 'Sendmail Pfad',
- 'log' => 'Protokoll E-Mails',
+ 'log' => 'E-Mails protokollieren',
],
'scheduling' => [
'tab' => 'Zeitpläne',
'send_invoice' => 'Erinnerung für Kundenrechnung senden',
'invoice_days' => 'Senden nach Fälligkeit (Tage)',
- 'send_bill' => 'Erinnerung für Ausgabenrechung senden',
+ 'send_bill' => 'Erinnerung für Ausgabenrechnung senden',
'bill_days' => 'Senden vor Fälligkeit (Tage)',
'cron_command' => 'Cron-Befehl',
- 'schedule_time' => 'Stunde (Laufzeit)',
+ 'schedule_time' => 'Ausführungszeit (volle Stunde)',
+ 'send_item_reminder'=> 'Erinnerung für Artikel senden',
+ 'item_stocks' => 'Senden wenn Artikel verfügbar',
],
'appearance' => [
'tab' => 'Darstellung',
diff --git a/resources/lang/de-DE/taxes.php b/resources/lang/de-DE/taxes.php
index f239d9c0f..b4f3eb75f 100644
--- a/resources/lang/de-DE/taxes.php
+++ b/resources/lang/de-DE/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Steuersatz',
'rate_percent' => 'Steuersatz (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Inklusive',
+ 'compound' => 'zusammengesetzt',
];
diff --git a/resources/lang/de-DE/updates.php b/resources/lang/de-DE/updates.php
index de37e3d3d..c0214c08d 100644
--- a/resources/lang/de-DE/updates.php
+++ b/resources/lang/de-DE/updates.php
@@ -4,7 +4,7 @@ return [
'installed_version' => 'Installierte Version',
'latest_version' => 'Neueste Version',
- 'update' => 'Update Akaunting auf Version :version',
+ 'update' => 'Akaunting auf Version :version updaten',
'changelog' => 'Changelog',
'check' => 'Prüfen',
'new_core' => 'Eine aktualisierte Version von Akaunting ist verfügbar.',
diff --git a/resources/lang/de-DE/validation.php b/resources/lang/de-DE/validation.php
index d08d2ed26..ab3d0c872 100644
--- a/resources/lang/de-DE/validation.php
+++ b/resources/lang/de-DE/validation.php
@@ -13,7 +13,7 @@ return [
|
*/
- 'accepted' => 'Das Feld :attribute muss akzeptiert werden.',
+ 'accepted' => ':attribute muss akzeptiert werden.',
'active_url' => ':attribute ist keine valide URL.',
'after' => ':attribute muss ein Datum nach dem :date sein.',
'after_or_equal' => ':attribute muss ein Datum nach oder gleich dem :date sein.',
@@ -26,7 +26,7 @@ return [
'between' => [
'numeric' => ':attribute muss zwischen :min und :max liegen.',
'file' => ':attribute darf nur zwischen :min und :max kilobytes groß sein.',
- 'string' => ':attribute muss mindestens :min und maximal :max Zeichen enthalten.',
+ 'string' => ':attribute muss mindestens :min und darf maximal :max Zeichen enthalten.',
'array' => ':attribute soll mindestens :min und darf maximal :max Stellen haben.',
],
'boolean' => ':attribute muss Wahr oder Falsch sein.',
@@ -41,7 +41,7 @@ return [
'email' => ':attribute Attribut muss eine gültige E-Mail-Adresse sein.',
'exists' => 'Das ausgewählte :attribute ist ungültig.',
'file' => ':attribute muss eine Datei sein.',
- 'filled' => ':attribute Feld muss einen Wert haben.',
+ 'filled' => ':attribute muss einen Wert besitzen.',
'image' => ':attribute muss ein Bild sein.',
'in' => 'Das ausgewählte :attribute ist ungültig.',
'in_array' => ':attribute Feld existiert nicht in :other.',
@@ -51,7 +51,7 @@ return [
'max' => [
'numeric' => ':attribute darf nicht größer als :max sein.',
'file' => ':attribute darf nicht größer als :max Kilobyte sein.',
- 'string' => ':attribute darf nicht mehr als :max Zeichen sein.',
+ 'string' => ':attribute darf nicht größer als :max Zeichen sein.',
'array' => ':attribute darf nicht mehr als :max Werte haben.',
],
'mimes' => ':attribute muss eine Datei des Typs :values sein.',
@@ -66,9 +66,9 @@ return [
'numeric' => ':attribute muss eine Zahl sein.',
'present' => ':attribute Feld muss vorhanden sein.',
'regex' => ':attribute Format ist ungültig.',
- 'required' => ':attribute Feld muss ausgefüllt sein.',
+ 'required' => ':attribute wird benötigt.',
'required_if' => ':attribute wird benötigt wenn :other :value entspricht.',
- 'required_unless' => ':attribute wird benötigt es sei denn :other ist in :values .',
+ 'required_unless' => ':attribute wird benötigt es sei denn :other ist in :values.',
'required_with' => ':attribute wird benötigt wenn :values vorhanden ist.',
'required_with_all' => ':attribute wird benötigt wenn :values vorhanden ist.',
'required_without' => ':attribute wird benötigt wenn :values nicht vorhanden ist.',
@@ -81,7 +81,7 @@ return [
'array' => ':attribute muss :size Artikel enthalten.',
],
'string' => ':attribute muss ein String sein.',
- 'timezone' => ':attribute muss eine valide Zone sein.',
+ 'timezone' => ':attribute muss eine valide Zeitzone sein.',
'unique' => ':attribute wird schon benutzt.',
'uploaded' => ':attribute Fehler beim Hochladen.',
'url' => ':attribute Format ist ungültig.',
@@ -102,6 +102,7 @@ return [
'rule-name' => 'eigene Nachricht',
],
'invalid_currency' => 'Das :attribute Kürzel ist ungültig.',
+ 'invalid_amount' => 'Die Menge von :attribute ist ungültig.',
],
/*
diff --git a/resources/lang/el-GR/auth.php b/resources/lang/el-GR/auth.php
index c555ba6bd..faf3c8137 100644
--- a/resources/lang/el-GR/auth.php
+++ b/resources/lang/el-GR/auth.php
@@ -31,7 +31,7 @@ return [
'throttle' => 'Ξεπεράσατε τις επιτρεπόμενες απόπειρες σύνδεσης. Παρακαλώ δοκιμάστε ξανά σε :seconds δευτερόλεπτα.',
'notification' => [
- 'message_1' => 'Λαμβάνεται αυτό το μήνυμα επειδή ζητήσατε την επαναφορά του συνθηματικού για το λογαριασμό σας.',
+ 'message_1' => 'Λαμβάνετε αυτό το μήνυμα επειδή ζητήσατε την επαναφορά του συνθηματικού για το λογαριασμό σας.',
'message_2' => 'Αν δεν ζητήσατε την επαναφορά του συνθηματικού, δεν απαιτείται κάποια περαιτέρω ενέργεια.',
'button' => 'Επαναφορά συνθηματικού',
],
diff --git a/resources/lang/el-GR/bills.php b/resources/lang/el-GR/bills.php
index c36423f12..16589afab 100644
--- a/resources/lang/el-GR/bills.php
+++ b/resources/lang/el-GR/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Λογαριασμός που σημειώθηκε ότι ελήφθη επιτυχώς!',
+ 'draft' => 'Αυτός ο λογαριασμός είναι ΠΡΟΧΕΙΡΟΣ και θα εμφανιστεί στα γραφήματα μετά την παραλαβή του.',
+
+ 'status' => [
+ 'created' => 'Δημιουργήθηκε :date',
+ 'receive' => [
+ 'draft' => 'Δεν εστάλη',
+ 'received' => 'Ελήφθη :date',
+ ],
+ 'paid' => [
+ 'await' => 'Αναμένεται εξόφληση',
+ ],
+ ],
],
];
diff --git a/resources/lang/el-GR/customers.php b/resources/lang/el-GR/customers.php
index 05842329d..92dcc0cf5 100644
--- a/resources/lang/el-GR/customers.php
+++ b/resources/lang/el-GR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Το email αυτό χρησιμοποιείται ήδη.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => 'Έγινε πληρωμή :amount αντί του τιμολογίου με αριθμό :invoice_number από τον/την :customer.',
+ 'button' => 'Εμφάνιση',
+ ],
];
diff --git a/resources/lang/el-GR/footer.php b/resources/lang/el-GR/footer.php
index 94192e9d1..c9e122df9 100644
--- a/resources/lang/el-GR/footer.php
+++ b/resources/lang/el-GR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Έκδοση',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Δωρεάν λογισμικό λογιστικής',
];
diff --git a/resources/lang/el-GR/general.php b/resources/lang/el-GR/general.php
index bbb179ae0..6f201250c 100644
--- a/resources/lang/el-GR/general.php
+++ b/resources/lang/el-GR/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Αριθμός|Αριθμοί',
'statuses' => 'Κατάσταση|Καταστάσεις',
'others' => 'Άλλο|Άλλα',
+ 'contacts' => 'Επαφή|Επαφές',
+ 'reconciliations' => 'Συμφωνία|Συμφωνίες',
+ 'deposits' => 'Κατάθεση|Καταθέσεις',
+ 'withdrawals' => 'Ανάληψη|Αναλήψεις',
'dashboard' => 'Πίνακας ελέγχου',
'banking' => 'Τράπεζες',
@@ -81,6 +85,7 @@ return [
'color' => 'Χρώμα',
'save' => 'Αποθήκευση',
'cancel' => 'Ακύρωση',
+ 'loading' => 'Φόρτωση...',
'from' => 'Από',
'to' => 'Προς',
'print' => 'Εκτύπωση',
@@ -101,12 +106,27 @@ return [
'partially' => 'Μερικό',
'partially_paid' => 'Μερικώς εξοφλημένα',
'export' => 'Εξαγωγή',
+ 'finish' => 'Τέλος',
+ 'wizard' => 'Οδηγός',
+ 'skip' => 'Παράλειψη',
'enable' => 'Ενεργοποίηση',
'disable' => 'Απενεργοποίηση',
+ 'select_all' => 'Επιλογή όλων',
+ 'unselect_all' => 'Κατάργηση Επιλογής',
+ 'go_to' => 'Μετάβαση στο :name',
+ 'created_date' => 'Ημερομηνία Δημιουργίας',
+ 'period' => 'Περίοδος',
+ 'start' => 'Έναρξη',
+ 'end' => 'Τέλος',
+ 'clear' => 'Καθαρισμός',
+ 'difference' => 'Διαφορά',
'title' => [
'new' => 'Νέο :type',
'edit' => 'Επεξεργασία :type',
+ 'create' => 'Δημιουργία :type',
+ 'send' => 'Αποστολή :type',
+ 'get' => 'Εμφάνιση :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Δεν έχει επιλεχθεί αρχείο...',
],
+ 'date_range' => [
+ 'today' => 'Σήμερα',
+ 'yesterday' => 'Χθες',
+ 'last_days' => 'Προηγούμενες :day Ημέρες',
+ 'this_month' => 'Αυτό το Μήνα',
+ 'last_month' => 'Τον Προηγούμενο Μήνα',
+ ],
];
diff --git a/resources/lang/el-GR/header.php b/resources/lang/el-GR/header.php
index ef189a187..18727611d 100644
--- a/resources/lang/el-GR/header.php
+++ b/resources/lang/el-GR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count προϊόν έχει εξαντληθεί|[2,*] :count έχουν εξαντληθεί',
'view_all' => 'Προβολή Όλων'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/el-GR/invoices.php b/resources/lang/el-GR/invoices.php
index 6979509d0..9af5c3efe 100644
--- a/resources/lang/el-GR/invoices.php
+++ b/resources/lang/el-GR/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Σημείωσε ως Απεσταλμένο',
'download_pdf' => 'Λήψη PDF',
'send_mail' => 'Αποστολή email Μηνύματος',
+ 'all_invoices' => 'Συνδεθείτε για να δείτε όλα τα τιμολόγια',
'status' => [
'draft' => 'Προσχέδιο',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Το τιμολόγιο εστάλει με επιτυχία μέσω email!',
'marked_sent' => 'Το τιμολόγιο επισημάνθηκε με επιτυχία ως σταλμένο!',
'email_required' => 'Δεν υπάρχει διεύθυνση email για αυτόν τον πελάτη!',
+ 'draft' => 'Αυτό το τιμολόγιο είναι ΠΡΟΧΕΙΡΟ και θα εμφανιστεί στα γραφήματα μετά την παραλαβή του.',
+
+ 'status' => [
+ 'created' => 'Δημιουργήθηκε στις :date',
+ 'send' => [
+ 'draft' => 'Δεν εστάλη',
+ 'sent' => 'Εστάλη στις :date',
+ ],
+ 'paid' => [
+ 'await' => 'Αναμένεται εξόφληση',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/el-GR/items.php b/resources/lang/el-GR/items.php
index be5522e5d..c742042a7 100644
--- a/resources/lang/el-GR/items.php
+++ b/resources/lang/el-GR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Μονάδες Προϊόντος σε Απόθεμα',
'notification' => [
- 'message' => 'Λαμβάνετε αυτό το μήνυμα επειδή το : υπ\' αριθμ. προϊόν εξαντλείται.',
+ 'message' => [
+ 'reminder' => 'Λαμβάνετε αυτό το μήνυμα επειδή έχουν απομείνει μόνο :quantity από το :name.',
+ 'out_of_stock' => 'Λαμβάνετε αυτό το μήνυμα επειδή τελειώνει το απόθεμα του :name.',
+ ],
'button' => 'Δείτε τώρα',
],
diff --git a/resources/lang/el-GR/messages.php b/resources/lang/el-GR/messages.php
index e7763a484..97a7b921c 100644
--- a/resources/lang/el-GR/messages.php
+++ b/resources/lang/el-GR/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type απενεργοποιήθηκε!',
],
'error' => [
- 'over_payment' => 'Σφάλμα: Η πληρωμή δεν προστέθηκε! Το ποσό ξεπερνάει το σύνολο.',
+ 'over_payment' => 'Σφάλμα: Η πληρωμή δεν προστέθηκε! Το ποσό υπερβαίνει το σύνολο: :amount',
'not_user_company' => 'Σφάλμα: Δεν επιτρέπεται να διαχειριστείτε αυτή την εταιρεία!',
'customer' => 'Σφάλμα: Ο χρήστης δεν δημιουργήθηκε! Ο/Η :name χρησιμοποιεί ήδη αυτό το email.',
'no_file' => 'Σφάλμα: Δεν έχετε επιλέξει αρχείο!',
diff --git a/resources/lang/el-GR/modules.php b/resources/lang/el-GR/modules.php
index a73649a9d..e0f851ec3 100644
--- a/resources/lang/el-GR/modules.php
+++ b/resources/lang/el-GR/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Δεν υπάρχουν εφαρμογές σε αυτή την κατηγορία, ακόμα.',
'developer' => 'Είστε προγραμματιστής; εδώ μπορείτε να μάθετε πώς μπορείτε να δημιουργήσετε μια εφαρμογή και να αρχίσετε να την πουλάτε σήμερα κιόλας!',
+ 'recommended_apps' => 'Προτεινόμενες Εφαρμογές',
+
'about' => 'Σχετικά με',
'added' => 'Έχει προστεθεί',
@@ -32,15 +34,28 @@ return [
'installation' => 'Εγκατάσταση',
'faq' => 'Συχνές ερωτήσεις (FAQ)',
'changelog' => 'Αρχείο καταγραφής αλλαγών',
+ 'reviews' => 'Αξιολογήσεις',
],
'installation' => [
'header' => 'Εγκατάσταση εφαρμογής',
'download' => 'Λήψη αρχείου :module.',
'unzip' => 'Εξαγωγή :όνομα αρχείου.',
+ 'file_copy' => 'Αντιγραφή αρχείων του :module.',
+ 'migrate' => 'Εφαρμογή αναβαθμίσεων του :module.',
+ 'finish' => 'Η ενημέρωση ήταν επιτυχής. Θα μεταφερθείτε αυτόματα στο Κέντρο Ενημερώσεων.',
'install' => 'Εγκατάσταση :όνομα αρχείου.',
],
+ 'errors' => [
+ 'download' => 'απέτυχε η λήψη του :module!',
+ 'upload' => 'Το αρχείο λήψης του :module δεν μπορεί να αποθηκευτεί!',
+ 'unzip' => 'απέτυχε η αποσυμπίεση του :module!',
+ 'file_copy' => 'απέτυχε η αντιγραφή των αρχείων του :module!',
+ 'migrate' => 'απέτυχε η μετάβαση δεδομένων του :migration!',
+ 'migrate core' => 'το :module είναι ήδη στην τελευταία έκδοση και δεν θα αναβαθμιστεί.',
+ ],
+
'badge' => [
'installed' => 'Εγκατεστημένο',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Αγορασμένο',
'installed' => 'Εγκατεστημένα',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Προσθήκη αξιολόγησης'
+ ],
+ 'na' => 'Δεν υπάρχουν αξιολογήσεις.'
+ ]
];
diff --git a/resources/lang/el-GR/reconciliations.php b/resources/lang/el-GR/reconciliations.php
new file mode 100644
index 000000000..f205e3be4
--- /dev/null
+++ b/resources/lang/el-GR/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Σύγκριση',
+ 'reconciled' => 'Σε συμφωνία',
+ 'closing_balance' => 'Υπόλοιπο κλεισίματος',
+ 'unreconciled' => 'Σε ασυμφωνία',
+ 'list_transactions' => 'Λίστα Συναλλαγών',
+ 'start_date' => 'Ημερομηνία Έναρξης',
+ 'end_date' => 'Ημερομηνία Λήξης',
+ 'cleared_amount' => 'Εκκαθαρισμένο Υπόλοιπο',
+
+];
diff --git a/resources/lang/el-GR/settings.php b/resources/lang/el-GR/settings.php
index b4e6ed096..932d9e92c 100644
--- a/resources/lang/el-GR/settings.php
+++ b/resources/lang/el-GR/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Αριθμός ψηφίων',
'next' => 'Επόμενος αριθμός',
'logo' => 'Λογότυπο',
+ 'custom' => 'Προσαρμογή',
+ 'item_name' => 'Όνομα αντικειμένου',
+ 'item' => 'Αντικείμενα',
+ 'product' => 'Προϊόντα',
+ 'service' => 'Υπηρεσίες',
+ 'price_name' => 'Όνομα τιμής',
+ 'price' => 'Τιμή',
+ 'rate' => 'Συντελεστής',
+ 'quantity_name' => 'Όνομα ποσότητα',
+ 'quantity' => 'Ποσότητα',
],
'default' => [
'tab' => 'Προεπιλογές',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Αποστολή πριν από πόσες μέρες θα έπρεπε να είχε εξοφληθεί',
'cron_command' => 'Προγραμματισμένη Εντολή',
'schedule_time' => 'Ώρα εκτέλεσης',
+ 'send_item_reminder'=> 'Αποστολή Υπενθύμισης Αντικειμένου',
+ 'item_stocks' => 'Αποστολή σε Απόθεμα Αντικειμένου',
],
'appearance' => [
'tab' => 'Εμφάνιση',
diff --git a/resources/lang/el-GR/taxes.php b/resources/lang/el-GR/taxes.php
index efa93a445..34c799766 100644
--- a/resources/lang/el-GR/taxes.php
+++ b/resources/lang/el-GR/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Συντελεστής',
'rate_percent' => 'Συντελεστής (%)',
+ 'normal' => 'Κανονικός',
+ 'inclusive' => 'Συμπεριλαμβανόμενος',
+ 'compound' => 'Μεικτός',
];
diff --git a/resources/lang/el-GR/validation.php b/resources/lang/el-GR/validation.php
index 56cdb3eab..9704122e6 100644
--- a/resources/lang/el-GR/validation.php
+++ b/resources/lang/el-GR/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'προσαρμοσμένο-μήνυμα',
],
'invalid_currency' => 'Το πεδίο :attribute δεν είναι έγκυρος κωδικός νομίσματος.',
+ 'invalid_amount' => 'Το πεδίο :attribute δεν είναι έγκυρο ποσό.',
],
/*
diff --git a/resources/lang/en-GB/bills.php b/resources/lang/en-GB/bills.php
index b8832c93d..93a3b1f9c 100644
--- a/resources/lang/en-GB/bills.php
+++ b/resources/lang/en-GB/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Bill marked as received successfully!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/en-GB/customers.php b/resources/lang/en-GB/customers.php
index cad4bc8b9..13925f49b 100644
--- a/resources/lang/en-GB/customers.php
+++ b/resources/lang/en-GB/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'The email has already been taken.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/en-GB/footer.php b/resources/lang/en-GB/footer.php
index e099c6a53..3238ff19f 100644
--- a/resources/lang/en-GB/footer.php
+++ b/resources/lang/en-GB/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Version',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Free Accounting Software',
];
diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php
index 8d289c4ec..59ae36859 100644
--- a/resources/lang/en-GB/general.php
+++ b/resources/lang/en-GB/general.php
@@ -38,6 +38,8 @@ return [
'numbers' => 'Number|Numbers',
'statuses' => 'Status|Statuses',
'others' => 'Other|Others',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
'dashboard' => 'Dashboard',
'banking' => 'Banking',
@@ -81,6 +83,7 @@ return [
'color' => 'Colour',
'save' => 'Save',
'cancel' => 'Cancel',
+ 'loading' => 'Loading...',
'from' => 'From',
'to' => 'To',
'print' => 'Print',
@@ -101,12 +104,27 @@ return [
'partially' => 'Partially',
'partially_paid' => 'Partially Paid',
'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Enable',
'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'New :type',
'edit' => 'Edit :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +136,11 @@ return [
'no_file_selected' => 'No file selected...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/en-GB/header.php b/resources/lang/en-GB/header.php
index 6f57b7989..7b2cf3c42 100644
--- a/resources/lang/en-GB/header.php
+++ b/resources/lang/en-GB/header.php
@@ -9,7 +9,9 @@ return [
'overdue_invoices' => '{1} :count overdue invoice|[2,*] :count overdue invoices',
'upcoming_bills' => '{1} :count upcoming bill|[2,*] :count upcoming bills',
'items_stock' => '{1} :count item out of stock|[2,*] :count items out of stock',
+ 'items_reminder' => '{1} You have :count item left|[2,*] You have :count items left',
'view_all' => 'View All'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/en-GB/invoices.php b/resources/lang/en-GB/invoices.php
index 66e75187d..63db9f663 100644
--- a/resources/lang/en-GB/invoices.php
+++ b/resources/lang/en-GB/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Mark Sent',
'download_pdf' => 'Download PDF',
'send_mail' => 'Send Email',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Draft',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Invoice email has been sent successfully!',
'marked_sent' => 'Invoice marked as sent successfully!',
'email_required' => 'No email address for this customer!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/en-GB/items.php b/resources/lang/en-GB/items.php
index eba79c452..aa9d81b50 100644
--- a/resources/lang/en-GB/items.php
+++ b/resources/lang/en-GB/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'You are receiving this email because the :name is running out of stock.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'View Now',
],
diff --git a/resources/lang/en-GB/messages.php b/resources/lang/en-GB/messages.php
index 2ed96991c..8e9e544d7 100644
--- a/resources/lang/en-GB/messages.php
+++ b/resources/lang/en-GB/messages.php
@@ -11,8 +11,9 @@ return [
'enabled' => ':type enabled!',
'disabled' => ':type disabled!',
],
+
'error' => [
- 'over_payment' => 'Error: Payment not added! Amount passes the total. You don\'t should max add amount: :amount',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Error: You are not allowed to manage this company!',
'customer' => 'Error: User not created! :name already uses this email address.',
'no_file' => 'Error: No file selected!',
@@ -21,9 +22,11 @@ return [
'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
+
'warning' => [
'deleted' => 'Warning: You are not allowed to delete :name because it has :text related.',
'disabled' => 'Warning: You are not allowed to disable :name because it has :text related.',
+ 'disable_code' => 'Warning: You are not allowed to disable or change the currency of :name because it has :text related.',
],
];
diff --git a/resources/lang/en-GB/modules.php b/resources/lang/en-GB/modules.php
index ce62fd3cc..7e58d6a79 100644
--- a/resources/lang/en-GB/modules.php
+++ b/resources/lang/en-GB/modules.php
@@ -16,11 +16,16 @@ return [
'no_apps' => 'There are no apps in this category, yet.',
'developer' => 'Are you a developer? Here you can learn how to create an app and start selling today!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'About',
'added' => 'Added',
'updated' => 'Updated',
'compatibility' => 'Compatibility',
+ 'documentation' => 'Documentation',
+ 'view' => 'View',
+ 'back' => 'Back',
'installed' => ':module installed',
'uninstalled' => ':module uninstalled',
@@ -39,9 +44,21 @@ return [
'header' => 'App Installation',
'download' => 'Downloading :module file.',
'unzip' => 'Extracting :module files.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Installing :module files.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Installed',
],
diff --git a/resources/lang/en-GB/reconciliations.php b/resources/lang/en-GB/reconciliations.php
new file mode 100644
index 000000000..82682df5e
--- /dev/null
+++ b/resources/lang/en-GB/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+ 'deposit' => 'Deposit',
+ 'withdrawal' => 'Withdrawal',
+
+];
diff --git a/resources/lang/en-GB/recurring.php b/resources/lang/en-GB/recurring.php
index 92099c71c..79fefa042 100644
--- a/resources/lang/en-GB/recurring.php
+++ b/resources/lang/en-GB/recurring.php
@@ -15,6 +15,6 @@ return [
'weeks' => 'Week(s)',
'months' => 'Month(s)',
'years' => 'Year(s)',
- 'message' => 'This is a recurring :type and the next :type will be automatically generated at :date',
+ 'message' => 'This is a recurring :type and the next :type will be automatically generated on :date',
];
diff --git a/resources/lang/en-GB/settings.php b/resources/lang/en-GB/settings.php
index 20e7cc22b..4ba42cacb 100644
--- a/resources/lang/en-GB/settings.php
+++ b/resources/lang/en-GB/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Number Digit',
'next' => 'Next Number',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Defaults',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Send Before Due Days',
'cron_command' => 'Cron Command',
'schedule_time' => 'Hour To Run',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Appearance',
diff --git a/resources/lang/en-GB/taxes.php b/resources/lang/en-GB/taxes.php
index cb774d1ba..3e689c47c 100644
--- a/resources/lang/en-GB/taxes.php
+++ b/resources/lang/en-GB/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Rate',
'rate_percent' => 'Rate (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Inclusive',
+ 'compound' => 'Compound',
];
diff --git a/resources/lang/es-ES/bills.php b/resources/lang/es-ES/bills.php
index 986ed5b3f..03677c92a 100644
--- a/resources/lang/es-ES/bills.php
+++ b/resources/lang/es-ES/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Recibo marcado como recibido con éxito!',
+ 'draft' => 'Este es un recibo BORRADOR y se reflejará en los gráficos luego de recibirse.',
+
+ 'status' => [
+ 'created' => 'Creado el :date',
+ 'receive' => [
+ 'draft' => 'No enviado',
+ 'received' => 'Recibido el :date',
+ ],
+ 'paid' => [
+ 'await' => 'Pendiente de pago',
+ ],
+ ],
],
];
diff --git a/resources/lang/es-ES/customers.php b/resources/lang/es-ES/customers.php
index 15cfa0729..65d13194e 100644
--- a/resources/lang/es-ES/customers.php
+++ b/resources/lang/es-ES/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Ese email ya está en uso.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer hizo un pago de :amount por la factura número :invoice_number.',
+ 'button' => 'Mostrar',
+ ],
];
diff --git a/resources/lang/es-ES/footer.php b/resources/lang/es-ES/footer.php
index 1a535edb4..3a6bd3d61 100644
--- a/resources/lang/es-ES/footer.php
+++ b/resources/lang/es-ES/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versión',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Software de Contabilidad Libre',
];
diff --git a/resources/lang/es-ES/general.php b/resources/lang/es-ES/general.php
index 2b4ce6288..0cce2754d 100644
--- a/resources/lang/es-ES/general.php
+++ b/resources/lang/es-ES/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Número|Números',
'statuses' => 'Estado|Estados',
'others' => 'Otro|Otros',
+ 'contacts' => 'Contacto|Contactos',
+ 'reconciliations' => 'Conciliación|Concialiaciones',
+ 'deposits' => 'Depósito|Depósitos',
+ 'withdrawals' => 'Retiro|Retiros',
'dashboard' => 'Panel de Control',
'banking' => 'Banking',
@@ -81,6 +85,7 @@ return [
'color' => 'Color',
'save' => 'Guardar',
'cancel' => 'Cancelar',
+ 'loading' => 'Cargando...',
'from' => 'De ',
'to' => 'Para',
'print' => 'Imprimir',
@@ -101,12 +106,27 @@ return [
'partially' => 'Parcialmente',
'partially_paid' => 'Parcialmente pagado',
'export' => 'Exportar',
+ 'finish' => 'Terminar',
+ 'wizard' => 'Asistente',
+ 'skip' => 'Omitir',
'enable' => 'Habilitar',
'disable' => 'Deshabilitar',
+ 'select_all' => 'Seleccionar Todos',
+ 'unselect_all' => 'Deseleccionar Todo',
+ 'go_to' => 'Ir a :name',
+ 'created_date' => 'Fecha de Creación',
+ 'period' => 'Período',
+ 'start' => 'Inicio',
+ 'end' => 'Fin',
+ 'clear' => 'Limpiar',
+ 'difference' => 'Diferencia',
'title' => [
'new' => 'Nuevo :type',
'edit' => 'Editar :type',
+ 'create' => 'Crear :type',
+ 'send' => 'Enviar :type',
+ 'get' => 'Obtener :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Ningún archivo seleccionado...',
],
+ 'date_range' => [
+ 'today' => 'Hoy',
+ 'yesterday' => 'Ayer',
+ 'last_days' => 'Últimos :day Días',
+ 'this_month' => 'Este mes',
+ 'last_month' => 'Mes anterior',
+ ],
];
diff --git a/resources/lang/es-ES/header.php b/resources/lang/es-ES/header.php
index 7077bdd38..03e667efe 100644
--- a/resources/lang/es-ES/header.php
+++ b/resources/lang/es-ES/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count artículo sin stock|[2,*] :count artículos sin stock',
'view_all' => 'Ver todas'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/es-ES/install.php b/resources/lang/es-ES/install.php
index 6d0e7df09..6e894ef08 100644
--- a/resources/lang/es-ES/install.php
+++ b/resources/lang/es-ES/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Actualizar',
'steps' => [
- 'requirements' => 'Por favor, cumpla los siguientes requisitos!',
+ 'requirements' => 'Por favor, pregúntele a su proveedor de hosting para corregir los errores!',
'language' => 'Paso 1/3: Selección de idioma',
'database' => 'Paso 2/3: Configuración de la base de datos',
'settings' => 'Paso 3/3: Detalles de la Empresa y el Administrador',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature debe estar habilitado!',
'disabled' => ':feature debe estar deshabilitado!',
- 'extension' => 'La extensión :extension debe estar cargada!',
+ 'extension' => 'La extensión :extension necesita ser instalada y cargada!',
'directory' => 'El directorio :directorio necesita tener permiso de escritura!',
],
diff --git a/resources/lang/es-ES/invoices.php b/resources/lang/es-ES/invoices.php
index 854d9c515..b35a2df57 100644
--- a/resources/lang/es-ES/invoices.php
+++ b/resources/lang/es-ES/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Marcar Como Enviada',
'download_pdf' => 'Descargar PDF',
'send_mail' => 'Enviar Email',
+ 'all_invoices' => 'Inicie sesión para ver todas las facturas',
'status' => [
'draft' => 'Borrador',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'El email de la factura se ha enviado correctamente!',
'marked_sent' => 'Factura marcada como enviada con éxito!',
'email_required' => 'Ninguna dirección de correo electrónico para este cliente!',
+ 'draft' => 'Esta es una factura BORRADOR y se reflejará en los gráficos luego de que sea enviada.',
+
+ 'status' => [
+ 'created' => 'Creada el :date',
+ 'send' => [
+ 'draft' => 'No enviada',
+ 'sent' => 'Enviada el :date',
+ ],
+ 'paid' => [
+ 'await' => 'Pendiente de pago',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/es-ES/items.php b/resources/lang/es-ES/items.php
index 242ff5e36..f9338eddc 100644
--- a/resources/lang/es-ES/items.php
+++ b/resources/lang/es-ES/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Usted está recibiendo este correo electrónico porque el producto :name se está quedando sin stock.',
+ 'message' => [
+ 'reminder' => 'Usted está recibiendo este correo electrónico porque sólo :quantity de los :name han permanecido.',
+ 'out_of_stock' => 'Usted está recibiendo este correo electrónico porque el producto :name se está quedando sin stock.',
+ ],
'button' => 'Ver ahora',
],
diff --git a/resources/lang/es-ES/messages.php b/resources/lang/es-ES/messages.php
index 005913f33..15759353c 100644
--- a/resources/lang/es-ES/messages.php
+++ b/resources/lang/es-ES/messages.php
@@ -12,14 +12,14 @@ return [
'disabled' => ':type deshabilitado!',
],
'error' => [
- 'over_payment' => 'Error: Pago no añadido! Importe mayor que el total.',
+ 'over_payment' => 'Error: Pago no añadido! La cantidad que escribiste pasa total: :amount',
'not_user_company' => 'Error: No tiene permisos para administrar esta empresa!',
'customer' => 'Error: Usuario no creado! :name ya utiliza esta dirección de correo electrónico.',
'no_file' => 'Error: Ningún archivo seleccionado!',
'last_category' => 'Error: No puede eliminar la última :type categoría!',
'invalid_token' => 'Error: El token introducido es inválido!',
- 'import_column' => 'Error: :message nombre de la hoja :sheet. Número de línea: :line.',
- 'import_sheet' => 'Error: Nombre de la hoja no es válido. Por favor, verifique el archivo de ejemplo.',
+ 'import_column' => 'Error: :message Nombre de la hoja: :sheet. Número de línea: :line.',
+ 'import_sheet' => 'Error: El nombre de la hoja no es válido. Por favor, verifique el archivo de ejemplo.',
],
'warning' => [
'deleted' => 'Advertencia: No puede borrar :name porque tiene :text relacionado.',
diff --git a/resources/lang/es-ES/modules.php b/resources/lang/es-ES/modules.php
index 5091834b2..08f836bd6 100644
--- a/resources/lang/es-ES/modules.php
+++ b/resources/lang/es-ES/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'No hay aplicaciones en esta categoría, aún.',
'developer' => '¿Eres un desarrollador? Aquí puedes aprender cómo crear una aplicación y comenzar a venderla hoy!',
+ 'recommended_apps' => 'Aplicaciones recomendadas',
+
'about' => 'Acerca de',
'added' => 'Agregado',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalación',
'faq' => 'P+F',
'changelog' => 'Historial de cambios',
+ 'reviews' => 'Revisiones',
],
'installation' => [
'header' => 'Instalación de Aplicación',
'download' => 'Descargando archivo :module .',
'unzip' => 'Extrayendo archivo :module .',
+ 'file_copy' => 'Copiando archivos de :module.',
+ 'migrate' => 'Aplicando actualización de :module.',
+ 'finish' => 'La actualización se instaló correctamente. Se redirigirá al Centro de Actualizaciones.',
'install' => 'Instalando archivos de :module .',
],
+ 'errors' => [
+ 'download' => ':module no puede ser descargado!',
+ 'upload' => ':module Descargado, no puede ser grabado!',
+ 'unzip' => ':module no se puede descomprimir!',
+ 'file_copy' => ':module No se puede copiar los archivos!',
+ 'migrate' => ':module migración rota!',
+ 'migrate core' => ':module posee última versión entonces no se puede actualizar.',
+ ],
+
'badge' => [
'installed' => 'Instalado',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Comprado',
'installed' => 'Instalado',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Añadir revisión'
+ ],
+ 'na' => 'No hay revisiones.'
+ ]
];
diff --git a/resources/lang/es-ES/notifications.php b/resources/lang/es-ES/notifications.php
new file mode 100644
index 000000000..f8b40d2fd
--- /dev/null
+++ b/resources/lang/es-ES/notifications.php
@@ -0,0 +1,10 @@
+ 'Vaya!',
+ 'hello' => 'Hola!',
+ 'salutation' => 'Saludos, :company_name',
+ 'subcopy' => 'Si tiene problemas haciendo clic en el boton “:text”, copie y pegue la dirección URL en su navegador: [:url] (:url)',
+
+];
diff --git a/resources/lang/es-ES/reconciliations.php b/resources/lang/es-ES/reconciliations.php
new file mode 100644
index 000000000..228490bcb
--- /dev/null
+++ b/resources/lang/es-ES/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Conciliar',
+ 'reconciled' => 'Concialiado',
+ 'closing_balance' => 'Balance de cierre',
+ 'unreconciled' => 'Sin conciliar',
+ 'list_transactions' => 'Lista de transacciones',
+ 'start_date' => 'Fecha de inicio',
+ 'end_date' => 'Fecha de finalización',
+ 'cleared_amount' => 'Monto',
+
+];
diff --git a/resources/lang/es-ES/settings.php b/resources/lang/es-ES/settings.php
index edfdd672b..7dda14d20 100644
--- a/resources/lang/es-ES/settings.php
+++ b/resources/lang/es-ES/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Número de dígitos',
'next' => 'Siguiente número',
'logo' => 'Logo',
+ 'custom' => 'Personalizado',
+ 'item_name' => 'Nombre del ítem',
+ 'item' => 'Items',
+ 'product' => 'Productos',
+ 'service' => 'Servicios',
+ 'price_name' => 'Nombre de precio',
+ 'price' => 'Precio',
+ 'rate' => 'Tasa',
+ 'quantity_name' => 'Cantidad nombre',
+ 'quantity' => 'Cantidad',
],
'default' => [
'tab' => 'Por defecto',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Enviar Antes del Vencimiento',
'cron_command' => 'Comando Cron',
'schedule_time' => 'Hora de ejecución',
+ 'send_item_reminder'=> 'Enviar Recordatorio de Item',
+ 'item_stocks' => 'Enviar cuando Item tenga Stock',
],
'appearance' => [
'tab' => 'Apariencia',
diff --git a/resources/lang/es-ES/taxes.php b/resources/lang/es-ES/taxes.php
index 7365b2ea5..360db91d3 100644
--- a/resources/lang/es-ES/taxes.php
+++ b/resources/lang/es-ES/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Tasa',
'rate_percent' => 'Tasa (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Incluido',
+ 'compound' => 'Compuesto',
];
diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php
index 02af2f286..63bc1dd43 100644
--- a/resources/lang/es-ES/validation.php
+++ b/resources/lang/es-ES/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'mensaje personalizado',
],
'invalid_currency' => 'El código de :attribute es incorrecto.',
+ 'invalid_amount' => 'El monto :attribute es inválido.',
],
/*
diff --git a/resources/lang/es-MX/bills.php b/resources/lang/es-MX/bills.php
index e99b52d43..00ef7dd00 100644
--- a/resources/lang/es-MX/bills.php
+++ b/resources/lang/es-MX/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => '¡Recibo marcado como recibido con exitosamente!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/es-MX/customers.php b/resources/lang/es-MX/customers.php
index 2ed8399ab..19a72a0ec 100644
--- a/resources/lang/es-MX/customers.php
+++ b/resources/lang/es-MX/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'La dirección de correo electrónico ya está en uso.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/es-MX/footer.php b/resources/lang/es-MX/footer.php
index 1a535edb4..3a6bd3d61 100644
--- a/resources/lang/es-MX/footer.php
+++ b/resources/lang/es-MX/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versión',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Software de Contabilidad Libre',
];
diff --git a/resources/lang/es-MX/general.php b/resources/lang/es-MX/general.php
index 9f88bd325..b1a2c755e 100644
--- a/resources/lang/es-MX/general.php
+++ b/resources/lang/es-MX/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Número | Números',
'statuses' => 'Estado|Estados',
'others' => 'Otro|Otros',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Panel de Control',
'banking' => 'Bancos',
@@ -81,6 +85,7 @@ return [
'color' => 'Color',
'save' => 'Guardar',
'cancel' => 'Cancelar',
+ 'loading' => 'Loading...',
'from' => 'De ',
'to' => 'Para',
'print' => 'Imprimir',
@@ -101,12 +106,27 @@ return [
'partially' => 'Parcial',
'partially_paid' => 'Pagada Parcialmente',
'export' => 'Exportar',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Activar',
'disable' => 'Desactivar',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Nuevo :type',
'edit' => 'Editar :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Ningún archivo seleccionado...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/es-MX/header.php b/resources/lang/es-MX/header.php
index 3524464fb..4d9797d76 100644
--- a/resources/lang/es-MX/header.php
+++ b/resources/lang/es-MX/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count producto/servicio sin stock | [2,*] :count productos/servicios sin stock',
'view_all' => 'Ver Todo'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/es-MX/install.php b/resources/lang/es-MX/install.php
index 8ff0603c3..ceb8c11f7 100644
--- a/resources/lang/es-MX/install.php
+++ b/resources/lang/es-MX/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Actualizar',
'steps' => [
- 'requirements' => 'Por favor, ¡cumpla los siguientes requisitos!',
+ 'requirements' => 'Por favor, pregúntele a su proveedor de hosting para corregir los errores!',
'language' => 'Paso 1/3: Selección del Idioma',
'database' => 'Paso 2/3: Configuración de la Base de Datos',
'settings' => 'Paso 3/3: Detalles de la Empresa y el Administrador',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => '¡:feature nencesita estar habilitado!',
'disabled' => '¡:feature debe estar deshabilitado!',
- 'extension' => '¡La extensión :extension debe estar cargada!',
+ 'extension' => 'La extensión :extension necesita ser instalada y cargada!',
'directory' => '¡El directorio :directorio necesita tener permiso de escritura!',
],
diff --git a/resources/lang/es-MX/invoices.php b/resources/lang/es-MX/invoices.php
index d4d1bac98..87c7ad5be 100644
--- a/resources/lang/es-MX/invoices.php
+++ b/resources/lang/es-MX/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Marcar Como Enviada',
'download_pdf' => 'Descargar archivo PDF',
'send_mail' => 'Enviar Correo Electrónico',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Borrador',
@@ -45,6 +46,18 @@ return [
'email_sent' => '¡El correo electrónico de la factura se ha enviado correctamente!',
'marked_sent' => '¡Factura marcada como enviada con éxito!',
'email_required' => 'No se encontró una dirección de correo para este cliente!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/es-MX/items.php b/resources/lang/es-MX/items.php
index 588f1831b..ed0bb2ef1 100644
--- a/resources/lang/es-MX/items.php
+++ b/resources/lang/es-MX/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU/Código/Clave',
'notification' => [
- 'message' => 'Usted está recibiendo este correo electrónico porque el producto/servicio :name se está quedando sin inventario',
+ 'message' => [
+ 'reminder' => 'Usted está recibiendo este email porque sólo :quantity de :name han permanecido.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Ver Ahora',
],
diff --git a/resources/lang/es-MX/messages.php b/resources/lang/es-MX/messages.php
index d7a7904fc..fd3b7e07f 100644
--- a/resources/lang/es-MX/messages.php
+++ b/resources/lang/es-MX/messages.php
@@ -12,12 +12,14 @@ return [
'disabled' => ':type desactivado!',
],
'error' => [
- 'over_payment' => 'Error: Pago no agregado! Cantidad sobre pasa el total.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Error: ¡No tiene permisos para administrar esta empresa!',
'customer' => 'Error: Usuario no creado! :nombre ya utiliza esta dirección de correo.',
'no_file' => 'Error: ¡Ningún archivo se ha seleccionado!',
'last_category' => 'Error: No se pudo eliminar el ultimo No. :type category!',
'invalid_token' => 'Error: El token ingresado es invalido!',
+ 'import_column' => 'Error: :message Nombre de la hoja: :sheet. Número de línea: :line.',
+ 'import_sheet' => 'Error: El nombre de la hoja no es válido. Por favor, verifique el archivo de ejemplo.',
],
'warning' => [
'deleted' => 'Advertencia: No puede borrar :name porque tiene :text relacionado.',
diff --git a/resources/lang/es-MX/modules.php b/resources/lang/es-MX/modules.php
index 85f9e020e..f0f30a83f 100644
--- a/resources/lang/es-MX/modules.php
+++ b/resources/lang/es-MX/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'No hay aplicaciones en esta categoría, aún.',
'developer' => '¿Eres un desarrollador? Aquí puedes aprender cómo crear una aplicación y comenzar a venderla hoy!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Acerca de',
'added' => 'Agregado',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalación',
'faq' => 'Preguntas Frecuentes',
'changelog' => 'Historial de Cambios',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Instalación de Aplicación',
'download' => 'Descargando archivo :module .',
'unzip' => 'Extrayendo archivo :module .',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Instalando archivos de :module .',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Instalado',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Comprado',
'installed' => 'Instalado',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/es-MX/notifications.php b/resources/lang/es-MX/notifications.php
new file mode 100644
index 000000000..e9942f05f
--- /dev/null
+++ b/resources/lang/es-MX/notifications.php
@@ -0,0 +1,10 @@
+ 'Vaya!',
+ 'hello' => '¡Hola!',
+ 'salutation' => 'Saludos, :company_name',
+ 'subcopy' => 'Si tiene problemas haciendo clic en el boton “:text”, copie y pegue la dirección URL en su navegador: [:url] (:url)',
+
+];
diff --git a/resources/lang/es-MX/reconciliations.php b/resources/lang/es-MX/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/es-MX/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/es-MX/settings.php b/resources/lang/es-MX/settings.php
index 822975087..56a1ab53e 100644
--- a/resources/lang/es-MX/settings.php
+++ b/resources/lang/es-MX/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Número de Dígitos',
'next' => 'Siguiente Número',
'logo' => 'Logotipo',
+ 'custom' => 'Personalizado',
+ 'item_name' => 'Nombre del elemento',
+ 'item' => 'Elementos',
+ 'product' => 'Productos',
+ 'service' => 'Servicios',
+ 'price_name' => 'Nombre del Precio',
+ 'price' => 'Precio',
+ 'rate' => 'Tasa',
+ 'quantity_name' => 'Nombre de la Cantidad',
+ 'quantity' => 'Cantidad',
],
'default' => [
'tab' => 'Valores Predeterminados',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Enviar Antes del Vencimiento',
'cron_command' => 'Comando de Cron',
'schedule_time' => 'Hora de Ejecución',
+ 'send_item_reminder'=> 'Enviar Recordatorio del Elemento',
+ 'item_stocks' => 'Enviar Cuando Exista Stock del Elemento',
],
'appearance' => [
'tab' => 'Apariencia',
diff --git a/resources/lang/es-MX/validation.php b/resources/lang/es-MX/validation.php
index 50559ce66..6b15dc23f 100644
--- a/resources/lang/es-MX/validation.php
+++ b/resources/lang/es-MX/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'custom-message',
],
+ 'invalid_currency' => 'El código de :attribute es incorrecto.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/fa-IR/auth.php b/resources/lang/fa-IR/auth.php
index af2bbe6d7..0f4e80d54 100644
--- a/resources/lang/fa-IR/auth.php
+++ b/resources/lang/fa-IR/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'ایمیل فعلی',
'reset' => 'بازنشانی',
'never' => 'هرگز',
+
'password' => [
'current' => 'رمز عبور',
'current_confirm' => 'تکرار رمز عبور',
'new' => 'رمز عبور جدید',
'new_confirm' => 'تکرار رمز عبور',
],
+
'error' => [
- 'self_delete' => 'خطا: نمیتوانید خودتان حذف کنید!'
+ 'self_delete' => 'خطا: نمیتوانید خودتان حذف کنید!',
+ 'no_company' => 'خطا: هیچ کمپانی به حساب شما متصل نمیباشد. لطفا با مدیر سیستم تماس بگیرید.',
],
'failed' => 'مشخصات وارد شده با اطلاعات ما سازگار نیست.',
'disabled' => 'این حساب غیر فعال شده است. لطفاً با مدیر سیستم تماس بگیرید.',
'throttle' => 'دفعات تلاش شما برای ورود بیش از حد مجاز است. لطفا پس از :seconds ثانیه مجددا تلاش فرمایید.',
+ 'notification' => [
+ 'message_1' => 'شما این ایمیل را دریافت نموده اید چون ما درخواست بازیابی رمزعبور حساب شما را دریافت کرده ای.',
+ 'message_2' => 'اگر شما درخواست بازیابی رمزعبور حسابتان را ثبت نکرده اید، این پیام را نادیده بگیرید.',
+ 'button' => 'بازیابی رمزعبور',
+ ],
+
];
diff --git a/resources/lang/fa-IR/bills.php b/resources/lang/fa-IR/bills.php
index 348eb76b0..96a206d88 100644
--- a/resources/lang/fa-IR/bills.php
+++ b/resources/lang/fa-IR/bills.php
@@ -12,15 +12,15 @@ return [
'quantity' => 'تعداد',
'price' => 'قيمت',
'sub_total' => 'جمع کل',
- 'discount' => 'Discount',
+ 'discount' => 'تخفیف',
'tax_total' => 'مجموع مالیات',
'total' => 'مجموع',
'item_name' => 'نام آیتم | نام آیتم ها',
- 'show_discount' => ':discount% Discount',
- 'add_discount' => 'Add Discount',
- 'discount_desc' => 'of subtotal',
+ 'show_discount' => 'تخفیف: discount%',
+ 'add_discount' => 'اضافه کردن تخفیف',
+ 'discount_desc' => 'از جمع کل',
'payment_due' => 'سررسید پرداخت',
'amount_due' => 'مقدار سررسید',
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'صورتحساب مشخص شده با موفقیت علامت گذاری شد.',
+ 'draft' => 'این صورت حساب به صورت پیشنویس است و پس از دریافت وجه بر روی نمودار را اعمال می شود.',
+
+ 'status' => [
+ 'created' => 'تاریخ ایجاد :date',
+ 'receive' => [
+ 'draft' => 'ارسال نشده',
+ 'received' => 'تاریخ دریافت :date',
+ ],
+ 'paid' => [
+ 'await' => 'انتظار پرداخت',
+ ],
+ ],
],
];
diff --git a/resources/lang/fa-IR/customers.php b/resources/lang/fa-IR/customers.php
index 1f98ae08f..ee53a7a0d 100644
--- a/resources/lang/fa-IR/customers.php
+++ b/resources/lang/fa-IR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'این ایمیل قبلا انتخاب شده است.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'نمایش',
+ ],
];
diff --git a/resources/lang/fa-IR/demo.php b/resources/lang/fa-IR/demo.php
index d833a4182..bdabe273d 100644
--- a/resources/lang/fa-IR/demo.php
+++ b/resources/lang/fa-IR/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'پول نقد',
- 'categories_uncat' => 'بدون بخش',
'categories_deposit' => 'سپرده',
'categories_sales' => 'فروش',
'currencies_usd' => 'دلار آمریکا',
diff --git a/resources/lang/fa-IR/footer.php b/resources/lang/fa-IR/footer.php
index ff5a5f608..66786932d 100644
--- a/resources/lang/fa-IR/footer.php
+++ b/resources/lang/fa-IR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'نسخه',
'powered' => 'طراحی شده توسط Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'نرم افزار حسابداری رایگان',
];
diff --git a/resources/lang/fa-IR/general.php b/resources/lang/fa-IR/general.php
index e0775edf7..6418d0108 100644
--- a/resources/lang/fa-IR/general.php
+++ b/resources/lang/fa-IR/general.php
@@ -37,7 +37,11 @@ return [
'updates' => 'به روز رسانی | به روز رسانی',
'numbers' => 'شماره | تعداد',
'statuses' => 'وضعیت | وضعیت',
- 'others' => 'Other|Others',
+ 'others' => 'سایر | سایرین',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'پیشخوان',
'banking' => 'بانکداری',
@@ -81,6 +85,7 @@ return [
'color' => 'رنگ',
'save' => 'ذخیره کردن',
'cancel' => 'انصراف',
+ 'loading' => 'Loading...',
'from' => 'از',
'to' => 'به',
'print' => 'چاپ کن',
@@ -100,11 +105,30 @@ return [
'overdue' => 'سر رسید شده',
'partially' => 'جزئی',
'partially_paid' => 'پرداخت جزئی',
+ 'export' => 'گرفتن خروجی',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
+ 'enable' => 'فعال',
+ 'disable' => 'غیر فعال',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => ':type جدید',
'edit' => 'ویرایش :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
+
'form' => [
'enter' => 'واردکردن :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'هیچ فایلی انتخاب نشده...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/fa-IR/header.php b/resources/lang/fa-IR/header.php
index 6023cf4aa..52ac03bae 100644
--- a/resources/lang/fa-IR/header.php
+++ b/resources/lang/fa-IR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count موجود است | [2,*] :count موجود است',
'view_all' => 'نمایش همه'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/fa-IR/import.php b/resources/lang/fa-IR/import.php
index 87d5ab3f9..a33c21c98 100644
--- a/resources/lang/fa-IR/import.php
+++ b/resources/lang/fa-IR/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'درونریزی',
'title' => ':type درون ریزی',
- 'message' => 'فایل types: CSV, XLS مجاز است. لطفا از طریق لینک دانلود فایل نمونه را دانلود کنید.',
+ 'message' => 'پسوند های مجاز: XLS,XLSX می باشد. لطفا از طریق لینک دانلود فایل نمونه را دانلود کنید.',
];
diff --git a/resources/lang/fa-IR/install.php b/resources/lang/fa-IR/install.php
index af912280b..5d0e462df 100644
--- a/resources/lang/fa-IR/install.php
+++ b/resources/lang/fa-IR/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'تازه سازی',
'steps' => [
- 'requirements' => 'لطفا نیازمندی های نصب را بررسی کنید!',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'گام 1/3: انتخاب زبان',
'database' => 'مرحله 2/3: راه اندازی پایگاه داده',
'settings' => 'مرحله 3/3: شرکت و مدیریت اطلاعات',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature باید فعال باشد!',
'disabled' => ':feature باید غیر فعال باشد!',
- 'extension' => ':extension باید بارگذاری شود!',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => ':directory باید فابل نوشتن باشد!',
],
diff --git a/resources/lang/fa-IR/invoices.php b/resources/lang/fa-IR/invoices.php
index 540516e2a..0dd7ccd36 100644
--- a/resources/lang/fa-IR/invoices.php
+++ b/resources/lang/fa-IR/invoices.php
@@ -12,7 +12,7 @@ return [
'quantity' => 'تعداد',
'price' => 'قيمت',
'sub_total' => 'جمع کل',
- 'discount' => 'Discount',
+ 'discount' => 'تخفیف',
'tax_total' => 'مجموع مالیات',
'total' => 'مجموع',
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'ارسال شده',
'download_pdf' => 'دانلود PDF',
'send_mail' => 'ارسال ایمیل',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'پیش نویس',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'فاکتور با موفقت ارسال شده است!',
'marked_sent' => 'فاکتور با موفقت ارسال شده است!',
'email_required' => 'هیچ آدرس ایمیل برای این مشتری موجود نیست!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/fa-IR/items.php b/resources/lang/fa-IR/items.php
index 7c6822106..ce7cb68e4 100644
--- a/resources/lang/fa-IR/items.php
+++ b/resources/lang/fa-IR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'کد کالا',
'notification' => [
- 'message' => 'شما به این دلیل این ایمیل را دریافت کردهاید که موجودی :name در حال اتمام است.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'مشاهده',
],
diff --git a/resources/lang/fa-IR/messages.php b/resources/lang/fa-IR/messages.php
index ec366d73a..77e4eb9b8 100644
--- a/resources/lang/fa-IR/messages.php
+++ b/resources/lang/fa-IR/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type حذف شد!',
'duplicated' => ':type دو عدد موجود است!',
'imported' => ':type درون ریزی شد!',
+ 'enabled' => ':type enabled!',
+ 'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'خطا: پرداخت اضافه نشده! مبلغ وارد شده از جمع کل بیشتر است.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'خطا: شما اجازه مدیریت این شرکت را ندارید!',
'customer' => 'خطا: کاربر ایجاد نشد :name از ایمیل وارد شده استفاده می کند.',
'no_file' => 'خطا: فایلی انتخاب نشده است!',
'last_category' => 'Error: Can not delete the last :type category!',
'invalid_token' => 'Error: The token entered is invalid!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'هشدار: شما نمی توانید :name را به دلیل :text حذف کنید.',
diff --git a/resources/lang/fa-IR/modules.php b/resources/lang/fa-IR/modules.php
index 35308cec8..c1cba56ba 100644
--- a/resources/lang/fa-IR/modules.php
+++ b/resources/lang/fa-IR/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API Token',
'api_token' => 'Token',
+ 'my_apps' => 'My Apps',
'top_paid' => 'بهترین غیر رایگان',
'new' => 'جدید',
'top_free' => 'بهترین رایگان',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'در این بخش هیچ نرم افزاری وجود ندارد.',
'developer' => 'آیا شما یک توسعه دهنده هستید؟با مراجعه به سایت فروشگاهی می توانید نرم افزار های خود را بسیازید و بفروشید. ',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'درباره ما',
'added' => 'اضافه شد',
@@ -31,18 +34,47 @@ return [
'installation' => 'نصب',
'faq' => 'سوالات متداول',
'changelog' => 'تغییرات',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'محل نصب نرم افزار',
'download' => 'دریافت فایل :module',
'unzip' => 'استخراج فایل :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'نصب فایل های :module .',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'نصب شده',
+ ],
+
'button' => [
'uninstall' => 'حذف کردن برنامه',
'disable' => 'غیر فعال',
'enable' => 'فعال سازی',
],
+
+ 'my' => [
+ 'purchased' => 'خریداری شد',
+ 'installed' => 'نصب شده',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'اضافه کردن نظر'
+ ],
+ 'na' => 'هیچ بررسی وجود دارد.'
+ ]
];
diff --git a/resources/lang/fa-IR/notifications.php b/resources/lang/fa-IR/notifications.php
new file mode 100644
index 000000000..002f903cc
--- /dev/null
+++ b/resources/lang/fa-IR/notifications.php
@@ -0,0 +1,10 @@
+ 'آخ!',
+ 'hello' => 'سلام!',
+ 'salutation' => 'با احترام، :company_name ',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/fa-IR/reconciliations.php b/resources/lang/fa-IR/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/fa-IR/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/fa-IR/reports.php b/resources/lang/fa-IR/reports.php
index 34896ed3e..94a86525d 100644
--- a/resources/lang/fa-IR/reports.php
+++ b/resources/lang/fa-IR/reports.php
@@ -7,17 +7,17 @@ return [
'this_quarter' => 'سه ماه',
'previous_quarter' => 'سه ماهه قبلی',
'last_12_months' => '12 ماه گذشته',
- 'profit_loss' => 'Profit & Loss',
- 'gross_profit' => 'Gross Profit',
- 'net_profit' => 'Net Profit',
- 'total_expenses' => 'Total Expenses',
- 'net' => 'NET',
+ 'profit_loss' => 'سود و زیان',
+ 'gross_profit' => 'سود ناخالص',
+ 'net_profit' => 'سود خالص',
+ 'total_expenses' => 'هزینه های کل',
+ 'net' => 'خالص',
'summary' => [
'income' => 'خلاصه درآمد',
'expense' => 'خلاصه هزینه',
'income_expense' => 'هزینه درآمد',
- 'tax' => 'Tax Summary',
+ 'tax' => 'خلاصه مالیات',
],
'quarter' => [
diff --git a/resources/lang/fa-IR/settings.php b/resources/lang/fa-IR/settings.php
index 4f97f37e2..785a2f925 100644
--- a/resources/lang/fa-IR/settings.php
+++ b/resources/lang/fa-IR/settings.php
@@ -22,9 +22,9 @@ return [
],
'timezone' => 'منطقه زمانی',
'percent' => [
- 'title' => 'Percent (%) Position',
- 'before' => 'Before Number',
- 'after' => 'After Number',
+ 'title' => 'درصد (%) موقعیت',
+ 'before' => 'قبل از شماره',
+ 'after' => 'پس از شماره',
],
],
'invoice' => [
@@ -33,6 +33,16 @@ return [
'digit' => 'تعداد ارقام',
'next' => 'شماره بعدی',
'logo' => 'لوگو',
+ 'custom' => 'سفارشی',
+ 'item_name' => 'نام کالا',
+ 'item' => 'کالاها',
+ 'product' => 'محصولها',
+ 'service' => 'خدمات',
+ 'price_name' => 'قیمت نام',
+ 'price' => 'قيمت',
+ 'rate' => 'نرخ',
+ 'quantity_name' => 'نام مقدار',
+ 'quantity' => 'مقدار',
],
'default' => [
'tab' => 'پیشفرضها',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'تعداد روز ارسال قبل از سررسید',
'cron_command' => 'فرمان Cron',
'schedule_time' => 'ساعت به اجرا',
+ 'send_item_reminder'=> 'ارسال به یادآوری',
+ 'item_stocks' => 'ارسال زمانی که موجود باشد',
],
'appearance' => [
'tab' => 'ظاهر',
diff --git a/resources/lang/fa-IR/taxes.php b/resources/lang/fa-IR/taxes.php
index d79c9fd5f..427d24aeb 100644
--- a/resources/lang/fa-IR/taxes.php
+++ b/resources/lang/fa-IR/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'نرخ',
'rate_percent' => 'نرخ (%)',
+ 'normal' => 'عادی',
+ 'inclusive' => 'شامل',
+ 'compound' => 'ترکیب',
];
diff --git a/resources/lang/fa-IR/transfers.php b/resources/lang/fa-IR/transfers.php
index 1e3062e6e..6e6ac1346 100644
--- a/resources/lang/fa-IR/transfers.php
+++ b/resources/lang/fa-IR/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'از حساب',
'to_account' => 'به حساب',
+ 'messages' => [
+ 'delete' => ':from تا :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/fa-IR/validation.php b/resources/lang/fa-IR/validation.php
index 590e0fa97..c476a722e 100644
--- a/resources/lang/fa-IR/validation.php
+++ b/resources/lang/fa-IR/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'custom-message',
],
+ 'invalid_currency' => 'فرمت آدرس :attribute اشتباه است.',
+ 'invalid_amount' => ':attribute وارد شده، معتبر نیست.',
],
/*
diff --git a/resources/lang/fr-FR/bills.php b/resources/lang/fr-FR/bills.php
index 9020ac67a..32a9f239a 100644
--- a/resources/lang/fr-FR/bills.php
+++ b/resources/lang/fr-FR/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Facture marquée comme reçue avec succès !',
+ 'draft' => 'Ceci est une facture BROUILLON et sera comptabilisée dans les graphiques une fois reçue.',
+
+ 'status' => [
+ 'created' => 'Créée le :date',
+ 'receive' => [
+ 'draft' => 'Pas envoyée',
+ 'received' => 'Reçue le :date',
+ ],
+ 'paid' => [
+ 'await' => 'En attente du paiement',
+ ],
+ ],
],
];
diff --git a/resources/lang/fr-FR/customers.php b/resources/lang/fr-FR/customers.php
index 4f5468b60..0d30bdd3d 100644
--- a/resources/lang/fr-FR/customers.php
+++ b/resources/lang/fr-FR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Cet email est déjà pris.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer a effectué un paiement de :amount pour la facture numéro :invoice_number.',
+ 'button' => 'Voir',
+ ],
];
diff --git a/resources/lang/fr-FR/footer.php b/resources/lang/fr-FR/footer.php
index 780b0f695..1a30cc0a9 100644
--- a/resources/lang/fr-FR/footer.php
+++ b/resources/lang/fr-FR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Version',
'powered' => 'Propulsé par Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Logiciel de comptabilité gratuit',
];
diff --git a/resources/lang/fr-FR/general.php b/resources/lang/fr-FR/general.php
index 109bea4b5..cd7f14bc1 100644
--- a/resources/lang/fr-FR/general.php
+++ b/resources/lang/fr-FR/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Numéro|Numéros',
'statuses' => 'Statut | Statuts',
'others' => 'Autre|Autres',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Conciliation|Conciliations',
+ 'deposits' => 'Crédit|Crédits',
+ 'withdrawals' => 'Débit|Débits',
'dashboard' => 'Tableau de bord',
'banking' => 'Banque',
@@ -81,6 +85,7 @@ return [
'color' => 'Couleur',
'save' => 'Enregistrer',
'cancel' => 'Annuler',
+ 'loading' => 'Chargement...',
'from' => 'De',
'to' => 'Vers',
'print' => 'Imprimer',
@@ -101,12 +106,27 @@ return [
'partially' => 'Partiellement',
'partially_paid' => 'Partiellement payé',
'export' => 'Exporter',
+ 'finish' => 'Terminer',
+ 'wizard' => 'Assistant',
+ 'skip' => 'Passer',
'enable' => 'Activer',
'disable' => 'Désactiver',
+ 'select_all' => 'Tout sélectionner',
+ 'unselect_all' => 'Tout désélectionner',
+ 'go_to' => 'Aller à :name',
+ 'created_date' => 'Date de création',
+ 'period' => 'Période',
+ 'start' => 'Début',
+ 'end' => 'Fin',
+ 'clear' => 'Effacer',
+ 'difference' => 'Différence',
'title' => [
'new' => 'Nouveau :type',
'edit' => 'Modifier :type',
+ 'create' => 'Créer :type',
+ 'send' => 'Envoyer :type',
+ 'get' => 'Voir :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Aucun fichier sélectionné...',
],
+ 'date_range' => [
+ 'today' => 'Aujourd\'hui',
+ 'yesterday' => 'Hier',
+ 'last_days' => 'Les derniers :day jours',
+ 'this_month' => 'Ce mois-ci',
+ 'last_month' => 'Le mois dernier',
+ ],
];
diff --git a/resources/lang/fr-FR/header.php b/resources/lang/fr-FR/header.php
index 84377a7b1..acd8350ab 100644
--- a/resources/lang/fr-FR/header.php
+++ b/resources/lang/fr-FR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count élément épuisé|[2,*] :count éléments épuisés',
'view_all' => 'Afficher tout'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/fr-FR/invoices.php b/resources/lang/fr-FR/invoices.php
index 61ee3af65..bb7af43ba 100644
--- a/resources/lang/fr-FR/invoices.php
+++ b/resources/lang/fr-FR/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Marquer comme envoyée',
'download_pdf' => 'Télécharger en PDF',
'send_mail' => 'Envoyer un Email',
+ 'all_invoices' => 'Connectez-vous pour voir toutes les factures',
'status' => [
'draft' => 'Brouillon',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'La facture a été envoyé avec succès !',
'marked_sent' => 'Facture marquée comme envoyée avec succès !',
'email_required' => 'Ce client ne possède pas d\'email !',
+ 'draft' => 'Ceci est une facture BROUILLON et sera comptabilisé dans les graphiques après reception.',
+
+ 'status' => [
+ 'created' => 'Créée le :date',
+ 'send' => [
+ 'draft' => 'Pas envoyée',
+ 'sent' => 'Envoyée le :date',
+ ],
+ 'paid' => [
+ 'await' => 'En attente du paiement',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/fr-FR/items.php b/resources/lang/fr-FR/items.php
index f4801bab2..d8faa2fa0 100644
--- a/resources/lang/fr-FR/items.php
+++ b/resources/lang/fr-FR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Référence (SKU)',
'notification' => [
- 'message' => 'Vous recevez cet e-mail car :name est en rupture de stock.',
+ 'message' => [
+ 'reminder' => 'Vous recevez cet email car seulement :quantity de :name reste.',
+ 'out_of_stock' => 'Vous recevez cet email parce que le stock de :name est presque épuisé.',
+ ],
'button' => 'Voir Maintenant',
],
diff --git a/resources/lang/fr-FR/messages.php b/resources/lang/fr-FR/messages.php
index 386a9963e..662e21692 100644
--- a/resources/lang/fr-FR/messages.php
+++ b/resources/lang/fr-FR/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type désactivé !',
],
'error' => [
- 'over_payment' => 'Erreur : le paiement n\'a pas été ajouté ! Le montant est supérieur au total.',
+ 'over_payment' => 'Erreur: Le paiement n\'a pas été enregistré! Le total entré dépasse le total :amount',
'not_user_company' => 'Erreur : Vous n’êtes pas autorisé à gérer cette société !',
'customer' => 'Erreur : Utilisateur non créé ! :name utilise déjà cette adresse email.',
'no_file' => 'Erreur : Aucun fichier sélectionné !',
diff --git a/resources/lang/fr-FR/modules.php b/resources/lang/fr-FR/modules.php
index be7da570e..3dc578240 100644
--- a/resources/lang/fr-FR/modules.php
+++ b/resources/lang/fr-FR/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Il n’y a pas encore d\'application dans cette catégorie.',
'developer' => 'Vous êtes développeur ? ici vous pouvez apprendre à créer une application et commencer à la vendre !',
+ 'recommended_apps' => 'Applications recommandées',
+
'about' => 'A propos',
'added' => 'Ajouté',
@@ -32,15 +34,28 @@ return [
'installation' => 'Installation',
'faq' => 'FAQ',
'changelog' => 'Historique des modifications',
+ 'reviews' => 'Notes',
],
'installation' => [
'header' => 'Installation d\'une application',
'download' => 'Téléchargement du :module.',
'unzip' => 'Extraction des fichiers :module.',
+ 'file_copy' => 'Copie des fichiers de :module.',
+ 'migrate' => 'Application des mises à jours de :module.',
+ 'finish' => 'La mise à jour a été installée correctement. Vous allez être redirigé vers le centre de mise à jour.',
'install' => 'Installation des fichiers du module :module.',
],
+ 'errors' => [
+ 'download' => 'Le module :module ne peut pas être téléchargé !',
+ 'upload' => 'Le module téléchargé :module ne peut pas être enregistré !',
+ 'unzip' => 'Le module :module ne peut pas être décompressé !',
+ 'file_copy' => 'Le module :module ne peut pas être copié !',
+ 'migrate' => 'La migration du module :module est cassée !',
+ 'migrate core' => 'Le module :module est déjà à sa dernière version et ne peut pas être mis à jour.',
+ ],
+
'badge' => [
'installed' => 'Installées',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Achetées',
'installed' => 'Installées',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Ajouter une note'
+ ],
+ 'na' => 'Aucune note.'
+ ]
];
diff --git a/resources/lang/fr-FR/reconciliations.php b/resources/lang/fr-FR/reconciliations.php
new file mode 100644
index 000000000..3ae17c775
--- /dev/null
+++ b/resources/lang/fr-FR/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Réconcilier',
+ 'reconciled' => 'Réconcilié',
+ 'closing_balance' => 'Solde de clôture',
+ 'unreconciled' => 'Pas réconcilié',
+ 'list_transactions' => 'Lister les transactions',
+ 'start_date' => 'Date de début',
+ 'end_date' => 'Date de fin',
+ 'cleared_amount' => 'Montant traité',
+
+];
diff --git a/resources/lang/fr-FR/settings.php b/resources/lang/fr-FR/settings.php
index 47c2c8398..51bd7fc08 100644
--- a/resources/lang/fr-FR/settings.php
+++ b/resources/lang/fr-FR/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Nombre de chiffres',
'next' => 'Numéro suivant',
'logo' => 'Logo',
+ 'custom' => 'Personnalisé',
+ 'item_name' => 'Nom de l\'élément',
+ 'item' => 'Éléments',
+ 'product' => 'Produits',
+ 'service' => 'Services',
+ 'price_name' => 'Nom du prix',
+ 'price' => 'Prix',
+ 'rate' => 'Tarif',
+ 'quantity_name' => 'Nom de la quantité',
+ 'quantity' => 'Quantité',
],
'default' => [
'tab' => 'Par défaut',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Envoyer avant les jours d\'échéance',
'cron_command' => 'Commande Cron',
'schedule_time' => 'Heure de fonctionnement',
+ 'send_item_reminder'=> 'Envoyer un rappel pour l\'élément',
+ 'item_stocks' => 'Envoyer lorsque l\'élément approche la rupture de stock',
],
'appearance' => [
'tab' => 'Apparence',
diff --git a/resources/lang/fr-FR/validation.php b/resources/lang/fr-FR/validation.php
index 6d61908b1..b864a4dbc 100644
--- a/resources/lang/fr-FR/validation.php
+++ b/resources/lang/fr-FR/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'Un message spécifique sera affiché si le paramètre \'Utiliser message spécifique\' est implémenté pour le champ \'Message hors-ligne\'',
],
'invalid_currency' => 'Le code de :attribute est invalide.',
+ 'invalid_amount' => 'Le montant :amount n\'est pas valide.',
],
/*
diff --git a/resources/lang/he-IL/bills.php b/resources/lang/he-IL/bills.php
index 2c84c148a..eda5104a8 100644
--- a/resources/lang/he-IL/bills.php
+++ b/resources/lang/he-IL/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'חשבונות שסומנו התקבלו בהצלחה!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/he-IL/customers.php b/resources/lang/he-IL/customers.php
index a002440f3..c3dec6180 100644
--- a/resources/lang/he-IL/customers.php
+++ b/resources/lang/he-IL/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'כתובת הדואר אלקטרוני כבר תפוסה.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/he-IL/footer.php b/resources/lang/he-IL/footer.php
index ef6f08d1d..e2966a514 100644
--- a/resources/lang/he-IL/footer.php
+++ b/resources/lang/he-IL/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'גירסה',
'powered' => 'מופעל על ידי Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'תוכנת הנהלת חשבונות חינם',
];
diff --git a/resources/lang/he-IL/general.php b/resources/lang/he-IL/general.php
index 232bfdb13..3e46f17f9 100644
--- a/resources/lang/he-IL/general.php
+++ b/resources/lang/he-IL/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'מספר | מספרים',
'statuses' => 'מצב | מצבים',
'others' => 'אחר | אחרים',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'לוח מחוונים',
'banking' => 'בנקאות',
@@ -81,6 +85,7 @@ return [
'color' => 'צבע',
'save' => 'שמור',
'cancel' => 'ביטול',
+ 'loading' => 'Loading...',
'from' => 'מאת',
'to' => 'אל',
'print' => 'הדפסה',
@@ -101,12 +106,27 @@ return [
'partially' => 'חלקי',
'partially_paid' => 'תשלום חלקי',
'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Enable',
'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => ':type חדש',
'edit' => 'עריכת :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'לא נבחר קובץ...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/he-IL/header.php b/resources/lang/he-IL/header.php
index bf7d7c0c4..307d6e895 100644
--- a/resources/lang/he-IL/header.php
+++ b/resources/lang/he-IL/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count פריט אזל מהמלאי|[2,*] :count פריטים אזלו מהמלאי',
'view_all' => 'הצג הכל'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/he-IL/invoices.php b/resources/lang/he-IL/invoices.php
index 413725320..fd8834298 100644
--- a/resources/lang/he-IL/invoices.php
+++ b/resources/lang/he-IL/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'סמן כנשלח',
'download_pdf' => 'הורדת PDF',
'send_mail' => 'שלח דואר אלקטרוני',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'טיוטה',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'החשבונית נשלחה בהצלחה באמצעות הדואר האלקטרוני!',
'marked_sent' => 'חשבונית סומנה שנשלחה בהצלחה!',
'email_required' => 'אין דואר אלקטרוני מעודכן ללקוח זה!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/he-IL/items.php b/resources/lang/he-IL/items.php
index 75cbf69f5..72a197576 100644
--- a/resources/lang/he-IL/items.php
+++ b/resources/lang/he-IL/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'מספר מזהה',
'notification' => [
- 'message' => 'אתה מקבל את האימייל הזה כי :name אזל מהמלאי.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'הצג עכשיו',
],
diff --git a/resources/lang/he-IL/messages.php b/resources/lang/he-IL/messages.php
index 4200b0bcd..6cd6103d5 100644
--- a/resources/lang/he-IL/messages.php
+++ b/resources/lang/he-IL/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'שגיאה: התשלום לא הוסף! הסכום עובר את הסכום הכולל.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'שגיאה: אינך מורשה לנהל החברה זאת!',
'customer' => 'שגיאה: המשתמש לא נוצר! :name כבר משתמש בכתוב הזאת.',
'no_file' => 'שגיאה: אין קובץ שנבחר!',
diff --git a/resources/lang/he-IL/modules.php b/resources/lang/he-IL/modules.php
index ee1188c3c..27df29bf2 100644
--- a/resources/lang/he-IL/modules.php
+++ b/resources/lang/he-IL/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'אין עדיין יישומים בקטגוריה זאת.',
'developer' => 'האם אתה מפתח? כאן תלמד כיצד ליצור app ולהתחיל למכור היום!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'אודות',
'added' => 'הוסף',
@@ -32,15 +34,28 @@ return [
'installation' => 'התקנה',
'faq' => 'שאלות ותשובות',
'changelog' => 'יומן שינויים',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'התקנת יישום',
'download' => 'מוריד קובץ :module.',
'unzip' => 'חילוץ קובץ :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'מתקין קבצים :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Installed',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Purchased',
'installed' => 'Installed',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/he-IL/reconciliations.php b/resources/lang/he-IL/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/he-IL/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/he-IL/settings.php b/resources/lang/he-IL/settings.php
index 1dc3cdf7b..9f295bdfb 100644
--- a/resources/lang/he-IL/settings.php
+++ b/resources/lang/he-IL/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'מספר ספרות',
'next' => 'המספר הבא',
'logo' => 'לוגו',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'ברירת מחדל',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'שלח לפני פירעון ימים',
'cron_command' => 'הפקודה Cron',
'schedule_time' => 'שעה ריצה',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'המראה',
diff --git a/resources/lang/he-IL/validation.php b/resources/lang/he-IL/validation.php
index e5aa07741..c3db37ec9 100644
--- a/resources/lang/he-IL/validation.php
+++ b/resources/lang/he-IL/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'הודעה מותאמת אישית',
],
'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/hr-HR/bills.php b/resources/lang/hr-HR/bills.php
index a2f9e5f19..3b55fa46b 100644
--- a/resources/lang/hr-HR/bills.php
+++ b/resources/lang/hr-HR/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Račun označen kao uspješno primljen!',
+ 'draft' => 'Ovo je SKICA računa i odrazit će se na grafikone nakon što se zaprimi.',
+
+ 'status' => [
+ 'created' => 'Kreirano :date',
+ 'receive' => [
+ 'draft' => 'Nije poslano',
+ 'received' => 'Zaprimljeno :date',
+ ],
+ 'paid' => [
+ 'await' => 'Čeka plaćanje',
+ ],
+ ],
],
];
diff --git a/resources/lang/hr-HR/customers.php b/resources/lang/hr-HR/customers.php
index ed8eea9b8..6b6fae384 100644
--- a/resources/lang/hr-HR/customers.php
+++ b/resources/lang/hr-HR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'E-mail je već zauzet.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer je uplatio :amount za fakturu broj :invoice_number.',
+ 'button' => 'Prikaži',
+ ],
];
diff --git a/resources/lang/hr-HR/footer.php b/resources/lang/hr-HR/footer.php
index b0cec0e24..607bad08a 100644
--- a/resources/lang/hr-HR/footer.php
+++ b/resources/lang/hr-HR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Verzija',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Slobodan računovodstveni softver',
];
diff --git a/resources/lang/hr-HR/general.php b/resources/lang/hr-HR/general.php
index 643385245..609bc7360 100644
--- a/resources/lang/hr-HR/general.php
+++ b/resources/lang/hr-HR/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Broj|Brojevi',
'statuses' => 'Status|Statusi',
'others' => 'Ostalo|Ostali',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Nadzorna ploča',
'banking' => 'Bankarstvo',
@@ -61,10 +65,10 @@ return [
'delete' => 'Izbriši',
'send' => 'Pošalji',
'download' => 'Preuzmi',
- 'delete_confirm' => 'Potvrda brisanja :name: tipa?',
+ 'delete_confirm' => 'Potvrda brisanja :name: :type?',
'name' => 'Naziv',
'email' => 'E-mail',
- 'tax_number' => 'Porezni broj',
+ 'tax_number' => 'OIB',
'phone' => 'Telefon',
'address' => 'Adresa',
'website' => 'Web stranica',
@@ -81,6 +85,7 @@ return [
'color' => 'Boja',
'save' => 'Spremi',
'cancel' => 'Otkaži',
+ 'loading' => 'Učitavanje...',
'from' => 'Od',
'to' => 'Za',
'print' => 'Ispis',
@@ -101,21 +106,43 @@ return [
'partially' => 'Djelomično',
'partially_paid' => 'Djelomično plaćeno',
'export' => 'Izvoz',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Preskoči',
'enable' => 'Omogući',
'disable' => 'Onemogući',
+ 'select_all' => 'Označi Sve',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Datum kreiranja',
+ 'period' => 'Razdoblje',
+ 'start' => 'Početak',
+ 'end' => 'Kraj',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Novo - :type',
'edit' => 'Uređivanje - :type',
+ 'create' => 'Kreiraj :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
'enter' => 'Unos - :type',
'select' => [
- 'field' => '-Odaberite :field -',
+ 'field' => '- :field odabir -',
'file' => 'Odaberite datoteku',
],
'no_file_selected' => 'Datoteka nije odabrana...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/hr-HR/header.php b/resources/lang/hr-HR/header.php
index 6676292ba..5789918a1 100644
--- a/resources/lang/hr-HR/header.php
+++ b/resources/lang/hr-HR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count stavka ponestaje zaliha|[2,*] :count stavke ponestaje zaliha',
'view_all' => 'Vidi sve'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/hr-HR/import.php b/resources/lang/hr-HR/import.php
index ec7120d20..e9ac94d82 100644
--- a/resources/lang/hr-HR/import.php
+++ b/resources/lang/hr-HR/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'Uvezi',
'title' => 'Uvoz :type',
- 'message' => 'Allowed file types: XLS, XLSX. Please, download the sample file.',
+ 'message' => 'Dopušteni tipovi datoteka: XLS, XLSX. Molimo,, preuzmite primjer datoteke.',
];
diff --git a/resources/lang/hr-HR/install.php b/resources/lang/hr-HR/install.php
index ad5b26841..fb82b8f6e 100644
--- a/resources/lang/hr-HR/install.php
+++ b/resources/lang/hr-HR/install.php
@@ -2,11 +2,11 @@
return [
- 'next' => 'Sljedeći',
+ 'next' => 'Dalje',
'refresh' => 'Osvježi',
'steps' => [
- 'requirements' => 'Please, ask your hosting provider to fix the errors!',
+ 'requirements' => 'Molimo da zatražite svog davatelja hosting usluge da ispravi pogreške!',
'language' => 'Korak 1/3: Odabir jezika',
'database' => 'Korak 2/3: Postavka baze podataka',
'settings' => 'Korak 3/3: Tvrtka i admin detalji',
@@ -19,12 +19,12 @@ return [
'requirements' => [
'enabled' => ':feature mora biti omogućeno!',
'disabled' => ':feature mora biti onemogućeno!',
- 'extension' => ':extension extension needs to be installed and loaded!',
+ 'extension' => ':extension proširenje mora biti instalirano i učitano!',
'directory' => ':directory direktorij mora biti omogućen za zapisivanje!',
],
'database' => [
- 'hostname' => 'Naziv hosta',
+ 'hostname' => 'Server',
'username' => 'Korisničko ime',
'password' => 'Lozinka',
'name' => 'Baza podataka',
diff --git a/resources/lang/hr-HR/invoices.php b/resources/lang/hr-HR/invoices.php
index 8ec54d435..245fd72a7 100644
--- a/resources/lang/hr-HR/invoices.php
+++ b/resources/lang/hr-HR/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Označi kao poslano',
'download_pdf' => 'Preuzmite PDF',
'send_mail' => 'Pošalji e-mail',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Skica',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'E-mail računa je uspješno poslan!',
'marked_sent' => 'Račun je uspješno označen kao poslan!',
'email_required' => 'Nema e-mail adrese za ovog kupca!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Kreirano :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/hr-HR/items.php b/resources/lang/hr-HR/items.php
index fd3635938..a2f6b89d8 100644
--- a/resources/lang/hr-HR/items.php
+++ b/resources/lang/hr-HR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Primili ste ovaj e-mail jer ponestaje zaliha za :name.',
+ 'message' => [
+ 'reminder' => 'Primili ste ovaj e-mail jer je preostalo samo :quantity :name.',
+ 'out_of_stock' => 'Primili ste ovaj e-mail jer ponestaje zaliha za :name.',
+ ],
'button' => 'Pogledaj sada',
],
diff --git a/resources/lang/hr-HR/messages.php b/resources/lang/hr-HR/messages.php
index 695e76ca1..f529b0ba7 100644
--- a/resources/lang/hr-HR/messages.php
+++ b/resources/lang/hr-HR/messages.php
@@ -3,7 +3,7 @@
return [
'success' => [
- 'added' => ':type dodan!',
+ 'added' => ':type dodano!',
'updated' => ':type ažuriran!',
'deleted' => ':type izbrisan!',
'duplicated' => ':type dupliciran!',
@@ -12,7 +12,7 @@ return [
'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Pogreška: Plaćanje nije dodano! Iznos prelazi ukupan iznos.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Pogreška: Nije vam dozvoljeno upravljanje ovom tvrtkom!',
'customer' => 'Pogreška: Korisnik nije kreiran! :name već koristi ovu e-mail adresu.',
'no_file' => 'Pogreška: Nije odabrana nijedna datoteka!',
diff --git a/resources/lang/hr-HR/modules.php b/resources/lang/hr-HR/modules.php
index 48d4730bf..3714e2d9c 100644
--- a/resources/lang/hr-HR/modules.php
+++ b/resources/lang/hr-HR/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'U ovoj kategoriji još nema aplikacija.',
'developer' => 'Jeste li programer? Ovdje možete naučiti kako kreirati aplikaciju i početi prodavati!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'O aplikaciji',
'added' => 'Dodano',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalacija',
'faq' => 'ČPP',
'changelog' => 'Popis promjena',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Instalacija aplikacije',
'download' => 'Preuzimanje :module datoteke.',
'unzip' => 'Raspakiravanje :module datoteka.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Instalacija :module datoteka.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Instalirano',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Kupljeno',
'installed' => 'Instalirano',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/hr-HR/reconciliations.php b/resources/lang/hr-HR/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/hr-HR/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/hr-HR/settings.php b/resources/lang/hr-HR/settings.php
index 96dfa5312..08938b195 100644
--- a/resources/lang/hr-HR/settings.php
+++ b/resources/lang/hr-HR/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Broj znamenki',
'next' => 'Sljedeći broj',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Ime stavke',
+ 'item' => 'Stavke',
+ 'product' => 'Proizvodi',
+ 'service' => 'Usluge',
+ 'price_name' => 'Price Name',
+ 'price' => 'Cijena',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Količina',
],
'default' => [
'tab' => 'Zadano',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Slanje prije datuma dospijeća',
'cron_command' => 'Cron naredba',
'schedule_time' => 'Vrijeme pokretanja',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Izgled',
diff --git a/resources/lang/hr-HR/validation.php b/resources/lang/hr-HR/validation.php
index d5eee075e..f614bab81 100644
--- a/resources/lang/hr-HR/validation.php
+++ b/resources/lang/hr-HR/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'prilagođena-poruka',
],
'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/id-ID/bills.php b/resources/lang/id-ID/bills.php
index 4c5a96da3..103803877 100644
--- a/resources/lang/id-ID/bills.php
+++ b/resources/lang/id-ID/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Bill ditandai sebagai berhasil diterima!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Dibuat pada: tanggal',
+ 'receive' => [
+ 'draft' => 'Tidak Terikirim',
+ 'received' => 'Diterima pada: tanggal',
+ ],
+ 'paid' => [
+ 'await' => 'Menunggu Pembayaran',
+ ],
+ ],
],
];
diff --git a/resources/lang/id-ID/customers.php b/resources/lang/id-ID/customers.php
index 1fda3ad8e..a7ae8b228 100644
--- a/resources/lang/id-ID/customers.php
+++ b/resources/lang/id-ID/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Email ini sudah dipakai.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ': customer made: jumlah pembayaran untuk faktur nomor: invoice_number.',
+ 'button' => 'Menampilkan',
+ ],
];
diff --git a/resources/lang/id-ID/footer.php b/resources/lang/id-ID/footer.php
index 4605dfa4b..25491152d 100644
--- a/resources/lang/id-ID/footer.php
+++ b/resources/lang/id-ID/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versi',
'powered' => 'Didukung oleh Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Perangkat Lunak Akutansi Gratis',
];
diff --git a/resources/lang/id-ID/general.php b/resources/lang/id-ID/general.php
index caa6d7ad4..ae6a4d319 100644
--- a/resources/lang/id-ID/general.php
+++ b/resources/lang/id-ID/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Nomor | Nomor',
'statuses' => 'Status | Status',
'others' => 'Lain | Lain-lain',
+ 'contacts' => 'Kontak',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposito',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Dasbor',
'banking' => 'Perbankan',
@@ -81,6 +85,7 @@ return [
'color' => 'Warna',
'save' => 'Simpan',
'cancel' => 'Batal',
+ 'loading' => 'Loading...',
'from' => 'Dari',
'to' => 'Untuk',
'print' => 'Cetak',
@@ -101,12 +106,27 @@ return [
'partially' => 'Sebagian',
'partially_paid' => 'Sebagian dibayar',
'export' => 'Ekspor',
+ 'finish' => 'Selesai',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Aktif',
'disable' => 'Nonaktif',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Mulai',
+ 'end' => 'Selesai',
+ 'clear' => 'Hapus',
+ 'difference' => 'Perbedaan',
'title' => [
'new' => 'Baru :type',
'edit' => 'Sunting :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Tidak ada Berkas yang dipilih...',
],
+ 'date_range' => [
+ 'today' => 'Hari Ini',
+ 'yesterday' => 'Kemarin',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/id-ID/header.php b/resources/lang/id-ID/header.php
index a2f9b843d..dbcab8b48 100644
--- a/resources/lang/id-ID/header.php
+++ b/resources/lang/id-ID/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count item habis|[2,*] :count barang habis',
'view_all' => 'Menampilkan Semuanya'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/id-ID/install.php b/resources/lang/id-ID/install.php
index f54a321bf..269702674 100644
--- a/resources/lang/id-ID/install.php
+++ b/resources/lang/id-ID/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Menyegarkan',
'steps' => [
- 'requirements' => 'Please, ask your hosting provider to fix the errors!',
+ 'requirements' => 'Silakan meminta penyedia hosting Anda untuk memperbaiki kesalahan!',
'language' => 'Langkah 1/3 : Seleksi Bahasa',
'database' => 'Langkah 2/3 : Setup basis data',
'settings' => 'Langkah 3/3: Detail Perusahaan dan Admin',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature perlu diaktifkan!',
'disabled' => ':feature perlu dinonaktifkan!',
- 'extension' => ':extension extension needs to be installed and loaded!',
+ 'extension' => ': ekstensi ekstensi perlu diinstal dan dimuat!',
'directory' => ':directory direktori perlu ditulis!',
],
diff --git a/resources/lang/id-ID/invoices.php b/resources/lang/id-ID/invoices.php
index a277d1b2b..99fe0a432 100644
--- a/resources/lang/id-ID/invoices.php
+++ b/resources/lang/id-ID/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Tandai Dikirim',
'download_pdf' => 'Unduh PDF',
'send_mail' => 'Kirim Email',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Konsep',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Email faktur telah berhasil dikirim!',
'marked_sent' => 'Faktur ditandai sebagai berhasil dikirim!',
'email_required' => 'Tidak ada alamat email untuk pelanggan ini!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/id-ID/items.php b/resources/lang/id-ID/items.php
index 4281d5c97..8392d40bc 100644
--- a/resources/lang/id-ID/items.php
+++ b/resources/lang/id-ID/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Anda menerima email ini karena :name kehabisan stok.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Lihat sekarang',
],
diff --git a/resources/lang/id-ID/messages.php b/resources/lang/id-ID/messages.php
index 2905818f1..cca13811d 100644
--- a/resources/lang/id-ID/messages.php
+++ b/resources/lang/id-ID/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Error: Payment not added! Amount passes the total.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Kesalahan: Anda tidak diperbolehkan mengelola perusahaan ini!',
'customer' => 'Galat: Pengguna tidak dibuat! :name telah menggunakan alamat email ini.',
'no_file' => 'Kesalahan: Tidak ada file dipilih!',
diff --git a/resources/lang/id-ID/modules.php b/resources/lang/id-ID/modules.php
index 06c36c144..f21e841e4 100644
--- a/resources/lang/id-ID/modules.php
+++ b/resources/lang/id-ID/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Belum ada aplikasi dalam kategori ini.',
'developer' => 'Apakah kamu seorang pengembangDisini Anda bisa belajar membuat aplikasi dan mulai menjual hari ini!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Tentang',
'added' => 'Menambahkan',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalasi',
'faq' => 'FAQ',
'changelog' => 'Perubahan Catatan',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Instalasi Aplikasi',
'download' => 'Mengunduh :module file.',
'unzip' => 'Mengekstrak :module file.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Instalasi :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Terpasang',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Dibeli',
'installed' => 'Terpasang',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'Tidak ada ulasan.'
+ ]
];
diff --git a/resources/lang/id-ID/notifications.php b/resources/lang/id-ID/notifications.php
index 88c2f9da0..28a2a25ea 100644
--- a/resources/lang/id-ID/notifications.php
+++ b/resources/lang/id-ID/notifications.php
@@ -3,8 +3,8 @@
return [
'whoops' => 'Whoops!',
- 'hello' => 'Hello!',
- 'salutation' => 'Regards, :company_name',
+ 'hello' => 'Hai!',
+ 'salutation' => 'Hormat Kami, :company_name',
'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
];
diff --git a/resources/lang/id-ID/reconciliations.php b/resources/lang/id-ID/reconciliations.php
new file mode 100644
index 000000000..cb2c2a951
--- /dev/null
+++ b/resources/lang/id-ID/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Saldo Akhir',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/id-ID/reports.php b/resources/lang/id-ID/reports.php
index 2c7befa3b..bd92d47e2 100644
--- a/resources/lang/id-ID/reports.php
+++ b/resources/lang/id-ID/reports.php
@@ -11,7 +11,7 @@ return [
'gross_profit' => 'Laba Kotor',
'net_profit' => 'Laba Bersih',
'total_expenses' => 'Total Pengeluaran',
- 'net' => 'NET',
+ 'net' => 'Laba Bersih',
'summary' => [
'income' => 'Ringkasan Pendapatan',
diff --git a/resources/lang/id-ID/settings.php b/resources/lang/id-ID/settings.php
index 71c2aeb4d..1ca21380a 100644
--- a/resources/lang/id-ID/settings.php
+++ b/resources/lang/id-ID/settings.php
@@ -22,9 +22,9 @@ return [
],
'timezone' => 'Zona Waktu',
'percent' => [
- 'title' => 'Percent (%) Position',
- 'before' => 'Before Number',
- 'after' => 'After Number',
+ 'title' => 'Persen (%) Posisi',
+ 'before' => 'Sebelum Nomor',
+ 'after' => 'Sesudah Nomor',
],
],
'invoice' => [
@@ -33,6 +33,16 @@ return [
'digit' => 'Digit nomor',
'next' => 'Nomor Berikutnya',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Nama Barang',
+ 'item' => 'Barang',
+ 'product' => 'Produk',
+ 'service' => 'Layanan',
+ 'price_name' => 'Nama Harga',
+ 'price' => 'Harga',
+ 'rate' => 'Kurs',
+ 'quantity_name' => 'Nama Kuantitas',
+ 'quantity' => 'Kuantitas',
],
'default' => [
'tab' => 'Standar',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Kirim Sebelum Jatuh Tempo',
'cron_command' => 'Perintah Cron',
'schedule_time' => 'Waktu untuk Menjalankan',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Tampilan',
diff --git a/resources/lang/id-ID/validation.php b/resources/lang/id-ID/validation.php
index 32b9a62d5..6a935f240 100644
--- a/resources/lang/id-ID/validation.php
+++ b/resources/lang/id-ID/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'kustomisasi-pesan',
],
'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/it-IT/bills.php b/resources/lang/it-IT/bills.php
index 45c22eb96..327a72eff 100644
--- a/resources/lang/it-IT/bills.php
+++ b/resources/lang/it-IT/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Fattura segnata con successo come ricevuta!',
+ 'draft' => 'Questa è una BOZZA della fattura e si rifletterà sui grafici dopo che sarà ricevuta.',
+
+ 'status' => [
+ 'created' => 'Creato il :date',
+ 'receive' => [
+ 'draft' => 'Non inviato',
+ 'received' => 'Ricevuto il :date',
+ ],
+ 'paid' => [
+ 'await' => 'In attesa del pagamento',
+ ],
+ ],
],
];
diff --git a/resources/lang/it-IT/customers.php b/resources/lang/it-IT/customers.php
index 9ed5474ba..99bbdecee 100644
--- a/resources/lang/it-IT/customers.php
+++ b/resources/lang/it-IT/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'L\'email è già stata presa.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':cliente effettuato :importo pagamento al numero di fattura :numero_fattura.',
+ 'button' => 'Mostra',
+ ],
];
diff --git a/resources/lang/it-IT/footer.php b/resources/lang/it-IT/footer.php
index a7fcdfa5d..819d2c33d 100644
--- a/resources/lang/it-IT/footer.php
+++ b/resources/lang/it-IT/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versione',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Free Accounting Software',
];
diff --git a/resources/lang/it-IT/general.php b/resources/lang/it-IT/general.php
index 105a525c8..931da48b0 100644
--- a/resources/lang/it-IT/general.php
+++ b/resources/lang/it-IT/general.php
@@ -38,6 +38,8 @@ return [
'numbers' => 'Numero|Numeri',
'statuses' => 'Stato|Stati',
'others' => 'Altro|Altri',
+ 'contacts' => 'Contatto|Contatti',
+ 'reconciliations' => 'Riconciliazione | Riconciliazioni',
'dashboard' => 'Cruscotto',
'banking' => 'Banca',
@@ -81,6 +83,7 @@ return [
'color' => 'Colore',
'save' => 'Salva',
'cancel' => 'Annulla',
+ 'loading' => 'Caricamento...',
'from' => 'Da',
'to' => 'A',
'print' => 'Stampa',
@@ -101,12 +104,27 @@ return [
'partially' => 'Parzialmente',
'partially_paid' => 'Parzialmente Pagato',
'export' => 'Esporta',
+ 'finish' => 'Conclusione',
+ 'wizard' => 'Procedura guidata',
+ 'skip' => 'Salta',
'enable' => 'Attiva',
'disable' => 'Disattiva',
+ 'select_all' => 'Seleziona tutto',
+ 'unselect_all' => 'Deseleziona Tutto',
+ 'go_to' => 'Vai a :name',
+ 'created_date' => 'Data di Creazione',
+ 'period' => 'Periodo',
+ 'start' => 'Avvia',
+ 'end' => 'Fine',
+ 'clear' => 'Cancella',
+ 'difference' => 'Differenza',
'title' => [
'new' => 'Nuovo :type',
'edit' => 'Modifica :type',
+ 'create' => 'Crea :type',
+ 'send' => 'Invia :type',
+ 'get' => 'Ottieni :type',
],
'form' => [
@@ -118,4 +136,11 @@ return [
'no_file_selected' => 'Nessun file selezionato...',
],
+ 'date_range' => [
+ 'today' => 'Oggi',
+ 'yesterday' => 'Ieri',
+ 'last_days' => 'Ultimi :day Giorni',
+ 'this_month' => 'Questo mese',
+ 'last_month' => 'Ultimo mese',
+ ],
];
diff --git a/resources/lang/it-IT/header.php b/resources/lang/it-IT/header.php
index 495ddb3bb..906952fad 100644
--- a/resources/lang/it-IT/header.php
+++ b/resources/lang/it-IT/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count articolo esaurito|[2, *] :count articoli esauriti',
'view_all' => 'Visualizza tutti'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/it-IT/invoices.php b/resources/lang/it-IT/invoices.php
index 98eda49bf..020941034 100644
--- a/resources/lang/it-IT/invoices.php
+++ b/resources/lang/it-IT/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Segna come inviata',
'download_pdf' => 'Scarica PDF',
'send_mail' => 'Invia email',
+ 'all_invoices' => 'Accedi per visualizzare tutte le fatture',
'status' => [
'draft' => 'Bozza',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'La mail è stata inviata con successo.',
'marked_sent' => 'La mail è stata contrassegnata con successo come inviata.',
'email_required' => 'Nessun indirizzo email per questo cliente!',
+ 'draft' => 'Questa è una BOZZA della fattura e si rifletterà sui grafici dopo che sarà inviata.',
+
+ 'status' => [
+ 'created' => 'Creato il :date',
+ 'send' => [
+ 'draft' => 'Non inviato',
+ 'sent' => 'Inviato il :date',
+ ],
+ 'paid' => [
+ 'await' => 'In attesa del pagamento',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/it-IT/items.php b/resources/lang/it-IT/items.php
index 904f2d016..d162f0885 100644
--- a/resources/lang/it-IT/items.php
+++ b/resources/lang/it-IT/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Cod.Art.',
'notification' => [
- 'message' => 'Hai ricevuto questa e-mail perché il :name è in esaurimento.',
+ 'message' => [
+ 'reminder' => 'Stai ricevendo questa email perché è rimasto solo :quantity di :name.',
+ 'out_of_stock' => 'Hai ricevuto questa email perché :name è esaurito.',
+ ],
'button' => 'Mostra ora',
],
diff --git a/resources/lang/it-IT/messages.php b/resources/lang/it-IT/messages.php
index 3d5f27d6e..fdca737b2 100644
--- a/resources/lang/it-IT/messages.php
+++ b/resources/lang/it-IT/messages.php
@@ -8,22 +8,25 @@ return [
'deleted' => ':type eliminato!',
'duplicated' => ':type duplicato!',
'imported' => ':type importato!',
- 'enabled' => ':type enabled!',
- 'disabled' => ':type disabled!',
+ 'enabled' => ':type abilitato!',
+ 'disabled' => ':type disabilitato!',
],
+
'error' => [
- 'over_payment' => 'Errore: Pagamento non aggiunto! L\'importo supera il totale.',
+ 'over_payment' => 'Errore: pagamento non aggiunto! L\'importo inserito supera il totale: :amount',
'not_user_company' => 'Errore: Non hai i permessi per gestire questa azienda!',
'customer' => 'Errore: Utente non creato! :name usa già questo indirizzo email.',
'no_file' => 'Errore: Nessun file selezionato!',
- 'last_category' => 'Error: Can not delete the last :type category!',
- 'invalid_token' => 'Error: The token entered is invalid!',
- 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
- 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
+ 'last_category' => 'Errore: Non è possibile eliminare l\'ultimo categoria di :type!',
+ 'invalid_token' => 'Errore: Il token inserito non è valido!',
+ 'import_column' => 'Errore: :message Foglio nome: :sheet. Riga numero: :line.',
+ 'import_sheet' => 'Errore: Il nome del foglio non è valido. Vi preghiamo di controllare il file di esempio.',
],
+
'warning' => [
'deleted' => 'Attenzione: Non è consentito eliminare :name perché ha :text collegato.',
'disabled' => 'Attenzione: Non è consentito disabilitare :name perché ha :text collegato.',
+ 'disable_code' => 'Avviso: Non è consentito disabilitare o modificare la valuta di :nome perché ha: testo correlato.',
],
];
diff --git a/resources/lang/it-IT/modules.php b/resources/lang/it-IT/modules.php
index a0bd25262..c98284c6a 100644
--- a/resources/lang/it-IT/modules.php
+++ b/resources/lang/it-IT/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Non c\'è nessuna apps in questa categoria, ancora.',
'developer' => 'Sei uno sviluppatore? Qui si può imparare a creare un\'app e iniziare a vendere oggi!',
+ 'recommended_apps' => 'App consigliate',
+
'about' => 'Info',
'added' => 'Aggiunto',
@@ -32,15 +34,28 @@ return [
'installation' => 'Installazione',
'faq' => 'FAQ',
'changelog' => 'Modifiche di Versione',
+ 'reviews' => 'Recensioni',
],
'installation' => [
'header' => 'Installazione di App',
'download' => 'Scaricamento del file del modulo :module.',
'unzip' => 'Estrazione files del modulo :module.',
+ 'file_copy' => 'Copia file del :module.',
+ 'migrate' => 'Applicazione aggiornamenti del :module.',
+ 'finish' => 'L\'aggiornamento è stato installato con successo. Verrai reindirizzato al Centro aggiornamenti.',
'install' => 'Installazione dei files del modulo :module.',
],
+ 'errors' => [
+ 'download' => ':module non può essere scaricato!',
+ 'upload' => 'Il :module Scaricato non può essere salvato!',
+ 'unzip' => ':module non può essere estratto!',
+ 'file_copy' => 'I file del :module non possono essere copiati!',
+ 'migrate' => 'Migrazione del :modulo interrotta!',
+ 'migrate core' => ':module ha già la versione più recente, quindi non è possibile aggiornare.',
+ ],
+
'badge' => [
'installed' => 'Installato',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Acquistato',
'installed' => 'Installato',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Aggiungi una recensione'
+ ],
+ 'na' => 'Non sono presenti recensioni.'
+ ]
];
diff --git a/resources/lang/it-IT/reconciliations.php b/resources/lang/it-IT/reconciliations.php
new file mode 100644
index 000000000..83b89e53c
--- /dev/null
+++ b/resources/lang/it-IT/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Riconcilia',
+ 'reconciled' => 'Riconciliato',
+ 'closing_balance' => 'Chiusura Bilancio',
+ 'unreconciled' => 'Non riconciliato',
+ 'list_transactions' => 'Lista Transazioni',
+ 'start_date' => 'Data di inzio',
+ 'end_date' => 'Data di fine',
+ 'cleared_amount' => 'Importo cancellato',
+ 'deposit' => 'Deposito',
+ 'withdrawal' => 'Prelievo',
+
+];
diff --git a/resources/lang/it-IT/recurring.php b/resources/lang/it-IT/recurring.php
index 043887711..4b19a5169 100644
--- a/resources/lang/it-IT/recurring.php
+++ b/resources/lang/it-IT/recurring.php
@@ -2,7 +2,7 @@
return [
- 'recurring' => 'Recurring',
+ 'recurring' => 'Ricorrenti',
'every' => 'Ogni',
'period' => 'Periodo',
'times' => 'Volte',
@@ -10,11 +10,11 @@ return [
'weekly' => 'Settimanalmente',
'monthly' => 'Mensile',
'yearly' => 'Annuale',
- 'custom' => 'Custom',
- 'days' => 'Day(s)',
- 'weeks' => 'Week(s)',
- 'months' => 'Month(s)',
- 'years' => 'Year(s)',
- 'message' => 'This is a recurring :type and the next :type will be automatically generated at :date',
+ 'custom' => 'Personalizzato',
+ 'days' => 'Giorno(i)',
+ 'weeks' => 'Settimana(e)',
+ 'months' => 'Mese(i)',
+ 'years' => 'Anno(i)',
+ 'message' => 'Questo è un :type ricorrente ed il successivo :type verrà generato automaticamente il :date',
];
diff --git a/resources/lang/it-IT/reports.php b/resources/lang/it-IT/reports.php
index 01f3fbdea..af117ea2c 100644
--- a/resources/lang/it-IT/reports.php
+++ b/resources/lang/it-IT/reports.php
@@ -7,24 +7,24 @@ return [
'this_quarter' => 'Trimestre Corrente',
'previous_quarter' => 'Trimestre precedente',
'last_12_months' => 'Ultimi 12 mesi',
- 'profit_loss' => 'Profit & Loss',
- 'gross_profit' => 'Gross Profit',
- 'net_profit' => 'Net Profit',
- 'total_expenses' => 'Total Expenses',
+ 'profit_loss' => 'Profitti e perdite',
+ 'gross_profit' => 'Utile lordo',
+ 'net_profit' => 'Utile netto',
+ 'total_expenses' => 'Totale spese',
'net' => 'NET',
'summary' => [
'income' => 'Riepilogo di reddito',
'expense' => 'Riepilogo spese',
'income_expense' => 'Reddito vs Spese',
- 'tax' => 'Tax Summary',
+ 'tax' => 'Riepilogo fiscale',
],
'quarter' => [
- '1' => 'Jan-Mar',
- '2' => 'Apr-Jun',
- '3' => 'Jul-Sep',
- '4' => 'Oct-Dec',
+ '1' => 'Gen-Mar',
+ '2' => 'Apr-Giu',
+ '3' => 'Lug-Set',
+ '4' => 'Ott-Dic',
],
];
diff --git a/resources/lang/it-IT/settings.php b/resources/lang/it-IT/settings.php
index 11137a3e9..2706a5844 100644
--- a/resources/lang/it-IT/settings.php
+++ b/resources/lang/it-IT/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Numero cifre',
'next' => 'Codice fiscale',
'logo' => 'Logo',
+ 'custom' => 'Personalizzato',
+ 'item_name' => 'Nome dell\'elemento',
+ 'item' => 'Elementi',
+ 'product' => 'Prodotti',
+ 'service' => 'Servizi',
+ 'price_name' => 'Nome del prezzo',
+ 'price' => 'Prezzo',
+ 'rate' => 'Valutazione',
+ 'quantity_name' => 'Quantità Nome',
+ 'quantity' => 'Quantità',
],
'default' => [
'tab' => 'Predefiniti',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Inviare entro Due giorni',
'cron_command' => 'Comando cron',
'schedule_time' => 'Ora di esecuzione',
+ 'send_item_reminder'=> 'Invia promemoria oggetto',
+ 'item_stocks' => 'Invia quando l\'oggetto è in Stock',
],
'appearance' => [
'tab' => 'Aspetto',
diff --git a/resources/lang/it-IT/taxes.php b/resources/lang/it-IT/taxes.php
index 9b6870de0..ff5aad6b6 100644
--- a/resources/lang/it-IT/taxes.php
+++ b/resources/lang/it-IT/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Tasso',
'rate_percent' => 'Tasso (%)',
+ 'normal' => 'Normale',
+ 'inclusive' => 'Inclusivo',
+ 'compound' => 'Composto',
];
diff --git a/resources/lang/it-IT/transfers.php b/resources/lang/it-IT/transfers.php
index d9b3d8930..5b8145c6c 100644
--- a/resources/lang/it-IT/transfers.php
+++ b/resources/lang/it-IT/transfers.php
@@ -6,7 +6,7 @@ return [
'to_account' => 'Al Conto',
'messages' => [
- 'delete' => ':from to :to (:amount)',
+ 'delete' => ':from da :to a (:amount)',
],
];
diff --git a/resources/lang/it-IT/validation.php b/resources/lang/it-IT/validation.php
index 40fa462ac..c5b85b5cf 100644
--- a/resources/lang/it-IT/validation.php
+++ b/resources/lang/it-IT/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'messaggio-personalizzato',
],
'invalid_currency' => ':attribute codice non è valido.',
+ 'invalid_amount' => 'La quantità :l\'attributo non è valido.',
],
/*
diff --git a/resources/lang/lt-LT/accounts.php b/resources/lang/lt-LT/accounts.php
new file mode 100644
index 000000000..8bc8a610d
--- /dev/null
+++ b/resources/lang/lt-LT/accounts.php
@@ -0,0 +1,14 @@
+ 'Įmonės pavadinimas',
+ 'number' => 'Numeris',
+ 'opening_balance' => 'Pradinis likutis',
+ 'current_balance' => 'Likutis',
+ 'bank_name' => 'Banko pavadinimas',
+ 'bank_phone' => 'Banko telefonas',
+ 'bank_address' => 'Banko adresas',
+ 'default_account' => 'Numatytoji įmonė',
+
+];
diff --git a/resources/lang/lt-LT/auth.php b/resources/lang/lt-LT/auth.php
new file mode 100644
index 000000000..7b7fe014b
--- /dev/null
+++ b/resources/lang/lt-LT/auth.php
@@ -0,0 +1,39 @@
+ 'Profilis',
+ 'logout' => 'Atsijungti',
+ 'login' => 'Prisijungti',
+ 'login_to' => 'Prisijunkite, kad pradėtumėte sesiją',
+ 'remember_me' => 'Prisiminti mane',
+ 'forgot_password' => 'Pamiršau slaptažodį',
+ 'reset_password' => 'Atstatyti slaptažodį',
+ 'enter_email' => 'Įveskite savo el. pašto adresą',
+ 'current_email' => 'Dabartinis el. paštas',
+ 'reset' => 'Atstatyti',
+ 'never' => 'niekada',
+
+ 'password' => [
+ 'current' => 'Slaptažodis',
+ 'current_confirm' => 'Slaptažodžio patvirtinimas',
+ 'new' => 'Naujas slaptažodis',
+ 'new_confirm' => 'Naujo slaptažodžio patvirtinimas',
+ ],
+
+ 'error' => [
+ 'self_delete' => 'Negalite ištrinti savęs!',
+ 'no_company' => 'Nėra priskirtos kompanijos. Prašome susisiekti su sistemos administratoriumi.',
+ ],
+
+ 'failed' => 'Neteisingi prisijungimo duomenys.',
+ 'disabled' => 'Šis vartotojas yra išjungtas. Prašome susisiekti su sistemos administratoriumi.',
+ 'throttle' => 'Per daug bandymų prisijungti. Bandykite po :seconds sec.',
+
+ 'notification' => [
+ 'message_1' => 'Jūs gavote šį laišką, nes mes gavome prašymą atstatyti slaptažodį jūsų vartotojui.',
+ 'message_2' => 'Jei jūs neprašėte atstatyti slaptažodžio - tiesiog nieko nedarykite.',
+ 'button' => 'Atstatyti slaptažodį',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/bills.php b/resources/lang/lt-LT/bills.php
new file mode 100644
index 000000000..81d05e7a3
--- /dev/null
+++ b/resources/lang/lt-LT/bills.php
@@ -0,0 +1,58 @@
+ 'Sąskaitos numeris',
+ 'bill_date' => 'Sąskaitos data',
+ 'total_price' => 'Bendra suma',
+ 'due_date' => 'Terminas',
+ 'order_number' => 'Užsakymo numeris',
+ 'bill_from' => 'Sąskaitas iš',
+
+ 'quantity' => 'Kiekis',
+ 'price' => 'Kaina',
+ 'sub_total' => 'Tarpinė suma',
+ 'discount' => 'Nuolaida',
+ 'tax_total' => 'Mokesčių suma',
+ 'total' => 'Iš viso',
+
+ 'item_name' => 'Prekės/paslaugos pavadinimas',
+
+ 'show_discount' => ':discount% nuolaida',
+ 'add_discount' => 'Pridėti nuolaidą',
+ 'discount_desc' => 'tarpinė suma',
+
+ 'payment_due' => 'Mokėjimo terminas',
+ 'amount_due' => 'Mokėtina suma',
+ 'paid' => 'Apmokėta',
+ 'histories' => 'Istorijos',
+ 'payments' => 'Mokėjimai',
+ 'add_payment' => 'Pridėti mokėjimą',
+ 'mark_received' => 'Pažymėti kaip gautą',
+ 'download_pdf' => 'Parsisiųsti PDF',
+ 'send_mail' => 'Siųsti laišką',
+
+ 'status' => [
+ 'draft' => 'Juodraštis',
+ 'received' => 'Gauta',
+ 'partial' => 'Dalinis',
+ 'paid' => 'Apmokėta',
+ ],
+
+ 'messages' => [
+ 'received' => 'Sąskaita gauta sėkmingai!',
+ 'draft' => 'Tai yra JUODRAŠTINĖ sąskaita ir ji bus įtraukta į grafikus po to kai bus gauta.',
+
+ 'status' => [
+ 'created' => 'Sukurta :date',
+ 'receive' => [
+ 'draft' => 'Neišsiųsta',
+ 'received' => 'Gauta :date',
+ ],
+ 'paid' => [
+ 'await' => 'Laukiama apmokėjimo',
+ ],
+ ],
+ ],
+
+];
diff --git a/resources/lang/lt-LT/companies.php b/resources/lang/lt-LT/companies.php
new file mode 100644
index 000000000..cbe3111b4
--- /dev/null
+++ b/resources/lang/lt-LT/companies.php
@@ -0,0 +1,13 @@
+ 'Domenas',
+ 'logo' => 'Logotipas',
+ 'manage' => 'Valdyti įmones',
+ 'all' => 'Visos įmonės',
+ 'error' => [
+ 'delete_active' => 'Klaida: Negalite ištrinti aktyvios įmonės, pirma turite pakeisti ją!',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/currencies.php b/resources/lang/lt-LT/currencies.php
new file mode 100644
index 000000000..3772d6182
--- /dev/null
+++ b/resources/lang/lt-LT/currencies.php
@@ -0,0 +1,18 @@
+ 'Kodas',
+ 'rate' => 'Kursas',
+ 'default' => 'Numatytoji valiuta',
+ 'decimal_mark' => 'Dešimtainis ženklas',
+ 'thousands_separator' => 'Tūkstančių skyriklis',
+ 'precision' => 'Tikslumas',
+ 'symbol' => [
+ 'symbol' => 'Simbolis',
+ 'position' => 'Simbolio pozicija',
+ 'before' => 'Suma prieš',
+ 'after' => 'Suma po',
+ ]
+
+];
diff --git a/resources/lang/lt-LT/customers.php b/resources/lang/lt-LT/customers.php
new file mode 100644
index 000000000..0bcea13ca
--- /dev/null
+++ b/resources/lang/lt-LT/customers.php
@@ -0,0 +1,16 @@
+ 'Leisti prisijungti?',
+ 'user_created' => 'Vartotojas sukurtas',
+
+ 'error' => [
+ 'email' => 'Šis el. paštas jau užimtas.'
+ ],
+
+ 'notification' => [
+ 'message' => ':customer sumokėjo :amount pagal sąskaitą: :invoice_number.',
+ 'button' => 'Rodyti',
+ ],
+];
diff --git a/resources/lang/lt-LT/dashboard.php b/resources/lang/lt-LT/dashboard.php
new file mode 100644
index 000000000..d61df9240
--- /dev/null
+++ b/resources/lang/lt-LT/dashboard.php
@@ -0,0 +1,24 @@
+ 'Iš viso pajamų',
+ 'receivables' => 'Gautinos sumos',
+ 'open_invoices' => 'Neapmokėtos sąskaitos faktūros',
+ 'overdue_invoices' => 'Vėluojančios sąskaitos faktūros',
+ 'total_expenses' => 'Iš viso išlaidų',
+ 'payables' => 'Mokėtinos sumos',
+ 'open_bills' => 'Neapmokėtos sąskaitas',
+ 'overdue_bills' => 'Vėluojančios sąskaitos',
+ 'total_profit' => 'Pelnas iš viso',
+ 'open_profit' => 'Pelnas prieš mokesčius',
+ 'overdue_profit' => 'Vėluojantis pelnas',
+ 'cash_flow' => 'Grynųjų pinigų srautai',
+ 'no_profit_loss' => 'Nėra nuostolių',
+ 'incomes_by_category' => 'Pajamos pagal kategoriją',
+ 'expenses_by_category' => 'Išlaidos pagal kategoriją',
+ 'account_balance' => 'Sąskaitos likutis',
+ 'latest_incomes' => 'Naujausios pajamos',
+ 'latest_expenses' => 'Paskutinis išlaidos',
+
+];
diff --git a/resources/lang/lt-LT/demo.php b/resources/lang/lt-LT/demo.php
new file mode 100644
index 000000000..0df5628dc
--- /dev/null
+++ b/resources/lang/lt-LT/demo.php
@@ -0,0 +1,16 @@
+ 'Grynieji pinigai',
+ 'categories_deposit' => 'Depozitas',
+ 'categories_sales' => 'Pardavimai',
+ 'currencies_usd' => 'JAV doleris',
+ 'currencies_eur' => 'Euras',
+ 'currencies_gbp' => 'Svarai sterlingai',
+ 'currencies_try' => 'Turkijos Lira',
+ 'taxes_exempt' => 'Neapmokestinamos pajamos',
+ 'taxes_normal' => 'Įprastiniai mokesčiai',
+ 'taxes_sales' => 'PVM',
+
+];
diff --git a/resources/lang/lt-LT/footer.php b/resources/lang/lt-LT/footer.php
new file mode 100644
index 000000000..259e84c86
--- /dev/null
+++ b/resources/lang/lt-LT/footer.php
@@ -0,0 +1,10 @@
+ 'Versija',
+ 'powered' => 'Sukurta Akaunting',
+ 'link' => 'https://akaunting.com',
+ 'software' => 'Nemokama apskaitos programa',
+
+];
diff --git a/resources/lang/lt-LT/general.php b/resources/lang/lt-LT/general.php
new file mode 100644
index 000000000..a87ed910f
--- /dev/null
+++ b/resources/lang/lt-LT/general.php
@@ -0,0 +1,146 @@
+ 'Prekė|Prekės',
+ 'incomes' => 'Pajamos|Pajamos',
+ 'invoices' => 'Sąskaita|Sąskaitos',
+ 'revenues' => 'Pajamos|Pajamos',
+ 'customers' => 'Klientas|Klientai',
+ 'expenses' => 'Išlaidos|Išlaidos',
+ 'bills' => 'Sąskaitą|Sąskaitos',
+ 'payments' => 'Mokėjimas|Mokėjimai',
+ 'vendors' => 'Tiekėjas|Tiekėjai',
+ 'accounts' => 'Vartotojas|Vartotojai',
+ 'transfers' => 'Pervedimas|Pervedimai',
+ 'transactions' => 'Transakcija|Transakcijos',
+ 'reports' => 'Ataskaita|Ataskaitos',
+ 'settings' => 'Nustatymas|Nustatymai',
+ 'categories' => 'Kategorija|Kategorijos',
+ 'currencies' => 'Valiuta|Valiutos',
+ 'tax_rates' => 'Mokesčių tarifas|Mokesčių tarifai',
+ 'users' => 'Vartotojas|Vartotojai',
+ 'roles' => 'Rolė|Rolės',
+ 'permissions' => 'Teisė|Teisės',
+ 'modules' => 'Programėlė|Programėlės',
+ 'companies' => 'Įmonė|įmonės',
+ 'profits' => 'Pelnas|Pelnas',
+ 'taxes' => 'Mokestis|Mokesčiai',
+ 'logos' => 'Logotipas|Logotipai',
+ 'pictures' => 'Paveikslėlis|Paveikslėliai',
+ 'types' => 'Tipas|Tipai',
+ 'payment_methods' => 'Mokėjimo būdas|Mokėjimo būdai',
+ 'compares' => 'Pajamos - išlaidos|Pajamos - išlaidos',
+ 'notes' => 'Pastaba|Pastabos',
+ 'totals' => 'Iš viso|Iš viso',
+ 'languages' => 'Kalba|Kalbos',
+ 'updates' => 'Atnaujinimas|Atnaujinimai',
+ 'numbers' => 'Skaičius|Skaičiai',
+ 'statuses' => 'Statusas|Statusai',
+ 'others' => 'Kiti|Kiti',
+ 'contacts' => 'Kontaktas|Kontaktai',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+
+ 'dashboard' => 'Pradžia',
+ 'banking' => 'Bankai ir finansai',
+ 'general' => 'Bendras',
+ 'no_records' => 'Nėra įrašų.',
+ 'date' => 'Data',
+ 'amount' => 'Kiekis',
+ 'enabled' => 'Įjungta',
+ 'disabled' => 'Įšjungta',
+ 'yes' => 'Taip',
+ 'no' => 'Ne',
+ 'na' => 'N/A',
+ 'daily' => 'Kasdien',
+ 'monthly' => 'Kas mėnesį',
+ 'quarterly' => 'Kas ketvirtį',
+ 'yearly' => 'Kasmet',
+ 'add' => 'Pridėti',
+ 'add_new' => 'Pridėti naują',
+ 'show' => 'Rodyti',
+ 'edit' => 'Redaguoti',
+ 'delete' => 'Ištrinti',
+ 'send' => 'Siųsti',
+ 'download' => 'Parsisiųsti',
+ 'delete_confirm' => 'Ar tikrai norite ištrinti?',
+ 'name' => 'Vardas',
+ 'email' => 'El. paštas',
+ 'tax_number' => 'PVM kodas',
+ 'phone' => 'Telefonas',
+ 'address' => 'Adresas',
+ 'website' => 'Interneto svetainė',
+ 'actions' => 'Veiksmai',
+ 'description' => 'Aprašymas',
+ 'manage' => 'Valdyti',
+ 'code' => 'Kodas',
+ 'alias' => 'Alternatyva',
+ 'balance' => 'Balansas',
+ 'reference' => 'Nuoroda',
+ 'attachment' => 'Priedai',
+ 'change' => 'Pakeisti',
+ 'switch' => 'Perjungti',
+ 'color' => 'Spalva',
+ 'save' => 'Išsaugoti',
+ 'cancel' => 'Atšaukti',
+ 'loading' => 'Kraunama...',
+ 'from' => 'Nuo',
+ 'to' => 'Iki',
+ 'print' => 'Spausdinti',
+ 'search' => 'Paieška',
+ 'search_placeholder' => 'Ieškoti..',
+ 'filter' => 'Filtruoti',
+ 'help' => 'Pagalba',
+ 'all' => 'Visi',
+ 'all_type' => 'Visi :type',
+ 'upcoming' => 'Artėjantys',
+ 'created' => 'Sukurta',
+ 'id' => 'ID',
+ 'more_actions' => 'Daugiau veiksmų',
+ 'duplicate' => 'Duplikuoti',
+ 'unpaid' => 'Neapmokėta',
+ 'paid' => 'Apmokėta',
+ 'overdue' => 'Vėluojanti',
+ 'partially' => 'Dalinis',
+ 'partially_paid' => 'Dalinai apmokėta',
+ 'export' => 'Eksportuoti',
+ 'finish' => 'Užbaigti',
+ 'wizard' => 'Vedlys',
+ 'skip' => 'Praleisti',
+ 'enable' => 'Įjungti',
+ 'disable' => 'Išjungti',
+ 'select_all' => 'Pažymėti viską',
+ 'unselect_all' => 'Panaikinti visų žymėjimą',
+ 'go_to' => 'Eiti į :name',
+ 'created_date' => 'Sukūrimo data',
+ 'period' => 'Periodas',
+ 'start' => 'Pradžia',
+ 'end' => 'Pabaiga',
+ 'clear' => 'Išvalyti',
+ 'difference' => 'Skirtumas',
+
+ 'title' => [
+ 'new' => 'Naujas :type',
+ 'edit' => 'Redaguoti :type',
+ 'create' => 'Sukurti :type',
+ 'send' => 'Siųsti :type',
+ 'get' => 'Gauti :type',
+ ],
+
+ 'form' => [
+ 'enter' => 'Įveskite :field',
+ 'select' => [
+ 'field' => '- Pasirinkite :field -',
+ 'file' => 'Pasirinkti failą',
+ ],
+ 'no_file_selected' => 'Nepasirinktas failas...',
+ ],
+
+ 'date_range' => [
+ 'today' => 'Šiandien',
+ 'yesterday' => 'Vakar',
+ 'last_days' => 'Paskutinės :days dienos',
+ 'this_month' => 'Šis mėnuo',
+ 'last_month' => 'Praėjęs mėnuo',
+ ],
+];
diff --git a/resources/lang/lt-LT/header.php b/resources/lang/lt-LT/header.php
new file mode 100644
index 000000000..0ec4cec2a
--- /dev/null
+++ b/resources/lang/lt-LT/header.php
@@ -0,0 +1,16 @@
+ 'Keisti kalbą',
+ 'last_login' => 'Paskutinis prisijungimas :laikas',
+ 'notifications' => [
+ 'counter' => '{0} Pranešimų nėra|{1} Turite :count pranešimą|[2,*] Turite :count pranešimus',
+ 'overdue_invoices' => '{1} :count vėluojanti sąskaita|[2,*] :count vėluojančios sąskaitos',
+ 'upcoming_bills' => '{1} :count artėjantis mokėjimasl|[2,*] :count artėjantys mokėjimai',
+ 'items_stock' => '{1} :count prekės nebėra|[2,*] :count prekių nebėra',
+ 'view_all' => 'Peržiūrėti visus'
+ ],
+ 'docs_link' => 'https://akaunting.com/docs',
+
+];
diff --git a/resources/lang/lt-LT/import.php b/resources/lang/lt-LT/import.php
new file mode 100644
index 000000000..4dd544454
--- /dev/null
+++ b/resources/lang/lt-LT/import.php
@@ -0,0 +1,9 @@
+ 'Importuoti',
+ 'title' => 'Importuoti :type',
+ 'message' => 'Leidžiami failų tipai: XLS, XLSX. Prašome parsisiųsti pavyzdį.',
+
+];
diff --git a/resources/lang/lt-LT/install.php b/resources/lang/lt-LT/install.php
new file mode 100644
index 000000000..eef0204c3
--- /dev/null
+++ b/resources/lang/lt-LT/install.php
@@ -0,0 +1,44 @@
+ 'Sekantis',
+ 'refresh' => 'Atnaujinti',
+
+ 'steps' => [
+ 'requirements' => 'Prašome kreiptis į savo talpinimo paslaugų teikėją, kad ištaisytų klaidas!',
+ 'language' => 'Žingsnis 1/3: Kalbos pasirinkimas',
+ 'database' => 'Žingsnis 2/3: Duombazės nustatymai',
+ 'settings' => 'Žingsnis 3/3: Įmonės ir administratoriaus nustatymai',
+ ],
+
+ 'language' => [
+ 'select' => 'Pasirinkite kalbą',
+ ],
+
+ 'requirements' => [
+ 'enabled' => ': feature turi būti įjungta!',
+ 'disabled' => ': feature turi būti išjungta!',
+ 'extension' => ':extension turi būti įrašytas ir įjungtas!',
+ 'directory' => ':directory direktorijoje turi būti leidžiama įrašyti!',
+ ],
+
+ 'database' => [
+ 'hostname' => 'Serverio adresas',
+ 'username' => 'Vartotojo vardas',
+ 'password' => 'Slaptažodis',
+ 'name' => 'Duomenų bazė',
+ ],
+
+ 'settings' => [
+ 'company_name' => 'Įmonės pavadinimas',
+ 'company_email' => 'Įmonės el. paštas',
+ 'admin_email' => 'Administratoriaus el. paštas',
+ 'admin_password' => 'Administratoriaus slaptažodis',
+ ],
+
+ 'error' => [
+ 'connection' => 'Klaida: Nepavyko prisijungti prie duomenų bazės! Prašome įsitikinkite, kad informacija yra teisinga.',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/invoices.php b/resources/lang/lt-LT/invoices.php
new file mode 100644
index 000000000..0a419e2c8
--- /dev/null
+++ b/resources/lang/lt-LT/invoices.php
@@ -0,0 +1,68 @@
+ 'Sąskaitos-faktūros numeris',
+ 'invoice_date' => 'Sąskaitos-faktūros data',
+ 'total_price' => 'Bendra kaina',
+ 'due_date' => 'Terminas',
+ 'order_number' => 'Užsakymo numeris',
+ 'bill_to' => 'Pirkėjas',
+
+ 'quantity' => 'Kiekis',
+ 'price' => 'Kaina',
+ 'sub_total' => 'Tarpinė suma',
+ 'discount' => 'Nuolaida',
+ 'tax_total' => 'Mokesčių suma',
+ 'total' => 'Iš viso',
+
+ 'item_name' => 'Prekė/paslauga|Prekės/paslaugos',
+
+ 'show_discount' => ':discount% nuolaida',
+ 'add_discount' => 'Pridėti nuolaidą',
+ 'discount_desc' => 'tarpinė suma',
+
+ 'payment_due' => 'Mokėjimo terminas',
+ 'paid' => 'Apmokėta',
+ 'histories' => 'Istorijos',
+ 'payments' => 'Mokėjimai',
+ 'add_payment' => 'Pridėti mokėjimą',
+ 'mark_paid' => 'Pažymėti kaip apmokėtą',
+ 'mark_sent' => 'Pažymėti kaip išsiųstą',
+ 'download_pdf' => 'Parsisiųsti PDF',
+ 'send_mail' => 'Siųsti laišką',
+ 'all_invoices' => 'Prisijunkite norėdami peržiūrėti visas sąskaitas faktūras',
+
+ 'status' => [
+ 'draft' => 'Juodraštis',
+ 'sent' => 'Išsiųsta',
+ 'viewed' => 'Peržiūrėta',
+ 'approved' => 'Patvirtinta',
+ 'partial' => 'Dalinis',
+ 'paid' => 'Apmokėta',
+ ],
+
+ 'messages' => [
+ 'email_sent' => 'Sąskaitą-faktūrą išsiųsta sėkmingai!',
+ 'marked_sent' => 'SF pažymėta kaip išsiųsta sėkmingai!',
+ 'email_required' => 'Klientas neturi el. pašto!',
+ 'draft' => 'Tai yra JUODRAŠTINĖ sąskaita ir ji bus įtraukta į grafikus po to kai bus išsiųsta.',
+
+ 'status' => [
+ 'created' => 'Sukurta :date',
+ 'send' => [
+ 'draft' => 'Neišsiųsta',
+ 'sent' => 'Išsiųsta :date',
+ ],
+ 'paid' => [
+ 'await' => 'Laukiama apmokėjimo',
+ ],
+ ],
+ ],
+
+ 'notification' => [
+ 'message' => 'Jūs gavote šį laišką, nes :customer jums išrašė sąskaitą už :amount.',
+ 'button' => 'Apmokėti dabar',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/items.php b/resources/lang/lt-LT/items.php
new file mode 100644
index 000000000..c4229e72b
--- /dev/null
+++ b/resources/lang/lt-LT/items.php
@@ -0,0 +1,18 @@
+ 'Kiekis|Kiekiai',
+ 'sales_price' => 'Pardavimo kaina',
+ 'purchase_price' => 'Pirkimo kaina',
+ 'sku' => 'Prekės kodas',
+
+ 'notification' => [
+ 'message' => [
+ 'reminder' => 'Jūs gavote šį laišką, nes :name liko tik :quantity vnt.',
+ 'out_of_stock' => 'Jūs gavote šį laišką, nes baigiasi :name likutis.',
+ ],
+ 'button' => 'Peržiūrėti dabar',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/messages.php b/resources/lang/lt-LT/messages.php
new file mode 100644
index 000000000..2e1e7038e
--- /dev/null
+++ b/resources/lang/lt-LT/messages.php
@@ -0,0 +1,32 @@
+ [
+ 'added' => ':type pridėtas!',
+ 'updated' => ':type atnaujintas!',
+ 'deleted' => ':type ištrintas!',
+ 'duplicated' => ':type duplikuotas!',
+ 'imported' => ':type importuotas!',
+ 'enabled' => ':type įjungtas!',
+ 'disabled' => ':type išjungtas!',
+ ],
+
+ 'error' => [
+ 'over_payment' => 'Klaida: Apmokėjimo būdas nepridėtas! Jūsų įvesta suma viršija :amount',
+ 'not_user_company' => 'Klaida: Jūs neturite teisės valdyti šios kompanijos!',
+ 'customer' => 'Klaida: Vartotojas nebuvo sukurtas! :name jau naudoja šį el. pašto adresą.',
+ 'no_file' => 'Klaida: Nepasirinktas failas!',
+ 'last_category' => 'Klaida: Negalite ištrinti paskutinės :type kategorijos!',
+ 'invalid_token' => 'Klaida: Neteisingas raktas!',
+ 'import_column' => 'Klaida: :message :sheet lape. Eilutė: :line.',
+ 'import_sheet' => 'Klaida: Lapo pavadinimas neteisingas Peržiūrėkite pavyzdį.',
+ ],
+
+ 'warning' => [
+ 'deleted' => 'Negalima ištrinti :name , nes jis yra susijęs su :text.',
+ 'disabled' => 'Negalima išjungti :name , nes jis yra susijęs su :text.',
+ 'disable_code' => 'Įspėjimas: Negalima išjungti arba pakeisti valiutos :name , nes ji susijusi su :text.',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/modules.php b/resources/lang/lt-LT/modules.php
new file mode 100644
index 000000000..511eb8a5f
--- /dev/null
+++ b/resources/lang/lt-LT/modules.php
@@ -0,0 +1,80 @@
+ 'API raktas',
+ 'api_token' => 'Raktas',
+ 'my_apps' => 'Mano programėlės',
+ 'top_paid' => 'Geriausios mokamos',
+ 'new' => 'Nauji',
+ 'top_free' => 'Geriausios nemokamos',
+ 'free' => 'NEMOKAMOS',
+ 'search' => 'Paieška',
+ 'install' => 'Įrašyti',
+ 'buy_now' => 'Pirkti dabar',
+ 'token_link' => 'Spauskite čia , kad gautumėte savo API raktą.',
+ 'no_apps' => 'Nėra programėlių šioje kategorijoje.',
+ 'developer' => 'Ar esate kūrėjas? Čia galite sužinoti, kaip sukurti programėlę ir pradėti pardavinėti šiandien!',
+
+ 'recommended_apps' => 'Rekomenduojamos programėlės',
+
+ 'about' => 'Apie',
+
+ 'added' => 'Pridėta',
+ 'updated' => 'Atnaujinta',
+ 'compatibility' => 'Suderinamumas',
+
+ 'installed' => ':module įrašytas',
+ 'uninstalled' => ':module ištrintas',
+ //'updated' => ':module updated',
+ 'enabled' => ':module įjungtas',
+ 'disabled' => ':module įšjungtas',
+
+ 'tab' => [
+ 'installation' => 'Įrašymas',
+ 'faq' => 'DUK',
+ 'changelog' => 'Pakeitimų sąrašas',
+ 'reviews' => 'Atsiliepimai',
+ ],
+
+ 'installation' => [
+ 'header' => 'Įrašymas',
+ 'download' => 'Parsisiunčiamas :module failas.',
+ 'unzip' => 'Išskleidžiami :module failai.',
+ 'file_copy' => 'Kopijuojami :module failai.',
+ 'migrate' => 'Įrašomi :module atnaujinimai.',
+ 'finish' => 'Atnaujinimai įrašyti. Jūs būsite nukreipti į Atnaujinimų Centrą.',
+ 'install' => 'Įrašomi :module failai.',
+ ],
+
+ 'errors' => [
+ 'download' => 'Negalima parsisiųsti :module!',
+ 'upload' => 'Negalima įrašyti parsiųsto modulio :module!',
+ 'unzip' => 'Nagelima išpakuoti (unzip) :module!',
+ 'file_copy' => 'Negalima kopijuoti :module failų!',
+ 'migrate' => ':module migracija sugadinta!',
+ 'migrate core' => ':module yra naujausios versijos.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Įrašytas',
+ ],
+
+ 'button' => [
+ 'uninstall' => 'Ištrinti',
+ 'disable' => 'Išjungti',
+ 'enable' => 'Įjungti',
+ ],
+
+ 'my' => [
+ 'purchased' => 'Nupirkta',
+ 'installed' => 'Įrašyta',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Pridėti apžvalgą'
+ ],
+ 'na' => 'Nėra apžvalgų.'
+ ]
+];
diff --git a/resources/lang/lt-LT/notifications.php b/resources/lang/lt-LT/notifications.php
new file mode 100644
index 000000000..75e6c91fb
--- /dev/null
+++ b/resources/lang/lt-LT/notifications.php
@@ -0,0 +1,10 @@
+ 'Oi!',
+ 'hello' => 'Sveiki!',
+ 'salutation' => 'Linkėjimai, :company_name',
+ 'subcopy' => 'Jei negalite paspausti ":text" nuorodos, nukopijuokite adresą ir nueikite į jį naršyklėje: [:url](:url)',
+
+];
diff --git a/resources/lang/lt-LT/pagination.php b/resources/lang/lt-LT/pagination.php
new file mode 100644
index 000000000..a69c048e3
--- /dev/null
+++ b/resources/lang/lt-LT/pagination.php
@@ -0,0 +1,9 @@
+ '« Ankstesnis',
+ 'next' => 'Sekantis »',
+ 'showing' => 'Rodoma nuo :first iki :last iš :total :type',
+
+];
diff --git a/resources/lang/lt-LT/passwords.php b/resources/lang/lt-LT/passwords.php
new file mode 100644
index 000000000..4fb2c8538
--- /dev/null
+++ b/resources/lang/lt-LT/passwords.php
@@ -0,0 +1,22 @@
+ 'Slaptažodžiai turi būti bent šešių simbolių ir sutapti.',
+ 'reset' => 'Slaptažodis pakeistas!',
+ 'sent' => 'Slaptažodžio keitimo nuoroda išsiųsta!',
+ 'token' => 'Šis slaptažodžio atnaujinimas negaliojantis.',
+ 'user' => "Vartotojas su tokiu el. pašu nerastas.",
+
+];
diff --git a/resources/lang/lt-LT/reconciliations.php b/resources/lang/lt-LT/reconciliations.php
new file mode 100644
index 000000000..38d7febb2
--- /dev/null
+++ b/resources/lang/lt-LT/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Galutinis likutis',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'Operacijos',
+ 'start_date' => 'Pradžios data',
+ 'end_date' => 'Pabaigos data',
+ 'cleared_amount' => 'Cleared Amount',
+ 'deposit' => 'Deposit',
+ 'withdrawal' => 'Withdrawal',
+
+];
diff --git a/resources/lang/lt-LT/recurring.php b/resources/lang/lt-LT/recurring.php
new file mode 100644
index 000000000..491cced55
--- /dev/null
+++ b/resources/lang/lt-LT/recurring.php
@@ -0,0 +1,20 @@
+ 'Pasikartojantis',
+ 'every' => 'Kiekvieną',
+ 'period' => 'Periodas',
+ 'times' => 'Kartus',
+ 'daily' => 'Kasdien',
+ 'weekly' => 'Kas savaitę',
+ 'monthly' => 'Kas mėnesį',
+ 'yearly' => 'Kasmet',
+ 'custom' => 'Pasirinktinis',
+ 'days' => 'Diena(os)',
+ 'weeks' => 'Savaite(ės)',
+ 'months' => 'Mėnuo(iai)',
+ 'years' => 'Metai(s)',
+ 'message' => 'Tai pasikartojanti :type ir kita :type bus automatiškai sugeneruota :data',
+
+];
diff --git a/resources/lang/lt-LT/reports.php b/resources/lang/lt-LT/reports.php
new file mode 100644
index 000000000..18653f3c1
--- /dev/null
+++ b/resources/lang/lt-LT/reports.php
@@ -0,0 +1,30 @@
+ 'Šiais metais',
+ 'previous_year' => 'Ankstesniais metais',
+ 'this_quarter' => 'Šį ketvirtį',
+ 'previous_quarter' => 'Praėjusį ketvirtį',
+ 'last_12_months' => 'Per paskutinius 12 mėnesių',
+ 'profit_loss' => 'Pelnas ir nuostoliai',
+ 'gross_profit' => 'Grynasis pelnas',
+ 'net_profit' => 'Pelnas prieš mokesčius',
+ 'total_expenses' => 'Iš viso išlaidų',
+ 'net' => 'NET',
+
+ 'summary' => [
+ 'income' => 'Pajamų suvestinė',
+ 'expense' => 'Išlaidų suvestinė',
+ 'income_expense' => 'Pajamos / išlaidos',
+ 'tax' => 'Mokesčių suvestinė',
+ ],
+
+ 'quarter' => [
+ '1' => 'Sau-Kov',
+ '2' => 'Bal-Bir',
+ '3' => 'Lie-Rugs',
+ '4' => 'Spa-Gruo',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/settings.php b/resources/lang/lt-LT/settings.php
new file mode 100644
index 000000000..e562e832a
--- /dev/null
+++ b/resources/lang/lt-LT/settings.php
@@ -0,0 +1,102 @@
+ [
+ 'name' => 'Pavadinimas',
+ 'email' => 'El. paštas',
+ 'phone' => 'Telefonas',
+ 'address' => 'Adresas',
+ 'logo' => 'Logotipas',
+ ],
+ 'localisation' => [
+ 'tab' => 'Lokalizacija',
+ 'date' => [
+ 'format' => 'Datos formatas',
+ 'separator' => 'Datos skirtukas',
+ 'dash' => 'Brūkšnelis (-)',
+ 'dot' => 'Taškas (.)',
+ 'comma' => 'Kablelis (,)',
+ 'slash' => 'Pasvirasis brūkšnys (/)',
+ 'space' => 'Tarpas ( )',
+ ],
+ 'timezone' => 'Laiko juosta',
+ 'percent' => [
+ 'title' => 'Procentų (%) Pozicija',
+ 'before' => 'Prieš skaičių',
+ 'after' => 'Po skaičiaus',
+ ],
+ ],
+ 'invoice' => [
+ 'tab' => 'Sąskaita faktūra',
+ 'prefix' => 'Sąskaitos serija',
+ 'digit' => 'Skaitmenų kiekis',
+ 'next' => 'Sekantis numeris',
+ 'logo' => 'Logotipas',
+ 'custom' => 'Pasirinktinis',
+ 'item_name' => 'Elemento pavadinimas',
+ 'item' => 'Elementai',
+ 'product' => 'Produktai',
+ 'service' => 'Paslaugos',
+ 'price_name' => 'Kainos pavadinimas',
+ 'price' => 'Kaina',
+ 'rate' => 'Kursas',
+ 'quantity_name' => 'Kiekio pavadinimas',
+ 'quantity' => 'Kiekis',
+ ],
+ 'default' => [
+ 'tab' => 'Numatytieji',
+ 'account' => 'Numatytoji įmonė',
+ 'currency' => 'Numatytoji valiuta',
+ 'tax' => 'Numatytasis mokesčių tarifas',
+ 'payment' => 'Numatytasis mokėjimo būdas',
+ 'language' => 'Numatytoji kalba',
+ ],
+ 'email' => [
+ 'protocol' => 'Protokolas',
+ 'php' => 'PHP Mail',
+ 'smtp' => [
+ 'name' => 'SMTP',
+ 'host' => 'SMTP adresas',
+ 'port' => 'SMTP portas',
+ 'username' => 'SMTP prisijungimo vardas',
+ 'password' => 'SMTP slaptažodis',
+ 'encryption' => 'SMTP saugumas',
+ 'none' => 'Joks',
+ ],
+ 'sendmail' => 'Sendmail',
+ 'sendmail_path' => 'Sendmail kelias',
+ 'log' => 'Prisijungti el. Paštu',
+ ],
+ 'scheduling' => [
+ 'tab' => 'Planavimas',
+ 'send_invoice' => 'Siųsti SF priminimą',
+ 'invoice_days' => 'Siųsti pavėlavus',
+ 'send_bill' => 'Siųsti sąskaitos priminimą',
+ 'bill_days' => 'Siųsti prieš pavėlavimą',
+ 'cron_command' => 'Cron komanda',
+ 'schedule_time' => 'Paleisti valandą',
+ 'send_item_reminder'=> 'Siųsti priminimą',
+ 'item_stocks' => 'Siųsti kai atsiras prekių',
+ ],
+ 'appearance' => [
+ 'tab' => 'Išvaizda',
+ 'theme' => 'Tema',
+ 'light' => 'Šviesi',
+ 'dark' => 'Tamsi',
+ 'list_limit' => 'Įrašų puslapyje',
+ 'use_gravatar' => 'Naudoti Gravatar',
+ ],
+ 'system' => [
+ 'tab' => 'Sistema',
+ 'session' => [
+ 'lifetime' => 'Sesijos galiojimo laikas (min)',
+ 'handler' => 'Sesijos valdiklis',
+ 'file' => 'Failas',
+ 'database' => 'Duomenų bazė',
+ ],
+ 'file_size' => 'Maksimalus failo dydis (MB)',
+ 'file_types' => 'Leidžiami failų tipai',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/taxes.php b/resources/lang/lt-LT/taxes.php
new file mode 100644
index 000000000..bc302ea0b
--- /dev/null
+++ b/resources/lang/lt-LT/taxes.php
@@ -0,0 +1,11 @@
+ 'Mokestis',
+ 'rate_percent' => 'Mokestis (%)',
+ 'normal' => 'Normalus',
+ 'inclusive' => 'Imtinai',
+ 'compound' => 'Compound',
+
+];
diff --git a/resources/lang/lt-LT/transfers.php b/resources/lang/lt-LT/transfers.php
new file mode 100644
index 000000000..a9d520a57
--- /dev/null
+++ b/resources/lang/lt-LT/transfers.php
@@ -0,0 +1,12 @@
+ 'Iš Sąskaitos',
+ 'to_account' => 'Į Sąskaitą',
+
+ 'messages' => [
+ 'delete' => 'Iš :from į :to (:amount)',
+ ],
+
+];
diff --git a/resources/lang/lt-LT/updates.php b/resources/lang/lt-LT/updates.php
new file mode 100644
index 000000000..86c6150ec
--- /dev/null
+++ b/resources/lang/lt-LT/updates.php
@@ -0,0 +1,15 @@
+ 'Versija',
+ 'latest_version' => 'Naujausia versija',
+ 'update' => 'Atnaujinti Akaunting į :version versiją',
+ 'changelog' => 'Pakeitimų sąrašas',
+ 'check' => 'Tikrinti',
+ 'new_core' => 'Yra naujesnė Akaunting versija.',
+ 'latest_core' => 'Sveikiname! Jūs turite naujausią Akaunting versiją. Tolimesni atnaujinimai bus įrašomi automatiškai.',
+ 'success' => 'Atnaujinimas pavyko sėkmingai.',
+ 'error' => 'Įvyko klaida atnaujinant, prašome bandyti dar kartą.',
+
+];
diff --git a/resources/lang/lt-LT/validation.php b/resources/lang/lt-LT/validation.php
new file mode 100644
index 000000000..010012501
--- /dev/null
+++ b/resources/lang/lt-LT/validation.php
@@ -0,0 +1,121 @@
+ 'Laukas :attribute turi būti priimta.',
+ 'active_url' => 'Laukas :attribute nėra galiojantis internetinis adresas.',
+ 'after' => 'Lauko :attribute reikšmė turi būti po :date datos.',
+ 'after_or_equal' => ':Attribute privalo būti data lygi arba vėlesnė už :date.',
+ 'alpha' => 'Laukas :attribute gali turėti tik raides.',
+ 'alpha_dash' => 'Laukas :attribute gali turėti tik raides, skaičius ir brūkšnelius.',
+ 'alpha_num' => 'Laukas :attribute gali turėti tik raides ir skaičius.',
+ 'array' => 'Laukas :attribute turi būti masyvas.',
+ 'before' => 'Laukas :attribute turi būti data prieš :date.',
+ 'before_or_equal' => ':Attribute privalo būti data ankstenė arba lygi :date.',
+ 'between' => [
+ 'numeric' => 'Lauko :attribute reikšmė turi būti tarp :min ir :max.',
+ 'file' => 'Failo dydis lauke :attribute turi būti tarp :min ir :max kilobaitų.',
+ 'string' => 'Simbolių skaičius lauke :attribute turi būti tarp :min ir :max.',
+ 'array' => 'Elementų skaičius lauke :attribute turi turėti nuo :min iki :max.',
+ ],
+ 'boolean' => 'Lauko reikšmė :attribute turi būti \'taip\' arba \'ne\'.',
+ 'confirmed' => 'Lauko :attribute patvirtinimas nesutampa.',
+ 'date' => 'Lauko :attribute reikšmė nėra galiojanti data.',
+ 'date_format' => 'Lauko :attribute reikšmė neatitinka formato :format.',
+ 'different' => 'Laukų :attribute ir :other reikšmės turi skirtis.',
+ 'digits' => 'Laukas :attribute turi būti sudarytas iš :digits skaitmenų.',
+ 'digits_between' => 'Laukas :attribute tuti turėti nuo :min iki :max skaitmenų.',
+ 'dimensions' => 'Lauke :attribute įkeltas paveiksliukas neatitinka išmatavimų reikalavimo.',
+ 'distinct' => 'Laukas :attribute pasikartoja.',
+ 'email' => 'Lauko :attribute reikšmė turi būti galiojantis el. pašto adresas.',
+ 'exists' => 'Pasirinkta negaliojanti :attribute reikšmė.',
+ 'file' => ':Attribute privalo būti failas.',
+ 'filled' => 'Laukas :attribute turi būti užpildytas.',
+ 'image' => 'Lauko :attribute reikšmė turi būti paveikslėlis.',
+ 'in' => 'Pasirinkta negaliojanti :attribute reikšmė.',
+ 'in_array' => 'Laukas :attribute neegzistuoja :other lauke.',
+ 'integer' => 'Lauko :attribute reikšmė turi būti veikasis skaičius.',
+ 'ip' => 'Lauko :attribute reikšmė turi būti galiojantis IP adresas.',
+ 'json' => 'Lauko :attribute reikšmė turi būti JSON tekstas.',
+ 'max' => [
+ 'numeric' => 'Lauko :attribute reikšmė negali būti didesnė nei :max.',
+ 'file' => 'Failo dydis lauke :attribute reikšmė negali būti didesnė nei :max kilobaitų.',
+ 'string' => 'Simbolių kiekis lauke :attribute reikšmė negali būti didesnė nei :max simbolių.',
+ 'array' => 'Elementų kiekis lauke :attribute negali turėti daugiau nei :max elementų.',
+ ],
+ 'mimes' => 'Lauko reikšmė :attribute turi būti failas vieno iš sekančių tipų: :values.',
+ 'mimetypes' => 'Lauko reikšmė :attribute turi būti failas vieno iš sekančių tipų: :values.',
+ 'min' => [
+ 'numeric' => 'Lauko :attribute reikšmė turi būti ne mažesnė nei :min.',
+ 'file' => 'Failo dydis lauke :attribute turi būti ne mažesnis nei :min kilobaitų.',
+ 'string' => 'Simbolių kiekis lauke :attribute turi būti ne mažiau nei :min.',
+ 'array' => 'Elementų kiekis lauke :attribute turi būti ne mažiau nei :min.',
+ ],
+ 'not_in' => 'Pasirinkta negaliojanti reikšmė :attribute.',
+ 'numeric' => 'Lauko :attribute reikšmė turi būti skaičius.',
+ 'present' => 'Laukas :attribute turi egzistuoti.',
+ 'regex' => 'Negaliojantis lauko :attribute formatas.',
+ 'required' => 'Privaloma užpildyti lauką :attribute.',
+ 'required_if' => 'Privaloma užpildyti lauką :attribute kai :other yra :value.',
+ 'required_unless' => 'Laukas :attribute yra privalomas, nebent :other yra tarp :values reikšmių.',
+ 'required_with' => 'Privaloma užpildyti lauką :attribute kai pateikta :values.',
+ 'required_with_all' => 'Privaloma užpildyti lauką :attribute kai pateikta :values.',
+ 'required_without' => 'Privaloma užpildyti lauką :attribute kai nepateikta :values.',
+ 'required_without_all' => 'Privaloma užpildyti lauką :attribute kai nepateikta nei viena iš reikšmių :values.',
+ 'same' => 'Laukai :attribute ir :other turi sutapti.',
+ 'size' => [
+ 'numeric' => 'Lauko :attribute reikšmė turi būti :size.',
+ 'file' => 'Failo dydis lauke :attribute turi būti :size kilobaitai.',
+ 'string' => 'Simbolių skaičius lauke :attribute turi būti :size.',
+ 'array' => 'Elementų kiekis lauke :attribute turi būti :size.',
+ ],
+ 'string' => 'Laukas :attribute turi būti tekstinis.',
+ 'timezone' => 'Lauko :attribute reikšmė turi būti galiojanti laiko zona.',
+ 'unique' => 'Tokia :attribute reikšmė jau pasirinkta.',
+ 'uploaded' => 'Nepavyko įkelti :attribute.',
+ 'url' => 'Negaliojantis lauko :attribute formatas.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'Pasirinktinis pranešimas',
+ ],
+ 'invalid_currency' => ':Attribute kodas neteisingas.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/lv-LV/bills.php b/resources/lang/lv-LV/bills.php
index 177fed8d1..73ea68ad0 100644
--- a/resources/lang/lv-LV/bills.php
+++ b/resources/lang/lv-LV/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Rēķina saņemšana ir apstiprināta!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/lv-LV/customers.php b/resources/lang/lv-LV/customers.php
index 56efaf987..cd6676a10 100644
--- a/resources/lang/lv-LV/customers.php
+++ b/resources/lang/lv-LV/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Lietotājs ar šādu e-pasta adresi jau eksistē.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/lv-LV/footer.php b/resources/lang/lv-LV/footer.php
index ac11e2f6d..a0eb62db8 100644
--- a/resources/lang/lv-LV/footer.php
+++ b/resources/lang/lv-LV/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versija',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Bezmaksas grāmatvedības programma',
];
diff --git a/resources/lang/lv-LV/general.php b/resources/lang/lv-LV/general.php
index db48fc13e..99d747f5c 100644
--- a/resources/lang/lv-LV/general.php
+++ b/resources/lang/lv-LV/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Skaitļi|Skaitļi',
'statuses' => 'Statusi|Statusi',
'others' => 'Citi|Citi',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Sākums',
'banking' => 'Banka',
@@ -81,6 +85,7 @@ return [
'color' => 'Krāsa',
'save' => 'Saglabāt',
'cancel' => 'Atcelt',
+ 'loading' => 'Loading...',
'from' => 'No',
'to' => 'Kam',
'print' => 'Drukāt',
@@ -101,12 +106,27 @@ return [
'partially' => 'Daļēji',
'partially_paid' => 'Daļēji apmaksāts',
'export' => 'Eksportēt',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Iespējot',
'disable' => 'Atspējot',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Jauns :type',
'edit' => 'Redigēts :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Fails nav izvēlēts...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/lv-LV/header.php b/resources/lang/lv-LV/header.php
index 510917f95..5a4cb170d 100644
--- a/resources/lang/lv-LV/header.php
+++ b/resources/lang/lv-LV/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} Noliktavā trūkst :count preces |[2,*] Noliktavā trūkst :count preču',
'view_all' => 'Skatīt visus'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/lv-LV/invoices.php b/resources/lang/lv-LV/invoices.php
index ee5d8b441..21f3cf07e 100644
--- a/resources/lang/lv-LV/invoices.php
+++ b/resources/lang/lv-LV/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Atzīmēt kā nosūtītu',
'download_pdf' => 'Lejupielādēt PDF',
'send_mail' => 'Sūtīt e-pastu',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Sagatave',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Rēķins veiksmīgi nosūtīts uz e-pastu!',
'marked_sent' => 'Rēķins atzīmēts kā nosūtīts!',
'email_required' => 'Pircējam nav norādīta e-pasta adrese!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/lv-LV/items.php b/resources/lang/lv-LV/items.php
index d10ee85ba..313486e38 100644
--- a/resources/lang/lv-LV/items.php
+++ b/resources/lang/lv-LV/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Kods',
'notification' => [
- 'message' => 'Jūs saņemāt šo e-pastu, jo precei :name noliktavā beidzas atlikums.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Skatīt tagad',
],
diff --git a/resources/lang/lv-LV/messages.php b/resources/lang/lv-LV/messages.php
index d1fe93c5f..925ff3489 100644
--- a/resources/lang/lv-LV/messages.php
+++ b/resources/lang/lv-LV/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type atspējots!',
],
'error' => [
- 'over_payment' => 'Kļūda: Maksājums nav pievienots! Nepietiekoša summa.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Kļūda: Jums nav tiesības strādāt ar šo uzņēmumu!',
'customer' => 'Kļūda: Lietotājs nav izveidots! :name jau lieto šādu e-pasta adresi.',
'no_file' => 'Kļūda: Fails nav izvēlēts!',
diff --git a/resources/lang/lv-LV/modules.php b/resources/lang/lv-LV/modules.php
index 3beb981fc..63ff9c825 100644
--- a/resources/lang/lv-LV/modules.php
+++ b/resources/lang/lv-LV/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Šajā kategorijā programmu vēl nav.',
'developer' => 'Vai jūs esat izstrādātājs? Šeit jūs varat iemācīties, kā veidot programmas un sākt tās pārdot!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Par',
'added' => 'Pievienots',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalācija',
'faq' => 'BUJ',
'changelog' => 'Izmaiņas',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Programmas instalācija',
'download' => 'Lejupielādēju :module.',
'unzip' => 'Atarhivēju :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Instalēju :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Instalēts',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Nopirkts',
'installed' => 'Instalēts',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/lv-LV/reconciliations.php b/resources/lang/lv-LV/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/lv-LV/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/lv-LV/settings.php b/resources/lang/lv-LV/settings.php
index a7282c971..c3f549f41 100644
--- a/resources/lang/lv-LV/settings.php
+++ b/resources/lang/lv-LV/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Rēķina numura garums',
'next' => 'Nākamais numurs',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Noklusētie iestatījumi',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Sūtīt dienas pirms termiņa',
'cron_command' => 'Cron komanda',
'schedule_time' => 'Stunda kurā sūtīt',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Izskats',
diff --git a/resources/lang/lv-LV/validation.php b/resources/lang/lv-LV/validation.php
index 290e6137b..3f80618a3 100644
--- a/resources/lang/lv-LV/validation.php
+++ b/resources/lang/lv-LV/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'custom-message',
],
'invalid_currency' => ':attribute kods nav derīgs.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/mk-MK/accounts.php b/resources/lang/mk-MK/accounts.php
new file mode 100644
index 000000000..a46958c60
--- /dev/null
+++ b/resources/lang/mk-MK/accounts.php
@@ -0,0 +1,14 @@
+ 'Име на сметка',
+ 'number' => 'Број',
+ 'opening_balance' => 'Почетно салдо',
+ 'current_balance' => 'Тековна состојба',
+ 'bank_name' => 'Име на банката',
+ 'bank_phone' => 'Телефон на банката',
+ 'bank_address' => 'Адреса на банката',
+ 'default_account' => 'Основна сметка',
+
+];
diff --git a/resources/lang/mk-MK/auth.php b/resources/lang/mk-MK/auth.php
new file mode 100644
index 000000000..82f886a5d
--- /dev/null
+++ b/resources/lang/mk-MK/auth.php
@@ -0,0 +1,39 @@
+ 'Профил',
+ 'logout' => 'Одјави се',
+ 'login' => 'Најави се',
+ 'login_to' => 'Најави се за да ја започнеш сесијата',
+ 'remember_me' => 'Запомни ме',
+ 'forgot_password' => 'Заборавена лозинка',
+ 'reset_password' => 'Ресетирај лозинка',
+ 'enter_email' => 'Внеси ја твојата е-маил адреса',
+ 'current_email' => 'Е-маил адреса',
+ 'reset' => 'Ресетирај',
+ 'never' => 'Никогаш',
+
+ 'password' => [
+ 'current' => 'Лозинка',
+ 'current_confirm' => 'Потврдете ја лозинката',
+ 'new' => 'Нова лозинка',
+ 'new_confirm' => 'Потврдете ја новата лозинка',
+ ],
+
+ 'error' => [
+ 'self_delete' => 'Грешка: Неможете да се избришете самите!',
+ 'no_company' => 'Грешка: Ниедна компанија не е додадена во вашиот профил. Ве молиме контактирајте го системскиот администратор.',
+ ],
+
+ 'failed' => 'Вашите детали не се совпаѓаат со нашите записи.',
+ 'disabled' => 'Овој профил е оневозможен. Ве молиме, контактирајте го системскиот администратор.',
+ 'throttle' => 'Премногу обиди за најава. Ве молиме пробајте пак за :секунди секунди.',
+
+ 'notification' => [
+ 'message_1' => 'Ја добивте оваа е-маил порака затоа што до нас пристигна барање за ресетирање на вашата лозинка.',
+ 'message_2' => 'Доколку вие не побаравте ресетирање на вашата лозинка, дополнителна акција не е потребна.',
+ 'button' => 'Ресетирај лозинка',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/bills.php b/resources/lang/mk-MK/bills.php
new file mode 100644
index 000000000..15d130d67
--- /dev/null
+++ b/resources/lang/mk-MK/bills.php
@@ -0,0 +1,58 @@
+ 'Број на сметка',
+ 'bill_date' => 'Датум на сметка',
+ 'total_price' => 'Вкупна цена',
+ 'due_date' => 'Доспева на',
+ 'order_number' => 'Број на нарачка',
+ 'bill_from' => 'Сметка од',
+
+ 'quantity' => 'Количина',
+ 'price' => 'Цена',
+ 'sub_total' => 'Меѓузбир',
+ 'discount' => 'Попуст',
+ 'tax_total' => 'Вкупно данок',
+ 'total' => 'Вкупно',
+
+ 'item_name' => 'Име / Имиња',
+
+ 'show_discount' => ':discount% Попуст',
+ 'add_discount' => 'Додади попуст',
+ 'discount_desc' => 'од меѓузбир',
+
+ 'payment_due' => 'Доспева за плаќање',
+ 'amount_due' => 'Износ за плаќање',
+ 'paid' => 'Платено',
+ 'histories' => 'Историја',
+ 'payments' => 'Плаќања',
+ 'add_payment' => 'Додади плаќање',
+ 'mark_received' => 'Означи како примена',
+ 'download_pdf' => 'Превземи PDF',
+ 'send_mail' => 'Прати е-маил',
+
+ 'status' => [
+ 'draft' => 'Неиспратено',
+ 'received' => 'Примено',
+ 'partial' => 'Некомплетно',
+ 'paid' => 'Платено',
+ ],
+
+ 'messages' => [
+ 'received' => 'Сметката е означена како примена успешно!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
+ ],
+
+];
diff --git a/resources/lang/mk-MK/companies.php b/resources/lang/mk-MK/companies.php
new file mode 100644
index 000000000..cea03a92f
--- /dev/null
+++ b/resources/lang/mk-MK/companies.php
@@ -0,0 +1,13 @@
+ 'Домен',
+ 'logo' => 'Лого',
+ 'manage' => 'Уреди компании',
+ 'all' => 'Сите компании',
+ 'error' => [
+ 'delete_active' => 'Грешка: Неможе да се избрише активната компанија, ве молиме, прво променете ја!',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/currencies.php b/resources/lang/mk-MK/currencies.php
new file mode 100644
index 000000000..6170fce05
--- /dev/null
+++ b/resources/lang/mk-MK/currencies.php
@@ -0,0 +1,18 @@
+ 'Код',
+ 'rate' => 'Стапка',
+ 'default' => 'Основна валута',
+ 'decimal_mark' => 'Децимален знак',
+ 'thousands_separator' => 'Сепаратор за илјада',
+ 'precision' => 'Прецизност',
+ 'symbol' => [
+ 'symbol' => 'Симбол',
+ 'position' => 'Позиција на симболот',
+ 'before' => 'Пред износ',
+ 'after' => 'После износ',
+ ]
+
+];
diff --git a/resources/lang/mk-MK/customers.php b/resources/lang/mk-MK/customers.php
new file mode 100644
index 000000000..a9ec71758
--- /dev/null
+++ b/resources/lang/mk-MK/customers.php
@@ -0,0 +1,16 @@
+ 'Дозволете најавување?',
+ 'user_created' => 'Генерирано од корисник',
+
+ 'error' => [
+ 'email' => 'Оваа е-маил адреса е зафатена'
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
+];
diff --git a/resources/lang/mk-MK/dashboard.php b/resources/lang/mk-MK/dashboard.php
new file mode 100644
index 000000000..3e2270cdd
--- /dev/null
+++ b/resources/lang/mk-MK/dashboard.php
@@ -0,0 +1,24 @@
+ 'Вкупно приходи',
+ 'receivables' => 'Побарувања',
+ 'open_invoices' => 'Отворени фактури',
+ 'overdue_invoices' => 'Доспеани фактури',
+ 'total_expenses' => 'Вкупно трошоци',
+ 'payables' => 'Обврски',
+ 'open_bills' => 'Отворени сметки',
+ 'overdue_bills' => 'Доспеани сметки',
+ 'total_profit' => 'Вкупно профит',
+ 'open_profit' => 'Отворен профит',
+ 'overdue_profit' => 'Доспеан профит',
+ 'cash_flow' => 'Тек на готовина',
+ 'no_profit_loss' => 'Без загуба на профит',
+ 'incomes_by_category' => 'Приход по Категорија',
+ 'expenses_by_category' => 'Трошоци по Категорија',
+ 'account_balance' => 'Состјба на сметка',
+ 'latest_incomes' => 'Последни приходи',
+ 'latest_expenses' => 'Последни трошоци',
+
+];
diff --git a/resources/lang/mk-MK/demo.php b/resources/lang/mk-MK/demo.php
new file mode 100644
index 000000000..1ae13ef84
--- /dev/null
+++ b/resources/lang/mk-MK/demo.php
@@ -0,0 +1,16 @@
+ 'Готовина',
+ 'categories_deposit' => 'Депозит',
+ 'categories_sales' => 'Продажби',
+ 'currencies_usd' => 'Долар',
+ 'currencies_eur' => 'Евро',
+ 'currencies_gbp' => 'Фунти',
+ 'currencies_try' => 'Турски лири',
+ 'taxes_exempt' => 'Ослободен од данок',
+ 'taxes_normal' => 'Нормална стапка на данок',
+ 'taxes_sales' => 'Данок на продажба',
+
+];
diff --git a/resources/lang/mk-MK/footer.php b/resources/lang/mk-MK/footer.php
new file mode 100644
index 000000000..471b3d37c
--- /dev/null
+++ b/resources/lang/mk-MK/footer.php
@@ -0,0 +1,10 @@
+ 'Верзија',
+ 'powered' => 'Овозможенo од Akaunting',
+ 'link' => 'https://akaunting.com',
+ 'software' => 'Бесплатен сметководствен софтвер',
+
+];
diff --git a/resources/lang/mk-MK/general.php b/resources/lang/mk-MK/general.php
new file mode 100644
index 000000000..c3249c2b0
--- /dev/null
+++ b/resources/lang/mk-MK/general.php
@@ -0,0 +1,148 @@
+ 'Опис|Описи',
+ 'incomes' => 'Приход|Приходи',
+ 'invoices' => 'Фактура|Фактури',
+ 'revenues' => 'Добивки|Добивки',
+ 'customers' => 'Клиент|Клиенти',
+ 'expenses' => 'Трошок|Трошоци',
+ 'bills' => 'Сметка|Сметки',
+ 'payments' => 'Плаќање|Плаќања',
+ 'vendors' => 'Добавувач|Добавувачи',
+ 'accounts' => 'Акаунт|Акаунти',
+ 'transfers' => 'Трансфер|Трансфери',
+ 'transactions' => 'Трансакција|Трансакции',
+ 'reports' => 'Извештај|Извештаи',
+ 'settings' => 'Опција|Опции',
+ 'categories' => 'Категорија|Категории',
+ 'currencies' => 'Валута|Валути',
+ 'tax_rates' => 'Стапка на данок|Стапки на данок',
+ 'users' => 'Корисник|Корисници',
+ 'roles' => 'Улога|Улоги',
+ 'permissions' => 'Дозвола|Дозволи',
+ 'modules' => 'Апликација|Апликации',
+ 'companies' => 'Компанија|Компании',
+ 'profits' => 'Добивка|Добивки',
+ 'taxes' => 'Данок|Даноци',
+ 'logos' => 'Лого|Логоа',
+ 'pictures' => 'Слика|Слики',
+ 'types' => 'Тип|Типови',
+ 'payment_methods' => 'Метод на плаќање|Методи на плаќање',
+ 'compares' => 'Приход vs Трошок|Приходи vs Трошоци',
+ 'notes' => 'Белешка|Белешки',
+ 'totals' => 'Вкупно|Вкупно',
+ 'languages' => 'Јазични пакети',
+ 'updates' => 'Надградба|Надградби',
+ 'numbers' => 'Број|Броеви',
+ 'statuses' => 'Статус|Статуси',
+ 'others' => 'Друго| Друго',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
+
+ 'dashboard' => 'Контролна табла',
+ 'banking' => 'Банкарство',
+ 'general' => 'Општо',
+ 'no_records' => 'Бр. на записи',
+ 'date' => 'Дата',
+ 'amount' => 'Износ',
+ 'enabled' => 'Вклучено',
+ 'disabled' => 'Исклучено',
+ 'yes' => 'Да',
+ 'no' => 'Не',
+ 'na' => 'Н/А',
+ 'daily' => 'Дневно',
+ 'monthly' => 'Месечно',
+ 'quarterly' => 'Квартално',
+ 'yearly' => 'Годишно',
+ 'add' => 'Додади',
+ 'add_new' => 'Додади Нов',
+ 'show' => 'Прикажи',
+ 'edit' => 'Уреди',
+ 'delete' => 'Избриши',
+ 'send' => 'Испрати',
+ 'download' => 'Превземи',
+ 'delete_confirm' => 'Потврди бришење :name :type?',
+ 'name' => 'Име',
+ 'email' => 'Е-пошта',
+ 'tax_number' => 'Даночен број',
+ 'phone' => 'Телефон',
+ 'address' => 'Адреса',
+ 'website' => 'Веб страница',
+ 'actions' => 'Дејства',
+ 'description' => 'Опис',
+ 'manage' => 'Уреди',
+ 'code' => 'Код',
+ 'alias' => 'Прекар',
+ 'balance' => 'Состојба',
+ 'reference' => 'Референца',
+ 'attachment' => 'Прилог',
+ 'change' => 'Промени',
+ 'switch' => 'Префрли',
+ 'color' => 'Боја',
+ 'save' => 'Зачувај',
+ 'cancel' => 'Откажи',
+ 'loading' => 'Loading...',
+ 'from' => 'Од',
+ 'to' => 'До',
+ 'print' => 'Печати',
+ 'search' => 'Пребарување',
+ 'search_placeholder' => 'Почни да пребаруваш..',
+ 'filter' => 'Филтер',
+ 'help' => 'Помош',
+ 'all' => 'Сите',
+ 'all_type' => 'Сите :type',
+ 'upcoming' => 'Претстојни',
+ 'created' => 'Создадено',
+ 'id' => 'ID',
+ 'more_actions' => 'Повеќе акции',
+ 'duplicate' => 'Дупликат',
+ 'unpaid' => 'Неплатена',
+ 'paid' => 'Платено',
+ 'overdue' => 'Доспеано',
+ 'partially' => 'Некомплетно',
+ 'partially_paid' => 'Нецелосно платено',
+ 'export' => 'Експортирај',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
+ 'enable' => 'Овозможи',
+ 'disable' => 'Оневозможи',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
+
+ 'title' => [
+ 'new' => 'Нов :type',
+ 'edit' => 'Измени :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
+ ],
+
+ 'form' => [
+ 'enter' => 'Внеси :field',
+ 'select' => [
+ 'field' => '-Одбери :field-',
+ 'file' => 'Одбери фајл',
+ ],
+ 'no_file_selected' => 'Не е селектиран ниеден фајл...',
+ ],
+
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
+];
diff --git a/resources/lang/mk-MK/header.php b/resources/lang/mk-MK/header.php
new file mode 100644
index 000000000..fd6f0981d
--- /dev/null
+++ b/resources/lang/mk-MK/header.php
@@ -0,0 +1,16 @@
+ 'Промена на јазик',
+ 'last_login' => 'Последна најава :време',
+ 'notifications' => [
+ 'counter' => '{0} Немате известувања|{1} You have :count notification|[2,*] You have :count notifications',
+ 'overdue_invoices' => '{1} :count overdue invoice|[2,*] :count overdue invoices',
+ 'upcoming_bills' => '{1} :count upcoming bill|[2,*] :count upcoming bills',
+ 'items_stock' => '{1} :count item out of stock|[2,*] :count items out of stock',
+ 'view_all' => 'Види ги сите'
+ ],
+ 'docs_link' => 'https://akaunting.com/docs',
+
+];
diff --git a/resources/lang/mk-MK/import.php b/resources/lang/mk-MK/import.php
new file mode 100644
index 000000000..6cdff49bc
--- /dev/null
+++ b/resources/lang/mk-MK/import.php
@@ -0,0 +1,11 @@
+ 'Внеси',
+ 'title' => 'Внеси :type',
+ 'message' => 'Дозволени типови на фајлови: XLS, XLSX. Ве молиме, симнете го фајлот.
+
+',
+
+];
diff --git a/resources/lang/mk-MK/install.php b/resources/lang/mk-MK/install.php
new file mode 100644
index 000000000..c179477b8
--- /dev/null
+++ b/resources/lang/mk-MK/install.php
@@ -0,0 +1,44 @@
+ 'Следно',
+ 'refresh' => 'Освежи',
+
+ 'steps' => [
+ 'requirements' => 'Ве молиме контактирајте го вашиот хостинг провајдер за да ги отстраните грешките!',
+ 'language' => 'Чекор 1/3: Одберете јазик',
+ 'database' => 'Чекор 2/3: Поседувања на датабаза',
+ 'settings' => 'Чекор 3/3: Детали за компанија и Администратор',
+ ],
+
+ 'language' => [
+ 'select' => 'Одберете јазик',
+ ],
+
+ 'requirements' => [
+ 'enabled' => ':feature мора да биде овозможена!',
+ 'disabled' => ':feature мора да биде оневозможена!',
+ 'extension' => ':extension екстензијата мора да виде инсталирана и вчитана!',
+ 'directory' => ':directory директоријата мора да има привилегии 775!',
+ ],
+
+ 'database' => [
+ 'hostname' => 'Име на хостот',
+ 'username' => 'Корисничко име',
+ 'password' => 'Лозинка',
+ 'name' => 'База на податоци',
+ ],
+
+ 'settings' => [
+ 'company_name' => 'Име на компанија',
+ 'company_email' => 'Е-маил на компанијата',
+ 'admin_email' => 'Е-маил на Администраторот',
+ 'admin_password' => 'Лозинка на Администраторот',
+ ],
+
+ 'error' => [
+ 'connection' => 'Грешка: Прикачувањето кон поставената датабаза не е успешно! Ве молиме проверете ги деталите повторно.',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/invoices.php b/resources/lang/mk-MK/invoices.php
new file mode 100644
index 000000000..cfd63351f
--- /dev/null
+++ b/resources/lang/mk-MK/invoices.php
@@ -0,0 +1,68 @@
+ 'Број на Фактура',
+ 'invoice_date' => 'Датум на Фактура',
+ 'total_price' => 'Вкупна цена',
+ 'due_date' => 'Доспева на',
+ 'order_number' => 'Број на нарачка',
+ 'bill_to' => 'Фактурирај на',
+
+ 'quantity' => 'Количина',
+ 'price' => 'Цена',
+ 'sub_total' => 'Меѓузбир',
+ 'discount' => 'Попуст',
+ 'tax_total' => 'Вкупно данок',
+ 'total' => 'Вкупно',
+
+ 'item_name' => 'Име / Имиња',
+
+ 'show_discount' => ':discount% Попуст',
+ 'add_discount' => 'Додади попуст',
+ 'discount_desc' => 'од меѓузбир',
+
+ 'payment_due' => 'Доспева за плаќање',
+ 'paid' => 'Платено',
+ 'histories' => 'Историја',
+ 'payments' => 'Плаќања',
+ 'add_payment' => 'Додади плаќање',
+ 'mark_paid' => 'Означи платено',
+ 'mark_sent' => 'Означи испратено',
+ 'download_pdf' => 'Превземи PDF',
+ 'send_mail' => 'Прати е-маил',
+ 'all_invoices' => 'Login to view all invoices',
+
+ 'status' => [
+ 'draft' => 'Неиспратено',
+ 'sent' => 'Испратена',
+ 'viewed' => 'Прегледано',
+ 'approved' => 'Одобрено',
+ 'partial' => 'Некомплетно',
+ 'paid' => 'Платено',
+ ],
+
+ 'messages' => [
+ 'email_sent' => 'Е-маил порака со фактура е испратена успешно!',
+ 'marked_sent' => 'Е-маил порака со фактура е испратена успешно!',
+ 'email_required' => 'Не постои е-маил адреса за овој клиент!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
+ ],
+
+ 'notification' => [
+ 'message' => 'Ја довите оваа порака затоа што имате претстојна :amount invoice to :customer customer.',
+ 'button' => 'Плати сега',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/items.php b/resources/lang/mk-MK/items.php
new file mode 100644
index 000000000..6ccf480e2
--- /dev/null
+++ b/resources/lang/mk-MK/items.php
@@ -0,0 +1,18 @@
+ 'Кочичина| Количини',
+ 'sales_price' => 'Продажна Цена',
+ 'purchase_price' => 'Набавна цена',
+ 'sku' => 'SKU',
+
+ 'notification' => [
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
+ 'button' => 'Погледни сега',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/messages.php b/resources/lang/mk-MK/messages.php
new file mode 100644
index 000000000..876bc93ca
--- /dev/null
+++ b/resources/lang/mk-MK/messages.php
@@ -0,0 +1,31 @@
+ [
+ 'added' => ':type додадено!',
+ 'updated' => ':type надградено!',
+ 'deleted' => ':type избришано!',
+ 'duplicated' => ':type дупликат!',
+ 'imported' => ':type превземено!',
+ 'enabled' => ':type овозможено!',
+ 'disabled' => ':type оневозможено!',
+ ],
+ 'error' => [
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
+ 'not_user_company' => 'Error: Немате дозвола да ја менаџирате оваа компанија!',
+ 'customer' => 'Error: Корисникот не е додаден! :name веќе ја користи оваа е-маил адреса',
+ 'no_file' => 'Грешка: Не е селектирај ниеден фајл!',
+ 'last_category' => 'Error: Неможе да се избрише последната :type категорија!',
+ 'invalid_token' => 'Error: Внесениот токен е невалиден!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
+ ],
+ 'warning' => [
+ 'deleted' => 'Предупредување: Немате дозвола да бришете :name затоа што има :text поврзаност.',
+ 'disabled' => 'Предупредување: Немате дозвола да оневозможите :name затоа што има :text поврзаност.
+
+',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/modules.php b/resources/lang/mk-MK/modules.php
new file mode 100644
index 000000000..de051d892
--- /dev/null
+++ b/resources/lang/mk-MK/modules.php
@@ -0,0 +1,82 @@
+ 'АПИ Токен',
+ 'api_token' => 'Токен',
+ 'my_apps' => 'Мои апликации',
+ 'top_paid' => 'Топ платени',
+ 'new' => 'Ново',
+ 'top_free' => 'Топ бесплатни',
+ 'free' => 'Бесплатно',
+ 'search' => 'Пребарување',
+ 'install' => 'Инсталирај',
+ 'buy_now' => 'Купи сега',
+ 'token_link' => 'Кликнете овде за превземање на вашиот API токен.',
+ 'no_apps' => 'Нема апликации во оваа категориај сеуште.',
+ 'developer' => 'Дали сте програмер?Овде можете да научите како да програмирање и да заработите уште денес!
+
+',
+
+ 'recommended_apps' => 'Recommended Apps',
+
+ 'about' => 'За апликацијата',
+
+ 'added' => 'Додадено',
+ 'updated' => 'Ажурирано',
+ 'compatibility' => 'Компатибилност',
+
+ 'installed' => ':module инсталирано',
+ 'uninstalled' => ':module деинсталирано',
+ //'updated' => ':module updated',
+ 'enabled' => ':module овозможено',
+ 'disabled' => ':module оневозможено',
+
+ 'tab' => [
+ 'installation' => 'Инсталација',
+ 'faq' => 'ЧПП',
+ 'changelog' => 'Лог на промени',
+ 'reviews' => 'Reviews',
+ ],
+
+ 'installation' => [
+ 'header' => 'Инсталација',
+ 'download' => 'Превземање :module file.',
+ 'unzip' => 'Отпакување :module files.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
+ 'install' => 'Инсталирање :module files.',
+ ],
+
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Инсталирано',
+ ],
+
+ 'button' => [
+ 'uninstall' => 'Деинсталирај',
+ 'disable' => 'Исклучи',
+ 'enable' => 'Овозможи',
+ ],
+
+ 'my' => [
+ 'purchased' => 'Купено',
+ 'installed' => 'Инсталирано',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
+];
diff --git a/resources/lang/mk-MK/notifications.php b/resources/lang/mk-MK/notifications.php
new file mode 100644
index 000000000..155019099
--- /dev/null
+++ b/resources/lang/mk-MK/notifications.php
@@ -0,0 +1,10 @@
+ 'Опааа!',
+ 'hello' => 'Здраво!',
+ 'salutation' => 'Поздрав, :company_name',
+ 'subcopy' => 'Доколку имате проблем со кликнување на ":text" button, копирајте ја и залепете ја УРЛ адресата во вашиот пребарувач: [:url](:url)',
+
+];
diff --git a/resources/lang/mk-MK/pagination.php b/resources/lang/mk-MK/pagination.php
new file mode 100644
index 000000000..04cd85501
--- /dev/null
+++ b/resources/lang/mk-MK/pagination.php
@@ -0,0 +1,9 @@
+ '« Назад',
+ 'next' => 'Напред »',
+ 'showing' => 'Прикажување :first to :last of :total :type',
+
+];
diff --git a/resources/lang/mk-MK/passwords.php b/resources/lang/mk-MK/passwords.php
new file mode 100644
index 000000000..ca1c8b4f6
--- /dev/null
+++ b/resources/lang/mk-MK/passwords.php
@@ -0,0 +1,22 @@
+ 'Лозинката треба да биде најмалку шест карактери и да совпаѓа со потврдната лозинка.',
+ 'reset' => 'Password has been reset!',
+ 'sent' => 'Испратен емаил со инструкции за ресетирање на лозинка!',
+ 'token' => 'Невалиден токен за ресетирање на лозинката.',
+ 'user' => "Не може да се пронајде корисник со таква емаил адреса.",
+
+];
diff --git a/resources/lang/mk-MK/reconciliations.php b/resources/lang/mk-MK/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/mk-MK/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/mk-MK/recurring.php b/resources/lang/mk-MK/recurring.php
new file mode 100644
index 000000000..371f1ea68
--- /dev/null
+++ b/resources/lang/mk-MK/recurring.php
@@ -0,0 +1,20 @@
+ 'Повторувачки',
+ 'every' => 'Секој',
+ 'period' => 'Период',
+ 'times' => 'Периоди',
+ 'daily' => 'Дневно',
+ 'weekly' => 'Неделно',
+ 'monthly' => 'Месечно',
+ 'yearly' => 'Годишно',
+ 'custom' => 'Произволно',
+ 'days' => 'Ден(денови)',
+ 'weeks' => 'Неделно(недели)',
+ 'months' => 'месец/и',
+ 'years' => 'година/и',
+ 'message' => 'Ова е повторувачки :type и следниот :type ќе биде автоматски генериран at :date',
+
+];
diff --git a/resources/lang/mk-MK/reports.php b/resources/lang/mk-MK/reports.php
new file mode 100644
index 000000000..0db7b61d1
--- /dev/null
+++ b/resources/lang/mk-MK/reports.php
@@ -0,0 +1,30 @@
+ 'Оваа година',
+ 'previous_year' => 'Претходна година',
+ 'this_quarter' => 'Оваа четвртина',
+ 'previous_quarter' => 'Претходна четвртина',
+ 'last_12_months' => 'Последните 12 месеци',
+ 'profit_loss' => 'Добивка и загуба',
+ 'gross_profit' => 'Бруто профит',
+ 'net_profit' => 'Нето профит',
+ 'total_expenses' => 'Вкупно трошоци',
+ 'net' => 'Нето',
+
+ 'summary' => [
+ 'income' => 'Влез / Детали',
+ 'expense' => 'Трошоци / Детали',
+ 'income_expense' => 'Влез / Трошоци',
+ 'tax' => 'Данок / детали',
+ ],
+
+ 'quarter' => [
+ '1' => 'Јан-март',
+ '2' => 'Апр-Јун',
+ '3' => 'Јул-Сеп',
+ '4' => 'Окт-Дек',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/settings.php b/resources/lang/mk-MK/settings.php
new file mode 100644
index 000000000..4bf123002
--- /dev/null
+++ b/resources/lang/mk-MK/settings.php
@@ -0,0 +1,102 @@
+ [
+ 'name' => 'Име',
+ 'email' => 'Е-пошта',
+ 'phone' => 'Телефон',
+ 'address' => 'Адреса',
+ 'logo' => 'Лого',
+ ],
+ 'localisation' => [
+ 'tab' => 'Локализација',
+ 'date' => [
+ 'format' => 'Формат на датум',
+ 'separator' => 'Текст разделник',
+ 'dash' => 'Црта(-)',
+ 'dot' => 'Точка (.)',
+ 'comma' => 'Запирка (,)',
+ 'slash' => 'Коса црта (/)',
+ 'space' => 'Празно место ( )',
+ ],
+ 'timezone' => 'Временска зона',
+ 'percent' => [
+ 'title' => 'Процент (%) Позиција',
+ 'before' => 'Пред број',
+ 'after' => 'После број',
+ ],
+ ],
+ 'invoice' => [
+ 'tab' => 'Фактура',
+ 'prefix' => 'Префикс на број',
+ 'digit' => 'Цифрен број',
+ 'next' => 'Следен број',
+ 'logo' => 'Лого',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
+ ],
+ 'default' => [
+ 'tab' => 'Стандардно',
+ 'account' => 'Основна сметка',
+ 'currency' => 'Основна валута',
+ 'tax' => 'Основна стапка на данок',
+ 'payment' => 'Основен начин на плаќање',
+ 'language' => 'Поставен јазик за сајт',
+ ],
+ 'email' => [
+ 'protocol' => 'Протокол',
+ 'php' => 'PHP Маил',
+ 'smtp' => [
+ 'name' => 'SMTP',
+ 'host' => 'SMTP Host',
+ 'port' => 'SMTP Port',
+ 'username' => 'SMTP корисничко име',
+ 'password' => 'SMTP лозинка',
+ 'encryption' => 'SMTP безбедност',
+ 'none' => 'Ништо',
+ ],
+ 'sendmail' => 'Sendmail',
+ 'sendmail_path' => 'Патека до праќач на писма',
+ 'log' => 'Лог од е-маил пораки',
+ ],
+ 'scheduling' => [
+ 'tab' => 'Распоред',
+ 'send_invoice' => 'Испрати потсетник за пораки',
+ 'invoice_days' => 'Испрати после денови на доспевање',
+ 'send_bill' => 'Испрати потсетник за сметки',
+ 'bill_days' => 'Испрати пред денови на доспевање',
+ 'cron_command' => 'Cron Command',
+ 'schedule_time' => 'Како да се изврши',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
+ ],
+ 'appearance' => [
+ 'tab' => 'Изглед',
+ 'theme' => 'Тема',
+ 'light' => 'Светло',
+ 'dark' => 'Темно',
+ 'list_limit' => 'Записи по страна',
+ 'use_gravatar' => 'Користи Меме',
+ ],
+ 'system' => [
+ 'tab' => 'Систем',
+ 'session' => [
+ 'lifetime' => 'Време на активна сесија (Минути)',
+ 'handler' => 'Ракувач со сесија',
+ 'file' => 'Фајл',
+ 'database' => 'Датабаза',
+ ],
+ 'file_size' => 'Максимална големина на фајл (MB)',
+ 'file_types' => 'Дозволени типови на фајлови',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/taxes.php b/resources/lang/mk-MK/taxes.php
new file mode 100644
index 000000000..00b8fdea8
--- /dev/null
+++ b/resources/lang/mk-MK/taxes.php
@@ -0,0 +1,8 @@
+ 'Стапка',
+ 'rate_percent' => 'Стапка (%)',
+
+];
diff --git a/resources/lang/mk-MK/transfers.php b/resources/lang/mk-MK/transfers.php
new file mode 100644
index 000000000..664178b61
--- /dev/null
+++ b/resources/lang/mk-MK/transfers.php
@@ -0,0 +1,12 @@
+ 'Од акаунт',
+ 'to_account' => 'На акаунт',
+
+ 'messages' => [
+ 'delete' => ':од на :на (:износ)',
+ ],
+
+];
diff --git a/resources/lang/mk-MK/updates.php b/resources/lang/mk-MK/updates.php
new file mode 100644
index 000000000..f18a8a641
--- /dev/null
+++ b/resources/lang/mk-MK/updates.php
@@ -0,0 +1,15 @@
+ 'Инсталирана верзија',
+ 'latest_version' => 'Последна верзија',
+ 'update' => 'Надбрадете го Akaunting во:верзија верзија',
+ 'changelog' => 'Лог на промени',
+ 'check' => 'Проверка',
+ 'new_core' => 'Надградена верзија на Akaunting е достапна',
+ 'latest_core' => 'Честитки! Вие ја имате последната верзија на Akaunting. Идните сигурнисни надоградби ќе бидат инсталирани автоматски.',
+ 'success' => 'Процесот на надградба е завршен успешно.',
+ 'error' => 'Процесот на надградба е неуспешен, ве молиме, обидете се повторно.',
+
+];
diff --git a/resources/lang/mk-MK/validation.php b/resources/lang/mk-MK/validation.php
new file mode 100644
index 000000000..bc46f0ab7
--- /dev/null
+++ b/resources/lang/mk-MK/validation.php
@@ -0,0 +1,121 @@
+ 'Полето :attribute мора да биде прифатено.',
+ 'active_url' => 'Полето :attribute не е валиден URL.',
+ 'after' => 'Полето :attribute мора да биде датум после :date.',
+ 'after_or_equal' => ':attribute мора да биде датум после или на :date.',
+ 'alpha' => 'Полето :attribute може да содржи само букви.',
+ 'alpha_dash' => 'Полето :attribute може да содржи само букви, цифри, долна црта и тире.',
+ 'alpha_num' => 'Полето :attribute може да содржи само букви и цифри.',
+ 'array' => 'Полето :attribute мора да биде низа.',
+ 'before' => 'Полето :attribute мора да биде датум пред :date.',
+ 'before_or_equal' => ':attribute мора да биде датум пред или на :date.',
+ 'between' => [
+ 'numeric' => 'Полето :attribute мора да биде помеѓу :min и :max.',
+ 'file' => 'Полето :attribute мора да биде помеѓу :min и :max килобајти.',
+ 'string' => 'Полето :attribute мора да биде помеѓу :min и :max карактери.',
+ 'array' => 'Полето :attribute мора да има помеѓу :min - :max карактери.',
+ ],
+ 'boolean' => 'The :attribute field must be true or false',
+ 'confirmed' => 'Полето :attribute не е потврдено.',
+ 'date' => 'Полето :attribute не е валиден датум.',
+ 'date_format' => 'Полето :attribute не е во формат :format.',
+ 'different' => 'Полињата :attribute и :other треба да се различни.',
+ 'digits' => 'Полето :attribute треба да има :digits цифри.',
+ 'digits_between' => 'Полето :attribute треба да има помеѓу :min и :max цифри.',
+ 'dimensions' => ':attribute има неважечки димензии на сликата.',
+ 'distinct' => 'Полето :attribute има дупликат вредност.',
+ 'email' => 'Полето :attribute не е во валиден формат.',
+ 'exists' => 'Избранато поле :attribute веќе постои.',
+ 'file' => ':attribute мора да биде датотека.',
+ 'filled' => 'Полето :attribute е задолжително.',
+ 'image' => 'Полето :attribute мора да биде слика.',
+ 'in' => 'Избраното поле :attribute е невалидно.',
+ 'in_array' => 'Полето :attribute не постои во :other.',
+ 'integer' => 'Полето :attribute мора да биде цел број.',
+ 'ip' => 'Полето :attribute мора да биде IP адреса.',
+ 'json' => ':attribute мора да биде валиден JSON стринг.',
+ 'max' => [
+ 'numeric' => 'Полето :attribute мора да биде помало од :max.',
+ 'file' => 'Полето :attribute мора да биде помало од :max килобајти.',
+ 'string' => 'Полето :attribute мора да има помалку од :max карактери.',
+ 'array' => 'Полето :attribute не може да има повеќе од :max карактери.',
+ ],
+ 'mimes' => 'Полето :attribute мора да биде фајл од типот: :values.',
+ 'mimetypes' => 'Полето :attribute мора да биде фајл од типот: :values.',
+ 'min' => [
+ 'numeric' => 'Полето :attribute мора да биде минимум :min.',
+ 'file' => 'Полето :attribute мора да биде минимум :min килобајти.',
+ 'string' => 'Полето :attribute мора да има минимум :min карактери.',
+ 'array' => 'Полето :attribute мора да има минимум :min карактери.',
+ ],
+ 'not_in' => 'Избраното поле :attribute е невалидно.',
+ 'numeric' => 'Полето :attribute мора да биде број.',
+ 'present' => 'Полето :attribute е задолжително.',
+ 'regex' => 'Полето :attribute е во невалиден формат.',
+ 'required' => 'Полето :attribute е задолжително.',
+ 'required_if' => 'Полето :attribute е задолжително, кога :other е :value.',
+ 'required_unless' => 'Полето :attribute е задолжително, освен ако :other е :values.',
+ 'required_with' => 'Полето :attribute е задолжително, кога е внесено :values.',
+ 'required_with_all' => 'Полето :attribute е задолжително, кога е внесено :values.',
+ 'required_without' => 'Полето :attribute е задолжително, кога не е внесено :values.',
+ 'required_without_all' => 'Полето :attribute е задолжително кога не постои ниту една :values.',
+ 'same' => 'Полињата :attribute и :other треба да совпаѓаат.',
+ 'size' => [
+ 'numeric' => 'Полето :attribute мора да биде :size.',
+ 'file' => 'Полето :attribute мора да биде :size килобајти.',
+ 'string' => 'Полето :attribute мора да има :size карактери.',
+ 'array' => 'Полето :attribute мора да има :size карактери.',
+ ],
+ 'string' => ':attribute мора да биде стринг.',
+ 'timezone' => ':attribute мора да биде валидна зона.',
+ 'unique' => 'Полето :attribute веќе постои.',
+ 'uploaded' => ':attribute не е прикачен.',
+ 'url' => 'Полето :attribute не е во валиден формат.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'Порака',
+ ],
+ 'invalid_currency' => 'Полето :attribute не е во валиден формат.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/nb-NO/auth.php b/resources/lang/nb-NO/auth.php
index 9f9d94523..9f8791551 100644
--- a/resources/lang/nb-NO/auth.php
+++ b/resources/lang/nb-NO/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'Gjeldende e-post',
'reset' => 'Tilbakestill',
'never' => 'aldri',
+
'password' => [
'current' => 'Passord',
'current_confirm' => 'Passordbekreftelse',
'new' => 'Nytt passord',
'new_confirm' => 'Passordbekreftelse',
],
+
'error' => [
- 'self_delete' => 'Feil: Du kan ikke slette deg selv.'
+ 'self_delete' => 'Feil: Du kan ikke slette deg selv.',
+ 'no_company' => 'Error: No company assigned to your account. Please, contact the system administrator.',
],
'failed' => 'Disse opplysningene samsvarer ikke med våre oppføringer.',
'disabled' => 'Denne kontoen er deaktivert. Kontakt systemadministrator.',
'throttle' => 'For mange innloggingsforsøk. Forsøk igjen om :seconds sekunder.',
+ 'notification' => [
+ 'message_1' => 'You are receiving this email because we received a password reset request for your account.',
+ 'message_2' => 'If you did not request a password reset, no further action is required.',
+ 'button' => 'Reset Password',
+ ],
+
];
diff --git a/resources/lang/nb-NO/bills.php b/resources/lang/nb-NO/bills.php
index c0cbdf30d..da6ca4939 100644
--- a/resources/lang/nb-NO/bills.php
+++ b/resources/lang/nb-NO/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Faktura ble merket som mottatt.',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/nb-NO/customers.php b/resources/lang/nb-NO/customers.php
index 03d4d5814..07ceab30a 100644
--- a/resources/lang/nb-NO/customers.php
+++ b/resources/lang/nb-NO/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'E-postadressen er allerede i bruk.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/nb-NO/demo.php b/resources/lang/nb-NO/demo.php
index 61a7c4857..ffdaca57c 100644
--- a/resources/lang/nb-NO/demo.php
+++ b/resources/lang/nb-NO/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'Kontanter',
- 'categories_uncat' => 'Ukategorisert',
'categories_deposit' => 'Innskudd',
'categories_sales' => 'Salg',
'currencies_usd' => 'Amerikanske Dollar',
diff --git a/resources/lang/nb-NO/footer.php b/resources/lang/nb-NO/footer.php
index 926ebfc8f..db9b5245c 100644
--- a/resources/lang/nb-NO/footer.php
+++ b/resources/lang/nb-NO/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versjon',
'powered' => 'Drevet med Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Gratis regnskapsprogram',
];
diff --git a/resources/lang/nb-NO/general.php b/resources/lang/nb-NO/general.php
index 98a05f00b..c72177ebe 100644
--- a/resources/lang/nb-NO/general.php
+++ b/resources/lang/nb-NO/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Nummer | Nummer',
'statuses' => 'Status | Statuser',
'others' => 'Annen | Andre',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Kontrollpanel',
'banking' => 'Bank',
@@ -81,6 +85,7 @@ return [
'color' => 'Farge',
'save' => 'Lagre',
'cancel' => 'Avbryt',
+ 'loading' => 'Loading...',
'from' => 'Fra',
'to' => 'Til',
'print' => 'Skriv ut',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Forfalt',
'partially' => 'Delvis',
'partially_paid' => 'Delvis betalt',
+ 'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
+ 'enable' => 'Enable',
+ 'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Ny :type',
'edit' => 'Endre :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
+
'form' => [
'enter' => 'Fyll inn :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Ingen fil valgt ...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/nb-NO/header.php b/resources/lang/nb-NO/header.php
index e08afa88f..98830de9a 100644
--- a/resources/lang/nb-NO/header.php
+++ b/resources/lang/nb-NO/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count utsolgt produkt|[2,*] :count utsolgte produkter',
'view_all' => 'Vis alle'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/nb-NO/import.php b/resources/lang/nb-NO/import.php
index 08095aea5..5f9942c9f 100644
--- a/resources/lang/nb-NO/import.php
+++ b/resources/lang/nb-NO/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'Importer',
'title' => 'Importer :type',
- 'message' => 'Tillatte filtyper: CSV, XLS. Last ned eksempelfilen .',
+ 'message' => 'Allowed file types: XLS, XLSX. Please, download the sample file.',
];
diff --git a/resources/lang/nb-NO/install.php b/resources/lang/nb-NO/install.php
index e3fcc1964..aaf6ca132 100644
--- a/resources/lang/nb-NO/install.php
+++ b/resources/lang/nb-NO/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Oppfrisk',
'steps' => [
- 'requirements' => 'Du må oppfyll følgende avhengigheter.',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'Steg 1/3: Språkvalg',
'database' => 'Steg 2/3: Databaseoppsett',
'settings' => 'Steg 3/3: Foretak- og administratordetaljer',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature må være aktivert.',
'disabled' => ':feature må være deaktivert.',
- 'extension' => ':extension utvidelse må være lastet.',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => 'Mappen :directory må være skrivbar.',
],
diff --git a/resources/lang/nb-NO/invoices.php b/resources/lang/nb-NO/invoices.php
index c428370c9..95217fd10 100644
--- a/resources/lang/nb-NO/invoices.php
+++ b/resources/lang/nb-NO/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Merk som sendt',
'download_pdf' => 'Last ned PDF',
'send_mail' => 'Send e-post',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Utkast',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'E-post med faktura har blitt sendt.',
'marked_sent' => 'Faktura merket som sendt.',
'email_required' => 'E-postadresse må fylles inn.',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/nb-NO/items.php b/resources/lang/nb-NO/items.php
index d7c69cbab..7ca6e6f3a 100644
--- a/resources/lang/nb-NO/items.php
+++ b/resources/lang/nb-NO/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Varenummer (SKU)',
'notification' => [
- 'message' => 'Du mottar denne e-posten fordi :name snart er utsolgt.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Vis nå',
],
diff --git a/resources/lang/nb-NO/messages.php b/resources/lang/nb-NO/messages.php
index afe4ab15e..bb9399104 100644
--- a/resources/lang/nb-NO/messages.php
+++ b/resources/lang/nb-NO/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type slettet.',
'duplicated' => ':type duplisert.',
'imported' => ':type importert.',
+ 'enabled' => ':type enabled!',
+ 'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Feil: Betaling ble ikke lagt til. Beløpet overstiger total.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Feil: Du ikke kan administrere dette foretaket.',
'customer' => 'Feil: Bruker ble ikke opprettet. :name bruker allerede denne e-postadressen.',
'no_file' => 'Feil: Ingen fil er valgt.',
'last_category' => 'Feil: Kan ikke slette siste :type kategori.',
'invalid_token' => 'Feil: Angitt token er ugyldig.',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'Advarsel: Du har ikke mulighet til å slette :name fordi kontoen har :text relatert.',
diff --git a/resources/lang/nb-NO/modules.php b/resources/lang/nb-NO/modules.php
index ab962b3dd..4f6f8e7db 100644
--- a/resources/lang/nb-NO/modules.php
+++ b/resources/lang/nb-NO/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API-token',
'api_token' => 'Token',
+ 'my_apps' => 'My Apps',
'top_paid' => 'Topp betalte',
'new' => 'Ny',
'top_free' => 'Topp gratis',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'Det er ingen applikasjoner i denne kategorien ennå.',
'developer' => 'Er du en utvikler? Her kan du lære hvordan du lager en applikasjon for salg.',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Om',
'added' => 'Lagt til',
@@ -31,18 +34,47 @@ return [
'installation' => 'Installering',
'faq' => 'FAQ',
'changelog' => 'Endringslogg',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Applikasjonsinstallering',
'download' => 'Laster ned :module.',
'unzip' => 'Pakker ut :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Installerer :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Installed',
+ ],
+
'button' => [
'uninstall' => 'Avinstaller',
'disable' => 'Deaktiver',
'enable' => 'Aktiver',
],
+
+ 'my' => [
+ 'purchased' => 'Purchased',
+ 'installed' => 'Installed',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/nb-NO/notifications.php b/resources/lang/nb-NO/notifications.php
new file mode 100644
index 000000000..88c2f9da0
--- /dev/null
+++ b/resources/lang/nb-NO/notifications.php
@@ -0,0 +1,10 @@
+ 'Whoops!',
+ 'hello' => 'Hello!',
+ 'salutation' => 'Regards, :company_name',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/nb-NO/reconciliations.php b/resources/lang/nb-NO/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/nb-NO/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/nb-NO/settings.php b/resources/lang/nb-NO/settings.php
index 04deec43f..6b4af56d2 100644
--- a/resources/lang/nb-NO/settings.php
+++ b/resources/lang/nb-NO/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Antall siffer',
'next' => 'Neste nummer',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Standardinnstilinger',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Antall dager før forfall for utsending',
'cron_command' => 'Cron-kommando',
'schedule_time' => 'Tid for kjøring',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Utseende',
diff --git a/resources/lang/nb-NO/transfers.php b/resources/lang/nb-NO/transfers.php
index 5de0931a4..4a2a76875 100644
--- a/resources/lang/nb-NO/transfers.php
+++ b/resources/lang/nb-NO/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'Fra konto',
'to_account' => 'Til konto',
+ 'messages' => [
+ 'delete' => ':from to :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/nb-NO/validation.php b/resources/lang/nb-NO/validation.php
index 384c8f15a..70520da6a 100644
--- a/resources/lang/nb-NO/validation.php
+++ b/resources/lang/nb-NO/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'custom-message',
],
+ 'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/nl-NL/bills.php b/resources/lang/nl-NL/bills.php
index 9b7cf9272..dc30e1e3a 100644
--- a/resources/lang/nl-NL/bills.php
+++ b/resources/lang/nl-NL/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Factuur als \'succesvol ontvangen\' gemarkeerd!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Gemaakt op :date',
+ 'receive' => [
+ 'draft' => 'Niet verstuurd',
+ 'received' => 'Ontvangen op :date',
+ ],
+ 'paid' => [
+ 'await' => 'In afwachting van betaling',
+ ],
+ ],
],
];
diff --git a/resources/lang/nl-NL/customers.php b/resources/lang/nl-NL/customers.php
index d939b9ab2..c6621f9f9 100644
--- a/resources/lang/nl-NL/customers.php
+++ b/resources/lang/nl-NL/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Dit e-mailadres is al reeds geregistreerd.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer betaalde :amount voor factuur :invoice_number.',
+ 'button' => 'Weergeven',
+ ],
];
diff --git a/resources/lang/nl-NL/footer.php b/resources/lang/nl-NL/footer.php
index 747f39f80..e50d770cc 100644
--- a/resources/lang/nl-NL/footer.php
+++ b/resources/lang/nl-NL/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versie',
'powered' => 'Mogelijk gemaakt door Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Gratis boekhoudsoftware',
];
diff --git a/resources/lang/nl-NL/general.php b/resources/lang/nl-NL/general.php
index 5daba229b..67a143be0 100644
--- a/resources/lang/nl-NL/general.php
+++ b/resources/lang/nl-NL/general.php
@@ -21,7 +21,7 @@ return [
'tax_rates' => 'BTW-tarief|Belastingtarieven',
'users' => 'Gebruiker|Gebruikers',
'roles' => 'Rol|Rollen',
- 'permissions' => 'Toestemming|Machtigingen',
+ 'permissions' => 'Machtiging|Machtigingen',
'modules' => 'App|Apps',
'companies' => 'Bedrijf|Bedrijven',
'profits' => 'Winst|Winst',
@@ -38,6 +38,8 @@ return [
'numbers' => 'Nummer|Nummers',
'statuses' => 'Status|Statussen',
'others' => 'Overig|Overigen',
+ 'contacts' => 'Contactpersoon|Contactpersonen',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
'dashboard' => 'Dashboard',
'banking' => 'Banken',
@@ -55,7 +57,7 @@ return [
'quarterly' => 'Per kwartaal',
'yearly' => 'Jaarlijks',
'add' => 'Toevoegen',
- 'add_new' => 'Nieuw aanmaken',
+ 'add_new' => 'Nieuwe toevoegen',
'show' => 'Weergeven',
'edit' => 'Bewerken',
'delete' => 'Verwijderen',
@@ -81,6 +83,7 @@ return [
'color' => 'Kleur',
'save' => 'Opslaan',
'cancel' => 'Annuleren',
+ 'loading' => 'Bezig met laden...',
'from' => 'Van',
'to' => 'Aan',
'print' => 'Afdrukken',
@@ -101,16 +104,31 @@ return [
'partially' => 'Gedeeltelijk',
'partially_paid' => 'Gedeeltelijk betaald',
'export' => 'Exporteren',
+ 'finish' => 'Voltooien',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Overslaan',
'enable' => 'Activeren',
'disable' => 'Uitschakelen',
+ 'select_all' => 'Alles selecteren',
+ 'unselect_all' => 'Alles deselecteren',
+ 'go_to' => 'Ga naar :name',
+ 'created_date' => 'Aanmaakdatum',
+ 'period' => 'Periode',
+ 'start' => 'Begin',
+ 'end' => 'Eind',
+ 'clear' => 'Clear',
+ 'difference' => 'Verschil',
'title' => [
'new' => 'Nieuwe :type',
'edit' => ':type bewerken',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
- 'enter' => 'Voer :field',
+ 'enter' => 'Voer :field in',
'select' => [
'field' => '- Selecteer :field -',
'file' => 'Selecteer bestand',
@@ -118,4 +136,11 @@ return [
'no_file_selected' => 'Geen bestand geselecteerd...',
],
+ 'date_range' => [
+ 'today' => 'Vandaag',
+ 'yesterday' => 'Gisteren',
+ 'last_days' => 'Afgelopen :day dagen',
+ 'this_month' => 'Deze maand',
+ 'last_month' => 'Afgelopen maand',
+ ],
];
diff --git a/resources/lang/nl-NL/header.php b/resources/lang/nl-NL/header.php
index d9fcddfb8..d6d5126e9 100644
--- a/resources/lang/nl-NL/header.php
+++ b/resources/lang/nl-NL/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count artikel niet op voorraad | [2,*] :count artikelen niet op voorraad',
'view_all' => 'Alles Weergeven'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/nl-NL/invoices.php b/resources/lang/nl-NL/invoices.php
index 125619d63..5d9658c00 100644
--- a/resources/lang/nl-NL/invoices.php
+++ b/resources/lang/nl-NL/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Als verstuurd markeren',
'download_pdf' => 'PDF downloaden',
'send_mail' => 'E-mail versturen',
+ 'all_invoices' => 'Log in om alle facturen te bekijken',
'status' => [
'draft' => 'Concept',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Factuur is succesvol per e-mail verzonden!',
'marked_sent' => 'Factuur is succesvol als verzonden gemarkeerd!',
'email_required' => 'Er is geen e-mailadres bekend van deze klant!',
+ 'draft' => 'Dit is een CONCEPT factuur en zal terugkomen in de statistieken wanneer het verzonden is.',
+
+ 'status' => [
+ 'created' => 'Gemaakt op :date',
+ 'send' => [
+ 'draft' => 'Niet verstuurd',
+ 'sent' => 'Verzonden op :date',
+ ],
+ 'paid' => [
+ 'await' => 'In afwachting van betaling',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/nl-NL/items.php b/resources/lang/nl-NL/items.php
index 65bc44a4b..d7db07310 100644
--- a/resources/lang/nl-NL/items.php
+++ b/resources/lang/nl-NL/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'U ontvangt deze e-mail omdat er bijna geen voorraad meer is van: :name.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Nu bekijken',
],
diff --git a/resources/lang/nl-NL/messages.php b/resources/lang/nl-NL/messages.php
index afc73e0af..bb736738f 100644
--- a/resources/lang/nl-NL/messages.php
+++ b/resources/lang/nl-NL/messages.php
@@ -11,8 +11,9 @@ return [
'enabled' => ':type ingeschakeld!',
'disabled' => ':type uitgeschakeld!',
],
+
'error' => [
- 'over_payment' => 'Fout: Betaling niet toegevoegd! Ingevoerde bedrag is hoger dan het totaal bedrag.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Fout: U heeft niet de juiste bevoegdheid om dit bedrijf te beheren!',
'customer' => 'Fout: Gebruiker niet aangemaakt! :name heeft dit e-mailadres al in gebruik.',
'no_file' => 'Fout: geen bestand geselecteerd!',
@@ -21,9 +22,11 @@ return [
'import_column' => 'Fout: :message Blad naam: :sheet. Lijnnummer: :line.',
'import_sheet' => 'Fout: Bladnaam is niet geldig. Vergelijk het met het voorbeeldbestand.',
],
+
'warning' => [
'deleted' => 'Waarschuwing: Het is voor u niet toegestaan om :name te verwijderen omdat het gerelateerd is aan :text.',
'disabled' => 'Waarschuwing: U mag :name niet uitschakelen omdat het gerelateerd is aan :text.',
+ 'disable_code' => 'Warning: You are not allowed to disable or change the currency of :name because it has :text related.',
],
];
diff --git a/resources/lang/nl-NL/modules.php b/resources/lang/nl-NL/modules.php
index 1f1554ad1..423317181 100644
--- a/resources/lang/nl-NL/modules.php
+++ b/resources/lang/nl-NL/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Er zijn nog geen Apps in deze categorie beschikbaar.',
'developer' => 'Bent u een ontwikkelaar? Hier kunt u lezen hoe u vandaag nog een app kan ontwikkelen en verkopen!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Over ons',
'added' => 'Toegevoegd',
@@ -32,15 +34,28 @@ return [
'installation' => 'Installatie',
'faq' => 'Veelgestelde vragen (FAQ)',
'changelog' => 'Wijzigingslogboek',
+ 'reviews' => 'Beoordelingen',
],
'installation' => [
'header' => 'App installatie',
'download' => ':module bestand aan het downloaden.',
'unzip' => 'Bezig met uitpakken van :module bestanden.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Bezit met installatie van :module bestanden.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Geïnstalleerd',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Gekocht',
'installed' => 'Geïnstalleerd',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/nl-NL/reconciliations.php b/resources/lang/nl-NL/reconciliations.php
new file mode 100644
index 000000000..1d16f9e01
--- /dev/null
+++ b/resources/lang/nl-NL/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Eindsaldo',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Datum',
+ 'end_date' => 'Eind Datum',
+ 'cleared_amount' => 'Cleared Amount',
+ 'deposit' => 'Deposit',
+ 'withdrawal' => 'Withdrawal',
+
+];
diff --git a/resources/lang/nl-NL/settings.php b/resources/lang/nl-NL/settings.php
index e9c933d5d..350ff1160 100644
--- a/resources/lang/nl-NL/settings.php
+++ b/resources/lang/nl-NL/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Aantal cijfers',
'next' => 'Volgende nummer',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Artikel|Artikelen',
+ 'product' => 'Producten',
+ 'service' => 'Services',
+ 'price_name' => 'Prijs label',
+ 'price' => 'Prijs',
+ 'rate' => 'Tarief',
+ 'quantity_name' => 'Hoeveelheid label',
+ 'quantity' => 'Aantal',
],
'default' => [
'tab' => 'Standaardwaarden',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Aantal dagen voor vervaldatum sturen',
'cron_command' => 'Cron opdracht',
'schedule_time' => 'Uren duurtijd',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Opmaak',
diff --git a/resources/lang/nl-NL/taxes.php b/resources/lang/nl-NL/taxes.php
index 7e8fff172..fd9baf504 100644
--- a/resources/lang/nl-NL/taxes.php
+++ b/resources/lang/nl-NL/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Tarief',
'rate_percent' => 'Tarief (%)',
+ 'normal' => 'Normaal',
+ 'inclusive' => 'Inclusief',
+ 'compound' => 'Compound',
];
diff --git a/resources/lang/nl-NL/validation.php b/resources/lang/nl-NL/validation.php
index e49c111a1..795c94800 100644
--- a/resources/lang/nl-NL/validation.php
+++ b/resources/lang/nl-NL/validation.php
@@ -20,7 +20,7 @@ return [
'alpha' => ':attribute mag enkel letters bevatten.',
'alpha_dash' => ':attribute mag enkel letters, cijfers of koppeltekens bevatten.',
'alpha_num' => ':attribute mag enkel letters en cijfers bevatten.',
- 'array' => ':attribute moet een string zijn.',
+ 'array' => ':attribute moet een array zijn.',
'before' => ':attribute moet een datum zijn voor :date.',
'before_or_equal' => ':attribute moet een datum zijn voor of gelijk aan :date.',
'between' => [
@@ -70,9 +70,9 @@ return [
'required_if' => ':attribute veld is verplicht wanneer :other :value is.',
'required_unless' => ':attribute veld is verplicht tenzij :other bestaat in :values.',
'required_with' => ':attribute veld is verplicht wanneer :values aanwezig is.',
- 'required_with_all' => ':attribute veld is verplocht wanneer :"values aanwezig is.',
- 'required_without' => ':attribute veld is verplocht wanneer :values niet aanwezig is.',
- 'required_without_all' => ':attribute veld is verplocht wanneer geen van :values aanwezig zijn.',
+ 'required_with_all' => ':attribute veld is verplicht wanneer :values aanwezig is.',
+ 'required_without' => ':attribute veld is verplicht wanneer :values niet aanwezig is.',
+ 'required_without_all' => ':attribute veld is verplicht wanneer geen van :values aanwezig zijn.',
'same' => ':attribute en :other moeten overeenkomen.',
'size' => [
'numeric' => ':attribute moet :size zijn.',
@@ -99,9 +99,10 @@ return [
'custom' => [
'attribute-name' => [
- 'rule-name' => 'aangepast-bericht',
+ 'rule-name' => 'aangepast bericht',
],
- 'invalid_currency' => 'De code :attribute is ongeldig.',
+ 'invalid_currency' => ':attribute code is ongeldig.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/pt-BR/bills.php b/resources/lang/pt-BR/bills.php
index bbdbd18a3..51b1e486a 100644
--- a/resources/lang/pt-BR/bills.php
+++ b/resources/lang/pt-BR/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Conta marcada como recebida com sucesso!',
+ 'draft' => 'Este é um RASCUNHO de fatura e será refletida nos gráficos depois que ela for recebida.',
+
+ 'status' => [
+ 'created' => 'Criado em :date',
+ 'receive' => [
+ 'draft' => 'Não enviado',
+ 'received' => 'Recebido em :date',
+ ],
+ 'paid' => [
+ 'await' => 'Aguardando pagamento',
+ ],
+ ],
],
];
diff --git a/resources/lang/pt-BR/customers.php b/resources/lang/pt-BR/customers.php
index 3f3d87b8a..5834067b0 100644
--- a/resources/lang/pt-BR/customers.php
+++ b/resources/lang/pt-BR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Este e-mail já foi utilizado.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer fez o pagamento de :amount para a fatura de numero :invoice_number.',
+ 'button' => 'Mostrar',
+ ],
];
diff --git a/resources/lang/pt-BR/footer.php b/resources/lang/pt-BR/footer.php
index b8759b05e..68ad48694 100644
--- a/resources/lang/pt-BR/footer.php
+++ b/resources/lang/pt-BR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versão',
'powered' => 'Desenvolvido por Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Software de contabilidade gratuito',
];
diff --git a/resources/lang/pt-BR/general.php b/resources/lang/pt-BR/general.php
index f1316cfe9..3c54407ea 100644
--- a/resources/lang/pt-BR/general.php
+++ b/resources/lang/pt-BR/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Número|Números',
'statuses' => 'Status|Status',
'others' => 'Outro | Outros',
+ 'contacts' => 'Contato|Contatos',
+ 'reconciliations' => 'Reconciliação|Reconciliações',
+ 'deposits' => 'Deposito|Depositos',
+ 'withdrawals' => 'Retirada|Retiradas',
'dashboard' => 'Painel',
'banking' => 'Banco',
@@ -81,6 +85,7 @@ return [
'color' => 'Cor',
'save' => 'Salvar',
'cancel' => 'Cancelar',
+ 'loading' => 'Carregando...',
'from' => 'De',
'to' => 'Para',
'print' => 'Imprimir',
@@ -100,13 +105,28 @@ return [
'overdue' => 'Atrasado',
'partially' => 'Parcial',
'partially_paid' => 'Pagamento parcial',
- 'export' => 'Export',
- 'enable' => 'Enable',
- 'disable' => 'Disable',
+ 'export' => 'Exportar',
+ 'finish' => 'Terminar',
+ 'wizard' => 'Assistente',
+ 'skip' => 'Pular',
+ 'enable' => 'Habilitar',
+ 'disable' => 'Desabilitar',
+ 'select_all' => 'Selecionar tudo',
+ 'unselect_all' => 'Desmarcar todos',
+ 'go_to' => 'Ir para :name',
+ 'created_date' => 'Data de Criação',
+ 'period' => 'Período',
+ 'start' => 'Começar',
+ 'end' => 'Finalizar',
+ 'clear' => 'Limpar',
+ 'difference' => 'Diferença',
'title' => [
'new' => 'Novo :type',
'edit' => 'Editar :type',
+ 'create' => 'Criar :type',
+ 'send' => 'Enviar :type',
+ 'get' => 'Pegar :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Nenhum arquivo selecionado...',
],
+ 'date_range' => [
+ 'today' => 'Hoje',
+ 'yesterday' => 'Ontem',
+ 'last_days' => 'Últimos :day dias',
+ 'this_month' => 'Este mês',
+ 'last_month' => 'Mês Passado',
+ ],
];
diff --git a/resources/lang/pt-BR/header.php b/resources/lang/pt-BR/header.php
index 385369f1d..245870b8b 100644
--- a/resources/lang/pt-BR/header.php
+++ b/resources/lang/pt-BR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1}: item de contagem fora de estoque | [2, *]: contar itens fora de estoque',
'view_all' => 'Visualizar todos'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/pt-BR/invoices.php b/resources/lang/pt-BR/invoices.php
index 5a220605b..9c476dec2 100644
--- a/resources/lang/pt-BR/invoices.php
+++ b/resources/lang/pt-BR/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Marcar Como Enviada',
'download_pdf' => 'Baixar em PDF',
'send_mail' => 'Enviar E-mail',
+ 'all_invoices' => 'Faça login para ver todas as faturas',
'status' => [
'draft' => 'Rascunho',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'O e-mail foi enviado com sucesso!',
'marked_sent' => 'Fatura marcada como enviada com sucesso!',
'email_required' => 'Nenhum endereço de e-mail para este cliente!',
+ 'draft' => 'Este é um RASCUNHO de fatura e será refletida nos gráficos depois que ela for enviada.',
+
+ 'status' => [
+ 'created' => 'Criado em :date',
+ 'send' => [
+ 'draft' => 'Não enviado',
+ 'sent' => 'Enviado em :date',
+ ],
+ 'paid' => [
+ 'await' => 'Aguardando pagamento',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/pt-BR/items.php b/resources/lang/pt-BR/items.php
index 8f921fc0f..47ce6da18 100644
--- a/resources/lang/pt-BR/items.php
+++ b/resources/lang/pt-BR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Você está recebendo este e-mail porque :name está ficando com limite baixo.',
+ 'message' => [
+ 'reminder' => 'Você está recebendo este e-mail porque o item ":name" possui somente :quantity disponível no estoque.',
+ 'out_of_stock' => 'Você está recebendo este e-mail porque o item :name está ficando sem estoque.',
+ ],
'button' => 'Ver agora',
],
diff --git a/resources/lang/pt-BR/messages.php b/resources/lang/pt-BR/messages.php
index 003e37ab1..c944b1c26 100644
--- a/resources/lang/pt-BR/messages.php
+++ b/resources/lang/pt-BR/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ': tipo desativado!',
],
'error' => [
- 'over_payment' => 'Erro: Pagamento não adicionado! Valor ultrapassa o Total.',
+ 'over_payment' => 'Erro: Pagamento não adicionado! O valor que você inseriu passa o total: :amount',
'not_user_company' => 'Erro: você não tem permissão para gerenciar esta empresa!',
'customer' => 'Erro: Endereço de email :name já esta sendo utilizado.',
'no_file' => 'Erro: Nenhum arquivo selecionado!',
diff --git a/resources/lang/pt-BR/modules.php b/resources/lang/pt-BR/modules.php
index 448c8f34e..6b9443868 100644
--- a/resources/lang/pt-BR/modules.php
+++ b/resources/lang/pt-BR/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Não há nenhum apps nesta categoria, ainda.',
'developer' => 'Você é um desenvolvedor? Clique aqui que você pode aprender como criar um app e começar a vender hoje!',
+ 'recommended_apps' => 'Apps Recomendados',
+
'about' => 'Sobre',
'added' => 'Adicionado',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalação',
'faq' => 'Perguntas frequentes',
'changelog' => 'Log de alterações',
+ 'reviews' => 'Avaliações',
],
'installation' => [
'header' => 'Instalação do aplicativo',
'download' => 'Baixando arquivos do módulo :module.',
'unzip' => 'Extraindo arquivos do módulo :module.',
+ 'file_copy' => 'Atualizando arquivos do módulo :module.',
+ 'migrate' => 'Aplicando atualizações: :module.',
+ 'finish' => 'A atualização foi instalada com sucesso. Você será redirecionado para a pagina de atualizações.',
'install' => 'Instalando :module.',
],
+ 'errors' => [
+ 'download' => 'Não foi possível fazer o download do modulo :module!',
+ 'upload' => 'O modulo :module baixado não foi salvo!',
+ 'unzip' => 'O modulo :module não foi descompactado!',
+ 'file_copy' => 'Arquivos do modulo :module não foram copiados!',
+ 'migrate' => 'Arquivos de migração do modulo :module quebrados!',
+ 'migrate core' => 'O modulo :module já está na versão mais recente, então você não pode atualizar.',
+ ],
+
'badge' => [
'installed' => 'Instalado',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Comprado',
'installed' => 'Instalado',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Adicionar avaliação'
+ ],
+ 'na' => 'Não existem avaliações.'
+ ]
];
diff --git a/resources/lang/pt-BR/reconciliations.php b/resources/lang/pt-BR/reconciliations.php
new file mode 100644
index 000000000..01b7ee59c
--- /dev/null
+++ b/resources/lang/pt-BR/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconciliar',
+ 'reconciled' => 'Reconciliado',
+ 'closing_balance' => 'Fechamento de balanço',
+ 'unreconciled' => 'Não reconciliadas',
+ 'list_transactions' => 'Transações',
+ 'start_date' => 'Data de início',
+ 'end_date' => 'Data Final',
+ 'cleared_amount' => 'Quantidade liberada',
+
+];
diff --git a/resources/lang/pt-BR/settings.php b/resources/lang/pt-BR/settings.php
index 5f86597d5..22eef4983 100644
--- a/resources/lang/pt-BR/settings.php
+++ b/resources/lang/pt-BR/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Número de dígitos',
'next' => 'Próximo número',
'logo' => 'Logotipo',
+ 'custom' => 'Personalizado',
+ 'item_name' => 'Nome do Item',
+ 'item' => 'Itens',
+ 'product' => 'Produtos',
+ 'service' => 'Serviços',
+ 'price_name' => 'Nome do preço',
+ 'price' => 'Preço',
+ 'rate' => 'Taxa',
+ 'quantity_name' => 'Nome da quantidade',
+ 'quantity' => 'Quantidade',
],
'default' => [
'tab' => 'Padrões',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Enviar antes de vencer',
'cron_command' => 'Comando Cron',
'schedule_time' => 'Iniciar Cron',
+ 'send_item_reminder'=> 'Enviar Lembrete',
+ 'item_stocks' => 'Enviar quando item possui estoque',
],
'appearance' => [
'tab' => 'Aparência',
diff --git a/resources/lang/pt-BR/taxes.php b/resources/lang/pt-BR/taxes.php
index 82414896b..b5cc1875c 100644
--- a/resources/lang/pt-BR/taxes.php
+++ b/resources/lang/pt-BR/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Taxa',
'rate_percent' => 'Taxa (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Incluído',
+ 'compound' => 'Composto',
];
diff --git a/resources/lang/pt-BR/validation.php b/resources/lang/pt-BR/validation.php
index 854d72785..2d7a300d1 100644
--- a/resources/lang/pt-BR/validation.php
+++ b/resources/lang/pt-BR/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'custom-message',
],
'invalid_currency' => 'O código :attribute é inválido.',
+ 'invalid_amount' => 'O :attribute é inválido.',
],
/*
diff --git a/resources/lang/pt-PT/bills.php b/resources/lang/pt-PT/bills.php
index 95e55744e..713c736d1 100644
--- a/resources/lang/pt-PT/bills.php
+++ b/resources/lang/pt-PT/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Conta marcada como recebida com sucesso!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Criado em :date',
+ 'receive' => [
+ 'draft' => 'Não enviado',
+ 'received' => 'Recebido em :date',
+ ],
+ 'paid' => [
+ 'await' => 'Aguarda pagamento',
+ ],
+ ],
],
];
diff --git a/resources/lang/pt-PT/customers.php b/resources/lang/pt-PT/customers.php
index 6935b470a..83d6f8ce9 100644
--- a/resources/lang/pt-PT/customers.php
+++ b/resources/lang/pt-PT/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Este e-mail já foi registado.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/pt-PT/footer.php b/resources/lang/pt-PT/footer.php
index b8759b05e..68ad48694 100644
--- a/resources/lang/pt-PT/footer.php
+++ b/resources/lang/pt-PT/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versão',
'powered' => 'Desenvolvido por Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Software de contabilidade gratuito',
];
diff --git a/resources/lang/pt-PT/general.php b/resources/lang/pt-PT/general.php
index 39350185f..51c1884a8 100644
--- a/resources/lang/pt-PT/general.php
+++ b/resources/lang/pt-PT/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Número|Números',
'statuses' => 'Estado|Estados',
'others' => 'Outro|Outros',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Painel de Controlo',
'banking' => 'Banco',
@@ -81,6 +85,7 @@ return [
'color' => 'Côr',
'save' => 'Guardar',
'cancel' => 'Cancelar',
+ 'loading' => 'Loading...',
'from' => 'De',
'to' => 'Para',
'print' => 'Imprimir',
@@ -101,12 +106,27 @@ return [
'partially' => 'Parcialmente',
'partially_paid' => 'Parcialmente Pago',
'export' => 'Exportar',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Activar',
'disable' => 'Desactivar',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Novo(a) :type',
'edit' => 'Editar :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Nenhum ficheiro selecionado...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/pt-PT/header.php b/resources/lang/pt-PT/header.php
index c10597745..8c8e6bc46 100644
--- a/resources/lang/pt-PT/header.php
+++ b/resources/lang/pt-PT/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count Item não disponível|[2,*] :count Itens não disponíveis',
'view_all' => 'Visualizar todos'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/pt-PT/install.php b/resources/lang/pt-PT/install.php
index 4c3d7e4e7..cbbf3d385 100644
--- a/resources/lang/pt-PT/install.php
+++ b/resources/lang/pt-PT/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Atualizar',
'steps' => [
- 'requirements' => 'Please, ask your hosting provider to fix the errors!',
+ 'requirements' => 'Por favor, peça ao seu provedor de hospedagem para corrigir os erros!',
'language' => 'Passo 1/3: Selecionar idioma',
'database' => 'Passo 2/3: Configuração da base de dados',
'settings' => 'Passo 3/3: Detalhes da empresa e do administrador',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature precisa estar ativada!',
'disabled' => ':feature precisa estar desativada!',
- 'extension' => ':extension extension needs to be installed and loaded!',
+ 'extension' => ':extensão extensão precisa estar instalada e carregada!',
'directory' => 'O diretório :directory precisa de permissão para escrita!',
],
diff --git a/resources/lang/pt-PT/invoices.php b/resources/lang/pt-PT/invoices.php
index d7316327c..bf1b2f3c4 100644
--- a/resources/lang/pt-PT/invoices.php
+++ b/resources/lang/pt-PT/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Marcar como Enviada',
'download_pdf' => 'Descarregar em PDF',
'send_mail' => 'Enviar E-mail',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Rascunho',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'O e-mail foi enviado com sucesso!',
'marked_sent' => 'Fatura marcada como enviada com sucesso!',
'email_required' => 'Nenhum endereço de e-mail para este cliente!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/pt-PT/items.php b/resources/lang/pt-PT/items.php
index 57e664796..2c87adb2a 100644
--- a/resources/lang/pt-PT/items.php
+++ b/resources/lang/pt-PT/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Recebeu este e-mail porque o item :name está quase indesponível.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Visualizar agora',
],
diff --git a/resources/lang/pt-PT/messages.php b/resources/lang/pt-PT/messages.php
index 6ba1cb302..4aaeb61c7 100644
--- a/resources/lang/pt-PT/messages.php
+++ b/resources/lang/pt-PT/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ': type desativado(a)!',
],
'error' => [
- 'over_payment' => 'Erro: Pagamento não adicionado! O valor passa o total.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Erro: Não tem permissão para gerir esta empresa!',
'customer' => 'Erro: O utilizador não foi criado! :name já está a usar este e-mail.',
'no_file' => 'Erro: Nenhum ficheiro selecionado!',
diff --git a/resources/lang/pt-PT/modules.php b/resources/lang/pt-PT/modules.php
index da820844f..6cbbb5031 100644
--- a/resources/lang/pt-PT/modules.php
+++ b/resources/lang/pt-PT/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Ainda não existem aplicações nesta categoria.',
'developer' => 'É um programador? Aqui pode aprender como criar uma aplicação e começar a vendê-la hoje mesmo!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Sobre',
'added' => 'Adicionado',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalação',
'faq' => 'Perguntas Frequentes',
'changelog' => 'Registo de alterações',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Instalação de aplicação',
'download' => 'A descarregar ficheiros do módulo :module.',
'unzip' => 'A extrair ficheiros do módulo :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'A instalar ficheiros do modulo :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Instalado',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Compradas',
'installed' => 'Instaladas',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/pt-PT/notifications.php b/resources/lang/pt-PT/notifications.php
index 1000bb5f1..e32c51496 100644
--- a/resources/lang/pt-PT/notifications.php
+++ b/resources/lang/pt-PT/notifications.php
@@ -4,7 +4,7 @@ return [
'whoops' => 'Ups!',
'hello' => 'Olá!',
- 'salutation' => 'Regards, :company_name',
- 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+ 'salutation' => 'Atenciosamente, :Nome_da_Empresa',
+ 'subcopy' => 'Se está a ter problemas ao clicar no botão ":text", copie e cole a URL abaixo no seu navegador web: [:url](:url)',
];
diff --git a/resources/lang/pt-PT/reconciliations.php b/resources/lang/pt-PT/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/pt-PT/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/pt-PT/settings.php b/resources/lang/pt-PT/settings.php
index a659c33e3..be7a9592b 100644
--- a/resources/lang/pt-PT/settings.php
+++ b/resources/lang/pt-PT/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Quantidade de dígitos',
'next' => 'Próximo Número',
'logo' => 'Logotipo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Padrões',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Enviar antes de vencer',
'cron_command' => 'Comando Cron',
'schedule_time' => 'Iniciar Cron',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Aparência',
diff --git a/resources/lang/pt-PT/validation.php b/resources/lang/pt-PT/validation.php
index f8b459c89..5c4f75841 100644
--- a/resources/lang/pt-PT/validation.php
+++ b/resources/lang/pt-PT/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'mensagem personalizada',
],
'invalid_currency' => 'O código do :attribute é inválido.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/ro-RO/bills.php b/resources/lang/ro-RO/bills.php
index 2ae3beacf..1f961215d 100644
--- a/resources/lang/ro-RO/bills.php
+++ b/resources/lang/ro-RO/bills.php
@@ -44,6 +44,18 @@ Parţială',
'messages' => [
'received' => 'Factura marcata ca si Primita!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/ro-RO/customers.php b/resources/lang/ro-RO/customers.php
index 087bd0bef..64e10e439 100644
--- a/resources/lang/ro-RO/customers.php
+++ b/resources/lang/ro-RO/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Acest email a fost deja folosit.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/ro-RO/footer.php b/resources/lang/ro-RO/footer.php
index d2643fd71..27fb19a91 100644
--- a/resources/lang/ro-RO/footer.php
+++ b/resources/lang/ro-RO/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versiunea',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Program de contabilitate gratuit',
];
diff --git a/resources/lang/ro-RO/general.php b/resources/lang/ro-RO/general.php
index 268f7fae6..7748fc767 100644
--- a/resources/lang/ro-RO/general.php
+++ b/resources/lang/ro-RO/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Număr | Numere',
'statuses' => 'Status | Statusuri',
'others' => 'Alta | Alte',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Panou de bord',
'banking' => 'Bancare',
@@ -81,6 +85,7 @@ return [
'color' => 'Culoare',
'save' => 'Salveaza',
'cancel' => 'Anulează',
+ 'loading' => 'Loading...',
'from' => 'Expeditor',
'to' => 'Destinatar',
'print' => 'Tipărește',
@@ -101,12 +106,27 @@ return [
'partially' => 'Partial',
'partially_paid' => 'Platit Partial',
'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Activeaza',
'disable' => 'Dezactiveaza',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => ':type nou',
'edit' => 'Editeaza :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Nici un fișier selectat...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/ro-RO/header.php b/resources/lang/ro-RO/header.php
index 49112b879..df93d1d61 100644
--- a/resources/lang/ro-RO/header.php
+++ b/resources/lang/ro-RO/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count articol scazut din stoc | [2, *] :count articole scazute din stoc',
'view_all' => 'Vezi toate elementele'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/ro-RO/invoices.php b/resources/lang/ro-RO/invoices.php
index e56691ed2..aed7b92fa 100644
--- a/resources/lang/ro-RO/invoices.php
+++ b/resources/lang/ro-RO/invoices.php
@@ -32,6 +32,7 @@ Nume articol|Nume articole',
'mark_sent' => 'Marcheaza ca si Trimis',
'download_pdf' => 'Descarca PDF',
'send_mail' => 'Trimite Email',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Ciornă',
@@ -47,6 +48,18 @@ Parţială',
'email_sent' => 'Emailul cu factura a fost trimis cu succes!',
'marked_sent' => 'Factura a fost marcata ca si trimisa cu succes!',
'email_required' => 'Nu exista adresa de email pentru acest client!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/ro-RO/items.php b/resources/lang/ro-RO/items.php
index aae98c8db..d3948fc29 100644
--- a/resources/lang/ro-RO/items.php
+++ b/resources/lang/ro-RO/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Unitate de stoc',
'notification' => [
- 'message' => 'Primesti acest e-mail deoarece stocul de :name este pe terminate.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Vezi acum',
],
diff --git a/resources/lang/ro-RO/messages.php b/resources/lang/ro-RO/messages.php
index 16c678783..05d2311be 100644
--- a/resources/lang/ro-RO/messages.php
+++ b/resources/lang/ro-RO/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type dezactivat!',
],
'error' => [
- 'over_payment' => 'Eroare: Plata nu a fost adaugata. Suma depaseste totalul.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Eroare: Nu ai permisiunea necesara pentru a gestiona această companie!',
'customer' => 'Eroare: Utilizatorul nu a fost creat! :name deja foloseste aceasta adresa de email.',
'no_file' => 'Eroare: Nici un fişier selectat!',
diff --git a/resources/lang/ro-RO/modules.php b/resources/lang/ro-RO/modules.php
index 73d205106..c362bef8f 100644
--- a/resources/lang/ro-RO/modules.php
+++ b/resources/lang/ro-RO/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Inca nu exista aplicatii in aceasta categorie.',
'developer' => 'Esti un dezvoltator de aplicatii? Aici poti afla cum sa creezi o aplicatie si sa incepi sa vinzi astazi!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Despre',
'added' => 'Adăugat',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalare',
'faq' => 'Întrebări frecvente',
'changelog' => 'Istoric modificări',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Instalare aplicatie',
'download' => 'Descărcare fisier :module.',
'unzip' => 'Dezarhivare fisiere :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Instalare fisiere :module.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Instalat',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Cumparat',
'installed' => 'Instalat',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/ro-RO/reconciliations.php b/resources/lang/ro-RO/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/ro-RO/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/ro-RO/settings.php b/resources/lang/ro-RO/settings.php
index fc33c142b..6fd9d3a68 100644
--- a/resources/lang/ro-RO/settings.php
+++ b/resources/lang/ro-RO/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Zecimale Numar',
'next' => 'Următorul număr',
'logo' => 'Siglă',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Implicit',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Trimite Inainte de Zilele Cuvenite',
'cron_command' => 'Comanda Cron',
'schedule_time' => 'Ora la care ruleaza',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Aspect',
diff --git a/resources/lang/ro-RO/validation.php b/resources/lang/ro-RO/validation.php
index 1dabd5964..f99c06bdb 100644
--- a/resources/lang/ro-RO/validation.php
+++ b/resources/lang/ro-RO/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'mesaj-personalizat',
],
'invalid_currency' => 'Codul :attribute este invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/ru-RU/auth.php b/resources/lang/ru-RU/auth.php
index 7082b5924..0b8b7b5c3 100644
--- a/resources/lang/ru-RU/auth.php
+++ b/resources/lang/ru-RU/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'Текущий E-mail',
'reset' => 'Сбросить',
'never' => 'никогда',
+
'password' => [
'current' => 'Пароль',
'current_confirm' => 'Подтверждение пароля',
'new' => 'Новый пароль',
'new_confirm' => 'Подтверждение нового пароля',
],
+
'error' => [
- 'self_delete' => 'Ошибка: нельзя удалить самого себя!'
+ 'self_delete' => 'Ошибка: нельзя удалить самого себя!',
+ 'no_company' => 'Ошибка: Компания не присоединена к вашему аккаунту. Пожалуйста обратитесь к системному администратору.',
],
'failed' => 'Имя пользователя и пароль не совпадают.',
'disabled' => 'Эта учетная запись отключена. Пожалуйста, обратитесь к системному администратору.',
'throttle' => 'Слишком много попыток входа. Пожалуйста, попробуйте еще раз через :seconds секунд.',
+ 'notification' => [
+ 'message_1' => 'Вы получили это письмо потому, что мы получили запрос сброса пароля для вашей учетной записи.',
+ 'message_2' => 'Если вы не запрашивали сброса пароля, дальнейших действий не требуется.',
+ 'button' => 'Сбросить пароль',
+ ],
+
];
diff --git a/resources/lang/ru-RU/bills.php b/resources/lang/ru-RU/bills.php
index 63c6c15f6..58a5df89b 100644
--- a/resources/lang/ru-RU/bills.php
+++ b/resources/lang/ru-RU/bills.php
@@ -12,15 +12,15 @@ return [
'quantity' => 'Количество',
'price' => 'Цена',
'sub_total' => 'Итого',
- 'discount' => 'Discount',
+ 'discount' => 'Скидка',
'tax_total' => 'Итого с налогом',
'total' => 'Всего',
'item_name' => 'Имя пункта | Имена пунктов',
- 'show_discount' => ':discount% Discount',
- 'add_discount' => 'Add Discount',
- 'discount_desc' => 'of subtotal',
+ 'show_discount' => ':discount% Скидка',
+ 'add_discount' => 'Добавить скидку',
+ 'discount_desc' => 'от итога',
'payment_due' => 'Оплатить до',
'amount_due' => 'Сумма',
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Счёт помечен как успешно получен!',
+ 'draft' => 'Это ЧЕРНОВИК закупки, он будет проведен после отправки.',
+
+ 'status' => [
+ 'created' => 'Создано :date',
+ 'receive' => [
+ 'draft' => 'Не отправлен',
+ 'received' => 'Получено :date',
+ ],
+ 'paid' => [
+ 'await' => 'Ожидает оплаты',
+ ],
+ ],
],
];
diff --git a/resources/lang/ru-RU/customers.php b/resources/lang/ru-RU/customers.php
index 993d8819a..4a5a88d56 100644
--- a/resources/lang/ru-RU/customers.php
+++ b/resources/lang/ru-RU/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Этот e-mail уже занят.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Показать',
+ ],
];
diff --git a/resources/lang/ru-RU/demo.php b/resources/lang/ru-RU/demo.php
index 827ace3e7..afc5d50a8 100644
--- a/resources/lang/ru-RU/demo.php
+++ b/resources/lang/ru-RU/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'Средства',
- 'categories_uncat' => 'Без категории',
'categories_deposit' => 'Депозит',
'categories_sales' => 'Продажи',
'currencies_usd' => 'Доллар США',
diff --git a/resources/lang/ru-RU/footer.php b/resources/lang/ru-RU/footer.php
index 0ec6e011d..5248f4865 100644
--- a/resources/lang/ru-RU/footer.php
+++ b/resources/lang/ru-RU/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Версия',
'powered' => '© Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Бесплатное Биллинговое ПО',
];
diff --git a/resources/lang/ru-RU/general.php b/resources/lang/ru-RU/general.php
index e7d59a25b..dc850a771 100644
--- a/resources/lang/ru-RU/general.php
+++ b/resources/lang/ru-RU/general.php
@@ -37,7 +37,11 @@ return [
'updates' => 'Обновление | Обновления',
'numbers' => 'Номер | Номера',
'statuses' => 'Статус | Статусы',
- 'others' => 'Other|Others',
+ 'others' => 'Другой|Другие',
+ 'contacts' => 'Контакт | Контакты',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Депозит | Депозиты',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Панель управления',
'banking' => 'Банки',
@@ -81,6 +85,7 @@ return [
'color' => 'Цвет',
'save' => 'Сохранить',
'cancel' => 'Отмена',
+ 'loading' => 'Загрузка...',
'from' => 'От',
'to' => 'Кому',
'print' => 'Печать',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Просроченные',
'partially' => 'Частично',
'partially_paid' => 'Частично выплаченные',
+ 'export' => 'Экспортировать',
+ 'finish' => 'Завершить',
+ 'wizard' => 'Мастер настройки',
+ 'skip' => 'Пропустить',
+ 'enable' => 'Вкл.',
+ 'disable' => 'Откл.',
+ 'select_all' => 'Выбрать все',
+ 'unselect_all' => 'Отменить выбор',
+ 'go_to' => 'Перейти к :name',
+ 'created_date' => 'Дата создания',
+ 'period' => 'Период',
+ 'start' => 'Начало',
+ 'end' => 'Окончание',
+ 'clear' => 'Очистить',
+ 'difference' => 'Разница',
'title' => [
'new' => 'Создать :type',
'edit' => 'Изменить :type',
+ 'create' => 'Создать :type',
+ 'send' => 'Отправить :type',
+ 'get' => 'Получить :type',
],
+
'form' => [
'enter' => 'Ввести :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Файл не выбран...',
],
+ 'date_range' => [
+ 'today' => 'Сегодня',
+ 'yesterday' => 'Вчера',
+ 'last_days' => 'Последние :day дней',
+ 'this_month' => 'Этот месяц',
+ 'last_month' => 'Предыдущий месяц',
+ ],
];
diff --git a/resources/lang/ru-RU/header.php b/resources/lang/ru-RU/header.php
index ab8df5bb9..bc8b6b164 100644
--- a/resources/lang/ru-RU/header.php
+++ b/resources/lang/ru-RU/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} : количество распроданного товара | [2, *]: количество распроданных товаров',
'view_all' => 'Просмотреть все'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/ru-RU/import.php b/resources/lang/ru-RU/import.php
index ec39da908..20cfc147d 100644
--- a/resources/lang/ru-RU/import.php
+++ b/resources/lang/ru-RU/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'Импортировать',
'title' => 'Импорт :type',
- 'message' => 'Допустимые типы файлов: CSV, XLS. Пожалуйста, скачайте файл примера.',
+ 'message' => 'Allowed file types: XLS, XLSX. Please, download the sample file.',
];
diff --git a/resources/lang/ru-RU/install.php b/resources/lang/ru-RU/install.php
index 2e1f1e4ff..b8fe1840a 100644
--- a/resources/lang/ru-RU/install.php
+++ b/resources/lang/ru-RU/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Обновить',
'steps' => [
- 'requirements' => 'Пожалуйста, ознакомьтесь со следующими требованиями!',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'Шаг 1/3: Выбор языка',
'database' => 'Шаг 2/3: Настройка базы данных',
'settings' => 'Шаг 3/3: Компании и данные Администратора',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature должно быть включено!',
'disabled' => ':feature должно быть отключено!',
- 'extension' => ':extension расширение должно быть загружено!',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => ':directory директория должна быть доступна для записи!',
],
diff --git a/resources/lang/ru-RU/invoices.php b/resources/lang/ru-RU/invoices.php
index 53951a871..7d8dd4f88 100644
--- a/resources/lang/ru-RU/invoices.php
+++ b/resources/lang/ru-RU/invoices.php
@@ -12,15 +12,15 @@ return [
'quantity' => 'Количество',
'price' => 'Цена',
'sub_total' => 'Итого',
- 'discount' => 'Discount',
+ 'discount' => 'Скидка',
'tax_total' => 'Итого с налогом',
'total' => 'Всего',
'item_name' => 'Имя пункта | Имена пунктов',
- 'show_discount' => ':discount% Discount',
- 'add_discount' => 'Add Discount',
- 'discount_desc' => 'of subtotal',
+ 'show_discount' => ':discount% Скидка',
+ 'add_discount' => 'Добавить скидку',
+ 'discount_desc' => 'от итога',
'payment_due' => 'Оплатить до',
'paid' => 'Оплачено',
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Пометить как отправлено',
'download_pdf' => 'Скачать PDF',
'send_mail' => 'Отправить E-mail',
+ 'all_invoices' => 'Войти для просмотра всех счетов',
'status' => [
'draft' => 'Черновик',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Счет-фактура успешно отправлена на e-mail!',
'marked_sent' => 'Счет-фактура помечена как успешно отправлена!',
'email_required' => 'Отсутствует e-mail адрес для этого клиента!',
+ 'draft' => 'Это ЧЕРНОВИК счета, он будет проведен после отправки.',
+
+ 'status' => [
+ 'created' => 'Создано :date',
+ 'send' => [
+ 'draft' => 'Не отправлено',
+ 'sent' => 'Отправлено :date',
+ ],
+ 'paid' => [
+ 'await' => 'Ожидает оплаты',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/ru-RU/items.php b/resources/lang/ru-RU/items.php
index cb17b7737..346fd7768 100644
--- a/resources/lang/ru-RU/items.php
+++ b/resources/lang/ru-RU/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Вы получили это письмо, потому что :name заканчивается.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Просмотреть сейчас',
],
diff --git a/resources/lang/ru-RU/messages.php b/resources/lang/ru-RU/messages.php
index 13504348a..a613e4952 100644
--- a/resources/lang/ru-RU/messages.php
+++ b/resources/lang/ru-RU/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type удалено!',
'duplicated' => ':type продублировано!',
'imported' => ':type импортировано!',
+ 'enabled' => ':type enabled!',
+ 'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Ошибка: Оплата не добавлена! Сумма проходит, как общая.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Ошибка: Вы не можете управлять этой компанией!',
'customer' => 'Ошибка: Пользователь не создан! :name уже использует этот адрес электронной почты.',
'no_file' => 'Ошибка: Файл не выбран!',
'last_category' => 'Error: Can not delete the last :type category!',
'invalid_token' => 'Error: The token entered is invalid!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'Предупреждение: Вы не можете удалить :name потому что имеется связь с :text.',
diff --git a/resources/lang/ru-RU/modules.php b/resources/lang/ru-RU/modules.php
index dada78343..8e1dca59d 100644
--- a/resources/lang/ru-RU/modules.php
+++ b/resources/lang/ru-RU/modules.php
@@ -4,17 +4,20 @@ return [
'title' => 'API ключ',
'api_token' => 'Ключ',
+ 'my_apps' => 'Мои приложения',
'top_paid' => 'Топ оплаченных',
'new' => 'Новый',
'top_free' => 'Топ бесплатных',
'free' => 'БЕСПЛАТНО',
- 'search' => 'Search',
+ 'search' => 'Поиск',
'install' => 'Установить',
'buy_now' => 'Купить сейчас',
'token_link' => 'Нажмите здесь чтобы получить Ваш API ключ.',
'no_apps' => 'В этой категории еще нет приложений.',
'developer' => 'Вы разработчик? Здесь вы можете узнать, как создать приложение и начать продавать уже сегодня!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'О нас',
'added' => 'Добавлено',
@@ -31,18 +34,47 @@ return [
'installation' => 'Установка',
'faq' => 'ЧаВо',
'changelog' => 'История изменений',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Установка приложения',
'download' => 'Скачивание :module модуля.',
'unzip' => 'Распаковка :module модуля.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Установка :module модуля.',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Установлено',
+ ],
+
'button' => [
'uninstall' => 'Деинсталляция',
'disable' => 'Отключить',
'enable' => 'Включить',
],
+
+ 'my' => [
+ 'purchased' => 'Куплено',
+ 'installed' => 'Установлено',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/ru-RU/notifications.php b/resources/lang/ru-RU/notifications.php
new file mode 100644
index 000000000..88c2f9da0
--- /dev/null
+++ b/resources/lang/ru-RU/notifications.php
@@ -0,0 +1,10 @@
+ 'Whoops!',
+ 'hello' => 'Hello!',
+ 'salutation' => 'Regards, :company_name',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/ru-RU/reconciliations.php b/resources/lang/ru-RU/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/ru-RU/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/ru-RU/recurring.php b/resources/lang/ru-RU/recurring.php
index 92099c71c..0c68638c4 100644
--- a/resources/lang/ru-RU/recurring.php
+++ b/resources/lang/ru-RU/recurring.php
@@ -2,19 +2,19 @@
return [
- 'recurring' => 'Recurring',
- 'every' => 'Every',
- 'period' => 'Period',
+ 'recurring' => 'Повторяющийся',
+ 'every' => 'Каждый',
+ 'period' => 'Период',
'times' => 'Times',
- 'daily' => 'Daily',
- 'weekly' => 'Weekly',
- 'monthly' => 'Monthly',
- 'yearly' => 'Yearly',
- 'custom' => 'Custom',
- 'days' => 'Day(s)',
- 'weeks' => 'Week(s)',
- 'months' => 'Month(s)',
- 'years' => 'Year(s)',
- 'message' => 'This is a recurring :type and the next :type will be automatically generated at :date',
+ 'daily' => 'Ежедневно',
+ 'weekly' => 'Еженедельно',
+ 'monthly' => 'Ежемесячно',
+ 'yearly' => 'Ежегодно',
+ 'custom' => 'Задать свое',
+ 'days' => 'день(дней)',
+ 'weeks' => 'Неделя(недель)',
+ 'months' => 'Месяц(Месяцев)',
+ 'years' => 'Год(лет)',
+ 'message' => 'This is a recurring :type and the next :type will be automatically generated on :date',
];
diff --git a/resources/lang/ru-RU/settings.php b/resources/lang/ru-RU/settings.php
index 80e200a07..fc7f38b28 100644
--- a/resources/lang/ru-RU/settings.php
+++ b/resources/lang/ru-RU/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Цифрой префикс',
'next' => 'Следующий номер',
'logo' => 'Логотип',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Умолчания',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Отправить до истечения дней',
'cron_command' => 'Cron-команда',
'schedule_time' => 'Время выполнения',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Внешний вид',
diff --git a/resources/lang/ru-RU/taxes.php b/resources/lang/ru-RU/taxes.php
index fe4a33d53..606f581d8 100644
--- a/resources/lang/ru-RU/taxes.php
+++ b/resources/lang/ru-RU/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Оценка',
'rate_percent' => 'Оценка (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Inclusive',
+ 'compound' => 'Compound',
];
diff --git a/resources/lang/ru-RU/transfers.php b/resources/lang/ru-RU/transfers.php
index 291c5d387..8b6118518 100644
--- a/resources/lang/ru-RU/transfers.php
+++ b/resources/lang/ru-RU/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'Из аккаунта',
'to_account' => 'В аккаунт',
+ 'messages' => [
+ 'delete' => ':from to :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/ru-RU/validation.php b/resources/lang/ru-RU/validation.php
index 2500623d7..abdd69690 100644
--- a/resources/lang/ru-RU/validation.php
+++ b/resources/lang/ru-RU/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'Настраиваемое сообщение',
],
+ 'invalid_currency' => 'Код :attribute неверен.',
+ 'invalid_amount' => 'Значение :attribute неверно.',
],
/*
diff --git a/resources/lang/sk-SK/accounts.php b/resources/lang/sk-SK/accounts.php
new file mode 100644
index 000000000..e6fbc75c2
--- /dev/null
+++ b/resources/lang/sk-SK/accounts.php
@@ -0,0 +1,14 @@
+ 'Názov účtu',
+ 'number' => 'Číslo',
+ 'opening_balance' => 'Počiatočný zostatok',
+ 'current_balance' => 'Aktuálny stav',
+ 'bank_name' => 'Názov banky',
+ 'bank_phone' => 'Telefón do banky',
+ 'bank_address' => 'Adresa banky',
+ 'default_account' => 'Predvolený účet',
+
+];
diff --git a/resources/lang/sk-SK/auth.php b/resources/lang/sk-SK/auth.php
new file mode 100644
index 000000000..8690bbc72
--- /dev/null
+++ b/resources/lang/sk-SK/auth.php
@@ -0,0 +1,39 @@
+ 'Profil',
+ 'logout' => 'Odhlásiť',
+ 'login' => 'Login',
+ 'login_to' => 'Prihlásiť sa a začať reláciu',
+ 'remember_me' => 'Zapamätať prihlásenie',
+ 'forgot_password' => 'Zabudol som moje heslo',
+ 'reset_password' => 'Obnovenie hesla',
+ 'enter_email' => 'Zadajte vašu e-mailovú adresu',
+ 'current_email' => 'Aktuálny E-mail',
+ 'reset' => 'Reset',
+ 'never' => 'nikdy',
+
+ 'password' => [
+ 'current' => 'Heslo',
+ 'current_confirm' => 'Potvrdenie hesla',
+ 'new' => 'Nové heslo',
+ 'new_confirm' => 'Potvrdenie hesla',
+ ],
+
+ 'error' => [
+ 'self_delete' => 'Chyba: Nemožete zmazať tento účet pokiaľ ste prihlásený!',
+ 'no_company' => 'Chyba: Žiadna spoločnosť priradené k vášmu kontu. Prosím, kontaktujte správcu systému.',
+ ],
+
+ 'failed' => 'Prihlasovacie údaje nie sú správne.',
+ 'disabled' => 'Tento účet je zakázaný. Prosím, kontaktujte správcu systému.',
+ 'throttle' => 'Prekročený limit pokusov. Skúste znovu o :seconds sekúnd.',
+
+ 'notification' => [
+ 'message_1' => 'Dostávate tento e-mail, pretože sme dostali žiadosť o obnovenie hesla pre tento účet.',
+ 'message_2' => 'Ak ste nežiadali o vytvorenie nového hesla, potom sa nevyžaduje žiadne ďalšia akcia.',
+ 'button' => 'Obnovenie hesla',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/bills.php b/resources/lang/sk-SK/bills.php
new file mode 100644
index 000000000..79eb56794
--- /dev/null
+++ b/resources/lang/sk-SK/bills.php
@@ -0,0 +1,58 @@
+ 'Číslo účtu',
+ 'bill_date' => 'Dátum vystavenia',
+ 'total_price' => 'Celková cena',
+ 'due_date' => 'Dátum splatnosti',
+ 'order_number' => 'Číslo objednávky',
+ 'bill_from' => 'Platba z',
+
+ 'quantity' => 'Množstvo',
+ 'price' => 'Cena',
+ 'sub_total' => 'Medzisúčet',
+ 'discount' => 'Zľava',
+ 'tax_total' => 'Daň celkom',
+ 'total' => 'Spolu',
+
+ 'item_name' => 'Názov položky|Názvy položiek',
+
+ 'show_discount' => ':discount% zľava',
+ 'add_discount' => 'Pridať zľavu',
+ 'discount_desc' => 'z celku',
+
+ 'payment_due' => 'Dátum splatnosti',
+ 'amount_due' => 'Splatná suma',
+ 'paid' => 'Zaplatené',
+ 'histories' => 'História',
+ 'payments' => 'Platby',
+ 'add_payment' => 'Pridať platbu',
+ 'mark_received' => 'Zmeniť na prijaté',
+ 'download_pdf' => 'Stiahnuť PDF',
+ 'send_mail' => 'Odoslať e-mail',
+
+ 'status' => [
+ 'draft' => 'Koncept',
+ 'received' => 'Prijaté',
+ 'partial' => 'Čiastočné',
+ 'paid' => 'Zaplatené',
+ ],
+
+ 'messages' => [
+ 'received' => 'Bolo úspěšně označené ako prijaté!',
+ 'draft' => 'To je Návrh faktúry, po odoslaní bude zobrazená v grafe.',
+
+ 'status' => [
+ 'created' => 'Vytvorené :date',
+ 'receive' => [
+ 'draft' => 'Nebola odoslaná',
+ 'received' => 'Doručené :date',
+ ],
+ 'paid' => [
+ 'await' => 'Čaká sa na platbu',
+ ],
+ ],
+ ],
+
+];
diff --git a/resources/lang/sk-SK/companies.php b/resources/lang/sk-SK/companies.php
new file mode 100644
index 000000000..3bf7b2282
--- /dev/null
+++ b/resources/lang/sk-SK/companies.php
@@ -0,0 +1,13 @@
+ 'Doména',
+ 'logo' => 'Logo',
+ 'manage' => 'Správa spoločností',
+ 'all' => 'Všetky spoločnosti',
+ 'error' => [
+ 'delete_active' => 'Chyba: Nemôžete odstrániť aktívnu spoločnosť, prosím najprv zmeňte aktívnu spoločnosť!',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/currencies.php b/resources/lang/sk-SK/currencies.php
new file mode 100644
index 000000000..dc49aeb4c
--- /dev/null
+++ b/resources/lang/sk-SK/currencies.php
@@ -0,0 +1,18 @@
+ 'Kód',
+ 'rate' => 'Sadzba',
+ 'default' => 'Predvolená mena',
+ 'decimal_mark' => 'Desatinná čiarka',
+ 'thousands_separator' => 'Oddeľovač tisícov',
+ 'precision' => 'Presnosť',
+ 'symbol' => [
+ 'symbol' => 'Symbol',
+ 'position' => 'Pozícia symbolu',
+ 'before' => 'Pred sumou',
+ 'after' => 'Po sume',
+ ]
+
+];
diff --git a/resources/lang/sk-SK/customers.php b/resources/lang/sk-SK/customers.php
new file mode 100644
index 000000000..720df49ae
--- /dev/null
+++ b/resources/lang/sk-SK/customers.php
@@ -0,0 +1,16 @@
+ 'Povoliť prihlásenie?',
+ 'user_created' => 'Používateľ vytvorený',
+
+ 'error' => [
+ 'email' => 'E-mail už bolo použitý.'
+ ],
+
+ 'notification' => [
+ 'message' => ':customer zaplatil sumu :amount za faktúru :invoice_number.',
+ 'button' => 'Zobraziť',
+ ],
+];
diff --git a/resources/lang/sk-SK/dashboard.php b/resources/lang/sk-SK/dashboard.php
new file mode 100644
index 000000000..30591d94f
--- /dev/null
+++ b/resources/lang/sk-SK/dashboard.php
@@ -0,0 +1,24 @@
+ 'Celkové príjmy',
+ 'receivables' => 'Pohľadávky',
+ 'open_invoices' => 'Nezaplatené faktúry',
+ 'overdue_invoices' => 'Faktúry po splatnosti',
+ 'total_expenses' => 'Celkové výdavky',
+ 'payables' => 'Záväzky',
+ 'open_bills' => 'Otvorené transakcie',
+ 'overdue_bills' => 'Faktúry po splatnosti',
+ 'total_profit' => 'Celkový zisk',
+ 'open_profit' => 'Otorené príjmy',
+ 'overdue_profit' => 'Príjmy po splatnosti',
+ 'cash_flow' => 'Cash Flow',
+ 'no_profit_loss' => 'Žiadna strata',
+ 'incomes_by_category' => 'Príjmy podľa kategórie',
+ 'expenses_by_category' => 'Výdaje podle kategorie',
+ 'account_balance' => 'Bilancia účtu',
+ 'latest_incomes' => 'Posledný príjem',
+ 'latest_expenses' => 'Posledný výdaj',
+
+];
diff --git a/resources/lang/sk-SK/demo.php b/resources/lang/sk-SK/demo.php
new file mode 100644
index 000000000..d546a7439
--- /dev/null
+++ b/resources/lang/sk-SK/demo.php
@@ -0,0 +1,16 @@
+ 'Hotovost',
+ 'categories_deposit' => 'Vklad',
+ 'categories_sales' => 'Predaje',
+ 'currencies_usd' => 'Americký dolar',
+ 'currencies_eur' => 'Euro',
+ 'currencies_gbp' => 'Britská libra',
+ 'currencies_try' => 'Turecká Lira',
+ 'taxes_exempt' => 'Oslobodené od daně',
+ 'taxes_normal' => 'Daň',
+ 'taxes_sales' => 'DPH',
+
+];
diff --git a/resources/lang/sk-SK/footer.php b/resources/lang/sk-SK/footer.php
new file mode 100644
index 000000000..544eee321
--- /dev/null
+++ b/resources/lang/sk-SK/footer.php
@@ -0,0 +1,10 @@
+ 'Verzia',
+ 'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
+ 'software' => 'Zadarmo účtovný softvér',
+
+];
diff --git a/resources/lang/sk-SK/general.php b/resources/lang/sk-SK/general.php
new file mode 100644
index 000000000..008f9a190
--- /dev/null
+++ b/resources/lang/sk-SK/general.php
@@ -0,0 +1,148 @@
+ 'Položka | Položky',
+ 'incomes' => 'Príjem | Príjmy',
+ 'invoices' => 'Faktúra | Faktúry',
+ 'revenues' => 'Zisk | Zisky',
+ 'customers' => 'Zákazník | Zákazníci',
+ 'expenses' => 'Výdaj | Výdaje',
+ 'bills' => 'Faktúra | Faktúry',
+ 'payments' => 'Platba | Platby',
+ 'vendors' => 'Dodávateľ | Dodavatelia',
+ 'accounts' => 'Účet | Účty',
+ 'transfers' => 'Prevod | Prevody',
+ 'transactions' => 'Transakcia | Transakcie',
+ 'reports' => 'Report|Reports',
+ 'settings' => 'Nastavenie | Nastavenia',
+ 'categories' => 'Kategória |Kategórie',
+ 'currencies' => 'Mena | Meny',
+ 'tax_rates' => 'Sadzba dane | Daňové sadzby',
+ 'users' => 'Užívateľ | Užívatelia',
+ 'roles' => 'Rola | Role',
+ 'permissions' => 'Oprávnenie | Oprávnenia',
+ 'modules' => 'Aplikácia | Aplikácie',
+ 'companies' => 'Spoločnosť | Spoločnosti',
+ 'profits' => 'Zisk | Zisky',
+ 'taxes' => 'Daň | Dane',
+ 'logos' => 'Logo | Logá',
+ 'pictures' => 'Obrázok | Obrázky',
+ 'types' => 'Typ | Typy',
+ 'payment_methods' => 'Spôsob platby | Spôsoby platieb',
+ 'compares' => 'Príjmy vs Výdaje | Príjmy vs Výdaje',
+ 'notes' => 'Poznámka | Poznámky',
+ 'totals' => 'Celkom | Celkom',
+ 'languages' => 'Jazyk | Jazyky',
+ 'updates' => 'Aktualizácia | Aktualizácie',
+ 'numbers' => 'Číslo | Čísla',
+ 'statuses' => 'Stav | Stav',
+ 'others' => 'Iný |Iné',
+ 'contacts' => 'Kontakt | Kontakty',
+ 'reconciliations' => 'Vyrovnanie | Vyrovnania',
+ 'deposits' => 'Vklad|vklady',
+ 'withdrawals' => 'Výber | Výbery',
+
+ 'dashboard' => 'Ovládací panel',
+ 'banking' => 'Bankovníctvo',
+ 'general' => 'Všeobecné',
+ 'no_records' => 'Žiádné záznamy.',
+ 'date' => 'Dátum',
+ 'amount' => 'Suma',
+ 'enabled' => 'Povolené',
+ 'disabled' => 'Vypnuté',
+ 'yes' => 'Áno',
+ 'no' => 'Nie',
+ 'na' => 'N/A',
+ 'daily' => 'Denne',
+ 'monthly' => 'Mesačne',
+ 'quarterly' => 'Štvrťročne',
+ 'yearly' => 'Ročne',
+ 'add' => 'Pridať',
+ 'add_new' => 'Pridať nový',
+ 'show' => 'Zobraziť',
+ 'edit' => 'Upraviť',
+ 'delete' => 'Odstrániť',
+ 'send' => 'Odoslať',
+ 'download' => 'Stiahnuť',
+ 'delete_confirm' => 'Potvrdiť zmazanie :name :type?',
+ 'name' => 'Názov',
+ 'email' => 'E-mail',
+ 'tax_number' => 'DIČ',
+ 'phone' => 'Telefón',
+ 'address' => 'Adresa',
+ 'website' => 'Webstránka',
+ 'actions' => 'Akcie',
+ 'description' => 'Popis',
+ 'manage' => 'Spravovať',
+ 'code' => 'Kód',
+ 'alias' => 'Alias',
+ 'balance' => 'Zostatok',
+ 'reference' => 'Referencia',
+ 'attachment' => 'Príloha',
+ 'change' => 'Zmena',
+ 'switch' => 'Prepnúť',
+ 'color' => 'Farba',
+ 'save' => 'Uložiť',
+ 'cancel' => 'Zrušiť',
+ 'loading' => 'Načítávanie...',
+ 'from' => 'Od',
+ 'to' => 'Pre',
+ 'print' => 'Vytlačiť',
+ 'search' => 'Hľadať',
+ 'search_placeholder' => 'Zadaj pre vyhľadávanie...',
+ 'filter' => 'Filter',
+ 'help' => 'Pomoc',
+ 'all' => 'Všetko',
+ 'all_type' => 'Všetky :type',
+ 'upcoming' => 'Nadchádzajúce',
+ 'created' => 'Vytvorené',
+ 'id' => 'ID',
+ 'more_actions' => 'Viac akcií',
+ 'duplicate' => 'Duplikovať',
+ 'unpaid' => 'Nezaplatený',
+ 'paid' => 'Zaplatené',
+ 'overdue' => 'Po splatnosti',
+ 'partially' => 'Čiastočné',
+ 'partially_paid' => 'Čiastočne zaplatené',
+ 'export' => 'Exportovať',
+ 'finish' => 'Dokončiť',
+ 'wizard' => 'Sprievodca',
+ 'skip' => 'Preskočiť',
+ 'enable' => 'Zapnúť',
+ 'disable' => 'Zakázať',
+ 'select_all' => 'Vybrať všetko',
+ 'unselect_all' => 'Zrušiť výber',
+ 'go_to' => 'Prejsť na :name',
+ 'created_date' => 'Dátum vytvorenia',
+ 'period' => 'Obdobie',
+ 'start' => 'Štart',
+ 'end' => 'Koniec',
+ 'clear' => 'Vymazať',
+ 'difference' => 'Rozdiel',
+
+ 'title' => [
+ 'new' => 'Nový :type',
+ 'edit' => 'Editovať :type',
+ 'create' => 'Vytvoriť :type',
+ 'send' => 'Odoslať :type',
+ 'get' => 'Získať :type',
+ ],
+
+ 'form' => [
+ 'enter' => 'Zadať :field',
+ 'select' => [
+ 'field' => '- Vybrať :field -',
+ 'file' => 'Vybrať súbor',
+ ],
+ 'no_file_selected' => 'Nebol zvolený žiadny súbor...',
+ ],
+
+ 'date_range' => [
+ 'today' => 'Dnes',
+ 'yesterday' => 'Včera',
+ 'last_days' => 'Posledných 7 dní',
+ 'this_month' => 'Aktuálny mesiac',
+ 'last_month' => 'Posledný mesiac',
+ ],
+];
diff --git a/resources/lang/sk-SK/header.php b/resources/lang/sk-SK/header.php
new file mode 100644
index 000000000..e8c8564f2
--- /dev/null
+++ b/resources/lang/sk-SK/header.php
@@ -0,0 +1,16 @@
+ 'Zmena jazyka',
+ 'last_login' => 'Posledné prihlásenie :time',
+ 'notifications' => [
+ 'counter' => '{0} Nemáš žiadné oznámenie|{1} Máš :count oznámenie|[2,*] Máš :count oznámení',
+ 'overdue_invoices' => '{1} :count faktúra po splatnosti|[2,*] :count faktúry po splatnosti',
+ 'upcoming_bills' => '{1} :count blížíacia sa splatnosť|[2,*] :count blížiace se splatnosti platieb',
+ 'items_stock' => '{1} :count položka nie na sklade|[2,*] :count položiek nie sú na sklade',
+ 'view_all' => 'Zobraziť všetko'
+ ],
+ 'docs_link' => 'https://akaunting.com/docs',
+
+];
diff --git a/resources/lang/sk-SK/import.php b/resources/lang/sk-SK/import.php
new file mode 100644
index 000000000..9e7250a07
--- /dev/null
+++ b/resources/lang/sk-SK/import.php
@@ -0,0 +1,9 @@
+ 'Importovať',
+ 'title' => 'Importovať :type',
+ 'message' => 'Povolené typy súborov: XLS, XLSX. Stiahnite vzorový súbor.',
+
+];
diff --git a/resources/lang/sk-SK/install.php b/resources/lang/sk-SK/install.php
new file mode 100644
index 000000000..37b2492e7
--- /dev/null
+++ b/resources/lang/sk-SK/install.php
@@ -0,0 +1,44 @@
+ 'Ďalší',
+ 'refresh' => 'Obnoviť',
+
+ 'steps' => [
+ 'requirements' => 'Spýtajte sa svojho poskytovateľa hostingu aby ste opravili chyby!',
+ 'language' => 'Krok č. 1/3: Výber jazyka',
+ 'database' => 'Krok 2/3: Nastavenie databázy',
+ 'settings' => 'Krok 3/3: Spoločnosť a Admin Podrobnosti',
+ ],
+
+ 'language' => [
+ 'select' => 'Zvoľte jazyk',
+ ],
+
+ 'requirements' => [
+ 'enabled' => ':feature musí byť povolený!',
+ 'disabled' => ':feature musí byť zakázaná!',
+ 'extension' => ':extension modul musí byť nainštalovaný a načítaný!',
+ 'directory' => ':directory adresár musí byť zapisovateľný!',
+ ],
+
+ 'database' => [
+ 'hostname' => 'Hostname',
+ 'username' => 'Meno používateľa',
+ 'password' => 'Heslo',
+ 'name' => 'Databáza',
+ ],
+
+ 'settings' => [
+ 'company_name' => 'Názov spoločnosti',
+ 'company_email' => 'Email spoločnosti',
+ 'admin_email' => 'E-mail administrátora',
+ 'admin_password' => 'Admin heslo',
+ ],
+
+ 'error' => [
+ 'connection' => 'Chyba: Nedá sa pripojiť k databáze! Prosím, uistite sa, že údaje sú správne.',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/invoices.php b/resources/lang/sk-SK/invoices.php
new file mode 100644
index 000000000..11a186be8
--- /dev/null
+++ b/resources/lang/sk-SK/invoices.php
@@ -0,0 +1,68 @@
+ 'Číslo faktúry',
+ 'invoice_date' => 'Dátum fakturácie',
+ 'total_price' => 'Celková cena',
+ 'due_date' => 'Dátum splatnosti',
+ 'order_number' => 'Číslo objednávky',
+ 'bill_to' => 'Odberateľ',
+
+ 'quantity' => 'Množstvo',
+ 'price' => 'Cena',
+ 'sub_total' => 'Medzisúčet',
+ 'discount' => 'Zľava',
+ 'tax_total' => 'Daň celkom',
+ 'total' => 'Spolu',
+
+ 'item_name' => 'Názov položky|Názvy položiek',
+
+ 'show_discount' => ': zľava % zľava',
+ 'add_discount' => 'Pridať zľavu',
+ 'discount_desc' => 'z celku',
+
+ 'payment_due' => 'Splatnosť',
+ 'paid' => 'Zaplatené',
+ 'histories' => 'História',
+ 'payments' => 'Platby',
+ 'add_payment' => 'Pridať platbu',
+ 'mark_paid' => 'Zmeniť na zaplatené',
+ 'mark_sent' => 'Zmeniť na odoslané',
+ 'download_pdf' => 'Stiahnuť PDF',
+ 'send_mail' => 'Odoslať e-mail',
+ 'all_invoices' => 'Prihláste sa pre zobrazenie všetkých faktúr',
+
+ 'status' => [
+ 'draft' => 'Koncept',
+ 'sent' => 'Odoslané',
+ 'viewed' => 'Zobrazené',
+ 'approved' => 'Schválené',
+ 'partial' => 'Čiastočný',
+ 'paid' => 'Zaplatené',
+ ],
+
+ 'messages' => [
+ 'email_sent' => 'Email s faktúrou bol úspešne odoslaný!',
+ 'marked_sent' => 'Faktúra bola označená ako odoslaná!',
+ 'email_required' => 'Žiadna e-mailová adresa pre tohto zákazníka!',
+ 'draft' => 'To je Návrh faktúry, po odoslaní bude zobrazená v grafe.',
+
+ 'status' => [
+ 'created' => 'Vytvorené :date',
+ 'send' => [
+ 'draft' => 'Nebola odoslaná',
+ 'sent' => 'Odoslané :date',
+ ],
+ 'paid' => [
+ 'await' => 'Čaká sa na platbu',
+ ],
+ ],
+ ],
+
+ 'notification' => [
+ 'message' => 'Dostávate tento e-mail, pretože máte prichádzajúce :amount faktúry pre :customer zákazníka.',
+ 'button' => 'Zaplatiť teraz',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/items.php b/resources/lang/sk-SK/items.php
new file mode 100644
index 000000000..dfff5df64
--- /dev/null
+++ b/resources/lang/sk-SK/items.php
@@ -0,0 +1,18 @@
+ 'Množstvo|množstvo',
+ 'sales_price' => 'Predajná cena',
+ 'purchase_price' => 'Nákúpna cena',
+ 'sku' => 'Kód SKU',
+
+ 'notification' => [
+ 'message' => [
+ 'reminder' => 'Dostávate tento e-mail, pretože pre tovar :name zostáva už len :quantity dostupných na sklade.',
+ 'out_of_stock' => 'Dostávate tento e-mail, pretože tovar :name práve dochádza na sklade.',
+ ],
+ 'button' => 'Zobraziť teraz',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/messages.php b/resources/lang/sk-SK/messages.php
new file mode 100644
index 000000000..56595e2b4
--- /dev/null
+++ b/resources/lang/sk-SK/messages.php
@@ -0,0 +1,29 @@
+ [
+ 'added' => ':type pridaný!',
+ 'updated' => ':type aktualizovaný!',
+ 'deleted' => ':type odstránený!',
+ 'duplicated' => ':type duplicitný!',
+ 'imported' => ':type importovaný!',
+ 'enabled' => ': type povolený!',
+ 'disabled' => ':type zakázaný!',
+ ],
+ 'error' => [
+ 'over_payment' => 'Chyba: Platba nebola pridaná! Suma, ktor[ ste zadali prekročila celkovú sumu.',
+ 'not_user_company' => 'Chyba: Nemôžete spravovať túto spoločnosť!',
+ 'customer' => 'Chyba: Používateľ nebol vytvorený! :name už používa táto e-mail adresa.',
+ 'no_file' => 'Chyba: Žiadny súbor nebol vybratý!',
+ 'last_category' => 'Chyba: Nemožno zmazať poslednú kategóriu :type!',
+ 'invalid_token' => 'Chyba: Token je neplatný!',
+ 'import_column' => 'Error: :message Názov hárka: :sheet. Číslo riadku: :line.',
+ 'import_sheet' => 'Chyba: Názov hárka nie je platný. Prosím, skontrolujte podľa vzorového súboru.',
+ ],
+ 'warning' => [
+ 'deleted' => 'Upozornenie: Nemôžete odstrániť :name , pretože má :text súvisiaci.',
+ 'disabled' => 'Upozornenie: Nemôžete zakázať : názov , pretože má :text súvisiaci.',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/modules.php b/resources/lang/sk-SK/modules.php
new file mode 100644
index 000000000..becca5f29
--- /dev/null
+++ b/resources/lang/sk-SK/modules.php
@@ -0,0 +1,80 @@
+ 'API Token',
+ 'api_token' => 'Token',
+ 'my_apps' => 'Moje aplikácie',
+ 'top_paid' => 'Top platené',
+ 'new' => 'Nový',
+ 'top_free' => 'Top Free',
+ 'free' => 'FREE',
+ 'search' => 'Hľadať',
+ 'install' => 'Inštalovať',
+ 'buy_now' => 'Kúpiť teraz',
+ 'token_link' => 'Kliknite tu a získajte Váš API token.',
+ 'no_apps' => 'Neexistujú žiadne aplikácie v tejto kategórii zatiaľ.',
+ 'developer' => 'Ste vývojár? tu sa môžete naučiť, ako vytvoriť aplikáciu a začať predávať ešte dnes!',
+
+ 'recommended_apps' => 'Odporúčané aplikácie',
+
+ 'about' => 'O aplikácii',
+
+ 'added' => 'Pridané',
+ 'updated' => 'Zmenené',
+ 'compatibility' => 'Kompatibilita',
+
+ 'installed' => ':module inštalovaný',
+ 'uninstalled' => ':module odinštalovaný',
+ //'updated' => ':module updated',
+ 'enabled' => ':module povolený',
+ 'disabled' => ': modul vypnutý',
+
+ 'tab' => [
+ 'installation' => 'Inštalácia',
+ 'faq' => 'Najčastejšie otázky',
+ 'changelog' => 'Zoznam zmien',
+ 'reviews' => 'Hodnotenia',
+ ],
+
+ 'installation' => [
+ 'header' => 'Inštalácia',
+ 'download' => 'Sťahovanie :module súboru.',
+ 'unzip' => 'Extrahovanie :modul súboru.',
+ 'file_copy' => 'Kopírovanie súborov modulu :module .',
+ 'migrate' => 'Aplikovanie aktualizácií modulu :module.',
+ 'finish' => 'Aktualizácia bola úspešne nainštalovaná. Budete presmerovaný na Centrum Aktualizácií.',
+ 'install' => 'Inštalácia :modul súboru.',
+ ],
+
+ 'errors' => [
+ 'download' => 'Modul :module sa nepodarilo stiahnuť.',
+ 'upload' => 'Práve stiahnutý modul :module sa nepodarilo uložiť!',
+ 'unzip' => 'Modul :module sa nepodarilo extrahovať z archívu!',
+ 'file_copy' => 'Nepodarilo sa nakopírvať súbory modulu:module!',
+ 'migrate' => 'Migrácia modulu :module zlyhala!',
+ 'migrate core' => 'Modul :module je aktuálny, preto nie je možné vykonať jeho aktualizáciu.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Nainštalované',
+ ],
+
+ 'button' => [
+ 'uninstall' => 'Odinštalovať',
+ 'disable' => 'Zakázať',
+ 'enable' => 'Zapnúť',
+ ],
+
+ 'my' => [
+ 'purchased' => 'Zakúpené',
+ 'installed' => 'Nainštalované',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Pridať recenziu'
+ ],
+ 'na' => 'Nie sú tu žiadne hodnotenia.'
+ ]
+];
diff --git a/resources/lang/sk-SK/notifications.php b/resources/lang/sk-SK/notifications.php
new file mode 100644
index 000000000..3e06bd5c0
--- /dev/null
+++ b/resources/lang/sk-SK/notifications.php
@@ -0,0 +1,10 @@
+ 'Ops... !',
+ 'hello' => 'Hello!',
+ 'salutation' => 'S poydravom, :company_name',
+ 'subcopy' => 'Ak sa vyskytnú problémy s kliknutím ":text" tlačidlo, skopírujte a prilepte adresu URL do webového prehľadávača: [:url](:url)',
+
+];
diff --git a/resources/lang/sk-SK/pagination.php b/resources/lang/sk-SK/pagination.php
new file mode 100644
index 000000000..5d7c7b6b4
--- /dev/null
+++ b/resources/lang/sk-SK/pagination.php
@@ -0,0 +1,9 @@
+ '« Predchádzajúca',
+ 'next' => 'Nasledujúca »',
+ 'showing' => 'Zobrazené :first do :last z :total :type',
+
+];
diff --git a/resources/lang/sk-SK/passwords.php b/resources/lang/sk-SK/passwords.php
new file mode 100644
index 000000000..39e2371d8
--- /dev/null
+++ b/resources/lang/sk-SK/passwords.php
@@ -0,0 +1,22 @@
+ 'Heslo sa musí zhodovať a obsahovať najmenej šesť znakov.',
+ 'reset' => 'Heslo bolo zmenené!',
+ 'sent' => 'Pripomienka k zmene hesla bola odoslaná!',
+ 'token' => 'Klúč pre obnovu hesla je neplatný.',
+ 'user' => "Nepodarilo sa nájsť používateľa s touto e-mailovou adresou.",
+
+];
diff --git a/resources/lang/sk-SK/reconciliations.php b/resources/lang/sk-SK/reconciliations.php
new file mode 100644
index 000000000..5e17c0ad0
--- /dev/null
+++ b/resources/lang/sk-SK/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Vyrovanať',
+ 'reconciled' => 'Vyrovanané',
+ 'closing_balance' => 'Zostatok po ukončení',
+ 'unreconciled' => 'Nevyrovnané',
+ 'list_transactions' => 'Zoznam transakcií',
+ 'start_date' => 'Dátum začiatku',
+ 'end_date' => 'Dátum ukončenia',
+ 'cleared_amount' => 'Vyrovnaná suma',
+
+];
diff --git a/resources/lang/sk-SK/recurring.php b/resources/lang/sk-SK/recurring.php
new file mode 100644
index 000000000..ac9593b04
--- /dev/null
+++ b/resources/lang/sk-SK/recurring.php
@@ -0,0 +1,20 @@
+ 'Opakujúce sa',
+ 'every' => 'Každé',
+ 'period' => 'Obdobie',
+ 'times' => 'Krát',
+ 'daily' => 'Denne',
+ 'weekly' => 'Týždenne',
+ 'monthly' => 'Mesačne',
+ 'yearly' => 'Ročne',
+ 'custom' => 'Vlastné',
+ 'days' => 'Deň(dni)',
+ 'weeks' => 'Týždeň(ov)',
+ 'months' => 'Mesiac(e)',
+ 'years' => 'Rok(y)',
+ 'message' => 'Toto je opakujúci sa :type a ďalši :type bude automaticky vygenerovaný v :date',
+
+];
diff --git a/resources/lang/sk-SK/reports.php b/resources/lang/sk-SK/reports.php
new file mode 100644
index 000000000..5cd8ec059
--- /dev/null
+++ b/resources/lang/sk-SK/reports.php
@@ -0,0 +1,30 @@
+ 'Tento rok',
+ 'previous_year' => 'Predchádzajúci rok',
+ 'this_quarter' => 'Tento štvrťrok',
+ 'previous_quarter' => 'Predchádzajúci štvrťrok',
+ 'last_12_months' => 'Posledných 12 mesiacov',
+ 'profit_loss' => 'Zisky & straty',
+ 'gross_profit' => 'Zisk brutto',
+ 'net_profit' => 'Čistý zisk',
+ 'total_expenses' => 'Celkové výdavky',
+ 'net' => 'NET',
+
+ 'summary' => [
+ 'income' => 'Príjem Zhrnutie',
+ 'expense' => 'Náklad Zhrnutie',
+ 'income_expense' => 'Príjmy vs náklady',
+ 'tax' => 'Súhrnné dane',
+ ],
+
+ 'quarter' => [
+ '1' => 'Jan-Mar',
+ '2' => 'Apríl-Jún',
+ '3' => 'Júl-September',
+ '4' => 'Október-December',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/settings.php b/resources/lang/sk-SK/settings.php
new file mode 100644
index 000000000..b5170d07c
--- /dev/null
+++ b/resources/lang/sk-SK/settings.php
@@ -0,0 +1,102 @@
+ [
+ 'name' => 'Názov',
+ 'email' => 'E-mail',
+ 'phone' => 'Telefón',
+ 'address' => 'Adresa',
+ 'logo' => 'Logo',
+ ],
+ 'localisation' => [
+ 'tab' => 'Lokalizácia',
+ 'date' => [
+ 'format' => 'Formát dátumu',
+ 'separator' => 'Separátor dátumu',
+ 'dash' => 'Pomlčka (-)',
+ 'dot' => 'Bodka (.)',
+ 'comma' => 'Čiarka ()',
+ 'slash' => 'Lomka (/)',
+ 'space' => 'Medzera ( )',
+ ],
+ 'timezone' => 'Časové pásmo',
+ 'percent' => [
+ 'title' => 'Percento (%) Pozícia',
+ 'before' => 'Pred číslom',
+ 'after' => 'Za číslom',
+ ],
+ ],
+ 'invoice' => [
+ 'tab' => 'Faktúra',
+ 'prefix' => 'Dľžka prefix-u',
+ 'digit' => 'Počet číslic',
+ 'next' => 'Ďalšie číslo',
+ 'logo' => 'Logo',
+ 'custom' => 'Vlastné',
+ 'item_name' => 'Názov položky',
+ 'item' => 'Položky',
+ 'product' => 'Produkty',
+ 'service' => 'Služby',
+ 'price_name' => 'Názov ceny',
+ 'price' => 'Cena',
+ 'rate' => 'Sadzba',
+ 'quantity_name' => 'Názov množstva',
+ 'quantity' => 'Množstvo',
+ ],
+ 'default' => [
+ 'tab' => 'Predvolené',
+ 'account' => 'Predvolený účet',
+ 'currency' => 'Predvolená mena',
+ 'tax' => 'Predvolené sadzba dane',
+ 'payment' => 'Predvolený spôsob platby',
+ 'language' => 'Predvolený jazyk',
+ ],
+ 'email' => [
+ 'protocol' => 'Protokol',
+ 'php' => 'PHP Mail',
+ 'smtp' => [
+ 'name' => 'SMTP',
+ 'host' => 'SMTP Host',
+ 'port' => 'SMTP Port',
+ 'username' => 'SMTP Username',
+ 'password' => 'SMTP Password',
+ 'encryption' => 'Zabezpečenia SMTP',
+ 'none' => 'Žiadne',
+ ],
+ 'sendmail' => 'Sendmail',
+ 'sendmail_path' => 'Sendmail cesta',
+ 'log' => 'Log e-mailov',
+ ],
+ 'scheduling' => [
+ 'tab' => 'Plánovanie',
+ 'send_invoice' => 'Odoslať pripomenutie faktúry',
+ 'invoice_days' => 'Poslať po dni splatnosti',
+ 'send_bill' => 'Odoslať pripomenutie na platbu',
+ 'bill_days' => 'Odoslať pred dňom splatnosti',
+ 'cron_command' => 'Cron príkaz',
+ 'schedule_time' => 'Hodinu pre štart',
+ 'send_item_reminder'=> 'Odoslať pripomenutie na položku',
+ 'item_stocks' => 'Odoslať keď bude naskladnené',
+ ],
+ 'appearance' => [
+ 'tab' => 'Vzhľad',
+ 'theme' => 'Téma',
+ 'light' => 'Svetlá',
+ 'dark' => 'Tmavá',
+ 'list_limit' => 'Počet záznamov na stránku',
+ 'use_gravatar' => 'Použite Gravatar',
+ ],
+ 'system' => [
+ 'tab' => 'Systém',
+ 'session' => [
+ 'lifetime' => 'Doba platnosti sedenia (v minútach)',
+ 'handler' => 'Správca sedenia',
+ 'file' => 'Súbor',
+ 'database' => 'Databáza',
+ ],
+ 'file_size' => 'Max veľkosť (MB)',
+ 'file_types' => 'Povolené typy súborov',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/taxes.php b/resources/lang/sk-SK/taxes.php
new file mode 100644
index 000000000..1cd78d5d2
--- /dev/null
+++ b/resources/lang/sk-SK/taxes.php
@@ -0,0 +1,8 @@
+ 'Sadzba',
+ 'rate_percent' => 'Sadzba (%)',
+
+];
diff --git a/resources/lang/sk-SK/transfers.php b/resources/lang/sk-SK/transfers.php
new file mode 100644
index 000000000..fa8876501
--- /dev/null
+++ b/resources/lang/sk-SK/transfers.php
@@ -0,0 +1,12 @@
+ 'Z účtu',
+ 'to_account' => 'Na účet',
+
+ 'messages' => [
+ 'delete' => 'Z :from na :to (:amount)',
+ ],
+
+];
diff --git a/resources/lang/sk-SK/updates.php b/resources/lang/sk-SK/updates.php
new file mode 100644
index 000000000..a606bcbf0
--- /dev/null
+++ b/resources/lang/sk-SK/updates.php
@@ -0,0 +1,15 @@
+ 'Nainštalovaná verzia',
+ 'latest_version' => 'Najnovšia verzia',
+ 'update' => 'Aktualizácia Akaunting-u na :version verziu',
+ 'changelog' => 'Zoznam zmien',
+ 'check' => 'Skontrolovať',
+ 'new_core' => 'K dispozícii je aktualizovaná verzia z Akaunting.',
+ 'latest_core' => 'Gratulujem! Máte najnovšiu verziu Akaunting. Budúce aktualizácie zabezpečenia sa použije automaticky.',
+ 'success' => 'Proces aktualizácie bol úspešne dokončený.',
+ 'error' => 'Proces aktualizácie zlyhal, prosím, skúste to znova.',
+
+];
diff --git a/resources/lang/sk-SK/validation.php b/resources/lang/sk-SK/validation.php
new file mode 100644
index 000000000..8e853d6de
--- /dev/null
+++ b/resources/lang/sk-SK/validation.php
@@ -0,0 +1,121 @@
+ ':attribute musí byť akceptovaný.',
+ 'active_url' => ':attribute má neplatnú URL adresu.',
+ 'after' => ':attribute musí byť dátum po :date.',
+ 'after_or_equal' => ':attribute musí byť dátum po alebo presne :date.',
+ 'alpha' => ':attribute môže obsahovať len písmená.',
+ 'alpha_dash' => ':attribute môže obsahovať len písmená, čísla a pomlčky.',
+ 'alpha_num' => ':attribute môže obsahovať len písmená, čísla.',
+ 'array' => ':attribute musí byť pole.',
+ 'before' => ':attribute musí byť dátum pred :date.',
+ 'before_or_equal' => ':attribute musí byť dátum pred alebo presne :date.',
+ 'between' => [
+ 'numeric' => ':attribute musí mať rozsah :min - :max.',
+ 'file' => ':attribute musí mať rozsah :min - :max kilobajtov.',
+ 'string' => ':attribute musí mať rozsah :min - :max znakov.',
+ 'array' => ':attribute musí mať rozsah :min - :max prvkov.',
+ ],
+ 'boolean' => ':attribute musí byť pravda alebo nepravda.',
+ 'confirmed' => ':attribute konfirmácia sa nezhoduje.',
+ 'date' => ':attribute má neplatný dátum.',
+ 'date_format' => ':attribute sa nezhoduje s formátom :format.',
+ 'different' => ':attribute a :other musia byť odlišné.',
+ 'digits' => ':attribute musí mať :digits číslic.',
+ 'digits_between' => ':attribute musí mať rozsah :min až :max číslic.',
+ 'dimensions' => ':attribute má neplatné rozmery obrázku.',
+ 'distinct' => ':attribute je duplicitný.',
+ 'email' => ':attribute má neplatný formát.',
+ 'exists' => 'označený :attribute je neplatný.',
+ 'file' => ':attribute musí byť súbor.',
+ 'filled' => ':attribute je požadované.',
+ 'image' => ':attribute musí byť obrázok.',
+ 'in' => 'označený :attribute je neplatný.',
+ 'in_array' => ':attribute sa nenachádza v :other.',
+ 'integer' => ':attribute musí byť celé číslo.',
+ 'ip' => ':attribute musí byť platná IP adresa.',
+ 'json' => ':attribute musí byť platný JSON reťazec.',
+ 'max' => [
+ 'numeric' => ':attribute nemôže byť väčší ako :max.',
+ 'file' => ':attribute nemôže byť väčší ako :max kilobajtov.',
+ 'string' => ':attribute nemôže byť väčší ako :max znakov.',
+ 'array' => ':attribute nemôže mať viac ako :max prvkov.',
+ ],
+ 'mimes' => ':attribute musí byť súbor s koncovkou: :values.',
+ 'mimetypes' => ':attribute musí byť súbor s koncovkou: :values.',
+ 'min' => [
+ 'numeric' => ':attribute musí mať aspoň :min.',
+ 'file' => ':attribute musí mať aspoň :min kilobajtov.',
+ 'string' => ':attribute musí mať aspoň :min znakov.',
+ 'array' => ':attribute musí mať aspoň :min prvkov.',
+ ],
+ 'not_in' => 'označený :attribute je neplatný.',
+ 'numeric' => ':attribute musí byť číslo.',
+ 'present' => ':attribute musí byť odoslaný.',
+ 'regex' => ':attribute má neplatný formát.',
+ 'required' => ':attribute je požadované.',
+ 'required_if' => ':attribute je požadované keď :other je :value.',
+ 'required_unless' => ':attribute je požadované, okrem prípadu keď :other je v :values.',
+ 'required_with' => ':attribute je požadované keď :values je prítomné.',
+ 'required_with_all' => ':attribute je požadované ak :values je nastavené.',
+ 'required_without' => ':attribute je požadované keď :values nie je prítomné.',
+ 'required_without_all' => ':attribute je požadované ak žiadne z :values nie je nastavené.',
+ 'same' => ':attribute a :other sa musia zhodovať.',
+ 'size' => [
+ 'numeric' => ':attribute musí byť :size.',
+ 'file' => ':attribute musí mať :size kilobajtov.',
+ 'string' => ':attribute musí mať :size znakov.',
+ 'array' => ':attribute musí obsahovať :size prvkov.',
+ ],
+ 'string' => ':attribute musí byť reťazec znakov.',
+ 'timezone' => ':attribute musí byť platné časové pásmo.',
+ 'unique' => ':attribute už existuje.',
+ 'uploaded' => 'Nepodarilo sa nahrať :attribute.',
+ 'url' => ':attribute musí mať formát URL.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'vlastná správa',
+ ],
+ 'invalid_currency' => 'Neplatný :attribute kód.',
+ 'invalid_amount' => 'Zvolená hodnota pre :attribute je neplatná.',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/sq-AL/bills.php b/resources/lang/sq-AL/bills.php
index 1b45ad49b..5df5dd495 100644
--- a/resources/lang/sq-AL/bills.php
+++ b/resources/lang/sq-AL/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Fatura shënohet si i marrë me sukses!',
+ 'draft' => 'Ky është një faturë DRAFT dhe do të pasqyrohet në skema pas marrjes së tij.',
+
+ 'status' => [
+ 'created' => 'Krijuar më :date',
+ 'receive' => [
+ 'draft' => 'Nuk është dërguar',
+ 'received' => 'Pranuar më :date',
+ ],
+ 'paid' => [
+ 'await' => 'Duke pritur pagesen',
+ ],
+ ],
],
];
diff --git a/resources/lang/sq-AL/customers.php b/resources/lang/sq-AL/customers.php
index 1ff89940d..41e8e9ac5 100644
--- a/resources/lang/sq-AL/customers.php
+++ b/resources/lang/sq-AL/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Emaili tashmë është marrë.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer bëri :amount pagesën në numrin e faturës :invoice_number.',
+ 'button' => 'Shfaq',
+ ],
];
diff --git a/resources/lang/sq-AL/footer.php b/resources/lang/sq-AL/footer.php
index 2972a0693..fd24cfd0d 100644
--- a/resources/lang/sq-AL/footer.php
+++ b/resources/lang/sq-AL/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Versioni',
'powered' => 'Mundësuar nga Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Program Kontabiliteti Falas',
];
diff --git a/resources/lang/sq-AL/general.php b/resources/lang/sq-AL/general.php
index def33fadf..10ac8ebba 100644
--- a/resources/lang/sq-AL/general.php
+++ b/resources/lang/sq-AL/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Numri | Numrat',
'statuses' => 'Statusi | Statuset',
'others' => 'Tjetër | Të tjera',
+ 'contacts' => 'Kontakti | Kontaktet',
+ 'reconciliations' => 'Pajtimi | Pajtimet',
+ 'deposits' => 'Depozita | Depozitat',
+ 'withdrawals' => 'Tërheqje | Tërheqjet',
'dashboard' => 'Paneli Kryesor',
'banking' => 'Veprime Bankare',
@@ -81,6 +85,7 @@ return [
'color' => 'Ngjyra',
'save' => 'Ruaj',
'cancel' => 'Anulo',
+ 'loading' => 'Në ngarkim…',
'from' => 'Nga',
'to' => 'Te',
'print' => 'Printo',
@@ -101,12 +106,27 @@ return [
'partially' => 'Pjesërisht',
'partially_paid' => 'I paguar pjesërisht',
'export' => 'Eksporto',
+ 'finish' => 'Përfundo',
+ 'wizard' => 'Magjistar',
+ 'skip' => 'Anashkalo',
'enable' => 'Aktivizo',
'disable' => 'Çaktivizo',
+ 'select_all' => 'Zgjidh të gjitha',
+ 'unselect_all' => 'Hiqni të gjithë',
+ 'go_to' => 'Shko te :name',
+ 'created_date' => 'Data e Krijuar',
+ 'period' => 'Periudhë',
+ 'start' => 'Fillo',
+ 'end' => 'Përfundo',
+ 'clear' => 'Pastro',
+ 'difference' => 'Diferencë',
'title' => [
'new' => 'I ri :type',
'edit' => 'Modifiko :type',
+ 'create' => 'Krijo :type',
+ 'send' => 'Dërgo :type',
+ 'get' => 'Merr :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Asnjë skedar i përzgjedhur...',
],
+ 'date_range' => [
+ 'today' => 'Sot',
+ 'yesterday' => 'Dje',
+ 'last_days' => ':day Ditët e Fundit',
+ 'this_month' => 'Këtë Muaj',
+ 'last_month' => 'Muaji i Shkuar',
+ ],
];
diff --git a/resources/lang/sq-AL/header.php b/resources/lang/sq-AL/header.php
index 6dd440ea2..2ee1bef19 100644
--- a/resources/lang/sq-AL/header.php
+++ b/resources/lang/sq-AL/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count artikulli jashtë magazinës | [2,*] :count artikuj jashtë magazinës',
'view_all' => 'Shiko te Gjitha'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/sq-AL/invoices.php b/resources/lang/sq-AL/invoices.php
index 00b32522b..11d836233 100644
--- a/resources/lang/sq-AL/invoices.php
+++ b/resources/lang/sq-AL/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Shënoje të Dërguar',
'download_pdf' => 'Shkarko PDF',
'send_mail' => 'Dërgo Email',
+ 'all_invoices' => 'Identifikohu për të parë të gjitha faturat',
'status' => [
'draft' => 'Draft',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Emaili i faturës është dërguar me sukses!',
'marked_sent' => 'Fatura shënohet si e dërguar me sukses!',
'email_required' => 'Ska adresë e-mail për këtë klient!',
+ 'draft' => 'Kjo është një faturë DRAFT dhe do të pasqyrohet në skema pasi të jetë dërguar.',
+
+ 'status' => [
+ 'created' => 'Krijuar më :date',
+ 'send' => [
+ 'draft' => 'Nuk është dërguar',
+ 'sent' => 'Dërguar më :date',
+ ],
+ 'paid' => [
+ 'await' => 'Duke pritur pagesen',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/sq-AL/items.php b/resources/lang/sq-AL/items.php
index 3fe270804..85f09ac45 100644
--- a/resources/lang/sq-AL/items.php
+++ b/resources/lang/sq-AL/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Ju po merrni këtë email sepse :name po mbaron.',
+ 'message' => [
+ 'reminder' => 'Ju po merrni këtë email sepse vetëm :quantity i :name ka mbetur.',
+ 'out_of_stock' => 'Ju po merrni këtë email sepse :name po mbaron.',
+ ],
'button' => 'Shiko Tani',
],
diff --git a/resources/lang/sq-AL/messages.php b/resources/lang/sq-AL/messages.php
index 01fd2a615..c2db3d396 100644
--- a/resources/lang/sq-AL/messages.php
+++ b/resources/lang/sq-AL/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type çaktivizuar!',
],
'error' => [
- 'over_payment' => 'Gabim: Pagesa nuk u shtua! Shuma kalon totalin.',
+ 'over_payment' => 'Gabim: Pagesa nuk u shtua! Shuma që keni futur kalon totalin: amount',
'not_user_company' => 'Gabim: Nuk ju lejohet të menaxhoni këtë kompani!',
'customer' => 'Gabim: Përdoruesi nuk u krijua! :name tashmë përdor këtë adresë e-maili.',
'no_file' => 'Gabim: Asnjë skedar i përzgjedhur!',
diff --git a/resources/lang/sq-AL/modules.php b/resources/lang/sq-AL/modules.php
index 1570a9804..3a33d492a 100644
--- a/resources/lang/sq-AL/modules.php
+++ b/resources/lang/sq-AL/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Në këtë kategori akoma nuk ka aplikacione.',
'developer' => 'A jeni një zhvillues?Këtu mund të mësoni si të krijoni një aplikacion dhe të filloni shitjen sot!',
+ 'recommended_apps' => 'Aplikacionet e Rekomanduara',
+
'about' => 'Rreth nesh',
'added' => 'Shtuar',
@@ -32,15 +34,28 @@ return [
'installation' => 'Instalim',
'faq' => 'Pyetësori',
'changelog' => 'Ndryshimet',
+ 'reviews' => 'Shqyrtimet',
],
'installation' => [
'header' => 'Instalim Aplikacioni',
'download' => 'Shkarkimi i :module skedarit.',
'unzip' => 'Ekstraktimi i :module skedarit.',
+ 'file_copy' => 'Kopjimi i :module skedareve.',
+ 'migrate' => 'Aplikimi i :module përditësimeve.',
+ 'finish' => 'Azhurnimi u instalua me sukses. Ju do të ridrejtoni në Qendrën e Përditësimit.',
'install' => 'Instalim i :module skedareve.',
],
+ 'errors' => [
+ 'download' => ':module nuk mund të shkarkohet!',
+ 'upload' => ':module i shkarkuar nuk mund të ruhet!',
+ 'unzip' => ':module nuk mund të hap zinxhirin!',
+ 'file_copy' => ':module skedarët nuk mund të kopjohen!',
+ 'migrate' => ':module migrimi i thyer!',
+ 'migrate core' => ':module tashmë ka versionin e fundit kështu që atëherë nuk mund të azhurnohet.',
+ ],
+
'badge' => [
'installed' => 'Instaluar',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Blerë',
'installed' => 'Instaluar',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Shto një Shqyrtim'
+ ],
+ 'na' => 'Nuk ka shqyrtime.'
+ ]
];
diff --git a/resources/lang/sq-AL/reconciliations.php b/resources/lang/sq-AL/reconciliations.php
new file mode 100644
index 000000000..3c8ac784c
--- /dev/null
+++ b/resources/lang/sq-AL/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Pajtim',
+ 'reconciled' => 'Pajtuar',
+ 'closing_balance' => 'Bilanci i Mbylljes',
+ 'unreconciled' => 'Papajtuar',
+ 'list_transactions' => 'Listo Transaksionet',
+ 'start_date' => 'Data e Fillimit',
+ 'end_date' => 'Data e Mbarimit',
+ 'cleared_amount' => 'Shuma e Pastruar',
+
+];
diff --git a/resources/lang/sq-AL/settings.php b/resources/lang/sq-AL/settings.php
index 0d07be255..20dda65cd 100644
--- a/resources/lang/sq-AL/settings.php
+++ b/resources/lang/sq-AL/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Gjatësia a numrit',
'next' => 'Numri tjetër',
'logo' => 'Logoja',
+ 'custom' => 'Special',
+ 'item_name' => 'Emri i artikullit',
+ 'item' => 'Artikujt',
+ 'product' => 'Produktet',
+ 'service' => 'Shërbimet',
+ 'price_name' => 'Emri i çmimit',
+ 'price' => 'Çmimi',
+ 'rate' => 'Normë',
+ 'quantity_name' => 'Emri i sasisë',
+ 'quantity' => 'Sasia',
],
'default' => [
'tab' => 'Parazgjedhjet',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Dërgo Para Ditëve të Duhura',
'cron_command' => 'Komanda Cron',
'schedule_time' => 'Ora për të Kandiduar',
+ 'send_item_reminder'=> 'Dërgo Artikullin Rikujtimor',
+ 'item_stocks' => 'Dërgo Kur Artikulli në Stok',
],
'appearance' => [
'tab' => 'Pamja',
diff --git a/resources/lang/sq-AL/taxes.php b/resources/lang/sq-AL/taxes.php
index c09d9bc9e..8906e8f20 100644
--- a/resources/lang/sq-AL/taxes.php
+++ b/resources/lang/sq-AL/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Normë',
'rate_percent' => 'Normë (%)',
+ 'normal' => 'Normale',
+ 'inclusive' => 'Gjithëpërfshirës',
+ 'compound' => 'Përbërës',
];
diff --git a/resources/lang/sq-AL/validation.php b/resources/lang/sq-AL/validation.php
index d6a5d0e05..2a9dc0f1e 100644
--- a/resources/lang/sq-AL/validation.php
+++ b/resources/lang/sq-AL/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'Mesazh Privat',
],
'invalid_currency' => 'Kodi :attribute është i pavlefshëm.',
+ 'invalid_amount' => 'Shuma :attribute është e pavlefshme.',
],
/*
diff --git a/resources/lang/sr-RS/accounts.php b/resources/lang/sr-RS/accounts.php
new file mode 100644
index 000000000..73249bf22
--- /dev/null
+++ b/resources/lang/sr-RS/accounts.php
@@ -0,0 +1,14 @@
+ 'Назив рачуна',
+ 'number' => 'Број',
+ 'opening_balance' => 'Почетни салдо',
+ 'current_balance' => 'Тренутни салдо',
+ 'bank_name' => 'Назив банке',
+ 'bank_phone' => 'Телефон банке',
+ 'bank_address' => 'Адреса банке',
+ 'default_account' => 'Основни рачун',
+
+];
diff --git a/resources/lang/sr-RS/auth.php b/resources/lang/sr-RS/auth.php
new file mode 100644
index 000000000..4f7ab58b2
--- /dev/null
+++ b/resources/lang/sr-RS/auth.php
@@ -0,0 +1,39 @@
+ 'Профил',
+ 'logout' => 'Одјава',
+ 'login' => 'Пријава',
+ 'login_to' => 'Пријава за покретање сесије',
+ 'remember_me' => 'Запамти ме',
+ 'forgot_password' => 'Заборавили смо лозинку',
+ 'reset_password' => 'Обнављање лозинке',
+ 'enter_email' => 'Упишите своју адресу е-поште',
+ 'current_email' => 'Тренутна е-пошта',
+ 'reset' => 'Обнови',
+ 'never' => 'Никад',
+
+ 'password' => [
+ 'current' => 'Лозинка',
+ 'current_confirm' => 'Потврда лозинке',
+ 'new' => 'Нова лозинка',
+ 'new_confirm' => 'Потврда нове лозинке',
+ ],
+
+ 'error' => [
+ 'self_delete' => 'Грешка: Није могуће избрисати себе!',
+ 'no_company' => 'Грешка: Ни једна компанија није додата Вашем налогу. Молимо Вас, контактирајте администратора система.',
+ ],
+
+ 'failed' => 'Унети подаци не одговарају нашим записима.',
+ 'disabled' => 'Овај налог је искључен. Молимо Вас обратите се администратору система.',
+ 'throttle' => 'Превише покушаја пријаве. Молимо Вас покушајте поново за :seconds секунди.',
+
+ 'notification' => [
+ 'message_1' => 'Примили сте ову е-пошту зато што смо добили захтев за обнову лозинке за ваш налог.',
+ 'message_2' => 'Ако нисте тражили обнову лозинке, нису потребно било шта даље радити.',
+ 'button' => 'Обнови лозинку',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/bills.php b/resources/lang/sr-RS/bills.php
new file mode 100644
index 000000000..5072cfd29
--- /dev/null
+++ b/resources/lang/sr-RS/bills.php
@@ -0,0 +1,58 @@
+ 'Број рачуна',
+ 'bill_date' => 'Датум рачуна',
+ 'total_price' => 'Укупна цена',
+ 'due_date' => 'Датум доспећа',
+ 'order_number' => 'Број поруџбенице',
+ 'bill_from' => 'Рачун од',
+
+ 'quantity' => 'Количина',
+ 'price' => 'Цена',
+ 'sub_total' => 'Међузбир',
+ 'discount' => 'Попуст',
+ 'tax_total' => 'Укупно порез',
+ 'total' => 'Укупно',
+
+ 'item_name' => 'Назив ставке| Назив ставки',
+
+ 'show_discount' => ':discount% попуста',
+ 'add_discount' => 'Додај попуст',
+ 'discount_desc' => 'од међузбира',
+
+ 'payment_due' => 'Доспећа плаћања',
+ 'amount_due' => 'Доспели износ',
+ 'paid' => 'Плаћено',
+ 'histories' => 'Историје',
+ 'payments' => 'Плаћања',
+ 'add_payment' => 'Додај плаћање',
+ 'mark_received' => 'Означи као примљено',
+ 'download_pdf' => 'Преузми ПДФ',
+ 'send_mail' => 'Пошаљи Е-пошту',
+
+ 'status' => [
+ 'draft' => 'Скица',
+ 'received' => 'Примљено',
+ 'partial' => 'Делимично',
+ 'paid' => 'Плаћено',
+ ],
+
+ 'messages' => [
+ 'received' => 'Рачун означен као успешно примљен!',
+ 'draft' => 'Ово је ПРОФАКТУРА и одразиће се на графикон након што буде примљен рачун.',
+
+ 'status' => [
+ 'created' => 'Формирана на: датум',
+ 'receive' => [
+ 'draft' => 'Није послато',
+ 'received' => 'Примљено дана: датум',
+ ],
+ 'paid' => [
+ 'await' => 'Чекајући плаћања',
+ ],
+ ],
+ ],
+
+];
diff --git a/resources/lang/sr-RS/companies.php b/resources/lang/sr-RS/companies.php
new file mode 100644
index 000000000..d871d29f7
--- /dev/null
+++ b/resources/lang/sr-RS/companies.php
@@ -0,0 +1,13 @@
+ 'Домен',
+ 'logo' => 'Лого',
+ 'manage' => 'Управљање фирмама',
+ 'all' => 'Све фирме',
+ 'error' => [
+ 'delete_active' => 'Грешка: Није могуће избрисати активну фирму, молимо Вас да је прво промените!',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/currencies.php b/resources/lang/sr-RS/currencies.php
new file mode 100644
index 000000000..9a7bb7d30
--- /dev/null
+++ b/resources/lang/sr-RS/currencies.php
@@ -0,0 +1,18 @@
+ 'Код',
+ 'rate' => 'Стопа',
+ 'default' => 'Задата валута',
+ 'decimal_mark' => 'Децимална ознака',
+ 'thousands_separator' => 'Знак за раздвајање хиљада',
+ 'precision' => 'Број децимала',
+ 'symbol' => [
+ 'symbol' => 'Симбол',
+ 'position' => 'Положај симбола',
+ 'before' => 'Пре износа',
+ 'after' => 'Након износа',
+ ]
+
+];
diff --git a/resources/lang/sr-RS/customers.php b/resources/lang/sr-RS/customers.php
new file mode 100644
index 000000000..7f1730f82
--- /dev/null
+++ b/resources/lang/sr-RS/customers.php
@@ -0,0 +1,16 @@
+ 'Омогућити пријаву?',
+ 'user_created' => 'Корисник је креиран',
+
+ 'error' => [
+ 'email' => 'Ова Е-пошта је већ заузета.'
+ ],
+
+ 'notification' => [
+ 'message' => ': купац направио: износ уплате на број фактуре: инвоице_нумбер.',
+ 'button' => 'Прикажи',
+ ],
+];
diff --git a/resources/lang/sr-RS/dashboard.php b/resources/lang/sr-RS/dashboard.php
new file mode 100644
index 000000000..ebd5f922a
--- /dev/null
+++ b/resources/lang/sr-RS/dashboard.php
@@ -0,0 +1,24 @@
+ 'Укупан приход',
+ 'receivables' => 'Потраживања',
+ 'open_invoices' => 'Отворене фактуре',
+ 'overdue_invoices' => 'Доспеле фактуре',
+ 'total_expenses' => 'Укупни трошкови',
+ 'payables' => 'Дуговања',
+ 'open_bills' => 'Отворени рачуни',
+ 'overdue_bills' => 'Неплаћени рачуни',
+ 'total_profit' => 'Укупна допит',
+ 'open_profit' => 'Отворена добит',
+ 'overdue_profit' => 'Доспела добит',
+ 'cash_flow' => 'Новчани ток',
+ 'no_profit_loss' => 'Нема губитака добити',
+ 'incomes_by_category' => 'Приходи по категоријама',
+ 'expenses_by_category' => 'Трошкови по категоријама',
+ 'account_balance' => 'Стање рачуна',
+ 'latest_incomes' => 'Најновији приходи',
+ 'latest_expenses' => 'Најновији трошкови',
+
+];
diff --git a/resources/lang/sr-RS/demo.php b/resources/lang/sr-RS/demo.php
new file mode 100644
index 000000000..f38ed0940
--- /dev/null
+++ b/resources/lang/sr-RS/demo.php
@@ -0,0 +1,16 @@
+ 'Готовина',
+ 'categories_deposit' => 'Депозит',
+ 'categories_sales' => 'Продаја',
+ 'currencies_usd' => 'Амерички долар',
+ 'currencies_eur' => 'Евро',
+ 'currencies_gbp' => 'Британска Фута',
+ 'currencies_try' => 'Турска лира',
+ 'taxes_exempt' => 'Изузето од пореза',
+ 'taxes_normal' => 'Нормалан порез',
+ 'taxes_sales' => 'Порез од продаје',
+
+];
diff --git a/resources/lang/sr-RS/footer.php b/resources/lang/sr-RS/footer.php
new file mode 100644
index 000000000..90a479941
--- /dev/null
+++ b/resources/lang/sr-RS/footer.php
@@ -0,0 +1,10 @@
+ 'Верзија',
+ 'powered' => 'Омогућио вам је Akaunting',
+ 'link' => 'https://akaunting.com',
+ 'software' => 'Слободан рачуноводсвени програм',
+
+];
diff --git a/resources/lang/sr-RS/general.php b/resources/lang/sr-RS/general.php
new file mode 100644
index 000000000..6b5d69143
--- /dev/null
+++ b/resources/lang/sr-RS/general.php
@@ -0,0 +1,148 @@
+ 'Ставке|Ставка',
+ 'incomes' => 'Приходи|Приход',
+ 'invoices' => 'Фактуре|Фактура',
+ 'revenues' => 'Приходи|Приход',
+ 'customers' => 'Купци|Купац',
+ 'expenses' => 'Трошкови|Трошак',
+ 'bills' => 'Рачуни|Рачун',
+ 'payments' => 'Исплате|Плаћање',
+ 'vendors' => 'Добављачи|Добављач',
+ 'accounts' => 'Рачуни|Рачун',
+ 'transfers' => 'Преноси|Пренос',
+ 'transactions' => 'Трансакције|Трансакција',
+ 'reports' => 'Извештаји|Извештај',
+ 'settings' => 'Подешавања|Подешавање',
+ 'categories' => 'Категорије|Категорија',
+ 'currencies' => 'Валуте|Валута',
+ 'tax_rates' => 'Пореске стопе|Пореска стопа',
+ 'users' => 'Корисници|Корисник',
+ 'roles' => 'Улоге|Улога',
+ 'permissions' => 'Дозволе|Дозвола',
+ 'modules' => 'Апликација|Апликације',
+ 'companies' => 'Фирме|Фирма',
+ 'profits' => 'Добит|Добити',
+ 'taxes' => 'Порези|Порез',
+ 'logos' => 'Логои|Лого',
+ 'pictures' => 'Слике|Слика',
+ 'types' => 'Типови|Тип',
+ 'payment_methods' => 'Начини плаћања|Начин плаћања',
+ 'compares' => 'Приходи насупрот трошковима|Приход насупрот трошку',
+ 'notes' => 'Белешке|Белешка',
+ 'totals' => 'Укупно|Укупно',
+ 'languages' => 'Језици|Језик',
+ 'updates' => 'Ажурирања|Ажурирање',
+ 'numbers' => 'Редни број|Број',
+ 'statuses' => 'Статуси|Статус',
+ 'others' => 'Остали|Остало',
+ 'contacts' => 'Контакт|Контакти',
+ 'reconciliations' => 'Сравњење|Сравњивања',
+ 'deposits' => 'Депозит|Депозити',
+ 'withdrawals' => 'Опозив|Опозиви',
+
+ 'dashboard' => 'Контролна табла',
+ 'banking' => 'Банкарство',
+ 'general' => 'Општа',
+ 'no_records' => 'Нема записа.',
+ 'date' => 'Датум',
+ 'amount' => 'Износ',
+ 'enabled' => 'Омогућено',
+ 'disabled' => 'Онемогућено',
+ 'yes' => 'Да',
+ 'no' => 'Не',
+ 'na' => 'Н/А',
+ 'daily' => 'Дневно',
+ 'monthly' => 'Месечно',
+ 'quarterly' => 'Квартално',
+ 'yearly' => 'Годишње',
+ 'add' => 'Додај',
+ 'add_new' => 'Додај ',
+ 'show' => 'Прикажи',
+ 'edit' => 'Уреди',
+ 'delete' => 'Избриши',
+ 'send' => 'Пошаљи',
+ 'download' => 'Преузми',
+ 'delete_confirm' => 'Потврда брисања :name: типа?',
+ 'name' => 'Назив',
+ 'email' => 'E-пошта',
+ 'tax_number' => 'Порески број',
+ 'phone' => 'Телефон',
+ 'address' => 'Адреса',
+ 'website' => 'Интернет презентација',
+ 'actions' => 'Радње',
+ 'description' => 'Опис',
+ 'manage' => 'Упревљање',
+ 'code' => 'Код',
+ 'alias' => 'Алијас(надимак)',
+ 'balance' => 'Салдо',
+ 'reference' => 'Референца',
+ 'attachment' => 'Прилог',
+ 'change' => 'Промени',
+ 'switch' => 'Пребаци на',
+ 'color' => 'Боја',
+ 'save' => 'Сачувај',
+ 'cancel' => 'Откажи',
+ 'loading' => 'Учитавање...',
+ 'from' => 'Oд',
+ 'to' => 'Зa',
+ 'print' => 'Штампај',
+ 'search' => 'Тражи',
+ 'search_placeholder' => 'Упиши појам за тражење...',
+ 'filter' => 'Филтер',
+ 'help' => 'Помоћ',
+ 'all' => 'Све',
+ 'all_type' => 'Све :type',
+ 'upcoming' => 'Надолазеће',
+ 'created' => 'Креирано',
+ 'id' => 'ИД',
+ 'more_actions' => 'Више радњи',
+ 'duplicate' => 'Удвостручи',
+ 'unpaid' => 'Неплаћено',
+ 'paid' => 'Плаћено',
+ 'overdue' => 'Доспело',
+ 'partially' => 'Делимично',
+ 'partially_paid' => 'Делимично плаћено',
+ 'export' => 'Извези',
+ 'finish' => 'Kraj',
+ 'wizard' => 'Чаробњак',
+ 'skip' => 'Прескочи',
+ 'enable' => 'Омогући',
+ 'disable' => 'Онемогући',
+ 'select_all' => 'Изабери све',
+ 'unselect_all' => 'Поништи избор свега',
+ 'go_to' => 'Идите на :name',
+ 'created_date' => 'Датум креирања',
+ 'period' => 'Период',
+ 'start' => 'Старт',
+ 'end' => 'Крај',
+ 'clear' => 'Уклони',
+ 'difference' => 'Разлика',
+
+ 'title' => [
+ 'new' => 'Нове - :type',
+ 'edit' => 'Уређивање - :type',
+ 'create' => 'Креирај :type',
+ 'send' => 'Пошаљи :type',
+ 'get' => 'Узми :type',
+ ],
+
+ 'form' => [
+ 'enter' => 'Унеси - :field',
+ 'select' => [
+ 'field' => '- Одаберите :field -',
+ 'file' => 'Одаберите датотеку',
+ ],
+ 'no_file_selected' => 'Датотека није одабрана...',
+ ],
+
+ 'date_range' => [
+ 'today' => 'Данас',
+ 'yesterday' => 'Јуче',
+ 'last_days' => 'Последњих :day дана',
+ 'this_month' => 'Овог месеца',
+ 'last_month' => 'Прошлог месеца',
+ ],
+];
diff --git a/resources/lang/sr-RS/header.php b/resources/lang/sr-RS/header.php
new file mode 100644
index 000000000..9f4f74d11
--- /dev/null
+++ b/resources/lang/sr-RS/header.php
@@ -0,0 +1,16 @@
+ 'Промена језика',
+ 'last_login' => 'Задња пријава :time',
+ 'notifications' => [
+ 'counter' => '{0} Немате обавештења|{1} Имате :count обавештење | [2,*] Имате :count Обавештења',
+ 'overdue_invoices' => '{1} :count доспела фактура|[2,*] :count доспелих фактура',
+ 'upcoming_bills' => '{1} :count надолазећи рачун|[2,*] :count надолазећих рачуна',
+ 'items_stock' => '{1} :count ставка понестаје залиха|[2] :count ставке понестаје залиха |[3,*] :count ставке понестаје залиха',
+ 'view_all' => 'Види све'
+ ],
+ 'docs_link' => 'https://akaunting.com/docs',
+
+];
diff --git a/resources/lang/sr-RS/import.php b/resources/lang/sr-RS/import.php
new file mode 100644
index 000000000..6adc6653c
--- /dev/null
+++ b/resources/lang/sr-RS/import.php
@@ -0,0 +1,9 @@
+ 'Увези',
+ 'title' => 'Увоз :type',
+ 'message' => 'Допуштени типови датотека: CSV, XLS. Молимо, преузмите пример датотеке.',
+
+];
diff --git a/resources/lang/sr-RS/install.php b/resources/lang/sr-RS/install.php
new file mode 100644
index 000000000..e5b3c1535
--- /dev/null
+++ b/resources/lang/sr-RS/install.php
@@ -0,0 +1,44 @@
+ 'Напред',
+ 'refresh' => 'Освежи',
+
+ 'steps' => [
+ 'requirements' => 'Потребно је да испуните следеће услове!',
+ 'language' => 'Корак 1/3: Избор језика',
+ 'database' => 'Корак 2/3: Поставка базе података',
+ 'settings' => 'Корак 3/3: Фирма и админ детаљи',
+ ],
+
+ 'language' => [
+ 'select' => 'Изаберите језик',
+ ],
+
+ 'requirements' => [
+ 'enabled' => ':feature мора бити омогућено!',
+ 'disabled' => ':feature мора бити онемогућено!',
+ 'extension' => ':extension проширење треба да буде учитано!',
+ 'directory' => ':directory дирекотријум мора бити омогућен за уписивање!',
+ ],
+
+ 'database' => [
+ 'hostname' => 'Назив хоста',
+ 'username' => 'Корисничко име',
+ 'password' => 'Лозинка',
+ 'name' => 'База података',
+ ],
+
+ 'settings' => [
+ 'company_name' => 'Назив фирме',
+ 'company_email' => 'E-пошта фирме',
+ 'admin_email' => 'Aдмин e-пошта',
+ 'admin_password' => 'Aдмин лозинка',
+ ],
+
+ 'error' => [
+ 'connection' => 'Грешка : Није могуће повезати се на базу података! Проверите јесу ли подаци исправни.',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/invoices.php b/resources/lang/sr-RS/invoices.php
new file mode 100644
index 000000000..e2546a9b3
--- /dev/null
+++ b/resources/lang/sr-RS/invoices.php
@@ -0,0 +1,68 @@
+ 'Број фактуре',
+ 'invoice_date' => 'Датум Фактуре',
+ 'total_price' => 'Укупна цена',
+ 'due_date' => 'Датум доспећа',
+ 'order_number' => 'Број поруџбенице',
+ 'bill_to' => 'Наплатити',
+
+ 'quantity' => 'Количина',
+ 'price' => 'Цена',
+ 'sub_total' => 'Међузбир',
+ 'discount' => 'Попуст',
+ 'tax_total' => 'Порез укупно',
+ 'total' => 'Укупно',
+
+ 'item_name' => 'Име ставке|Имена ставки',
+
+ 'show_discount' => ':discount% попуст',
+ 'add_discount' => 'Додај попуст',
+ 'discount_desc' => 'од међузбира',
+
+ 'payment_due' => 'Доспећа плаћања',
+ 'paid' => 'Плаћено',
+ 'histories' => 'Историје',
+ 'payments' => 'Плаћања',
+ 'add_payment' => 'Додај плаћање',
+ 'mark_paid' => 'Означи као плаћено',
+ 'mark_sent' => 'Означи као послато',
+ 'download_pdf' => 'Преузмите ПДФ',
+ 'send_mail' => 'Пошаљи е-пошту',
+ 'all_invoices' => 'Улогуј се да би видели све фактуре',
+
+ 'status' => [
+ 'draft' => 'Скица',
+ 'sent' => 'Послато',
+ 'viewed' => 'Погледано',
+ 'approved' => 'Одобрено',
+ 'partial' => 'Делимично',
+ 'paid' => 'Плаћено',
+ ],
+
+ 'messages' => [
+ 'email_sent' => 'Е-пошта за рачун је успешно послат!',
+ 'marked_sent' => 'Рачун је успешно означен као послат!',
+ 'email_required' => 'Нема адресе е-поште за овог купца!',
+ 'draft' => 'Ово је ПРОФАКТУРА и одразиће се на графикон након што буде примљен рачун.',
+
+ 'status' => [
+ 'created' => 'Формирана на :date',
+ 'send' => [
+ 'draft' => 'Није послато',
+ 'sent' => 'Послато :date',
+ ],
+ 'paid' => [
+ 'await' => 'Чека наплату',
+ ],
+ ],
+ ],
+
+ 'notification' => [
+ 'message' => 'Примили сте ову е-пошту јер имате долазну :amount фактуру за :customer.',
+ 'button' => 'Платите сада',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/items.php b/resources/lang/sr-RS/items.php
new file mode 100644
index 000000000..39b8a2061
--- /dev/null
+++ b/resources/lang/sr-RS/items.php
@@ -0,0 +1,18 @@
+ 'Количине|Количина',
+ 'sales_price' => 'Продајна цена',
+ 'purchase_price' => 'Набавна цена',
+ 'sku' => 'СКУ',
+
+ 'notification' => [
+ 'message' => [
+ 'reminder' => 'Добили сте ову е-поруку јер само :quantity :name је остала.',
+ 'out_of_stock' => 'Примили сте ову е-пошту јер понестаје залиха за :name.',
+ ],
+ 'button' => 'Погледај сада',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/messages.php b/resources/lang/sr-RS/messages.php
new file mode 100644
index 000000000..28b3827e3
--- /dev/null
+++ b/resources/lang/sr-RS/messages.php
@@ -0,0 +1,29 @@
+ [
+ 'added' => ':type додат!',
+ 'updated' => ':type ажуриран!',
+ 'deleted' => ':type избрисан!',
+ 'duplicated' => ':type умножен!',
+ 'imported' => ':type увезен!',
+ 'enabled' => ':type омогућен!',
+ 'disabled' => ':type онемогућен!',
+ ],
+ 'error' => [
+ 'over_payment' => 'Грешка: Уплата није додата! Износ који сте унели прелази укупан износ: :amount',
+ 'not_user_company' => 'Грешка: Није вам дозвољено управљање овом фирмом!',
+ 'customer' => 'Грешка: Корисник није креиран! :name већ корисити ову адресу е-поште.',
+ 'no_file' => 'Грешка: Није одабрана ниједна датотека!',
+ 'last_category' => 'Грешка: Није могуће избрисати задњу :type категорију!',
+ 'invalid_token' => 'Грешка: Upisani token nije valjan!',
+ 'import_column' => 'Грешка: :message Назив табле: :sheet. Број линије: :line.',
+ 'import_sheet' => 'Грешка: Назив табле није валидан. Молимо Вас, проверите фајл узорак.',
+ ],
+ 'warning' => [
+ 'deleted' => 'Упозорење: Није вам дозвољено да избришете :name јер постоји веза са :text.',
+ 'disabled' => 'Упозорење: Није вам дозвољено да онемогућите :name јер постоји веза са :text.',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/modules.php b/resources/lang/sr-RS/modules.php
new file mode 100644
index 000000000..4c4b2b81b
--- /dev/null
+++ b/resources/lang/sr-RS/modules.php
@@ -0,0 +1,80 @@
+ 'АПИ Токен',
+ 'api_token' => 'Токен',
+ 'my_apps' => 'Моје Апликације',
+ 'top_paid' => 'Најбоље комерцијалне',
+ 'new' => 'Ново',
+ 'top_free' => 'Најбоље бесплатне',
+ 'free' => 'БЕСПЛАТНО',
+ 'search' => 'Претраживање',
+ 'install' => 'Инсталирај',
+ 'buy_now' => 'Купи одмах',
+ 'token_link' => 'Кликните овде да бисте добили свој API token.',
+ 'no_apps' => 'У овој категорији још нема апликација.',
+ 'developer' => 'Јеси ли програмер? Овде можете научити како креирати апликацију и можеш да почнеш да је продајеш!',
+
+ 'recommended_apps' => 'Препоручене апликације',
+
+ 'about' => 'O aпликацији',
+
+ 'added' => 'Додато',
+ 'updated' => 'Ажурирано',
+ 'compatibility' => 'Компатибилност',
+
+ 'installed' => ':module инсталирана',
+ 'uninstalled' => ':module разинсталирана',
+ //'updated' => ':module updated',
+ 'enabled' => ':module омогућена',
+ 'disabled' => ':module онемогућена',
+
+ 'tab' => [
+ 'installation' => 'Инсталација',
+ 'faq' => 'ČPP',
+ 'changelog' => 'Попис промена',
+ 'reviews' => 'Рецензије',
+ ],
+
+ 'installation' => [
+ 'header' => 'Инсталација апликације',
+ 'download' => 'Преузимање :module датотеке.',
+ 'unzip' => 'Распакивање :module датотека.',
+ 'file_copy' => 'Копирање :module датотека.',
+ 'migrate' => 'Примена :module исправке.',
+ 'finish' => 'Ажурирање је успешно инсталирано. Бићете преусмерени на Центар за ажурирање.',
+ 'install' => 'Инсталација :module датотека.',
+ ],
+
+ 'errors' => [
+ 'download' => ':module не може да се преузме!',
+ 'upload' => 'Преузет :module не може бити сачуван!',
+ 'unzip' => ':module не може да се распакује!',
+ 'file_copy' => ':module не може да се копира!',
+ 'migrate' => 'Преношење (миграција) :module неуспела!',
+ 'migrate core' => ':module је у најновијој верзији зато не можете извршити ажурирати.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Инсталирано',
+ ],
+
+ 'button' => [
+ 'uninstall' => 'Разинсталирај',
+ 'disable' => 'Онемогући',
+ 'enable' => 'Омогући',
+ ],
+
+ 'my' => [
+ 'purchased' => 'Купљене',
+ 'installed' => 'Инсталиране',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Додај рецензију'
+ ],
+ 'na' => 'Нема рецензија.'
+ ]
+];
diff --git a/resources/lang/sr-RS/notifications.php b/resources/lang/sr-RS/notifications.php
new file mode 100644
index 000000000..8afe2a52d
--- /dev/null
+++ b/resources/lang/sr-RS/notifications.php
@@ -0,0 +1,10 @@
+ 'Ууупс!',
+ 'hello' => 'Здраво!',
+ 'salutation' => 'Поздрави, :company_name',
+ 'subcopy' => 'Ако имате проблема кликнути на „:text” дугме, копирајте и налепите УРЛ адресу испод у wеб прегледачу: [:url](:url)',
+
+];
diff --git a/resources/lang/sr-RS/pagination.php b/resources/lang/sr-RS/pagination.php
new file mode 100644
index 000000000..3eb54f34c
--- /dev/null
+++ b/resources/lang/sr-RS/pagination.php
@@ -0,0 +1,9 @@
+ '« Претходна',
+ 'next' => 'Следећа »',
+ 'showing' => 'Приказивање :first до :last од :total :type',
+
+];
diff --git a/resources/lang/sr-RS/passwords.php b/resources/lang/sr-RS/passwords.php
new file mode 100644
index 000000000..18de4cd88
--- /dev/null
+++ b/resources/lang/sr-RS/passwords.php
@@ -0,0 +1,22 @@
+ 'Лозинке морају бити дуге барем 6 знакова и морају одговарати потврди.',
+ 'reset' => 'Ваша лозинка је ресетована!',
+ 'sent' => 'Линк за ресетирање лозинка је послат на е-пошту!',
+ 'token' => 'Токен за ресетовање лозинке није важећи.',
+ 'user' => "Не можемо пронаћи корисника са том адресом е-поште.",
+
+];
diff --git a/resources/lang/sr-RS/reconciliations.php b/resources/lang/sr-RS/reconciliations.php
new file mode 100644
index 000000000..efafb7583
--- /dev/null
+++ b/resources/lang/sr-RS/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Ускладити',
+ 'reconciled' => 'Усклађено',
+ 'closing_balance' => 'Завршни салдо',
+ 'unreconciled' => 'Неусаглашено',
+ 'list_transactions' => 'Преглед трансакција',
+ 'start_date' => 'Датум почетка',
+ 'end_date' => 'Датум завршетка',
+ 'cleared_amount' => 'Очишћен износ',
+
+];
diff --git a/resources/lang/sr-RS/recurring.php b/resources/lang/sr-RS/recurring.php
new file mode 100644
index 000000000..bf775454e
--- /dev/null
+++ b/resources/lang/sr-RS/recurring.php
@@ -0,0 +1,20 @@
+ 'Понављајуће',
+ 'every' => 'Сваких',
+ 'period' => 'Период',
+ 'times' => 'Пута',
+ 'daily' => 'Дневно',
+ 'weekly' => 'Недељно',
+ 'monthly' => 'Месечно',
+ 'yearly' => 'Годишње',
+ 'custom' => 'Шрилагођено',
+ 'days' => 'Дан(a)',
+ 'weeks' => 'Недеља(е)',
+ 'months' => 'Месеца(и)',
+ 'years' => 'Године(a)',
+ 'message' => 'Ово је понављајући :type и следећи :type ће аутоматски бити генерисан :date',
+
+];
diff --git a/resources/lang/sr-RS/reports.php b/resources/lang/sr-RS/reports.php
new file mode 100644
index 000000000..df890628e
--- /dev/null
+++ b/resources/lang/sr-RS/reports.php
@@ -0,0 +1,30 @@
+ 'Текућа година',
+ 'previous_year' => 'Претходна година',
+ 'this_quarter' => 'Овај квартал',
+ 'previous_quarter' => 'Претходни квартал',
+ 'last_12_months' => 'Задњих 12 месеци',
+ 'profit_loss' => 'Добитак и губитак',
+ 'gross_profit' => 'Бруто добит',
+ 'net_profit' => 'Нето добит',
+ 'total_expenses' => 'Укупни трошкови',
+ 'net' => 'Нето',
+
+ 'summary' => [
+ 'income' => 'Преглед прихода',
+ 'expense' => 'Преглед трошкова',
+ 'income_expense' => 'Приходи у односу на трошкове',
+ 'tax' => 'Преглед пореза',
+ ],
+
+ 'quarter' => [
+ '1' => 'Јан-Мар',
+ '2' => 'Апр-Јун',
+ '3' => 'Јул-Сеп',
+ '4' => 'Окт-Дец',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/settings.php b/resources/lang/sr-RS/settings.php
new file mode 100644
index 000000000..1ffbf7d4e
--- /dev/null
+++ b/resources/lang/sr-RS/settings.php
@@ -0,0 +1,102 @@
+ [
+ 'name' => 'Назив',
+ 'email' => 'Е-пошта',
+ 'phone' => 'Телефон',
+ 'address' => 'Адреса',
+ 'logo' => 'Лого',
+ ],
+ 'localisation' => [
+ 'tab' => 'Локализација',
+ 'date' => [
+ 'format' => 'Формат датума',
+ 'separator' => 'Делилац датума',
+ 'dash' => 'Цртица (-)',
+ 'dot' => 'Тачка (.)',
+ 'comma' => 'Зарез (,)',
+ 'slash' => 'Коса црта (/)',
+ 'space' => 'Размак ( )',
+ ],
+ 'timezone' => 'Временска зона',
+ 'percent' => [
+ 'title' => 'Позиција процента (%)',
+ 'before' => 'Испред броја',
+ 'after' => 'Након броја',
+ ],
+ ],
+ 'invoice' => [
+ 'tab' => 'Фактура',
+ 'prefix' => 'Префикс броја',
+ 'digit' => 'Број цифара',
+ 'next' => 'Следећи број',
+ 'logo' => 'Лого',
+ 'custom' => 'Прилагођено',
+ 'item_name' => 'Име ставке',
+ 'item' => 'Ставке',
+ 'product' => 'Производи',
+ 'service' => 'Услуге',
+ 'price_name' => 'Назив цене',
+ 'price' => 'Цена',
+ 'rate' => 'Стопа',
+ 'quantity_name' => 'Назив количине',
+ 'quantity' => 'Количина',
+ ],
+ 'default' => [
+ 'tab' => 'Задато',
+ 'account' => 'Задати рачун',
+ 'currency' => 'Задата валута',
+ 'tax' => 'Задата стопа пореза',
+ 'payment' => 'Подразумевани начин плаћања',
+ 'language' => 'Задати језик',
+ ],
+ 'email' => [
+ 'protocol' => 'Протокол',
+ 'php' => 'PHP Пошта',
+ 'smtp' => [
+ 'name' => 'SMTP',
+ 'host' => 'SMTP Хост',
+ 'port' => 'SMTP Порт',
+ 'username' => 'SMTP Корисничко име',
+ 'password' => 'SMTP Лозинка',
+ 'encryption' => 'SMTP сигурност',
+ 'none' => 'Ништа',
+ ],
+ 'sendmail' => 'Пошаљи пошту',
+ 'sendmail_path' => 'Sendmail путања',
+ 'log' => 'Евидентриање Е-поште',
+ ],
+ 'scheduling' => [
+ 'tab' => 'Заказивање',
+ 'send_invoice' => 'Слање подсетника фактура',
+ 'invoice_days' => 'Слање пре датума доспећа',
+ 'send_bill' => 'Слање подсетника рачуна',
+ 'bill_days' => 'Слање пре датума доспећа',
+ 'cron_command' => 'Cron наредба',
+ 'schedule_time' => 'Време покретања',
+ 'send_item_reminder'=> 'Пошаљи подсетник за ставку',
+ 'item_stocks' => 'Пошаљи када је артикал на залихама',
+ ],
+ 'appearance' => [
+ 'tab' => 'Изглед',
+ 'theme' => 'Шаблон',
+ 'light' => 'Светли',
+ 'dark' => 'Тамни',
+ 'list_limit' => 'Записи по страници',
+ 'use_gravatar' => 'Користи Граватар',
+ ],
+ 'system' => [
+ 'tab' => 'Систем',
+ 'session' => [
+ 'lifetime' => 'Животни век сесије (Minute)',
+ 'handler' => 'Управник сесије',
+ 'file' => 'Датотека',
+ 'database' => 'База података',
+ ],
+ 'file_size' => 'Највећа величина датотеке (MB)',
+ 'file_types' => 'Допуштена врста датотеке',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/taxes.php b/resources/lang/sr-RS/taxes.php
new file mode 100644
index 000000000..972241848
--- /dev/null
+++ b/resources/lang/sr-RS/taxes.php
@@ -0,0 +1,11 @@
+ 'Стопа',
+ 'rate_percent' => 'Стопа (%)',
+ 'normal' => 'Нормално',
+ 'inclusive' => 'Укључујући',
+ 'compound' => 'Спој',
+
+];
diff --git a/resources/lang/sr-RS/transfers.php b/resources/lang/sr-RS/transfers.php
new file mode 100644
index 000000000..615f5229d
--- /dev/null
+++ b/resources/lang/sr-RS/transfers.php
@@ -0,0 +1,12 @@
+ 'Са рачуна',
+ 'to_account' => 'На рачун',
+
+ 'messages' => [
+ 'delete' => ':from за :to (:amount)',
+ ],
+
+];
diff --git a/resources/lang/sr-RS/updates.php b/resources/lang/sr-RS/updates.php
new file mode 100644
index 000000000..7e655a1c8
--- /dev/null
+++ b/resources/lang/sr-RS/updates.php
@@ -0,0 +1,15 @@
+ 'Инсталирана верзија',
+ 'latest_version' => 'Последња верзија',
+ 'update' => 'Ажурирај Akaunting на :version верзију',
+ 'changelog' => 'Попис промена',
+ 'check' => 'Провера',
+ 'new_core' => 'Доступна је ажирорана Akaunting верзија.',
+ 'latest_core' => 'Честитамо! Имате најновију Akaunting верзију. Будућа сигурносна ажурирања аутоматски ће се примењивати.',
+ 'success' => 'Процес ажурирања је успешно завршен.',
+ 'error' => 'Процес ажурирања није успео, молимо покушајте поново.',
+
+];
diff --git a/resources/lang/sr-RS/validation.php b/resources/lang/sr-RS/validation.php
new file mode 100644
index 000000000..9a9953c55
--- /dev/null
+++ b/resources/lang/sr-RS/validation.php
@@ -0,0 +1,121 @@
+ ':attribute мора бити прихваћен.',
+ 'active_url' => ':attribute није валидна УРЛ путања.',
+ 'after' => ':attribute мора бити датум након датума :date.',
+ 'after_or_equal' => ': атрибут мора бити једнак датум :date или датум након њега.',
+ 'alpha' => 'На : атрибут може да садржи само слова.',
+ 'alpha_dash' => 'На : атрибут може да садржи само слова, бројеве и цртице.',
+ 'alpha_num' => 'На : атрибут може да садржи само слова и бројеве.',
+ 'array' => 'На : атрибут мора бити низ.',
+ 'before' => ':attribute мора бити датум пре датума :date.',
+ 'before_or_equal' => ':attribute мора бити датум пре или исти датуму :date.',
+ 'between' => [
+ 'numeric' => 'На : атрибут мора бити између: мин и: маx.',
+ 'file' => 'На : атрибут мора бити између: мин и: маx килобајта.',
+ 'string' => ':attribute мора бити између :min и :max карактера.',
+ 'array' => ':attribute мора имати између :min и :max ставки.',
+ ],
+ 'boolean' => 'Поље :attribute мора бити истина(true) или лаж(false).',
+ 'confirmed' => ':attribute потврда се не поклапа.',
+ 'date' => ':attribute није валидан датум.',
+ 'date_format' => ':attribute се не покалапа са форматом :format.',
+ 'different' => ':attribute и :other мора да буде различито.',
+ 'digits' => ':attribute мора да буде :digits цифара.',
+ 'digits_between' => ':attribute мора да буде између :min и :max цифара.',
+ 'dimensions' => ':attribute има неодговарајуће димензије слике.',
+ 'distinct' => ':attribute поље има дуплирану вредност.',
+ 'email' => ':attribute мора да буде валидна адреса епоште.',
+ 'exists' => 'Изабрани :attribute је неважећи.',
+ 'file' => ':attribute мора да буде датотека-фајл.',
+ 'filled' => ':attribute поље мора да садржи вредност.',
+ 'image' => ':attribute мора да буде слика.',
+ 'in' => 'Изабрани :attribute је неважећи.',
+ 'in_array' => ':attribute поље не постоји у :other.',
+ 'integer' => ':attribute мора да буде цео број.',
+ 'ip' => ':attribute мора да буде валидна ИП адреса.',
+ 'json' => ':attribute мора да буде валидан ЈСОН низ.',
+ 'max' => [
+ 'numeric' => ':attribute не може да буде већи од :max.',
+ 'file' => ':attribute не може бити већи од :max килобајта.',
+ 'string' => ':attribute не може бити већи од :max карактера.',
+ 'array' => ':attribute не може имати више од :max ставки.',
+ ],
+ 'mimes' => ':attribute мора да буде датотека-фајл типа: :values.',
+ 'mimetypes' => ':attribute мора да буде датотека-фајл типа: :values.',
+ 'min' => [
+ 'numeric' => ':attribute мора бити најмање :min.',
+ 'file' => ':attribute мора бити најмање :min килобајта.',
+ 'string' => ':attribute мора бити најмање :min карактера.',
+ 'array' => ':attribute мора да има најмање :min ставки.',
+ ],
+ 'not_in' => 'Изабран :attribute је неважећи.',
+ 'numeric' => ':attribute мора бити број.',
+ 'present' => ':attribute мора бити присутан.',
+ 'regex' => ':attribute формат је неважећи.',
+ 'required' => ':attribute поље је обавезно.',
+ 'required_if' => ':attribute је обавезно када је :other исти као и :other.',
+ 'required_unless' => ':other је обавезно осим у случају када је :other у оквиру :values.',
+ 'required_with' => ':attribute поље је обавезно када је :values присутна.',
+ 'required_with_all' => ':attribute поље је обавезно када је :values присутна.',
+ 'required_without' => ':attribute поље је обавезно када није присутан :values.',
+ 'required_without_all' => ':attribute поље је обавезно када није присутно ни једно од :values.',
+ 'same' => 'Морају се поклапати :attribute и :other .',
+ 'size' => [
+ 'numeric' => ':attribute мора бити :size.',
+ 'file' => ':attribute мора бити :size килобајта.',
+ 'string' => ':attribute мора бити :size карактера.',
+ 'array' => ':attribute мора садржати :size ставки.',
+ ],
+ 'string' => ':attribute мора бити низ.',
+ 'timezone' => ':attribute мора бити важећа зона.',
+ 'unique' => ':attribute је већ заузет.',
+ 'uploaded' => ':attribute неуспело отпремање.',
+ 'url' => ':attribute је неважећи формат.',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'attribute-name' => [
+ 'rule-name' => 'прилагођена-порука',
+ ],
+ 'invalid_currency' => ':attribute код је неважећи.',
+ 'invalid_amount' => ':attribute износ је неважећи.',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | 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.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/sv-SE/auth.php b/resources/lang/sv-SE/auth.php
index 4d9b589cf..dc59c7c1c 100644
--- a/resources/lang/sv-SE/auth.php
+++ b/resources/lang/sv-SE/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'Aktuella e-post',
'reset' => 'Återställ',
'never' => 'aldrig',
+
'password' => [
'current' => 'Lösenord',
'current_confirm' => 'Bekräfta lösenord',
'new' => 'Nytt lösenord',
'new_confirm' => 'Ny lösenords bekräftelse',
],
+
'error' => [
- 'self_delete' => 'Fel: Kan inte ta bort dig själv!'
+ 'self_delete' => 'Fel: Kan inte ta bort dig själv!',
+ 'no_company' => 'Fel: Inget företag som tilldelats ditt konto. Kontakta systemadministratören.',
],
'failed' => 'Dessa uppgifter stämmer inte överens med vårt register.',
'disabled' => 'Detta konto är inaktiverat. Kontakta systemadministratören.',
'throttle' => 'För många inloggningsförsök. Var vänlig försök igen om :seconds sekunder.',
+ 'notification' => [
+ 'message_1' => 'Du får detta mail eftersom vi fått en begäran om återställning av lösenord för ditt konto.',
+ 'message_2' => 'Om du inte har begärt en lösenordsåterställning, krävs ingen ytterligare åtgärd.',
+ 'button' => 'Återställ lösenordet',
+ ],
+
];
diff --git a/resources/lang/sv-SE/bills.php b/resources/lang/sv-SE/bills.php
index b9d1927ea..ef7440c18 100644
--- a/resources/lang/sv-SE/bills.php
+++ b/resources/lang/sv-SE/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Faktura markerad som mottagen!',
+ 'draft' => 'Detta är ett DRAFT förslag och kommer att stämmas av innan den mottages.',
+
+ 'status' => [
+ 'created' => 'Skapad den :date',
+ 'receive' => [
+ 'draft' => 'Inte skickat',
+ 'received' => 'Mottagen :date',
+ ],
+ 'paid' => [
+ 'await' => 'Väntar på betalning',
+ ],
+ ],
],
];
diff --git a/resources/lang/sv-SE/customers.php b/resources/lang/sv-SE/customers.php
index 43f79619b..0a07dc2c5 100644
--- a/resources/lang/sv-SE/customers.php
+++ b/resources/lang/sv-SE/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'e-postadressen används redan.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer har gjort en betalning på :amount till fakturanummer :invoice_number.',
+ 'button' => 'Visa',
+ ],
];
diff --git a/resources/lang/sv-SE/demo.php b/resources/lang/sv-SE/demo.php
index e9a3dd791..6624280c0 100644
--- a/resources/lang/sv-SE/demo.php
+++ b/resources/lang/sv-SE/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'Kontanter',
- 'categories_uncat' => 'Okatergoriserad',
'categories_deposit' => 'Insättning',
'categories_sales' => 'Försäljning',
'currencies_usd' => 'US-Dollar',
diff --git a/resources/lang/sv-SE/footer.php b/resources/lang/sv-SE/footer.php
index e0947c7fb..9a2f7274f 100644
--- a/resources/lang/sv-SE/footer.php
+++ b/resources/lang/sv-SE/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Version',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Fritt bokföringsprogram',
];
diff --git a/resources/lang/sv-SE/general.php b/resources/lang/sv-SE/general.php
index 4b420e3a0..97b8f70ec 100644
--- a/resources/lang/sv-SE/general.php
+++ b/resources/lang/sv-SE/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Siffra | Siffror',
'statuses' => 'Status | Statusar',
'others' => 'Andra | Andra',
+ 'contacts' => 'Kontakta|kontakter',
+ 'reconciliations' => 'Stämma av|avstämningar',
+ 'deposits' => 'Insättning|insättningar',
+ 'withdrawals' => 'Uttag|uttag',
'dashboard' => 'Översikt',
'banking' => 'Banktjänster',
@@ -81,6 +85,7 @@ return [
'color' => 'Färg',
'save' => 'Spara',
'cancel' => 'Avbryt',
+ 'loading' => 'Laddar...',
'from' => 'Från',
'to' => 'Till',
'print' => 'Skriv ut',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Förfallen',
'partially' => 'Delvis',
'partially_paid' => 'Delvis betalat',
+ 'export' => 'Exportera',
+ 'finish' => 'Slutför',
+ 'wizard' => 'Guiden',
+ 'skip' => 'Hoppa över',
+ 'enable' => 'Aktivera',
+ 'disable' => 'Inaktivera',
+ 'select_all' => 'Markera alla',
+ 'unselect_all' => 'Avmarkera alla',
+ 'go_to' => 'Gå till :name',
+ 'created_date' => 'Skapad Datum',
+ 'period' => 'Period',
+ 'start' => 'Början',
+ 'end' => 'Slutet',
+ 'clear' => 'Töm',
+ 'difference' => 'Skillnaden',
'title' => [
'new' => 'Nytt :type',
'edit' => 'Redigera :type',
+ 'create' => 'Skapa :type',
+ 'send' => 'Skicka :type',
+ 'get' => 'Få :type',
],
+
'form' => [
'enter' => 'Ange :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Ingen fil är vald...',
],
+ 'date_range' => [
+ 'today' => 'Idag',
+ 'yesterday' => 'Igår',
+ 'last_days' => 'Sista :day Dagarna',
+ 'this_month' => 'Denna månaden',
+ 'last_month' => 'Senaste månaden',
+ ],
];
diff --git a/resources/lang/sv-SE/header.php b/resources/lang/sv-SE/header.php
index 28c2ab2f2..67d6030d9 100644
--- a/resources/lang/sv-SE/header.php
+++ b/resources/lang/sv-SE/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count objekt i lager | [2 *]:count objekt i lager',
'view_all' => 'Visa alla'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/sv-SE/install.php b/resources/lang/sv-SE/install.php
index cdee3e862..821afcb89 100644
--- a/resources/lang/sv-SE/install.php
+++ b/resources/lang/sv-SE/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Uppdatera',
'steps' => [
- 'requirements' => 'Vänligen, uppfyll följande krav!',
+ 'requirements' => 'Snälla, be webbhotellet åtgärda felen!',
'language' => 'Steg 1/3: Språkval',
'database' => 'Steg 2/3: Databasinställningar',
'settings' => 'Steg 3/3: Företag och Admin uppgifter',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature måste vara aktiverad!',
'disabled' => ':feature måste inaktiveras!',
- 'extension' => ':extension tillägget måste laddas!',
+ 'extension' => ':extension tillägget måste vara installerad och laddad!',
'directory' => ':directory katalogen måste vara skrivbar!',
],
diff --git a/resources/lang/sv-SE/invoices.php b/resources/lang/sv-SE/invoices.php
index 5703aed08..bb78c19da 100644
--- a/resources/lang/sv-SE/invoices.php
+++ b/resources/lang/sv-SE/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Markera som skickad',
'download_pdf' => 'Ladda ner PDF',
'send_mail' => 'Skicka E-post',
+ 'all_invoices' => 'Logga in för att visa alla fakturor',
'status' => [
'draft' => 'Utkast',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Faktura e-postmeddelandet har skickats!',
'marked_sent' => 'Faktura e-postmeddelandet har skickats!',
'email_required' => 'Ingen e-postadress för den här kunden!',
+ 'draft' => 'Detta är en utkast faktura och kommer att speglas till diagramet efter det skickas.',
+
+ 'status' => [
+ 'created' => 'Skapad den :date',
+ 'send' => [
+ 'draft' => 'Inte skickat',
+ 'sent' => 'Skickat den :date',
+ ],
+ 'paid' => [
+ 'await' => 'Väntar på betalning',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/sv-SE/items.php b/resources/lang/sv-SE/items.php
index 1537b83b2..5afa45db1 100644
--- a/resources/lang/sv-SE/items.php
+++ b/resources/lang/sv-SE/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Artikelnummer',
'notification' => [
- 'message' => 'Du får detta mail eftersom :name är slut på lagret.',
+ 'message' => [
+ 'reminder' => 'Du får denna epost eftersom endast :quantity :name finns kvar.',
+ 'out_of_stock' => 'Du får detta mail eftersom :name snart är slut på lagret.',
+ ],
'button' => 'Visa nu',
],
diff --git a/resources/lang/sv-SE/messages.php b/resources/lang/sv-SE/messages.php
index 390212eb0..9276224f1 100644
--- a/resources/lang/sv-SE/messages.php
+++ b/resources/lang/sv-SE/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type bortagen!',
'duplicated' => ':type dubbelpost!',
'imported' => ':type uppdaterad!',
+ 'enabled' => ': typ aktiverad!',
+ 'disabled' => ':type inaktiverat!',
],
'error' => [
- 'over_payment' => 'Fel: Betalning inte tillagd! Belopp överskrider totalen.',
+ 'over_payment' => 'Fel: Betalning inte lagt till! Det belopp som du angav överskrider totalen: :amount',
'not_user_company' => 'Fel: Du får inte hantera detta företag!',
'customer' => 'Fel: Användaren inte skapad! :name använder redan denna e-postadress.',
'no_file' => 'Fel: Ingen fil har valts!',
'last_category' => 'Fel: Kan inte ta bort sista :type kategorin!',
'invalid_token' => 'Fel: Den symbolen som angetts är ogiltigt!',
+ 'import_column' => 'Fel: :message bladnamn: :sheet. Radnummer: :line.',
+ 'import_sheet' => 'Fel: Bladets namn är inte giltigt. Vänligen kontrollera exempelfilen.',
],
'warning' => [
'deleted' => 'Varning: Du får inte ta bort :name eftersom den har :text relaterade.',
diff --git a/resources/lang/sv-SE/modules.php b/resources/lang/sv-SE/modules.php
index 7af0cf352..c0792cf65 100644
--- a/resources/lang/sv-SE/modules.php
+++ b/resources/lang/sv-SE/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API-Token',
'api_token' => 'Token',
+ 'my_apps' => 'Mina appar',
'top_paid' => 'Bästa betal',
'new' => 'Nytt',
'top_free' => 'Bästa gratis',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'Det finns inga appar i den här kategorin ännu.',
'developer' => 'Är du en utvecklare? här du kan lära dig hur du skapar en app och börja sälja idag!',
+ 'recommended_apps' => 'Rekommenderade appar',
+
'about' => 'Om',
'added' => 'Tillagd',
@@ -31,18 +34,47 @@ return [
'installation' => 'Installation',
'faq' => 'Vanliga frågor',
'changelog' => 'Ändringslog',
+ 'reviews' => 'Recensioner',
],
'installation' => [
'header' => 'App-Installation',
'download' => 'Laddar ner :module fil.',
'unzip' => 'Packar upp :module filer.',
+ 'file_copy' => 'Kopierar :module filer.',
+ 'migrate' => 'Tillämpning :module uppdateringar.',
+ 'finish' => 'Uppdateringen har installerats. Du kommer att bli omdirigerad till Updaterings Center.',
'install' => 'Installerar :module filer.',
],
+ 'errors' => [
+ 'download' => ':modul kan inte laddas ner!',
+ 'upload' => 'Hämtad :module kan inte sparas!',
+ 'unzip' => ':module kan inte packas upp!',
+ 'file_copy' => ':module filer kan inte kopieras!',
+ 'migrate' => ':module migreringen trasig!',
+ 'migrate core' => ':module är redan senaste versionen så du kan inte kan uppdatera.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Installerad',
+ ],
+
'button' => [
'uninstall' => 'Avinstallera',
'disable' => 'Inaktivera',
'enable' => 'Aktivera',
],
+
+ 'my' => [
+ 'purchased' => 'Köpt',
+ 'installed' => 'Installerad',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Lägg till en recension'
+ ],
+ 'na' => 'Det finns inga recensioner.'
+ ]
];
diff --git a/resources/lang/sv-SE/notifications.php b/resources/lang/sv-SE/notifications.php
new file mode 100644
index 000000000..ccd227ba3
--- /dev/null
+++ b/resources/lang/sv-SE/notifications.php
@@ -0,0 +1,10 @@
+ 'Hoppsan!',
+ 'hello' => 'Hallå!',
+ 'salutation' => 'Hälsningar, :company_name',
+ 'subcopy' => 'Om du har problem att klicka på den ”:text”-knappen, kopiera och klistra in webbadressen nedan i din webbläsare: [:url](:url)',
+
+];
diff --git a/resources/lang/sv-SE/reconciliations.php b/resources/lang/sv-SE/reconciliations.php
new file mode 100644
index 000000000..d49944e91
--- /dev/null
+++ b/resources/lang/sv-SE/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Avstäm',
+ 'reconciled' => 'Avstämd',
+ 'closing_balance' => 'Slutsaldo',
+ 'unreconciled' => 'Oavstämd',
+ 'list_transactions' => 'Visa transaktion',
+ 'start_date' => 'Startdatum',
+ 'end_date' => 'Slutdatum',
+ 'cleared_amount' => 'Rensa Antal',
+
+];
diff --git a/resources/lang/sv-SE/settings.php b/resources/lang/sv-SE/settings.php
index d0bce18b9..908f80670 100644
--- a/resources/lang/sv-SE/settings.php
+++ b/resources/lang/sv-SE/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Siffra',
'next' => 'Nästa nummer',
'logo' => 'Logotyp',
+ 'custom' => 'Anpassad',
+ 'item_name' => 'Artikelnamn',
+ 'item' => 'Artiklar',
+ 'product' => 'Produkter',
+ 'service' => 'Tjänster',
+ 'price_name' => 'Pris namn',
+ 'price' => 'Pris',
+ 'rate' => 'Kurs',
+ 'quantity_name' => 'Antal namn',
+ 'quantity' => 'Antal',
],
'default' => [
'tab' => 'Huvudsakligt',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Skicka innan förfallodatum',
'cron_command' => 'Cron Kommando',
'schedule_time' => 'Tid att köra',
+ 'send_item_reminder'=> 'Skicka objektet påminnelse',
+ 'item_stocks' => 'Skicka när objekt lager',
],
'appearance' => [
'tab' => 'Utseende',
diff --git a/resources/lang/sv-SE/taxes.php b/resources/lang/sv-SE/taxes.php
index 091286ccf..f512869fa 100644
--- a/resources/lang/sv-SE/taxes.php
+++ b/resources/lang/sv-SE/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Kurs',
'rate_percent' => 'Momssatts (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Inklusive',
+ 'compound' => 'Sammanslagen',
];
diff --git a/resources/lang/sv-SE/transfers.php b/resources/lang/sv-SE/transfers.php
index 4bb8f4bc8..de5d42021 100644
--- a/resources/lang/sv-SE/transfers.php
+++ b/resources/lang/sv-SE/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'Från konto',
'to_account' => 'Till konto',
+ 'messages' => [
+ 'delete' => ':from till :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/sv-SE/validation.php b/resources/lang/sv-SE/validation.php
index bc433a5a1..1e9fe7338 100644
--- a/resources/lang/sv-SE/validation.php
+++ b/resources/lang/sv-SE/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'anpassat-meddelande',
],
+ 'invalid_currency' => 'Attributet :attribute är ogiltig.',
+ 'invalid_amount' => 'Beloppet :attribute är ogiltigt.',
],
/*
diff --git a/resources/lang/th-TH/auth.php b/resources/lang/th-TH/auth.php
index f37ef7c95..bded38303 100644
--- a/resources/lang/th-TH/auth.php
+++ b/resources/lang/th-TH/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'อีเมลปัจจุบัน',
'reset' => 'ตั้งค่าใหม่',
'never' => 'ไม่เคยเลย',
+
'password' => [
'current' => 'รหัสผ่าน',
'current_confirm' => 'การยืนยันรหัสผ่าน',
'new' => 'รหัสผ่านใหม่',
'new_confirm' => 'ยืนยันรหัสผ่านใหม่',
],
+
'error' => [
- 'self_delete' => 'ข้อผิดพลาด: ไม่สามารถลบด้วยตัวคุณเองได้!'
+ 'self_delete' => 'ข้อผิดพลาด: ไม่สามารถลบด้วยตัวคุณเองได้!',
+ 'no_company' => 'Error: No company assigned to your account. Please, contact the system administrator.',
],
'failed' => 'ข้อมูลที่ใช้ในการยืนยันตัวตนไม่ถูกต้อง',
'disabled' => 'บัญชีนี้ถูกปิดใช้งาน กรุณา ติดต่อผู้ดูแลระบบ',
'throttle' => 'คุณได้พยายามเข้าระบบหลายครั้งเกินไป กรุณาลองใหม่ใน :seconds วินาทีข้างหน้า.',
+ 'notification' => [
+ 'message_1' => 'You are receiving this email because we received a password reset request for your account.',
+ 'message_2' => 'If you did not request a password reset, no further action is required.',
+ 'button' => 'Reset Password',
+ ],
+
];
diff --git a/resources/lang/th-TH/bills.php b/resources/lang/th-TH/bills.php
index 9a5b57328..94f82b5bf 100644
--- a/resources/lang/th-TH/bills.php
+++ b/resources/lang/th-TH/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'บิลทำเครื่องหมายได้รับเรียบร้อยแล้ว!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/th-TH/customers.php b/resources/lang/th-TH/customers.php
index 8d6748a49..71f2ca34a 100644
--- a/resources/lang/th-TH/customers.php
+++ b/resources/lang/th-TH/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'อีเมลนี้ได้ลงทะเบียนอยู่แล้ว'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/th-TH/footer.php b/resources/lang/th-TH/footer.php
index 3858c19c7..82eda0532 100644
--- a/resources/lang/th-TH/footer.php
+++ b/resources/lang/th-TH/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'เวอร์ชัน',
'powered' => 'ขับเคลื่อน โดย Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'ซอฟต์แวร์บัญชีฟรี',
];
diff --git a/resources/lang/th-TH/general.php b/resources/lang/th-TH/general.php
index 00f5d5982..7a8994ab2 100644
--- a/resources/lang/th-TH/general.php
+++ b/resources/lang/th-TH/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'หมายเลข | หมายเลข',
'statuses' => 'สถานะ | สถานะ',
'others' => 'อื่น ๆ | อื่น ๆ',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'แดชบอร์ด',
'banking' => 'การธนาคาร',
@@ -81,6 +85,7 @@ return [
'color' => 'สี',
'save' => 'บันทึก',
'cancel' => 'ยกเลิก',
+ 'loading' => 'Loading...',
'from' => 'จาก',
'to' => 'ถึง',
'print' => 'พิมพ์',
@@ -100,11 +105,30 @@ return [
'overdue' => 'ค้างชำระ',
'partially' => 'บางส่วน',
'partially_paid' => 'ชำระเงินบางส่วน',
+ 'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
+ 'enable' => 'Enable',
+ 'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'ใหม่ :type',
'edit' => 'แก้ไข :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
+
'form' => [
'enter' => 'กรอก :type',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'ไม่ได้เลือกไฟล์...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/th-TH/header.php b/resources/lang/th-TH/header.php
index 4cde749bf..9db689129 100644
--- a/resources/lang/th-TH/header.php
+++ b/resources/lang/th-TH/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count รายการที่หมดสต็อก|[2,*] :count รายการที่หมดสต็อก',
'view_all' => 'แสดงทั้งหมด'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/th-TH/import.php b/resources/lang/th-TH/import.php
index 0a9f37ebb..bdddaf3e3 100644
--- a/resources/lang/th-TH/import.php
+++ b/resources/lang/th-TH/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'นำเข้า',
'title' => 'นำเข้า :type',
- 'message' => 'ประเภทไฟล์ที่อนุญาต: CSV, XLS. กรุณา, ดาวน์โหลด ไฟล์ตัวอย่าง.',
+ 'message' => 'Allowed file types: XLS, XLSX. Please, download the sample file.',
];
diff --git a/resources/lang/th-TH/install.php b/resources/lang/th-TH/install.php
index 859748818..3c8f8554d 100644
--- a/resources/lang/th-TH/install.php
+++ b/resources/lang/th-TH/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'โหลดใหม่',
'steps' => [
- 'requirements' => 'โปรดปฏิบัติตามข้อกำหนดต่อไปนี้!',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'ขั้นตอนที่ 1/3: เลือกภาษา',
'database' => 'ขั้นตอนที่ 2/3: การตั้งค่าฐานข้อมูล',
'settings' => 'ขั้นตอนที่ 3/3: รายละเอียดบริษัทและผู้ดูแลระบบ',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature ที่ต้องการเปิดใช้งาน',
'disabled' => ':feature ที่ต้องการปิดใช้งาน',
- 'extension' => ':extension ส่วนขยายต้องการโหลด',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => ':directory แฟ้มจำเป็นต้องเขียน',
],
diff --git a/resources/lang/th-TH/invoices.php b/resources/lang/th-TH/invoices.php
index 6d2aceafb..15247d2d1 100644
--- a/resources/lang/th-TH/invoices.php
+++ b/resources/lang/th-TH/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'ทำเครื่องหมายว่าส่งแล้ว',
'download_pdf' => 'ดาวน์โหลด PDF',
'send_mail' => 'ส่งอีเมล',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'ฉบับร่าง',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'อีเมลใบแจ้งหนี้ถูกส่งเรียบร้อยแล้ว!',
'marked_sent' => 'ใบแจ้งหนี้ที่ทำเครื่องหมายว่าส่งสำเร็จแล้ว!',
'email_required' => 'ไม่มีที่อยู่อีเมลสำหรับลูกค้านี้',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/th-TH/items.php b/resources/lang/th-TH/items.php
index 132848ccf..e81192170 100644
--- a/resources/lang/th-TH/items.php
+++ b/resources/lang/th-TH/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'คุณได้รับอีเมลนี้เพราะ :name หมดคลังแล้ว',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'ดูตอนนี้',
],
diff --git a/resources/lang/th-TH/messages.php b/resources/lang/th-TH/messages.php
index cf8e898ea..3a8c2d96c 100644
--- a/resources/lang/th-TH/messages.php
+++ b/resources/lang/th-TH/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ':type ลบแล้ว!',
'duplicated' => ':type ทำซ้ำแล้ว!',
'imported' => ':type นำเข้าแล้ว!',
+ 'enabled' => ':type enabled!',
+ 'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'ข้อผิดพลาด: การชำระเงินไม่เพิ่ม ยอดเงินผ่านทั้งหมด',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'ข้อผิดพลาด: คุณไม่สามารถจัดการบริษัทนี้!',
'customer' => 'ข้อผิดพลาด: ผู้ใช้ยังไม่ได้สร้าง! :name ใช้อีเมลนี้แล้ว',
'no_file' => 'ข้อผิดพลาด: ไม่ได้เลือกไฟล์!',
'last_category' => 'ข้อผิดพลาด: ไม่สามารถลบหมวด :type ล่าสุด!',
'invalid_token' => 'ข้อผิดพลาด: โทเค็นที่ป้อนไม่ถูกต้อง!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'คำเตือน: คุณไม่ได้รับอนุญาตให้ลบ :name เนื่องจากมี :text ที่เกี่ยวข้อง',
diff --git a/resources/lang/th-TH/modules.php b/resources/lang/th-TH/modules.php
index 3de798f25..d135abcc9 100644
--- a/resources/lang/th-TH/modules.php
+++ b/resources/lang/th-TH/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'โทเค็นของ API',
'api_token' => 'โทเค็น',
+ 'my_apps' => 'My Apps',
'top_paid' => 'จ่ายเงินยอดนิยม',
'new' => 'ใหม่',
'top_free' => 'ฟรียอดนิยม',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'ยังไม่มีแอปพลิเคชันในหมวดหมู่นี้',
'developer' => 'คุณเป็นนักพัฒนาใช่มั้ย? ที่นี่ คุณสามารถเรียนรู้วิธีการสร้างโปรแกรมประยุกต์และเริ่มขายวันนี้!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'เกี่ยวกับเรา',
'added' => 'เพิ่มแล้ว',
@@ -31,18 +34,47 @@ return [
'installation' => 'การติดตั้ง',
'faq' => 'คำถามที่พบบ่อย',
'changelog' => 'ประวัติเวอร์ชั่น',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'ติดตั้งแอพ',
'download' => 'กำลังดาวน์โหลด :module ไฟล์',
'unzip' => 'กำลังแยก :module ไฟล์',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'กำลังติดตั้ง :module ไฟล์',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Installed',
+ ],
+
'button' => [
'uninstall' => 'ถอนการติดตั้ง',
'disable' => 'ปิดการใช้งาน',
'enable' => 'เปิดใช้งาน',
],
+
+ 'my' => [
+ 'purchased' => 'Purchased',
+ 'installed' => 'Installed',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/th-TH/notifications.php b/resources/lang/th-TH/notifications.php
new file mode 100644
index 000000000..88c2f9da0
--- /dev/null
+++ b/resources/lang/th-TH/notifications.php
@@ -0,0 +1,10 @@
+ 'Whoops!',
+ 'hello' => 'Hello!',
+ 'salutation' => 'Regards, :company_name',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/th-TH/reconciliations.php b/resources/lang/th-TH/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/th-TH/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/th-TH/settings.php b/resources/lang/th-TH/settings.php
index a91026007..a519d944d 100644
--- a/resources/lang/th-TH/settings.php
+++ b/resources/lang/th-TH/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'หมายเลขหลัก',
'next' => 'หมายเลขถัดไป',
'logo' => 'โลโก้',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'ค่าเริ่มต้น',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'ส่งก่อนวันครบกำหนด',
'cron_command' => 'คำสั่ง Cron',
'schedule_time' => 'ชั่วโมงเพื่อเรียกใช้',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'ลักษณะที่ปรากฏ',
diff --git a/resources/lang/th-TH/transfers.php b/resources/lang/th-TH/transfers.php
index 334610260..8fda43758 100644
--- a/resources/lang/th-TH/transfers.php
+++ b/resources/lang/th-TH/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'จากบัญชี',
'to_account' => 'ไปบัญชี',
+ 'messages' => [
+ 'delete' => ':from to :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/th-TH/validation.php b/resources/lang/th-TH/validation.php
index 9231f4b58..938c317a4 100644
--- a/resources/lang/th-TH/validation.php
+++ b/resources/lang/th-TH/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'ข้อความแบบกำหนดเอง',
],
+ 'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/tr-TR/bills.php b/resources/lang/tr-TR/bills.php
index 07b00465b..537dc35b3 100644
--- a/resources/lang/tr-TR/bills.php
+++ b/resources/lang/tr-TR/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Fatura başarıyla teslim alındı olarak işaretlendi!',
+ 'draft' => 'Bu bir Taslak faturadır ve alındıktan sonra grafiklere yansıtılacaktır.',
+
+ 'status' => [
+ 'created' => ':date tarihinde oluşturuldu',
+ 'receive' => [
+ 'draft' => 'Gönderilmedi',
+ 'received' => ':date tarihinde alındı',
+ ],
+ 'paid' => [
+ 'await' => 'Bekleyen Ödeme',
+ ],
+ ],
],
];
diff --git a/resources/lang/tr-TR/customers.php b/resources/lang/tr-TR/customers.php
index 412c45aaf..2935cf2de 100644
--- a/resources/lang/tr-TR/customers.php
+++ b/resources/lang/tr-TR/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Bu email adresi kullanılmaktadır.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer yapılmış :amount fatura numarasına ödeme :invoice_number',
+ 'button' => 'Göster',
+ ],
];
diff --git a/resources/lang/tr-TR/footer.php b/resources/lang/tr-TR/footer.php
index f562be7d6..207c5b051 100644
--- a/resources/lang/tr-TR/footer.php
+++ b/resources/lang/tr-TR/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Sürüm',
'powered' => 'Altyapı Akaunting',
+ 'link' => 'https://akaunting.com/tr',
'software' => 'Ücretsiz Ön Muhasebe Programı',
];
diff --git a/resources/lang/tr-TR/general.php b/resources/lang/tr-TR/general.php
index 065213e85..9e082d492 100644
--- a/resources/lang/tr-TR/general.php
+++ b/resources/lang/tr-TR/general.php
@@ -38,6 +38,8 @@ return [
'numbers' => 'Sayı|Sayılar',
'statuses' => 'Durum|Durumlar',
'others' => 'Diğer|Diğerleri',
+ 'contacts' => 'Kişi|Kişiler',
+ 'reconciliations' => 'Mutabakat|Mutabakatlar',
'dashboard' => 'Kontrol Paneli',
'banking' => 'Banka',
@@ -81,6 +83,7 @@ return [
'color' => 'Renk',
'save' => 'Kaydet',
'cancel' => 'İptal',
+ 'loading' => 'Yükleniyor...',
'from' => 'Tarafından',
'to' => 'Tarafına',
'print' => 'Yazdır',
@@ -101,12 +104,27 @@ return [
'partially' => 'Kısmen',
'partially_paid' => 'Kısmen Ödenmiş',
'export' => 'Dışa Aktar',
+ 'finish' => 'Bitti',
+ 'wizard' => 'Sihirbaz',
+ 'skip' => 'Geç',
'enable' => 'Etkinleştir',
'disable' => 'Devre Dışı Bırak',
+ 'select_all' => 'Tümünü seç',
+ 'unselect_all' => 'Tüm Seçimi Kaldır',
+ 'go_to' => 'Git :name',
+ 'created_date' => 'Oluşturulma Tarihi',
+ 'period' => 'Dönem',
+ 'start' => 'Başlat',
+ 'end' => 'Bitir',
+ 'clear' => 'Temizle',
+ 'difference' => 'Fark',
'title' => [
'new' => 'Yeni :type',
'edit' => ':type Düzenle',
+ 'create' => ':type Oluştur',
+ 'send' => ':type Gönder',
+ 'get' => ':type Getir',
],
'form' => [
@@ -118,4 +136,11 @@ return [
'no_file_selected' => 'Dosya seçilmemiş...',
],
+ 'date_range' => [
+ 'today' => 'Bugün',
+ 'yesterday' => 'Dün',
+ 'last_days' => 'Son :day Gün',
+ 'this_month' => 'Bu Ay',
+ 'last_month' => 'Son Ay',
+ ],
];
diff --git a/resources/lang/tr-TR/header.php b/resources/lang/tr-TR/header.php
index 421bc3314..e18bc8b01 100644
--- a/resources/lang/tr-TR/header.php
+++ b/resources/lang/tr-TR/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count ürün stok dışı|[2,*] :count ürün stok dışı',
'view_all' => 'Tümünü Görüntüle'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/tr-TR/invoices.php b/resources/lang/tr-TR/invoices.php
index 73d98548c..1e4bb0b95 100644
--- a/resources/lang/tr-TR/invoices.php
+++ b/resources/lang/tr-TR/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Gönderildi İşaretle',
'download_pdf' => 'PDF İndir',
'send_mail' => 'Email Gönder',
+ 'all_invoices' => 'Tüm faturaları görüntülemek için giriş yapın',
'status' => [
'draft' => 'Taslak',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Fatura emaili başarı ile gönderildi!',
'marked_sent' => 'Fatura başarıyla gönderilmiş olarak işaretlendi!',
'email_required' => 'Bu müşteri için e-posta adresi yok!',
+ 'draft' => 'Bu bir TASLAK faturadır ve gönderildikten sonra grafiklere yansıtılacaktır.',
+
+ 'status' => [
+ 'created' => ':date tarihinde oluşturuldu',
+ 'send' => [
+ 'draft' => 'Gönderilmedi',
+ 'sent' => ':date tarihinde gönderildi',
+ ],
+ 'paid' => [
+ 'await' => 'Ödeme bekliyor',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/tr-TR/items.php b/resources/lang/tr-TR/items.php
index b733230ec..3495a0439 100644
--- a/resources/lang/tr-TR/items.php
+++ b/resources/lang/tr-TR/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Ürün Kodu',
'notification' => [
- 'message' => ':name ürünün stoğu tükendiği için bu iletiyi almaktasınız.',
+ 'message' => [
+ 'reminder' => 'Bu e-postayı alıyorsunuz çünkü bu :name ürününden :quantity adet kalmıştır.',
+ 'out_of_stock' => 'Bu e-postayı alıyorsunuz çünkü :name ürünü stokta tükeniyor.',
+ ],
'button' => 'Şimdi Görüntüle',
],
diff --git a/resources/lang/tr-TR/messages.php b/resources/lang/tr-TR/messages.php
index 2003bc14b..2a198f7a6 100644
--- a/resources/lang/tr-TR/messages.php
+++ b/resources/lang/tr-TR/messages.php
@@ -11,8 +11,9 @@ return [
'enabled' => ':type etkinleştirildi!',
'disabled' => ':type devre dışı bırakıldı!',
],
+
'error' => [
- 'over_payment' => 'Hata: Ödeme eklenmedi. Girilen tutar toplamı geçiyor.',
+ 'over_payment' => 'Hata: Ödeme Eklenmedi! Girdiğiniz :amount toplamı geçiyor',
'not_user_company' => 'Hata: Bu şirketi yönetme yetkiniz yok!',
'customer' => 'Hata: Kullanıcı oluşturulamadı. :name bu e-posta adresini kullanmaktadır.',
'no_file' => 'Hata: Dosya seçilmedi!',
@@ -21,9 +22,11 @@ return [
'import_column' => 'Hata: :message Sayfa ismi: :sheet. Satır numarası: :line.',
'import_sheet' => 'Hata: Sayfa ismi geçersiz. Lütfen, örnek dosyaya bakın.',
],
+
'warning' => [
'deleted' => 'Uyarı: :name silinemez çünkü :text ile ilişkilidir.',
'disabled' => 'Uyarı: :name devre dışı bırakılamaz çünkü :text ile ilişkilidir.',
+ 'disable_code' => 'Uyarı: :name devre dışı bırakılamaz veya kur değiştirilemez çünkü :text ile ilişkilidir.',
],
];
diff --git a/resources/lang/tr-TR/modules.php b/resources/lang/tr-TR/modules.php
index 3a0d627b6..25b6d336c 100644
--- a/resources/lang/tr-TR/modules.php
+++ b/resources/lang/tr-TR/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Henüz bu kategoride uygulama bulunmamaktadır.',
'developer' => 'Geliştirici misiniz? Uygulama geliştirip satışa sunmak içinburaya tıklayın!',
+ 'recommended_apps' => 'Önerilen Uygulamalar',
+
'about' => 'Hakkında',
'added' => 'Ekleme Tarihi',
@@ -32,15 +34,28 @@ return [
'installation' => 'Yükleme',
'faq' => 'SSS',
'changelog' => 'Değişiklikler',
+ 'reviews' => 'İncelemeler',
],
'installation' => [
'header' => 'Uygulama Yükleme',
'download' => ':module dosyası indiriliyor.',
'unzip' => ':module ayıklanıyor',
+ 'file_copy' => ':module dosyaları kopyalanıyor.',
+ 'migrate' => ':module uygulama güncellemeleri.',
+ 'finish' => 'Güncelleştirme başarıyla yüklendi. Java Update merkezi yönlendirme olabilir.',
'install' => ':module uygulamanın dosyaları yükleniyor.',
],
+ 'errors' => [
+ 'download' => ':module indirilemiyor!',
+ 'upload' => 'İndirilen :module kaydedilemedi!',
+ 'unzip' => ':module sıkıştırılmış dosyadan çıkartılamadı!',
+ 'file_copy' => ':module dosyaları kopyalanamaz!',
+ 'migrate' => ':module göç bozuk!',
+ 'migrate core' => ':module zaten son sürüm güncellemyemezsiniz.',
+ ],
+
'badge' => [
'installed' => 'Yüklü',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Satın Alınmış',
'installed' => 'Yüklü',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'İnceleme Ekle'
+ ],
+ 'na' => 'Herhangi bir inceleme yok.'
+ ]
];
diff --git a/resources/lang/tr-TR/reconciliations.php b/resources/lang/tr-TR/reconciliations.php
new file mode 100644
index 000000000..be33039cc
--- /dev/null
+++ b/resources/lang/tr-TR/reconciliations.php
@@ -0,0 +1,16 @@
+ 'Mutabakat Yap',
+ 'reconciled' => 'Mutabakat Yapıldı',
+ 'closing_balance' => 'Kapanış Bakiyesi',
+ 'unreconciled' => 'Mutabakat Sağlanmamış',
+ 'list_transactions' => 'İşlemleri Listele',
+ 'start_date' => 'Başlangıç Tarihi',
+ 'end_date' => 'Bitiş Tarihi',
+ 'cleared_amount' => 'MiktarıTemizle',
+ 'deposit' => 'Yatırılan',
+ 'withdrawal' => 'Çekilen',
+
+];
diff --git a/resources/lang/tr-TR/settings.php b/resources/lang/tr-TR/settings.php
index 4470f4398..6b489f42e 100644
--- a/resources/lang/tr-TR/settings.php
+++ b/resources/lang/tr-TR/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Numara Rakam Sayısı',
'next' => 'Sonraki Numara',
'logo' => 'Logo',
+ 'custom' => 'Özel',
+ 'item_name' => 'Ürün adı',
+ 'item' => 'Ürünler',
+ 'product' => 'Ürünler',
+ 'service' => 'Hizmetler',
+ 'price_name' => 'Fiyat Adı',
+ 'price' => 'Fiyat',
+ 'rate' => 'Oran',
+ 'quantity_name' => 'Miktar Adı',
+ 'quantity' => 'Miktar',
],
'default' => [
'tab' => 'Varsayılanlar',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Vade Gününden Önce Gönder',
'cron_command' => 'Cron Komutu',
'schedule_time' => 'Çalışma Saati',
+ 'send_item_reminder'=> 'Ürün Hatırlatıcısı Gönder',
+ 'item_stocks' => 'Stoktataki Ürünü Gönderme Zamanı',
],
'appearance' => [
'tab' => 'Görünüm',
diff --git a/resources/lang/tr-TR/taxes.php b/resources/lang/tr-TR/taxes.php
index 837b43fd1..065d2c34c 100644
--- a/resources/lang/tr-TR/taxes.php
+++ b/resources/lang/tr-TR/taxes.php
@@ -4,5 +4,8 @@ return [
'rate' => 'Oran',
'rate_percent' => 'Oran (%)',
+ 'normal' => 'Normal',
+ 'inclusive' => 'Dahil',
+ 'compound' => 'Bileşik',
];
diff --git a/resources/lang/tr-TR/transfers.php b/resources/lang/tr-TR/transfers.php
index 8d79ca746..c81942eb6 100644
--- a/resources/lang/tr-TR/transfers.php
+++ b/resources/lang/tr-TR/transfers.php
@@ -6,7 +6,7 @@ return [
'to_account' => 'Alan Hesap',
'messages' => [
- 'delete' => ':from hesabıdan :to hesabına (:amount)',
+ 'delete' => ':from hesabından :to hesabına (:amount)',
],
];
diff --git a/resources/lang/tr-TR/validation.php b/resources/lang/tr-TR/validation.php
index fd00e7ef5..be15b91c1 100644
--- a/resources/lang/tr-TR/validation.php
+++ b/resources/lang/tr-TR/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => 'Özel Mesaj',
],
'invalid_currency' => ':attribute geçersiz bir döviz kuru kodu.',
+ 'invalid_amount' => 'Tutar :attribute geçersiz.',
],
/*
diff --git a/resources/lang/uk-UA/auth.php b/resources/lang/uk-UA/auth.php
index a04ccbfe0..0066ea985 100644
--- a/resources/lang/uk-UA/auth.php
+++ b/resources/lang/uk-UA/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => 'Поточна електронна пошта',
'reset' => 'Скинути',
'never' => 'Ніколи',
+
'password' => [
'current' => 'Пароль',
'current_confirm' => 'Підтвердіть пароль',
'new' => 'Новий пароль',
'new_confirm' => 'Підтвердити новий пароль',
],
+
'error' => [
- 'self_delete' => 'Помилка: неможливо видалити!'
+ 'self_delete' => 'Помилка: неможливо видалити!',
+ 'no_company' => 'Error: No company assigned to your account. Please, contact the system administrator.',
],
'failed' => 'Ці облікові дані не збігаються з нашими записами.',
'disabled' => 'Цей обліковий запис вимкнено. Будь-ласка, зверніться до адміністратора.',
'throttle' => 'Занадто багато спроб входу. Будь ласка, спробуйте ще раз, через :seconds секунд.',
+ 'notification' => [
+ 'message_1' => 'You are receiving this email because we received a password reset request for your account.',
+ 'message_2' => 'If you did not request a password reset, no further action is required.',
+ 'button' => 'Reset Password',
+ ],
+
];
diff --git a/resources/lang/uk-UA/bills.php b/resources/lang/uk-UA/bills.php
index d53ba1b26..5677a452d 100644
--- a/resources/lang/uk-UA/bills.php
+++ b/resources/lang/uk-UA/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Рахунок позначено як успішно отриманий!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/uk-UA/customers.php b/resources/lang/uk-UA/customers.php
index 8b8e82497..ccb4d4784 100644
--- a/resources/lang/uk-UA/customers.php
+++ b/resources/lang/uk-UA/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Ця електронна пошта вже використовується.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/uk-UA/demo.php b/resources/lang/uk-UA/demo.php
index 607d0cd85..843721c18 100644
--- a/resources/lang/uk-UA/demo.php
+++ b/resources/lang/uk-UA/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => 'Готівка',
- 'categories_uncat' => 'Без категорії',
'categories_deposit' => 'Депозит',
'categories_sales' => 'Продажі',
'currencies_usd' => 'Долар США',
diff --git a/resources/lang/uk-UA/footer.php b/resources/lang/uk-UA/footer.php
index 0de829c6b..b81c3096f 100644
--- a/resources/lang/uk-UA/footer.php
+++ b/resources/lang/uk-UA/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Версія',
'powered' => 'Зроблено в Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Безкоштовна Бухгалтерська Програма',
];
diff --git a/resources/lang/uk-UA/general.php b/resources/lang/uk-UA/general.php
index 631a7c5cd..e04f57bb9 100644
--- a/resources/lang/uk-UA/general.php
+++ b/resources/lang/uk-UA/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Номер | Номери',
'statuses' => 'Статус | Статуси',
'others' => 'Інший | Інші',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Панель інструментів',
'banking' => 'Банківська справа',
@@ -81,6 +85,7 @@ return [
'color' => 'Колір',
'save' => 'Зберегти',
'cancel' => 'Відміна',
+ 'loading' => 'Loading...',
'from' => 'Від',
'to' => 'До',
'print' => 'Друк',
@@ -100,11 +105,30 @@ return [
'overdue' => 'Протерміновано',
'partially' => 'Частково',
'partially_paid' => 'Частково Оплачено',
+ 'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
+ 'enable' => 'Enable',
+ 'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Нове: тип',
'edit' => 'Редагування: тип',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
+
'form' => [
'enter' => 'Введіть: поля',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => 'Файл не вибрано...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/uk-UA/header.php b/resources/lang/uk-UA/header.php
index 5f3693996..5fdf9dc73 100644
--- a/resources/lang/uk-UA/header.php
+++ b/resources/lang/uk-UA/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :враховувати позицію немає в наявності|[2,*] :враховувати позиції немає в наявності',
'view_all' => 'Переглянути всі'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/uk-UA/import.php b/resources/lang/uk-UA/import.php
index 16428a9c0..f9197346b 100644
--- a/resources/lang/uk-UA/import.php
+++ b/resources/lang/uk-UA/import.php
@@ -4,6 +4,6 @@ return [
'import' => 'Імпорт',
'title' => 'Імпорт: тип',
- 'message' => 'Допускається типи файлів: CSV, XLS. Будь-ласказавантажте зразок файлу.',
+ 'message' => 'Allowed file types: XLS, XLSX. Please, download the sample file.',
];
diff --git a/resources/lang/uk-UA/install.php b/resources/lang/uk-UA/install.php
index 288ea66cd..1e9976bcc 100644
--- a/resources/lang/uk-UA/install.php
+++ b/resources/lang/uk-UA/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Перезавантажити',
'steps' => [
- 'requirements' => 'Будь ласка, відповідайте наступним вимогам!',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'Крок 1/3: Вибір мови',
'database' => 'Крок 2/3: Налаштування бази даних',
'settings' => 'Крок 3/3: Деталі компанії та адміністратора',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ': функцію потрібно ввімкнути!',
'disabled' => ': функцію потрібно вимкнути!',
- 'extension' => ': розширення розширення повинно бути завантаженим!',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => ': директорія каталогу повинна бути доступною для запису!',
],
diff --git a/resources/lang/uk-UA/invoices.php b/resources/lang/uk-UA/invoices.php
index 60101da87..0d05a7327 100644
--- a/resources/lang/uk-UA/invoices.php
+++ b/resources/lang/uk-UA/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Позначити відправлено',
'download_pdf' => 'Завантажити PDF',
'send_mail' => 'Надіслати листа',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Чернетка',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Повідомлення з рахунком було успішно відправлено!',
'marked_sent' => 'Повідомлення з рахунком було успішно відправлено!',
'email_required' => 'Немає повідомлень цього клієнта!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/uk-UA/items.php b/resources/lang/uk-UA/items.php
index 4380df70d..b145ba03a 100644
--- a/resources/lang/uk-UA/items.php
+++ b/resources/lang/uk-UA/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'Артикул',
'notification' => [
- 'message' => 'Ви отримуєте це повідомлення, тому що : назва відсутня.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Переглянути зараз',
],
diff --git a/resources/lang/uk-UA/messages.php b/resources/lang/uk-UA/messages.php
index 2d926fb66..382f4203b 100644
--- a/resources/lang/uk-UA/messages.php
+++ b/resources/lang/uk-UA/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => ': тип видалено!',
'duplicated' => ': тип продубльовано!',
'imported' => ': тип імпортовано!',
+ 'enabled' => ':type enabled!',
+ 'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Помилка: Оплату не додано! Сума проходить загальна.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Помилка: Вам не дозволено керувати цією компанією!',
'customer' => 'Помилка: Користувача не створено! : ця електронна адреса вже використовується.',
'no_file' => 'Помилка: Файл не обрано!',
'last_category' => 'Помилка: Неможливо видалити :type категорію!',
'invalid_token' => 'Помилка: Введений токен невірний!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'Увага: Вам не дозволено видалити : ім\'я , оскільки воно має: текст, пов\'язані.',
diff --git a/resources/lang/uk-UA/modules.php b/resources/lang/uk-UA/modules.php
index bc0d0fe14..b1129534f 100644
--- a/resources/lang/uk-UA/modules.php
+++ b/resources/lang/uk-UA/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API маркер',
'api_token' => 'Маркер',
+ 'my_apps' => 'My Apps',
'top_paid' => 'Топ Paid',
'new' => 'Нове',
'top_free' => 'Топ безкоштовних',
@@ -15,6 +16,8 @@ return [
'no_apps' => 'Немає поки що додатків у цій категорії.',
'developer' => 'Ви розробник? тут ви можете дізнатися, як створити додаток і почати продажі сьогодні!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Про',
'added' => 'Додано',
@@ -31,18 +34,47 @@ return [
'installation' => 'Встановлення',
'faq' => 'Поширені запитання',
'changelog' => 'Історія змін',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Встановлення додатку',
'download' => 'Завантаження: файл модуля.',
'unzip' => 'Вилучення файлів :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Установка файлів : module .',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
+ 'badge' => [
+ 'installed' => 'Installed',
+ ],
+
'button' => [
'uninstall' => 'Видалити',
'disable' => 'Вимкнути',
'enable' => 'Увімкнути',
],
+
+ 'my' => [
+ 'purchased' => 'Purchased',
+ 'installed' => 'Installed',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/uk-UA/notifications.php b/resources/lang/uk-UA/notifications.php
new file mode 100644
index 000000000..88c2f9da0
--- /dev/null
+++ b/resources/lang/uk-UA/notifications.php
@@ -0,0 +1,10 @@
+ 'Whoops!',
+ 'hello' => 'Hello!',
+ 'salutation' => 'Regards, :company_name',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/uk-UA/reconciliations.php b/resources/lang/uk-UA/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/uk-UA/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/uk-UA/settings.php b/resources/lang/uk-UA/settings.php
index 8f0de08ab..c109f5815 100644
--- a/resources/lang/uk-UA/settings.php
+++ b/resources/lang/uk-UA/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Кількість цифр',
'next' => 'Наступний номер',
'logo' => 'Логотип',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'За замовчуванням',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Надіслати після відповідних днів',
'cron_command' => 'Cron команда',
'schedule_time' => 'Години до запуску',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Вигляд',
diff --git a/resources/lang/uk-UA/transfers.php b/resources/lang/uk-UA/transfers.php
index a64cf70e0..0ab704e98 100644
--- a/resources/lang/uk-UA/transfers.php
+++ b/resources/lang/uk-UA/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => 'З облікового запису',
'to_account' => 'Обліковому запису',
+ 'messages' => [
+ 'delete' => ':from to :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/uk-UA/validation.php b/resources/lang/uk-UA/validation.php
index d92eaced8..0387d5b29 100644
--- a/resources/lang/uk-UA/validation.php
+++ b/resources/lang/uk-UA/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'спеціальне повідомлення',
],
+ 'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/vi-VN/auth.php b/resources/lang/vi-VN/auth.php
index 8bc1e9940..886ef1ca8 100644
--- a/resources/lang/vi-VN/auth.php
+++ b/resources/lang/vi-VN/auth.php
@@ -23,7 +23,7 @@ return [
'error' => [
'self_delete' => 'Lỗi: Bạn không thể xoá chính bạn!',
- 'no_company' => 'Error: No company assigned to your account. Please, contact the system administrator.',
+ 'no_company' => 'Lỗi: Không có công ty nào được chỉ định cho tài khoản của bạn. Vui lòng liên hệ với người quản trị hệ thống.',
],
'failed' => 'Thông tin tài khoản không tìm thấy trong hệ thống.',
@@ -31,9 +31,9 @@ return [
'throttle' => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.',
'notification' => [
- 'message_1' => 'You are receiving this email because we received a password reset request for your account.',
- 'message_2' => 'If you did not request a password reset, no further action is required.',
- 'button' => 'Reset Password',
+ 'message_1' => 'Bạn nhận được email này bởi vì chúng tôi đã nhận được một yêu cầu đặt lại mật khẩu cho tài khoản của bạn.',
+ 'message_2' => 'Nếu bạn không yêu cầu đặt lại mật khẩu, đừng làm thêm bất cứ điều gì.',
+ 'button' => 'Đặt lại Mật khẩu',
],
];
diff --git a/resources/lang/vi-VN/bills.php b/resources/lang/vi-VN/bills.php
index 0e25aa3cd..f917930b6 100644
--- a/resources/lang/vi-VN/bills.php
+++ b/resources/lang/vi-VN/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => 'Hoá đợn được đánh dấu là đã nhận thanh toán!',
+ 'draft' => 'This is a DRAFT bill and will be reflected to charts after it gets received.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/vi-VN/customers.php b/resources/lang/vi-VN/customers.php
index ebbee889f..d49ed2aa4 100644
--- a/resources/lang/vi-VN/customers.php
+++ b/resources/lang/vi-VN/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => 'Email đã được đăng ký.'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/vi-VN/footer.php b/resources/lang/vi-VN/footer.php
index 57bdd9ffb..44d2da13c 100644
--- a/resources/lang/vi-VN/footer.php
+++ b/resources/lang/vi-VN/footer.php
@@ -4,6 +4,7 @@ return [
'version' => 'Phiên bản',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => 'Phần mềm kế toán miễn phí',
];
diff --git a/resources/lang/vi-VN/general.php b/resources/lang/vi-VN/general.php
index e525d3dad..97f3068b5 100644
--- a/resources/lang/vi-VN/general.php
+++ b/resources/lang/vi-VN/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => 'Số | Số',
'statuses' => 'Tình trạng | Trạng thái',
'others' => 'Other|Others',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => 'Bảng điều khiển',
'banking' => 'Ngân hàng',
@@ -81,6 +85,7 @@ return [
'color' => 'Màu',
'save' => 'Lưu',
'cancel' => 'Huỷ',
+ 'loading' => 'Loading...',
'from' => 'Từ',
'to' => 'Đến',
'print' => 'In',
@@ -101,12 +106,27 @@ return [
'partially' => 'Partially',
'partially_paid' => 'Partially Paid',
'export' => 'Export',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => 'Enable',
'disable' => 'Disable',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => 'Thêm loại :type',
'edit' => 'Chỉnh sửa loại :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => 'Không có tập tin nào được chọn...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/vi-VN/header.php b/resources/lang/vi-VN/header.php
index 18419e67d..16d7d477b 100644
--- a/resources/lang/vi-VN/header.php
+++ b/resources/lang/vi-VN/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count mục hết hàng | [2, *] :count mục hết hàng',
'view_all' => 'Xem tất cả'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/vi-VN/install.php b/resources/lang/vi-VN/install.php
index 302abbf26..18cd48198 100644
--- a/resources/lang/vi-VN/install.php
+++ b/resources/lang/vi-VN/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => 'Làm mới',
'steps' => [
- 'requirements' => 'Xin vui lòng, đáp ứng các yêu cầu sau đây!',
+ 'requirements' => 'Please, ask your hosting provider to fix the errors!',
'language' => 'Bước 1/3: Lựa chọn ngôn ngữ',
'database' => 'Bước 2/3: Thiết lập cơ sở dữ liệu',
'settings' => 'Bước 3/3: Chi tiết thông tin công ty và trang quản trị',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature cần phải được kích hoạt!',
'disabled' => ':feature cần phải được vô hiệu hoá!',
- 'extension' => ':extension extension cần phải được cài đặt!',
+ 'extension' => ':extension extension needs to be installed and loaded!',
'directory' => 'Thư mục :directory cần được cấp quyền writable!',
],
diff --git a/resources/lang/vi-VN/invoices.php b/resources/lang/vi-VN/invoices.php
index 307e0b757..26c036ecc 100644
--- a/resources/lang/vi-VN/invoices.php
+++ b/resources/lang/vi-VN/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => 'Đánh dấu đã gửi',
'download_pdf' => 'Tải PDF',
'send_mail' => 'Gửi Email',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => 'Bản nháp',
@@ -45,6 +46,18 @@ return [
'email_sent' => 'Hoá đơn email đã được gửi thành công!',
'marked_sent' => 'Hóa đơn được đánh dấu là đã gửi thành công!',
'email_required' => 'No email address for this customer!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/vi-VN/items.php b/resources/lang/vi-VN/items.php
index 742700816..d9b31240a 100644
--- a/resources/lang/vi-VN/items.php
+++ b/resources/lang/vi-VN/items.php
@@ -8,7 +8,10 @@ return [
'sku' => 'SKU',
'notification' => [
- 'message' => 'Bạn nhận được email này bởi vì :name đang hết hàng.',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => 'Xem ngay',
],
diff --git a/resources/lang/vi-VN/messages.php b/resources/lang/vi-VN/messages.php
index f2ea8f7e1..52152cf32 100644
--- a/resources/lang/vi-VN/messages.php
+++ b/resources/lang/vi-VN/messages.php
@@ -12,12 +12,14 @@ return [
'disabled' => ':type disabled!',
],
'error' => [
- 'over_payment' => 'Lỗi: Thanh toán không thành công! Số tiền vượt qua tổng số.',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => 'Lỗi: Bạn không được phép để quản lý công ty này!',
'customer' => 'Lỗi: Người dùng chưa được tạo! Đã có người dùng :name sử dụng địa chỉ email này.',
'no_file' => 'Lỗi: Không có tập tin nào được chọn!',
'last_category' => 'Lỗi: Không thể xóa mục :type cuối!',
'invalid_token' => 'Lỗi: Chữ ký số nhập vào không hợp lệ!',
+ 'import_column' => 'Error: :message Sheet name: :sheet. Line number: :line.',
+ 'import_sheet' => 'Error: Sheet name is not valid. Please, check the sample file.',
],
'warning' => [
'deleted' => 'Chú ý: Bạn không được phép xoá :name này bởi vì nó có :text liên quan.',
diff --git a/resources/lang/vi-VN/modules.php b/resources/lang/vi-VN/modules.php
index 33d19922b..47ab2a042 100644
--- a/resources/lang/vi-VN/modules.php
+++ b/resources/lang/vi-VN/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => 'Chưa có ứng dụng nào trong mục này.',
'developer' => 'Bạn có phải là nhà phát triển? Tại đây bạn có thể tìm hiểu cách làm thế nào để tạo ra một ứng dụng và bắt đầu bán hôm nay!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => 'Giới thiệu',
'added' => 'Đã thêm',
@@ -32,15 +34,28 @@ return [
'installation' => 'Cài đặt',
'faq' => 'Những câu hỏi thường gặp',
'changelog' => 'Changelog',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => 'Cài đặt ứng dụng',
'download' => 'Đang tải tập tin :module.',
'unzip' => 'Đang giải nén tập tin :module.',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => 'Đang cài đặt các tập tin :module',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => 'Installed',
],
@@ -55,4 +70,11 @@ return [
'purchased' => 'Purchased',
'installed' => 'Installed',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/vi-VN/notifications.php b/resources/lang/vi-VN/notifications.php
new file mode 100644
index 000000000..88c2f9da0
--- /dev/null
+++ b/resources/lang/vi-VN/notifications.php
@@ -0,0 +1,10 @@
+ 'Whoops!',
+ 'hello' => 'Hello!',
+ 'salutation' => 'Regards, :company_name',
+ 'subcopy' => 'If you’re having trouble clicking the ":text" button, copy and paste the URL below into your web browser: [:url](:url)',
+
+];
diff --git a/resources/lang/vi-VN/reconciliations.php b/resources/lang/vi-VN/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/vi-VN/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/vi-VN/settings.php b/resources/lang/vi-VN/settings.php
index 1a13fc576..81fd1dcdf 100644
--- a/resources/lang/vi-VN/settings.php
+++ b/resources/lang/vi-VN/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => 'Số chữ số',
'next' => 'Số tiếp theo',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => 'Mặc định',
@@ -66,6 +76,8 @@ return [
'bill_days' => 'Gửi trước số ngày quá hạn',
'cron_command' => 'Lệnh Cronjob',
'schedule_time' => 'Giờ chạy',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => 'Hiển thị',
diff --git a/resources/lang/vi-VN/validation.php b/resources/lang/vi-VN/validation.php
index 4357ecdc6..7a0b6c6ee 100644
--- a/resources/lang/vi-VN/validation.php
+++ b/resources/lang/vi-VN/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => 'custom-message',
],
+ 'invalid_currency' => 'The :attribute code is invalid.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/zh-CN/bills.php b/resources/lang/zh-CN/bills.php
index 8d3428933..7e38b4fb4 100644
--- a/resources/lang/zh-CN/bills.php
+++ b/resources/lang/zh-CN/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => '成功标记账单为已收到!',
+ 'draft' => '这是 草稿 账单, 在收到后将反映在图表上。',
+
+ 'status' => [
+ 'created' => '创建日期: date',
+ 'receive' => [
+ 'draft' => 'Not sent',
+ 'received' => 'Received on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
];
diff --git a/resources/lang/zh-CN/customers.php b/resources/lang/zh-CN/customers.php
index 69b558bb0..833befbc1 100644
--- a/resources/lang/zh-CN/customers.php
+++ b/resources/lang/zh-CN/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => '邮箱已注册'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer made :amount payment to invoice number :invoice_number.',
+ 'button' => 'Show',
+ ],
];
diff --git a/resources/lang/zh-CN/footer.php b/resources/lang/zh-CN/footer.php
index d46aa1c88..779d3bcad 100644
--- a/resources/lang/zh-CN/footer.php
+++ b/resources/lang/zh-CN/footer.php
@@ -4,6 +4,7 @@ return [
'version' => '当前版本',
'powered' => '由 Akaunting 驱动',
+ 'link' => 'https://akaunting.com',
'software' => '免费会计软件',
];
diff --git a/resources/lang/zh-CN/general.php b/resources/lang/zh-CN/general.php
index 7748a2552..47d599808 100644
--- a/resources/lang/zh-CN/general.php
+++ b/resources/lang/zh-CN/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => '编号 | 编号',
'statuses' => '状态 | 状态',
'others' => '其他 | 其他',
+ 'contacts' => 'Contact|Contacts',
+ 'reconciliations' => 'Reconciliation|Reconciliations',
+ 'deposits' => 'Deposit|Deposits',
+ 'withdrawals' => 'Withdrawal|Withdrawals',
'dashboard' => '统计',
'banking' => '银行',
@@ -81,6 +85,7 @@ return [
'color' => '颜色',
'save' => '保存',
'cancel' => '取消',
+ 'loading' => 'Loading...',
'from' => '來自',
'to' => '收件人',
'print' => '打印',
@@ -101,12 +106,27 @@ return [
'partially' => '部分',
'partially_paid' => '部分付款',
'export' => '导出',
+ 'finish' => 'Finish',
+ 'wizard' => 'Wizard',
+ 'skip' => 'Skip',
'enable' => '启用',
'disable' => '禁用',
+ 'select_all' => 'Select All',
+ 'unselect_all' => 'Unselect All',
+ 'go_to' => 'Go to :name',
+ 'created_date' => 'Created Date',
+ 'period' => 'Period',
+ 'start' => 'Start',
+ 'end' => 'End',
+ 'clear' => 'Clear',
+ 'difference' => 'Difference',
'title' => [
'new' => '新增 :type',
'edit' => '编辑 :type',
+ 'create' => 'Create :type',
+ 'send' => 'Send :type',
+ 'get' => 'Get :type',
],
'form' => [
@@ -118,4 +138,11 @@ return [
'no_file_selected' => '未选择文件...',
],
+ 'date_range' => [
+ 'today' => 'Today',
+ 'yesterday' => 'Yesterday',
+ 'last_days' => 'Last :day Days',
+ 'this_month' => 'This Month',
+ 'last_month' => 'Last Month',
+ ],
];
diff --git a/resources/lang/zh-CN/header.php b/resources/lang/zh-CN/header.php
index 950b6c145..92e6a86ba 100644
--- a/resources/lang/zh-CN/header.php
+++ b/resources/lang/zh-CN/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count 項目无库存 | [2,*] :count 項目无库存',
'view_all' => '查看全部'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/zh-CN/invoices.php b/resources/lang/zh-CN/invoices.php
index 2ee63f94f..80c231799 100644
--- a/resources/lang/zh-CN/invoices.php
+++ b/resources/lang/zh-CN/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => '标记为已发送',
'download_pdf' => '下载 PDF格式',
'send_mail' => '发送邮件',
+ 'all_invoices' => 'Login to view all invoices',
'status' => [
'draft' => '草稿',
@@ -45,6 +46,18 @@ return [
'email_sent' => '成功发送账单邮件!',
'marked_sent' => '成功标记账单为已发送!',
'email_required' => '此客户沒有邮箱!',
+ 'draft' => 'This is a DRAFT invoice and will be reflected to charts after it gets sent.',
+
+ 'status' => [
+ 'created' => 'Created on :date',
+ 'send' => [
+ 'draft' => 'Not sent',
+ 'sent' => 'Sent on :date',
+ ],
+ 'paid' => [
+ 'await' => 'Awaiting payment',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/zh-CN/items.php b/resources/lang/zh-CN/items.php
index 16297ba44..088fdb32c 100644
--- a/resources/lang/zh-CN/items.php
+++ b/resources/lang/zh-CN/items.php
@@ -8,7 +8,10 @@ return [
'sku' => '库存',
'notification' => [
- 'message' => '由于 :name 已经无库存,因此您会收到此封邮件。',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => 'You are receiving this email because the :name is running out of stock.',
+ ],
'button' => '现在查看',
],
diff --git a/resources/lang/zh-CN/messages.php b/resources/lang/zh-CN/messages.php
index b216071ab..3c5f7a579 100644
--- a/resources/lang/zh-CN/messages.php
+++ b/resources/lang/zh-CN/messages.php
@@ -12,7 +12,7 @@ return [
'disabled' => ':type 已禁用!',
],
'error' => [
- 'over_payment' => '错误:未加入付款方式!数量超过总计。',
+ 'over_payment' => 'Error: Payment not added! The amount you entered passes the total: :amount',
'not_user_company' => '错误:您不允许管理此公司!',
'customer' => '错误:未创建用户!:name已经使用此邮箱。',
'no_file' => '错误:沒有选择文件!',
diff --git a/resources/lang/zh-CN/modules.php b/resources/lang/zh-CN/modules.php
index 11eaafca5..565e65013 100644
--- a/resources/lang/zh-CN/modules.php
+++ b/resources/lang/zh-CN/modules.php
@@ -16,6 +16,8 @@ return [
'no_apps' => '此分类中尚无App。',
'developer' => '您是開發人員嗎?這裡 可以幫助您學習如何建立應用程式並立即開始銷售!',
+ 'recommended_apps' => 'Recommended Apps',
+
'about' => '關於',
'added' => '已新增',
@@ -32,15 +34,28 @@ return [
'installation' => '安裝',
'faq' => '常見問題',
'changelog' => '更新日誌',
+ 'reviews' => 'Reviews',
],
'installation' => [
'header' => '應用程式安裝',
'download' => '下載模組檔案中::module',
'unzip' => '解開模組封裝中::module',
+ 'file_copy' => 'Copying :module files.',
+ 'migrate' => 'Applying :module updates.',
+ 'finish' => 'The update was successfully installed. You will be redirect Update Center.',
'install' => '安裝 :module檔案中。',
],
+ 'errors' => [
+ 'download' => ':module can not download!',
+ 'upload' => 'Downloaded :module can not saved!',
+ 'unzip' => ':module can not unzip!',
+ 'file_copy' => ':module files can not copy!',
+ 'migrate' => ':module migrate broken!',
+ 'migrate core' => ':module already latest version so then yon can not update.',
+ ],
+
'badge' => [
'installed' => '安装成功',
],
@@ -55,4 +70,11 @@ return [
'purchased' => '已购买',
'installed' => '已安装',
],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => 'Add a Review'
+ ],
+ 'na' => 'There are no reviews.'
+ ]
];
diff --git a/resources/lang/zh-CN/reconciliations.php b/resources/lang/zh-CN/reconciliations.php
new file mode 100644
index 000000000..0ab0e4022
--- /dev/null
+++ b/resources/lang/zh-CN/reconciliations.php
@@ -0,0 +1,14 @@
+ 'Reconcile',
+ 'reconciled' => 'Reconciled',
+ 'closing_balance' => 'Closing Balance',
+ 'unreconciled' => 'Unreconciled',
+ 'list_transactions' => 'List Transactions',
+ 'start_date' => 'Start Date',
+ 'end_date' => 'End Date',
+ 'cleared_amount' => 'Cleared Amount',
+
+];
diff --git a/resources/lang/zh-CN/settings.php b/resources/lang/zh-CN/settings.php
index b5d30aa3b..1e991fcca 100644
--- a/resources/lang/zh-CN/settings.php
+++ b/resources/lang/zh-CN/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => '数字位数',
'next' => '下一个号码',
'logo' => 'Logo',
+ 'custom' => 'Custom',
+ 'item_name' => 'Item Name',
+ 'item' => 'Items',
+ 'product' => 'Products',
+ 'service' => 'Services',
+ 'price_name' => 'Price Name',
+ 'price' => 'Price',
+ 'rate' => 'Rate',
+ 'quantity_name' => 'Quantity Name',
+ 'quantity' => 'Quantity',
],
'default' => [
'tab' => '默认',
@@ -66,6 +76,8 @@ return [
'bill_days' => '与到期日前发送',
'cron_command' => 'Cron命令',
'schedule_time' => '执行时间',
+ 'send_item_reminder'=> 'Send Item Reminder',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => '显示',
diff --git a/resources/lang/zh-CN/validation.php b/resources/lang/zh-CN/validation.php
index 27872f8be..13dcc7ac9 100644
--- a/resources/lang/zh-CN/validation.php
+++ b/resources/lang/zh-CN/validation.php
@@ -102,6 +102,7 @@ return [
'rule-name' => '自定信息',
],
'invalid_currency' => ':attribute code 无效.',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/lang/zh-TW/auth.php b/resources/lang/zh-TW/auth.php
index ed38d6f68..f097abe7a 100644
--- a/resources/lang/zh-TW/auth.php
+++ b/resources/lang/zh-TW/auth.php
@@ -13,18 +13,27 @@ return [
'current_email' => '目前的電子郵件',
'reset' => '重設',
'never' => '永遠不要',
+
'password' => [
'current' => '密碼',
'current_confirm' => '確認密碼',
'new' => '新的密碼',
'new_confirm' => '確認新的密碼',
],
+
'error' => [
- 'self_delete' => '錯誤:無法刪除自己!'
+ 'self_delete' => '錯誤:無法刪除自己!',
+ 'no_company' => '錯誤:您的帳戶沒有分配公司,請聯繫系統管理員。',
],
'failed' => '使用者名稱或密碼錯誤',
'disabled' => '此帳號已被停用,請聯繫系統管理員。',
'throttle' => '嘗試登入太多次,請在 :seconds 秒後再試。',
+ 'notification' => [
+ 'message_1' => '您會收到此郵件表示我們收到重設您帳戶密碼的要求。',
+ 'message_2' => '如果你沒有要求重設密碼,則不需要進一步操作。',
+ 'button' => '重設密碼',
+ ],
+
];
diff --git a/resources/lang/zh-TW/bills.php b/resources/lang/zh-TW/bills.php
index ad69e76a3..c316a6af4 100644
--- a/resources/lang/zh-TW/bills.php
+++ b/resources/lang/zh-TW/bills.php
@@ -41,6 +41,18 @@ return [
'messages' => [
'received' => '成功標記帳單為已收到!',
+ 'draft' => '這是 草稿 帳單, 在簽收後將反映在圖表上。',
+
+ 'status' => [
+ 'created' => '創建於 :date',
+ 'receive' => [
+ 'draft' => '未發送',
+ 'received' => '簽收於 :date',
+ ],
+ 'paid' => [
+ 'await' => '等待付款',
+ ],
+ ],
],
];
diff --git a/resources/lang/zh-TW/customers.php b/resources/lang/zh-TW/customers.php
index 7fbf7ab0b..23e21fb6e 100644
--- a/resources/lang/zh-TW/customers.php
+++ b/resources/lang/zh-TW/customers.php
@@ -7,5 +7,10 @@ return [
'error' => [
'email' => '此郵件已被使用。'
- ]
+ ],
+
+ 'notification' => [
+ 'message' => ':customer 付款 :amount 為發票編號 :invoice_number',
+ 'button' => '顯示',
+ ],
];
diff --git a/resources/lang/zh-TW/demo.php b/resources/lang/zh-TW/demo.php
index ad67dcba4..927d76289 100644
--- a/resources/lang/zh-TW/demo.php
+++ b/resources/lang/zh-TW/demo.php
@@ -3,7 +3,6 @@
return [
'accounts_cash' => '現金',
- 'categories_uncat' => '未分類',
'categories_deposit' => '存款',
'categories_sales' => '業務人員',
'currencies_usd' => '美金',
diff --git a/resources/lang/zh-TW/footer.php b/resources/lang/zh-TW/footer.php
index cee1104aa..4a8cf728c 100644
--- a/resources/lang/zh-TW/footer.php
+++ b/resources/lang/zh-TW/footer.php
@@ -4,6 +4,7 @@ return [
'version' => '版本',
'powered' => 'Powered By Akaunting',
+ 'link' => 'https://akaunting.com',
'software' => '免費會計軟體',
];
diff --git a/resources/lang/zh-TW/general.php b/resources/lang/zh-TW/general.php
index f40aa0d89..8e7a68ea2 100644
--- a/resources/lang/zh-TW/general.php
+++ b/resources/lang/zh-TW/general.php
@@ -38,6 +38,10 @@ return [
'numbers' => '編號 | 編號',
'statuses' => '狀態 | 狀態',
'others' => '其他 | 其他',
+ 'contacts' => '連絡人|連絡人',
+ 'reconciliations' => '核對|核對',
+ 'deposits' => '存款|存款',
+ 'withdrawals' => '提款|提款',
'dashboard' => '控制面板',
'banking' => '銀行',
@@ -81,6 +85,7 @@ return [
'color' => '顏色',
'save' => '儲存',
'cancel' => '取消',
+ 'loading' => '正在加載…',
'from' => '來自',
'to' => '收件人',
'print' => '列印',
@@ -100,11 +105,30 @@ return [
'overdue' => '已逾期',
'partially' => '部分',
'partially_paid' => '部分付款',
+ 'export' => '導出',
+ 'finish' => '完成',
+ 'wizard' => '嚮導',
+ 'skip' => '略過',
+ 'enable' => '啟用',
+ 'disable' => '禁用',
+ 'select_all' => '全部選取',
+ 'unselect_all' => '取消全選',
+ 'go_to' => 'Go to :name',
+ 'created_date' => '創建日期',
+ 'period' => 'Period',
+ 'start' => '開始',
+ 'end' => '结束',
+ 'clear' => '清除',
+ 'difference' => '差異',
'title' => [
'new' => '新增 :type',
'edit' => '編輯 :type',
+ 'create' => '創建 :type',
+ 'send' => 'Send :type',
+ 'get' => '獲取 :type',
],
+
'form' => [
'enter' => '輸入 :field',
'select' => [
@@ -114,4 +138,11 @@ return [
'no_file_selected' => '尚未選擇檔案...',
],
+ 'date_range' => [
+ 'today' => '今天',
+ 'yesterday' => '昨天',
+ 'last_days' => '過去 :day 天',
+ 'this_month' => '本月',
+ 'last_month' => '上個月',
+ ],
];
diff --git a/resources/lang/zh-TW/header.php b/resources/lang/zh-TW/header.php
index b59c6d13d..151b8deaa 100644
--- a/resources/lang/zh-TW/header.php
+++ b/resources/lang/zh-TW/header.php
@@ -11,5 +11,6 @@ return [
'items_stock' => '{1} :count 項目無庫存 | [2,*] :count 項目無庫存',
'view_all' => '檢視全部'
],
+ 'docs_link' => 'https://akaunting.com/docs',
];
diff --git a/resources/lang/zh-TW/import.php b/resources/lang/zh-TW/import.php
index 23a07f198..9bd8bde27 100644
--- a/resources/lang/zh-TW/import.php
+++ b/resources/lang/zh-TW/import.php
@@ -4,6 +4,6 @@ return [
'import' => '匯入',
'title' => '匯入 :type',
- 'message' => '允許的檔案類型: CSV, XLS。請下載 範例檔案。',
+ 'message' => '允許的檔案類型: XLS, XLSX。請下載 範例檔案。',
];
diff --git a/resources/lang/zh-TW/install.php b/resources/lang/zh-TW/install.php
index a8089c7fc..94675e7fd 100644
--- a/resources/lang/zh-TW/install.php
+++ b/resources/lang/zh-TW/install.php
@@ -6,7 +6,7 @@ return [
'refresh' => '重新整理',
'steps' => [
- 'requirements' => '請檢查以下系統需求!',
+ 'requirements' => '請詢問您的主機供應商以修復這些錯誤!',
'language' => '步驟一:選擇語系',
'database' => '步驟二:設定資料庫',
'settings' => '步驟三:公司與管理員資訊',
@@ -19,7 +19,7 @@ return [
'requirements' => [
'enabled' => ':feature 必須啟動!',
'disabled' => ':feature 必須關閉!',
- 'extension' => ':extension 必須載入!',
+ 'extension' => '必須安裝並載入 :extension !',
'directory' => ':directory 必須可寫入!',
],
diff --git a/resources/lang/zh-TW/invoices.php b/resources/lang/zh-TW/invoices.php
index fed4f1eda..f684f5d44 100644
--- a/resources/lang/zh-TW/invoices.php
+++ b/resources/lang/zh-TW/invoices.php
@@ -31,6 +31,7 @@ return [
'mark_sent' => '標記為已傳送',
'download_pdf' => '下載 PDF格式',
'send_mail' => '傳送電子郵件',
+ 'all_invoices' => '登錄以查看所有發票',
'status' => [
'draft' => '草稿',
@@ -45,6 +46,18 @@ return [
'email_sent' => '成功傳送帳單郵件!',
'marked_sent' => '成功標記帳單為已傳送!',
'email_required' => '此客戶沒有電子郵件地址!',
+ 'draft' => '這是 草稿 發票, 在簽收後將反映在圖表上。',
+
+ 'status' => [
+ 'created' => '創建於 :date',
+ 'send' => [
+ 'draft' => '未發送',
+ 'sent' => '發送於 :date',
+ ],
+ 'paid' => [
+ 'await' => '等待付款',
+ ],
+ ],
],
'notification' => [
diff --git a/resources/lang/zh-TW/items.php b/resources/lang/zh-TW/items.php
index cc4609666..d37cf4616 100644
--- a/resources/lang/zh-TW/items.php
+++ b/resources/lang/zh-TW/items.php
@@ -8,7 +8,10 @@ return [
'sku' => '庫存',
'notification' => [
- 'message' => '由於 :name 已經無庫存,因此您會收到此封郵件。',
+ 'message' => [
+ 'reminder' => 'You are receiving this email because only :quantity of :name has remained.',
+ 'out_of_stock' => '由於 :name 已缺貨,因此您會收到此封郵件。',
+ ],
'button' => '現在檢視',
],
diff --git a/resources/lang/zh-TW/messages.php b/resources/lang/zh-TW/messages.php
index 9705afd7f..066f38038 100644
--- a/resources/lang/zh-TW/messages.php
+++ b/resources/lang/zh-TW/messages.php
@@ -8,14 +8,18 @@ return [
'deleted' => '已刪除:type !',
'duplicated' => ':type 重複!',
'imported' => ':type 已匯入!',
+ 'enabled' => '已啟用 :type !',
+ 'disabled' => '已停用 :type !',
],
'error' => [
- 'over_payment' => '錯誤:未加入付款方式!數量超過總計。',
+ 'over_payment' => '錯誤:付款未添加! 你輸入的金額超過總金額: :amount',
'not_user_company' => '錯誤:您不允許管理此公司!',
'customer' => '錯誤:未建立使用者!:name已經使用此電子郵件。',
'no_file' => '錯誤:沒有選擇檔案!',
'last_category' => '錯誤:無法刪除最後一個 :type 分類!',
'invalid_token' => '錯誤:token輸入錯誤!',
+ 'import_column' => '錯誤: :message工作表 name: :sheet,第 number: :line 行',
+ 'import_sheet' => '錯誤:工作表名稱不正確,請檢查範例檔案。',
],
'warning' => [
'deleted' => '警告:由於和 :text 相關,你不能刪除:name 。',
diff --git a/resources/lang/zh-TW/modules.php b/resources/lang/zh-TW/modules.php
index 7703db779..3dae29573 100644
--- a/resources/lang/zh-TW/modules.php
+++ b/resources/lang/zh-TW/modules.php
@@ -4,6 +4,7 @@ return [
'title' => 'API Token',
'api_token' => 'Token',
+ 'my_apps' => '我的應用程式',
'top_paid' => '最佳銷售',
'new' => '新增',
'top_free' => '最佳免費',
@@ -15,6 +16,8 @@ return [
'no_apps' => '此分類中尚無應用程式。',
'developer' => '您是開發人員嗎?這裡 可以幫助您學習如何建立應用程式並立即開始銷售!',
+ 'recommended_apps' => '推薦的程序',
+
'about' => '關於',
'added' => '已新增',
@@ -31,18 +34,47 @@ return [
'installation' => '安裝',
'faq' => '常見問題',
'changelog' => '更新日誌',
+ 'reviews' => '評論',
],
'installation' => [
'header' => '應用程式安裝',
'download' => '下載模組檔案中::module',
'unzip' => '解開模組封裝中::module',
+ 'file_copy' => '複製 :module 檔案中。',
+ 'migrate' => '安裝 :module檔案中。',
+ 'finish' => '更新已成功安裝。您將重定向更新中心。',
'install' => '安裝 :module檔案中。',
],
+ 'errors' => [
+ 'download' => ':module 無法下載!',
+ 'upload' => '已下載 :module無法保存!',
+ 'unzip' => ':module 無法解壓縮!',
+ 'file_copy' => ':module 文件無法複製!',
+ 'migrate' => ':module 遷移失敗!',
+ 'migrate core' => ':module 已經是最新版本,所以你無法更新。',
+ ],
+
+ 'badge' => [
+ 'installed' => '已安裝',
+ ],
+
'button' => [
'uninstall' => '移除',
'disable' => '停用',
'enable' => '啟用',
],
+
+ 'my' => [
+ 'purchased' => '已購買',
+ 'installed' => '已安裝',
+ ],
+
+ 'reviews' => [
+ 'button' => [
+ 'add' => '新增評論'
+ ],
+ 'na' => '目前沒有評論'
+ ]
];
diff --git a/resources/lang/zh-TW/notifications.php b/resources/lang/zh-TW/notifications.php
new file mode 100644
index 000000000..88ec13d69
--- /dev/null
+++ b/resources/lang/zh-TW/notifications.php
@@ -0,0 +1,10 @@
+ '唉呦!',
+ 'hello' => '哈囉!',
+ 'salutation' => '你好, :company_name',
+ 'subcopy' => '如果你在點選「:text」按鈕時遇到問題,複製並在瀏覽器中貼上以下網址:[:url](:url)',
+
+];
diff --git a/resources/lang/zh-TW/reconciliations.php b/resources/lang/zh-TW/reconciliations.php
new file mode 100644
index 000000000..6457e7803
--- /dev/null
+++ b/resources/lang/zh-TW/reconciliations.php
@@ -0,0 +1,14 @@
+ '帳戶核對',
+ 'reconciled' => '帳戶已核對',
+ 'closing_balance' => '期末餘額',
+ 'unreconciled' => '帳戶未核對',
+ 'list_transactions' => '查看交易記錄',
+ 'start_date' => '開始日期',
+ 'end_date' => '結束日期',
+ 'cleared_amount' => '清算金額',
+
+];
diff --git a/resources/lang/zh-TW/settings.php b/resources/lang/zh-TW/settings.php
index e46a9ff3c..c8c621ee5 100644
--- a/resources/lang/zh-TW/settings.php
+++ b/resources/lang/zh-TW/settings.php
@@ -33,6 +33,16 @@ return [
'digit' => '數字位數',
'next' => '下一個號碼',
'logo' => '商標',
+ 'custom' => '自訂',
+ 'item_name' => '產品名稱',
+ 'item' => '產品',
+ 'product' => '商品',
+ 'service' => '服務',
+ 'price_name' => '價格名稱',
+ 'price' => '價格',
+ 'rate' => 'Rate',
+ 'quantity_name' => '數量名稱',
+ 'quantity' => '數量',
],
'default' => [
'tab' => '預設',
@@ -66,6 +76,8 @@ return [
'bill_days' => '於到期日前傳送',
'cron_command' => 'Cron指令',
'schedule_time' => '執行時間',
+ 'send_item_reminder'=> '發送產品提醒',
+ 'item_stocks' => 'Send When Item Stock',
],
'appearance' => [
'tab' => '外觀',
diff --git a/resources/lang/zh-TW/transfers.php b/resources/lang/zh-TW/transfers.php
index b06e9c9cb..abb176e77 100644
--- a/resources/lang/zh-TW/transfers.php
+++ b/resources/lang/zh-TW/transfers.php
@@ -5,4 +5,8 @@ return [
'from_account' => '來自帳戶',
'to_account' => '收件帳戶',
+ 'messages' => [
+ 'delete' => ':from 至 :to (:amount)',
+ ],
+
];
diff --git a/resources/lang/zh-TW/validation.php b/resources/lang/zh-TW/validation.php
index 758ab3385..5ed5ae637 100644
--- a/resources/lang/zh-TW/validation.php
+++ b/resources/lang/zh-TW/validation.php
@@ -101,6 +101,8 @@ return [
'attribute-name' => [
'rule-name' => '自訂訊息',
],
+ 'invalid_currency' => ':attribute 的代碼不正確。',
+ 'invalid_amount' => 'The amount :attribute is invalid.',
],
/*
diff --git a/resources/views/auth/permissions/create.blade.php b/resources/views/auth/permissions/create.blade.php
index d5f693ec0..432ee385e 100644
--- a/resources/views/auth/permissions/create.blade.php
+++ b/resources/views/auth/permissions/create.blade.php
@@ -5,7 +5,7 @@
@section('content')
- {!! Form::open(['url' => 'auth/permissions', 'role' => 'form']) !!}
+ {!! Form::open(['url' => 'auth/permissions', 'role' => 'form', 'class' => 'form-loading-button']) !!}
{{ Form::textGroup('display_name', trans('general.name'), 'id-card-o') }}
diff --git a/resources/views/auth/permissions/edit.blade.php b/resources/views/auth/permissions/edit.blade.php
index 7ca0c49cd..dc37729ab 100644
--- a/resources/views/auth/permissions/edit.blade.php
+++ b/resources/views/auth/permissions/edit.blade.php
@@ -8,7 +8,8 @@
{!! Form::model($permission, [
'method' => 'PATCH',
'url' => ['auth/permissions', $permission->id],
- 'role' => 'form'
+ 'role' => 'form',
+ 'class' => 'form-loading-button'
]) !!}
diff --git a/resources/views/auth/roles/create.blade.php b/resources/views/auth/roles/create.blade.php
index 074b37aae..f8ed980a5 100644
--- a/resources/views/auth/roles/create.blade.php
+++ b/resources/views/auth/roles/create.blade.php
@@ -5,7 +5,7 @@
@section('content')
- {!! Form::open(['url' => 'auth/roles', 'role' => 'form']) !!}
+ {!! Form::open(['url' => 'auth/roles', 'role' => 'form', 'class' => 'form-loading-button']) !!}
{{ Form::textGroup('display_name', trans('general.name'), 'id-card-o') }}
@@ -14,7 +14,48 @@
{{ Form::textareaGroup('description', trans('general.description')) }}
- {{ Form::checkboxGroup('permissions', trans_choice('general.permissions', 2), $permissions, 'display_name') }}
+
+
{{trans_choice('general.permissions', 2)}}
+
+
+
+
{{trans('general.select_all')}} |
+
{{trans('general.unselect_all')}}
+
+
+
+
+
+ @foreach($permissions as $code => $code_permissions)
+
+
+ {{trans('general.select_all')}} |
+ {{trans('general.unselect_all')}}
+
+
+ @stack('permissions_input_start')
+
+
+
+ @stack('permissions_input_end')
+
+ @endforeach
+
+
+
@@ -26,3 +67,32 @@
{!! Form::close() !!}
@endsection
+
+@push('js')
+
+@endpush
+
+@push('css')
+
+@endpush
+
+@push('scripts')
+
+@endpush
+
diff --git a/resources/views/auth/roles/edit.blade.php b/resources/views/auth/roles/edit.blade.php
index b34f77b25..94c3696df 100644
--- a/resources/views/auth/roles/edit.blade.php
+++ b/resources/views/auth/roles/edit.blade.php
@@ -8,7 +8,8 @@
{!! Form::model($role, [
'method' => 'PATCH',
'url' => ['auth/roles', $role->id],
- 'role' => 'form'
+ 'role' => 'form',
+ 'class' => 'form-loading-button'
]) !!}
@@ -18,7 +19,47 @@
{{ Form::textareaGroup('description', trans('general.description')) }}
- {{ Form::checkboxGroup('permissions', trans_choice('general.permissions', 2), $permissions, 'display_name') }}
+
+
{{trans_choice('general.permissions', 2)}}
+
+
+
+
{{trans('general.select_all')}} |
+
{{trans('general.unselect_all')}}
+
+
+
+
+ @foreach($permissions as $code => $code_permissions)
+
+
+ {{trans('general.select_all')}} |
+ {{trans('general.unselect_all')}}
+
+
+ @stack('permissions_input_start')
+
+
+
+ @stack('permissions_input_end')
+
+ @endforeach
+
+
+
@@ -32,3 +73,31 @@
{!! Form::close() !!}
@endsection
+
+@push('js')
+
+@endpush
+
+@push('css')
+
+@endpush
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/auth/users/create.blade.php b/resources/views/auth/users/create.blade.php
index 602259c2b..d2b9de3c5 100644
--- a/resources/views/auth/users/create.blade.php
+++ b/resources/views/auth/users/create.blade.php
@@ -5,7 +5,7 @@
@section('content')
- {!! Form::open(['url' => 'auth/users', 'files' => true, 'role' => 'form']) !!}
+ {!! Form::open(['url' => 'auth/users', 'files' => true, 'role' => 'form', 'class' => 'form-loading-button']) !!}
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }}
diff --git a/resources/views/auth/users/edit.blade.php b/resources/views/auth/users/edit.blade.php
index 657adfd5e..0b8bd9b5f 100644
--- a/resources/views/auth/users/edit.blade.php
+++ b/resources/views/auth/users/edit.blade.php
@@ -9,7 +9,8 @@
'method' => 'PATCH',
'files' => true,
'url' => ['auth/users', $user->id],
- 'role' => 'form'
+ 'role' => 'form',
+ 'class' => 'form-loading-button'
]) !!}
diff --git a/resources/views/banking/accounts/create.blade.php b/resources/views/banking/accounts/create.blade.php
index 48c69db48..d3e42ad05 100644
--- a/resources/views/banking/accounts/create.blade.php
+++ b/resources/views/banking/accounts/create.blade.php
@@ -5,7 +5,7 @@
@section('content')
- {!! Form::open(['url' => 'banking/accounts', 'role' => 'form']) !!}
+ {!! Form::open(['url' => 'banking/accounts', 'role' => 'form', 'class' => 'form-loading-button']) !!}
{{ Form::textGroup('name', trans('general.name'), 'id-card-o') }}
diff --git a/resources/views/banking/accounts/edit.blade.php b/resources/views/banking/accounts/edit.blade.php
index 7e53f8f37..6c8035534 100644
--- a/resources/views/banking/accounts/edit.blade.php
+++ b/resources/views/banking/accounts/edit.blade.php
@@ -8,7 +8,8 @@
{!! Form::model($account, [
'method' => 'PATCH',
'url' => ['banking/accounts', $account->id],
- 'role' => 'form'
+ 'role' => 'form',
+ 'class' => 'form-loading-button'
]) !!}
diff --git a/resources/views/banking/accounts/index.blade.php b/resources/views/banking/accounts/index.blade.php
index 153392384..0883ee374 100644
--- a/resources/views/banking/accounts/index.blade.php
+++ b/resources/views/banking/accounts/index.blade.php
@@ -41,7 +41,11 @@
@foreach($accounts as $item)
- {{ $item->name }}
+ @if ($auth_user->can('read-reports-income-expense-summary'))
+ {{ $item->name }}
+ @else
+ {{ $item->name }}
+ @endif
{{ $item->number }}
@money($item->balance, $item->currency_code, true)
@@ -57,7 +61,7 @@
@stack('add_item_td_end')
@stack('sub_total_td_start')
-
+
{{ trans('bills.sub_total') }}
0
@stack('sub_total_td_end')
@stack('add_discount_td_start')
-
+
{{ trans('bills.add_discount') }}
@@ -94,13 +94,15 @@
@stack('add_discount_td_end')
@stack('tax_total_td_start')
-
- {{ trans_choice('general.taxes', 1) }}
+
+
+ {{ trans_choice('general.taxes', 1) }}
+
0
@stack('tax_total_td_end')
@stack('grand_total_td_start')
-
+
{{ trans('bills.total') }}
0
@@ -128,7 +130,7 @@
{{ Form::recurring('create') }}
- {{ Form::fileGroup('attachment', trans('general.attachment'),[]) }}
+ {{ Form::fileGroup('attachment', trans('general.attachment')) }}
{{ Form::hidden('vendor_name', old('vendor_name'), ['id' => 'vendor_name']) }}
{{ Form::hidden('vendor_email', old('vendor_email'), ['id' => 'vendor_email']) }}
@@ -152,7 +154,9 @@
@push('js')
+ @if (language()->getShortCode() != 'en')
+ @endif
@@ -166,51 +170,18 @@
@push('scripts')
@endpush
diff --git a/resources/views/expenses/bills/edit.blade.php b/resources/views/expenses/bills/edit.blade.php
index ef21f9d8d..56caa5718 100644
--- a/resources/views/expenses/bills/edit.blade.php
+++ b/resources/views/expenses/bills/edit.blade.php
@@ -5,7 +5,7 @@
@section('content')
- {!! Form::model($bill, ['method' => 'PATCH', 'files' => true, 'url' => ['expenses/bills', $bill->id], 'role' => 'form']) !!}
+ {!! Form::model($bill, ['method' => 'PATCH', 'files' => true, 'url' => ['expenses/bills', $bill->id], 'role' => 'form', 'class' => 'form-loading-button']) !!}
{{ Form::selectGroup('vendor_id', trans_choice('general.vendors', 1), 'user', $vendors) }}
@@ -47,7 +47,7 @@
- @php $item_row = 0; @endphp
+ @php $item_row = 0; $tax_row = 0; @endphp
@if(old('item'))
@foreach(old('item') as $old_item)
@php $item = (object) $old_item; @endphp
@@ -71,13 +71,13 @@
@stack('add_item_td_end')
@stack('sub_total_td_start')
-
+
{{ trans('bills.sub_total') }}
0
@stack('sub_total_td_end')
@stack('add_discount_td_start')
-
+
{{ trans('bills.add_discount') }}
@@ -88,13 +88,15 @@
@stack('add_discount_td_end')
@stack('tax_total_td_start')
-
- {{ trans_choice('general.taxes', 1) }}
+
+
+ {{ trans_choice('general.taxes', 1) }}
+
0
@stack('tax_total_td_end')
@stack('grand_total_td_start')
-
+
{{ trans('bills.total') }}
0
@@ -110,7 +112,7 @@
{{ Form::recurring('edit', $bill) }}
- {{ Form::fileGroup('attachment', trans('general.attachment'),[]) }}
+ {{ Form::fileGroup('attachment', trans('general.attachment')) }}
{{ Form::hidden('vendor_name', old('customer_name', null), ['id' => 'vendor_name']) }}
{{ Form::hidden('vendor_email', old('vendor_email', null), ['id' => 'vendor_email']) }}
@@ -135,7 +137,9 @@
@push('js')
+ @if (language()->getShortCode() != 'en')
+ @endif
@endpush
@@ -147,51 +151,16 @@
@push('scripts')
+
+
+@if (language()->getShortCode() != 'en')
+
+@endif
+@endpush
+
+@push('css')
+
+
+@endpush
+
+@push('scripts')
+
+@endpush
+
diff --git a/resources/views/expenses/bills/item.blade.php b/resources/views/expenses/bills/item.blade.php
index 0d015fd48..f4763923b 100644
--- a/resources/views/expenses/bills/item.blade.php
+++ b/resources/views/expenses/bills/item.blade.php
@@ -7,7 +7,7 @@
@stack('actions_td_end')
@stack('name_td_start')
- has('item.' . $item_row . '.name') ? 'class="has-error"' : '' !!}">
+ has('item.' . $item_row . '.name') ? 'class="has-error"' : '' !!}>
@stack('name_input_start')
@@ -16,7 +16,7 @@
@stack('name_td_end')
@stack('quantity_td_start')
- has('item.' . $item_row . '.quantity') ? 'class="has-error"' : '' }}">
+ has('item.' . $item_row . '.quantity') ? 'class="has-error"' : '' }}>
@stack('quantity_input_start')
{!! $errors->first('item.' . $item_row . '.quantity', ':message
') !!}
@@ -24,7 +24,7 @@
@stack('quantity_td_end')
@stack('price_td_start')
- has('item.' . $item_row . 'price') ? 'class="has-error"' : '' }}">
+ has('item.' . $item_row . 'price') ? 'class="has-error"' : '' }}>
@stack('price_input_start')
@@ -33,9 +33,9 @@
@stack('price_td_end')
@stack('taxes_td_start')
- has('item.' . $item_row . '.tax_id') ? 'class="has-error"' : '' }}">
+ has('item.' . $item_row . '.tax_id') ? 'class="has-error"' : '' }}>
@stack('tax_id_input_start')
- {!! Form::select('item[' . $item_row . '][tax_id]', $taxes, empty($item) ? setting('general.default_tax') : $item->tax_id, ['id'=> 'item-tax-'. $item_row, 'class' => 'form-control tax-select2', 'placeholder' => trans('general.form.select.field', ['field' => trans_choice('general.taxes', 1)])]) !!}
+ {!! Form::select('item[' . $item_row . '][tax_id][]', $taxes, (empty($item) || empty($item->tax_id)) ? setting('general.default_tax') : $item->tax_id, ['id'=> 'item-tax-'. $item_row, 'class' => 'form-control tax-select2', 'multiple' => 'true']) !!}
{!! $errors->first('item.' . $item_row . '.tax_id', ':message
') !!}
@stack('tax_id_input_end')
diff --git a/resources/views/expenses/bills/show.blade.php b/resources/views/expenses/bills/show.blade.php
index c3d0c0734..9b3168f2b 100644
--- a/resources/views/expenses/bills/show.blade.php
+++ b/resources/views/expenses/bills/show.blade.php
@@ -15,6 +15,74 @@
@endif
+ @if ($bill->status->code == 'draft')
+
+
{!! trans('invoices.messages.draft') !!}
+
+ @endif
+
+ @if ($bill->status->code != 'paid')
+
+
+
+
+
+
+
+
+
+
+ {{ trans_choice('general.statuses', 1) . ': ' . trans('bills.messages.status.created', ['date' => Date::parse($bill->created_at)->format($date_format)]) }}
+
+
+ {{ trans('general.edit') }}
+
+
+
+
+
+
+
+
+
+
+
+ @if ($bill->status->code == 'draft')
+ {{ trans_choice('general.statuses', 1) . ': ' . trans('bills.messages.status.receive.draft') }}
+
+ @permission('update-expenses-bills')
+
{{ trans('bills.mark_received') }}
+ @endpermission
+ @else
+ {{ trans_choice('general.statuses', 1) . ': ' . trans('bills.messages.status.receive.received', ['date' => Date::parse($bill->created_at)->format($date_format)]) }}
+ @endif
+
+
+
+
+
+
+
+
+
+
+ @if($bill->status->code != 'paid' && empty($bill->payments()->count()))
+ {{ trans_choice('general.statuses', 1) . ': ' . trans('bills.messages.status.paid.await') }}
+ @else
+ {{ trans_choice('general.statuses', 1) . ': ' . trans('general.partially_paid') }}
+ @endif
+
+ @if(empty($bill->payments()->count()) || (!empty($bill->payments()->count()) && $bill->paid != $bill->amount))
+
{{ trans('bills.add_payment') }}
+ @endif
+
+
+
+
+
+
+ @endif
+
@@ -51,40 +119,58 @@
{{ trans('bills.bill_from') }}
+ @stack('name_input_start')
{{ $bill->vendor_name }}
+ @stack('name_input_end')
+ @stack('address_input_start')
{!! nl2br($bill->vendor_address) !!}
+ @stack('address_input_end')
+ @stack('tax_number_input_start')
@if ($bill->vendor_tax_number)
{{ trans('general.tax_number') }}: {{ $bill->vendor_tax_number }}
@endif
+ @stack('tax_number_input_end')
+ @stack('phone_input_start')
@if ($bill->vendor_phone)
{{ $bill->vendor_phone }}
@endif
+ @stack('phone_input_end')
+ @stack('email_start')
{{ $bill->vendor_email }}
+ @stack('email_input_end')
-
- {{ trans('bills.bill_number') }}:
- {{ $bill->bill_number }}
-
- @if ($bill->order_number)
-
- {{ trans('bills.order_number') }}:
- {{ $bill->order_number }}
-
- @endif
-
- {{ trans('bills.bill_date') }}:
- {{ Date::parse($bill->billed_at)->format($date_format) }}
-
-
- {{ trans('bills.payment_due') }}:
- {{ Date::parse($bill->due_at)->format($date_format) }}
-
+ @stack('bill_number_input_start')
+
+ {{ trans('bills.bill_number') }}:
+ {{ $bill->bill_number }}
+
+ @stack('bill_number_input_end')
+ @stack('order_number_input_start')
+ @if ($bill->order_number)
+
+ {{ trans('bills.order_number') }}:
+ {{ $bill->order_number }}
+
+ @endif
+ @stack('order_number_input_end')
+ @stack('billed_at_input_start')
+
+ {{ trans('bills.bill_date') }}:
+ {{ Date::parse($bill->billed_at)->format($date_format) }}
+
+ @stack('billed_at_input_end')
+ @stack('due_at_input_start')
+
+ {{ trans('bills.payment_due') }}:
+ {{ Date::parse($bill->due_at)->format($date_format) }}
+
+ @stack('due_at_input_end')
@@ -96,22 +182,46 @@
+ @stack('actions_th_start')
+ @stack('actions_th_end')
+ @stack('name_th_start')
{{ trans_choice('general.items', 1) }}
+ @stack('name_th_end')
+ @stack('quantity_th_start')
{{ trans('bills.quantity') }}
+ @stack('quantity_th_end')
+ @stack('price_th_start')
{{ trans('bills.price') }}
+ @stack('price_th_end')
+ @stack('taxes_th_start')
+ @stack('taxes_th_end')
+ @stack('total_th_start')
{{ trans('bills.total') }}
+ @stack('total_th_end')
@foreach($bill->items as $item)
+ @stack('actions_td_start')
+ @stack('actions_td_end')
+ @stack('name_td_start')
{{ $item->name }}
@if ($item->sku)
{{ trans('items.sku') }}: {{ $item->sku }}
@endif
+ @stack('name_td_end')
+ @stack('quantity_td_start')
{{ $item->quantity }}
+ @stack('quantity_td_end')
+ @stack('price_td_start')
@money($item->price, $bill->currency_code, true)
+ @stack('price_td_end')
+ @stack('taxes_td_start')
+ @stack('taxes_td_end')
+ @stack('total_td_start')
@money($item->total, $bill->currency_code, true)
+ @stack('total_td_end')
@endforeach
@@ -121,13 +231,15 @@
- @if ($bill->notes)
-
{{ trans_choice('general.notes', 2) }}:
+ @stack('notes_input_start')
+ @if ($bill->notes)
+
{{ trans_choice('general.notes', 2) }}:
-
- {{ $bill->notes }}
-
- @endif
+
+ {{ $bill->notes }}
+
+ @endif
+ @stack('notes_input_end')
@@ -135,10 +247,12 @@
@foreach ($bill->totals as $total)
@if ($total->code != 'total')
+ @stack($total->code . '_td_start')
{{ trans($total->title) }}:
@money($total->amount, $bill->currency_code, true)
+ @stack($total->code . '_td_end')
@else
@if ($bill->paid)
@@ -146,10 +260,12 @@
- @money($bill->paid, $bill->currency_code, true)
@endif
+ @stack('grand_total_td_start')
{{ trans($total->name) }}:
@money($total->amount - $bill->paid, $bill->currency_code, true)
+ @stack('grand_total_td_end')
@endif
@endforeach
@@ -160,9 +276,11 @@
@@ -74,7 +75,9 @@
@push('js')
+ @if (language()->getShortCode() != 'en')
+ @endif
@endpush
@@ -105,6 +108,7 @@
//Date picker
$('#paid_at').datepicker({
format: 'yyyy-mm-dd',
+ todayBtn: 'linked',
weekStart: 1,
autoclose: true,
language: '{{ language()->getShortCode() }}'
diff --git a/resources/views/expenses/payments/index.blade.php b/resources/views/expenses/payments/index.blade.php
index 22ec31224..b0a8eab60 100644
--- a/resources/views/expenses/payments/index.blade.php
+++ b/resources/views/expenses/payments/index.blade.php
@@ -15,12 +15,13 @@