diff --git a/app/Http/Controllers/Common/Import.php b/app/Http/Controllers/Common/Import.php new file mode 100644 index 000000000..3ea718b8d --- /dev/null +++ b/app/Http/Controllers/Common/Import.php @@ -0,0 +1,22 @@ +middleware('permission:create-' . $controller)->only(['create', 'store']); + $this->middleware('permission:create-' . $controller)->only(['create', 'store', 'duplicate', 'import']); $this->middleware('permission:read-' . $controller)->only(['index', 'show', 'edit']); $this->middleware('permission:update-' . $controller)->only(['update']); $this->middleware('permission:delete-' . $controller)->only('destroy'); diff --git a/app/Http/Controllers/Customers/Payments.php b/app/Http/Controllers/Customers/Payments.php index f908a29e4..8ddadde3e 100644 --- a/app/Http/Controllers/Customers/Payments.php +++ b/app/Http/Controllers/Customers/Payments.php @@ -23,7 +23,7 @@ class Payments extends Controller { $payments = Payment::with(['account', 'category'])->where('customer_id', '=', Auth::user()->customer->id)->paginate(); - $payment_methods = Modules::getPaymentMethods(); + $payment_methods = Modules::getPaymentMethods('all'); $categories = collect(Category::enabled()->type('income')->pluck('name', 'id')) ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ''); diff --git a/app/Http/Controllers/Expenses/Bills.php b/app/Http/Controllers/Expenses/Bills.php index add0bcdc4..fd87dbff2 100644 --- a/app/Http/Controllers/Expenses/Bills.php +++ b/app/Http/Controllers/Expenses/Bills.php @@ -22,6 +22,7 @@ use App\Models\Setting\Tax; use App\Traits\Currencies; use App\Traits\DateTime; use App\Traits\Uploads; +use App\Utilities\ImportFile; use App\Utilities\Modules; use Date; @@ -201,55 +202,51 @@ class Bills extends Controller $bill->update($request->input()); // Added bill total sub total - $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' => 1, - ]; - - BillTotal::create($bill_sub_total); + ]); $sort_order = 2; // Added bill total taxes if ($taxes) { foreach ($taxes as $tax) { - $bill_tax_total = [ + BillTotal::create([ 'company_id' => $request['company_id'], 'bill_id' => $bill->id, 'code' => 'tax', 'name' => $tax['name'], 'amount' => $tax['amount'], 'sort_order' => $sort_order, - ]; - - BillTotal::create($bill_tax_total); + ]); $sort_order++; } } // Added bill total total - $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, - ]; + ]); - BillTotal::create($bill_total); - - $request['bill_id'] = $bill->id; - $request['status_code'] = 'new'; - $request['notify'] = 0; - $request['description'] = trans('messages.success.added', ['type' => $request['bill_number']]); - - BillHistory::create($request->input()); + // 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]), + ]); // Fire the event to make it extendible event(new BillCreated($bill)); @@ -261,6 +258,58 @@ class Bills extends Controller return redirect('expenses/bills/' . $bill->id); } + /** + * Duplicate the specified resource. + * + * @param Bill $bill + * + * @return Response + */ + public function duplicate(Bill $bill) + { + $clone = $bill->duplicate(); + + // Add bill history + BillHistory::create([ + 'company_id' => session('company_id'), + 'bill_id' => $clone->id, + 'status_code' => 'draft', + 'notify' => 0, + 'description' => trans('messages.success.added', ['type' => $clone->bill_number]), + ]); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.bills', 1)]); + + flash($message)->success(); + + return redirect('expenses/bills/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Bill::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.bills', 2)]); + + flash($message)->success(); + + return redirect('expenses/bills'); + } + /** * Show the form for editing the specified resource. * diff --git a/app/Http/Controllers/Expenses/Payments.php b/app/Http/Controllers/Expenses/Payments.php index c2e7b8da3..e8d3f97da 100644 --- a/app/Http/Controllers/Expenses/Payments.php +++ b/app/Http/Controllers/Expenses/Payments.php @@ -10,7 +10,7 @@ use App\Models\Expense\Vendor; use App\Models\Setting\Category; use App\Models\Setting\Currency; use App\Traits\Uploads; - +use App\Utilities\ImportFile; use App\Utilities\Modules; class Payments extends Controller @@ -90,6 +90,49 @@ class Payments extends Controller return redirect('expenses/payments'); } + /** + * Duplicate the specified resource. + * + * @param Payment $payment + * + * @return Response + */ + public function duplicate(Payment $payment) + { + $clone = $payment->duplicate(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.payments', 1)]); + + flash($message)->success(); + + return redirect('expenses/payments/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Payment::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.payments', 2)]); + + flash($message)->success(); + + return redirect('expenses/payments'); + } + /** * Show the form for editing the specified resource. * diff --git a/app/Http/Controllers/Expenses/Vendors.php b/app/Http/Controllers/Expenses/Vendors.php index b407da365..6b06d28be 100644 --- a/app/Http/Controllers/Expenses/Vendors.php +++ b/app/Http/Controllers/Expenses/Vendors.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Expense\Vendor as Request; use App\Models\Expense\Vendor; use App\Models\Setting\Currency; +use App\Utilities\ImportFile; class Vendors extends Controller { @@ -52,6 +53,49 @@ class Vendors extends Controller return redirect('expenses/vendors'); } + /** + * Duplicate the specified resource. + * + * @param Vendor $vendor + * + * @return Response + */ + public function duplicate(Vendor $vendor) + { + $clone = $vendor->duplicate(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.vendors', 1)]); + + flash($message)->success(); + + return redirect('expenses/vendors/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Vendor::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.vendors', 2)]); + + flash($message)->success(); + + return redirect('expenses/vendors'); + } + /** * Show the form for editing the specified resource. * @@ -122,4 +166,11 @@ class Vendors extends Controller return response()->json($vendor); } + + public function vendor(Request $request) + { + $vendor = Vendor::create($request->all()); + + return response()->json($vendor); + } } diff --git a/app/Http/Controllers/Incomes/Customers.php b/app/Http/Controllers/Incomes/Customers.php index 66ab45154..8ed42c8aa 100644 --- a/app/Http/Controllers/Incomes/Customers.php +++ b/app/Http/Controllers/Incomes/Customers.php @@ -7,6 +7,7 @@ use App\Http\Requests\Income\Customer as Request; use App\Models\Auth\User; use App\Models\Income\Customer; use App\Models\Setting\Currency; +use App\Utilities\ImportFile; class Customers extends Controller { @@ -47,33 +48,26 @@ class Customers extends Controller if (empty($request->input('create_user'))) { Customer::create($request->all()); } else { + // Check if user exist $user = User::where('email', $request['email'])->first(); - if (!empty($user)) { $message = trans('messages.error.customer', ['name' => $user->name]); flash($message)->error(); return redirect()->back()->withInput($request->except('create_user'))->withErrors( - ['email' => trans('customer.error.email')] + ['email' => trans('customers.error.email')] ); - - //$user = User::create($request->input()); } - $customer = Customer::create($request->all()); + // Create user first + $user = User::create($request->all()); + $user->roles()->attach(['3']); + $user->companies()->attach([session('company_id')]); $request['user_id'] = $user->id; - $request['roles'] = array('3'); - $request['companies'] = array(session('company_id')); - // Attach roles - $user->roles()->attach($request['roles']); - - // Attach companies - $user->companies()->attach($request['companies']); - - $customer->update($request->all()); + Customer::create($request->all()); } $message = trans('messages.success.added', ['type' => trans_choice('general.customers', 1)]); @@ -83,6 +77,49 @@ class Customers extends Controller return redirect('incomes/customers'); } + /** + * Duplicate the specified resource. + * + * @param Customer $customer + * + * @return Response + */ + public function duplicate(Customer $customer) + { + $clone = $customer->duplicate(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.customers', 1)]); + + flash($message)->success(); + + return redirect('incomes/customers/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Customer::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.customers', 2)]); + + flash($message)->success(); + + return redirect('incomes/customers'); + } + /** * Show the form for editing the specified resource. * @@ -110,29 +147,24 @@ class Customers extends Controller if (empty($request->input('create_user'))) { $customer->update($request->all()); } else { + // Check if user exist $user = User::where('email', $request['email'])->first(); - if (!empty($user)) { $message = trans('messages.error.customer', ['name' => $user->name]); flash($message)->error(); return redirect()->back()->withInput($request->except('create_user'))->withErrors( - ['email' => trans('customer.error.email')] + ['email' => trans('customers.error.email')] ); - - //$user = User::create($request->input()); } + // Create user first + $user = User::create($request->all()); + $user->roles()->attach(['3']); + $user->companies()->attach([session('company_id')]); + $request['user_id'] = $user->id; - $request['roles'] = array('3'); - $request['companies'] = array(session('company_id')); - - // Attach roles - $user->roles()->attach($request['roles']); - - // Attach companies - $user->companies()->attach($request['companies']); $customer->update($request->all()); } @@ -181,4 +213,11 @@ class Customers extends Controller return response()->json($customer); } + + public function customer(Request $request) + { + $customer = Customer::create($request->all()); + + return response()->json($customer); + } } diff --git a/app/Http/Controllers/Incomes/Invoices.php b/app/Http/Controllers/Incomes/Invoices.php index 765ddc94d..460913897 100644 --- a/app/Http/Controllers/Incomes/Invoices.php +++ b/app/Http/Controllers/Incomes/Invoices.php @@ -24,14 +24,16 @@ use App\Notifications\Income\Invoice as Notification; use App\Notifications\Item\Item as ItemNotification; use App\Traits\Currencies; use App\Traits\DateTime; +use App\Traits\Incomes; use App\Traits\Uploads; +use App\Utilities\ImportFile; use App\Utilities\Modules; use Date; use File; class Invoices extends Controller { - use DateTime, Currencies, Uploads; + use DateTime, Currencies, Incomes, Uploads; /** * Display a listing of the resource. @@ -100,11 +102,7 @@ class Invoices extends Controller $taxes = Tax::enabled()->pluck('name', 'id'); - // Generate next invoice number - $prefix = setting('general.invoice_number_prefix', 'INV-'); - $next = setting('general.invoice_number_next', '1'); - $digit = setting('general.invoice_number_digit', '5'); - $number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT); + $number = $this->getNextInvoiceNumber(); return view('incomes.invoices.create', compact('customers', 'currencies', 'items', 'taxes', 'number')); } @@ -227,17 +225,17 @@ class Invoices extends Controller // Add invoice totals $this->addTotals($invoice, $request, $taxes, $sub_total, $tax_total); - $request['invoice_id'] = $invoice->id; - $request['status_code'] = 'draft'; - $request['notify'] = 0; - $request['description'] = trans('messages.success.added', ['type' => $request['invoice_number']]); - - InvoiceHistory::create($request->all()); + // 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 - $next = setting('general.invoice_number_next', 1) + 1; - setting(['general.invoice_number_next' => $next]); - setting()->save(); + $this->increaseNextInvoiceNumber(); // Fire the event to make it extendible event(new InvoiceCreated($invoice)); @@ -249,6 +247,61 @@ class Invoices extends Controller return redirect('incomes/invoices/' . $invoice->id); } + /** + * Duplicate the specified resource. + * + * @param Invoice $invoice + * + * @return Response + */ + public function duplicate(Invoice $invoice) + { + $clone = $invoice->duplicate(); + + // Add invoice history + InvoiceHistory::create([ + 'company_id' => session('company_id'), + 'invoice_id' => $clone->id, + 'status_code' => 'draft', + 'notify' => 0, + 'description' => trans('messages.success.added', ['type' => $clone->invoice_number]), + ]); + + // Update next invoice number + $this->increaseNextInvoiceNumber(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.invoices', 1)]); + + flash($message)->success(); + + return redirect('incomes/invoices/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Invoice::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.invoices', 2)]); + + flash($message)->success(); + + return redirect('incomes/invoices'); + } + /** * Show the form for editing the specified resource. * @@ -653,47 +706,41 @@ class Invoices extends Controller $sort_order = 1; // Added invoice total sub total - $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, - ]; - - InvoiceTotal::create($invoice_sub_total); + ]); $sort_order++; // Added invoice total taxes if ($taxes) { foreach ($taxes as $tax) { - $invoice_tax_total = [ + InvoiceTotal::create([ 'company_id' => $request['company_id'], 'invoice_id' => $invoice->id, 'code' => 'tax', 'name' => $tax['name'], 'amount' => $tax['amount'], 'sort_order' => $sort_order, - ]; - - InvoiceTotal::create($invoice_tax_total); + ]); $sort_order++; } } // Added invoice total total - $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, - ]; - - InvoiceTotal::create($invoice_total); + ]); } } diff --git a/app/Http/Controllers/Incomes/Revenues.php b/app/Http/Controllers/Incomes/Revenues.php index 63f12770a..9bad9163e 100644 --- a/app/Http/Controllers/Incomes/Revenues.php +++ b/app/Http/Controllers/Incomes/Revenues.php @@ -12,6 +12,7 @@ use App\Models\Setting\Currency; use App\Traits\Currencies; use App\Traits\DateTime; use App\Traits\Uploads; +use App\Utilities\ImportFile; use App\Utilities\Modules; class Revenues extends Controller @@ -91,6 +92,49 @@ class Revenues extends Controller return redirect('incomes/revenues'); } + /** + * Duplicate the specified resource. + * + * @param Revenue $revenue + * + * @return Response + */ + public function duplicate(Revenue $revenue) + { + $clone = $revenue->duplicate(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.revenues', 1)]); + + flash($message)->success(); + + return redirect('incomes/revenues/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Revenue::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.revenues', 2)]); + + flash($message)->success(); + + return redirect('incomes/revenues'); + } + /** * Show the form for editing the specified resource. * diff --git a/app/Http/Controllers/Install/Requirements.php b/app/Http/Controllers/Install/Requirements.php index bd87542d9..3f76d7664 100644 --- a/app/Http/Controllers/Install/Requirements.php +++ b/app/Http/Controllers/Install/Requirements.php @@ -43,10 +43,6 @@ class Requirements extends Controller { $requirements = array(); - if (version_compare(PHP_VERSION, '5.6.4', '<')) { - $requirements[] = trans('install.requirements.php_version'); - } - if (ini_get('safe_mode')) { $requirements[] = trans('install.requirements.disabled', ['feature' => 'Safe Mode']); } diff --git a/app/Http/Controllers/Items/Items.php b/app/Http/Controllers/Items/Items.php index 70026d540..b3477aadf 100644 --- a/app/Http/Controllers/Items/Items.php +++ b/app/Http/Controllers/Items/Items.php @@ -9,6 +9,7 @@ use App\Models\Setting\Category; use App\Models\Setting\Currency; use App\Models\Setting\Tax; use App\Traits\Uploads; +use App\Utilities\ImportFile; class Items extends Controller { @@ -67,6 +68,49 @@ class Items extends Controller return redirect('items/items'); } + /** + * Duplicate the specified resource. + * + * @param Item $item + * + * @return Response + */ + public function duplicate(Item $item) + { + $clone = $item->duplicate(); + + $message = trans('messages.success.duplicated', ['type' => trans_choice('general.items', 1)]); + + flash($message)->success(); + + return redirect('items/items/' . $clone->id . '/edit'); + } + + /** + * Import the specified resource. + * + * @param ImportFile $import + * + * @return Response + */ + public function import(ImportFile $import) + { + $rows = $import->all(); + + foreach ($rows as $row) { + $data = $row->toArray(); + $data['company_id'] = session('company_id'); + + Item::create($data); + } + + $message = trans('messages.success.imported', ['type' => trans_choice('general.items', 2)]); + + flash($message)->success(); + + return redirect('items/items'); + } + /** * Show the form for editing the specified resource. * diff --git a/app/Http/Controllers/Settings/Currencies.php b/app/Http/Controllers/Settings/Currencies.php index 7133a0ffc..ef110aed2 100644 --- a/app/Http/Controllers/Settings/Currencies.php +++ b/app/Http/Controllers/Settings/Currencies.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\Settings; +use Akaunting\Money\Currency as MoneyCurrency; use App\Http\Controllers\Controller; use App\Http\Requests\Setting\Currency as Request; use App\Models\Banking\Account; use App\Models\Setting\Currency; -use ClickNow\Money\Currency as MoneyCurrency; class Currencies extends Controller { @@ -29,10 +29,18 @@ class Currencies extends Controller */ public function create() { + // 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 (in_array($key, $current)) { + continue; + } + $codes[$key] = $key; } @@ -77,10 +85,18 @@ class Currencies extends Controller */ public function edit(Currency $currency) { + // 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; } diff --git a/app/Listeners/Updates/Version110.php b/app/Listeners/Updates/Version110.php new file mode 100644 index 000000000..e8ebe934f --- /dev/null +++ b/app/Listeners/Updates/Version110.php @@ -0,0 +1,48 @@ +check($event)) { + return; + } + + // Create permission + $permission = Permission::firstOrCreate([ + 'name' => 'create-common-import', + 'display_name' => 'Create Common Import', + 'description' => 'Create Common Import', + ]); + + // Attach permission to roles + $roles = Role::all(); + + foreach ($roles as $role) { + $allowed = ['admin', 'manager']; + + if (!in_array($role->name, $allowed)) { + continue; + } + + $role->attachPermission($permission); + } + } +} diff --git a/app/Models/Expense/Bill.php b/app/Models/Expense/Bill.php index ea726b525..ca4dd2be7 100644 --- a/app/Models/Expense/Bill.php +++ b/app/Models/Expense/Bill.php @@ -5,11 +5,12 @@ namespace App\Models\Expense; use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Bill extends Model { - use Currencies, DateTime, Eloquence; + use Cloneable, Currencies, DateTime, Eloquence; protected $table = 'bills'; @@ -44,6 +45,13 @@ class Bill extends Model 'notes' => 2, ]; + /** + * Clonable relationships. + * + * @var array + */ + protected $cloneable_relations = ['items', 'totals']; + public function vendor() { return $this->belongsTo('App\Models\Expense\Vendor'); @@ -94,6 +102,11 @@ class Bill extends Model return $query->where('bill_status_code', '!=', 'new'); } + public function onCloning($src, $child = null) + { + $this->bill_status_code = 'draft'; + } + /** * Convert amount to double. * diff --git a/app/Models/Expense/Payment.php b/app/Models/Expense/Payment.php index 33d7da38e..ae3e230c8 100644 --- a/app/Models/Expense/Payment.php +++ b/app/Models/Expense/Payment.php @@ -5,11 +5,12 @@ namespace App\Models\Expense; use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Payment extends Model { - use Currencies, DateTime, Eloquence; + use Cloneable, Currencies, DateTime, Eloquence; protected $table = 'payments'; diff --git a/app/Models/Expense/Vendor.php b/app/Models/Expense/Vendor.php index 4911a4158..bc2090da0 100644 --- a/app/Models/Expense/Vendor.php +++ b/app/Models/Expense/Vendor.php @@ -3,11 +3,12 @@ namespace App\Models\Expense; use App\Models\Model; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Vendor extends Model { - use Eloquence; + use Cloneable, Eloquence; protected $table = 'vendors'; diff --git a/app/Models/Income/Customer.php b/app/Models/Income/Customer.php index 461bd5f16..9c32ecf88 100644 --- a/app/Models/Income/Customer.php +++ b/app/Models/Income/Customer.php @@ -3,13 +3,13 @@ namespace App\Models\Income; use App\Models\Model; +use Bkwld\Cloner\Cloneable; use Illuminate\Notifications\Notifiable; use Sofa\Eloquence\Eloquence; class Customer extends Model { - use Eloquence; - use Notifiable; + use Cloneable, Eloquence, Notifiable; protected $table = 'customers'; @@ -59,4 +59,9 @@ class Customer extends Model { return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id'); } + + public function onCloning($src, $child = null) + { + $this->user_id = null; + } } diff --git a/app/Models/Income/Invoice.php b/app/Models/Income/Invoice.php index 28765ce0b..b6874c858 100644 --- a/app/Models/Income/Invoice.php +++ b/app/Models/Income/Invoice.php @@ -5,11 +5,13 @@ namespace App\Models\Income; use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; +use App\Traits\Incomes; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Invoice extends Model { - use Currencies, DateTime, Eloquence; + use Cloneable, Currencies, DateTime, Eloquence, Incomes; protected $table = 'invoices'; @@ -44,6 +46,13 @@ class Invoice extends Model 'notes' => 2, ]; + /** + * Clonable relationships. + * + * @var array + */ + protected $cloneable_relations = ['items', 'totals']; + public function user() { return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id'); @@ -99,6 +108,12 @@ class Invoice extends Model return $query->where('invoice_status_code', '!=', 'draft'); } + public function onCloning($src, $child = null) + { + $this->invoice_status_code = 'draft'; + $this->invoice_number = $this->getNextInvoiceNumber(); + } + /** * Convert amount to double. * diff --git a/app/Models/Income/Revenue.php b/app/Models/Income/Revenue.php index 0299cabff..60c4f8b89 100644 --- a/app/Models/Income/Revenue.php +++ b/app/Models/Income/Revenue.php @@ -5,11 +5,12 @@ namespace App\Models\Income; use App\Models\Model; use App\Traits\Currencies; use App\Traits\DateTime; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Revenue extends Model { - use Currencies, DateTime, Eloquence; + use Cloneable, Currencies, DateTime, Eloquence; protected $table = 'revenues'; diff --git a/app/Models/Item/Item.php b/app/Models/Item/Item.php index a1008b0c3..9095186b9 100644 --- a/app/Models/Item/Item.php +++ b/app/Models/Item/Item.php @@ -3,14 +3,13 @@ namespace App\Models\Item; use App\Models\Model; -use App\Models\Expense\Bill; -use App\Models\Income\Invoice; use App\Traits\Currencies; +use Bkwld\Cloner\Cloneable; use Sofa\Eloquence\Eloquence; class Item extends Model { - use Currencies, Eloquence; + use Cloneable, Currencies, Eloquence; protected $table = 'items'; diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index de24146b8..d40ac00eb 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -18,6 +18,7 @@ class EventServiceProvider extends ServiceProvider 'App\Listeners\Updates\Version107', 'App\Listeners\Updates\Version108', 'App\Listeners\Updates\Version109', + 'App\Listeners\Updates\Version110', ], 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\Auth\Login', diff --git a/app/Traits/Currencies.php b/app/Traits/Currencies.php index bee742369..45a3f05e7 100644 --- a/app/Traits/Currencies.php +++ b/app/Traits/Currencies.php @@ -2,8 +2,8 @@ namespace App\Traits; -use ClickNow\Money\Money; -use ClickNow\Money\Currency; +use Akaunting\Money\Money; +use Akaunting\Money\Currency; trait Currencies { diff --git a/app/Traits/Incomes.php b/app/Traits/Incomes.php new file mode 100644 index 000000000..1e2dc80d6 --- /dev/null +++ b/app/Traits/Incomes.php @@ -0,0 +1,34 @@ + $next]); + setting()->save(); + } +} \ No newline at end of file diff --git a/app/Utilities/ImportFile.php b/app/Utilities/ImportFile.php new file mode 100644 index 000000000..fa43216aa --- /dev/null +++ b/app/Utilities/ImportFile.php @@ -0,0 +1,36 @@ +hasFile('import')) { + flash(trans('messages.error.no_file'))->error(); + + redirect()->back()->send(); + } + + $folder = session('company_id') . '/imports'; + + // Upload file + $path = Storage::path($request->import->store($folder)); + + return $path; + } + + public function getFilters() + { + return [ + 'chunk' + ]; + } + +} \ No newline at end of file diff --git a/app/Utilities/Modules.php b/app/Utilities/Modules.php index 9d773da17..f36adb8ce 100644 --- a/app/Utilities/Modules.php +++ b/app/Utilities/Modules.php @@ -11,14 +11,14 @@ use App\Events\PaymentGatewayListing; class Modules { - public static function getPaymentMethods() + public static function getPaymentMethods($type = null) { $payment_methods = Cache::get('payment_methods.admin'); $customer = auth()->user()->customer; - if ($customer) { + if ($customer && $type != 'all') { $payment_methods = Cache::get('payment_methods.customer'); } @@ -38,7 +38,7 @@ class Modules continue; } - if ($customer && empty($gateway['customer'])) { + if (($customer && empty($gateway['customer'])) && $type != 'all') { continue; } diff --git a/composer.json b/composer.json index 223a33da9..408c87be8 100644 --- a/composer.json +++ b/composer.json @@ -8,13 +8,14 @@ "require": { "php": ">=5.6.4", "akaunting/language": "1.0.*", + "akaunting/money": "1.0.*", "akaunting/setting": "1.0.*", "akaunting/version": "1.0.*", "almasaeed2010/adminlte": "2.3.*", "barryvdh/laravel-debugbar": "2.3.*", "barryvdh/laravel-dompdf": "0.*", "barryvdh/laravel-ide-helper": "2.3.*", - "cknow/laravel-money": "1.0.*", + "bkwld/cloner": "3.2.*", "dingo/api": "1.0.0-beta8", "fzaninotto/faker": "1.6.*", "guzzlehttp/guzzle": "6.3.*", @@ -26,6 +27,7 @@ "laravel/framework": "5.4.*", "laravel/tinker": "~1.0", "LaravelCollective/html": "5.4.*", + "maatwebsite/excel": "2.1.*", "nwidart/laravel-menus": "0.5.*", "nwidart/laravel-modules": "1.*", "santigarcor/laratrust": "4.0.*", diff --git a/config/app.php b/config/app.php index 62d7f7ad9..803a21955 100644 --- a/config/app.php +++ b/config/app.php @@ -184,10 +184,11 @@ return [ * Vendor Service Providers... */ Akaunting\Language\Provider::class, + Akaunting\Money\Provider::class, Akaunting\Setting\Provider::class, Akaunting\Version\Provider::class, Barryvdh\DomPDF\ServiceProvider::class, - ClickNow\Money\MoneyServiceProvider::class, + Bkwld\Cloner\ServiceProvider::class, Collective\Html\HtmlServiceProvider::class, Dingo\Api\Provider\LaravelServiceProvider::class, EloquentFilter\ServiceProvider::class, @@ -197,6 +198,7 @@ return [ Kyslik\ColumnSortable\ColumnSortableServiceProvider::class, Laracasts\Flash\FlashServiceProvider::class, Laratrust\LaratrustServiceProvider::class, + Maatwebsite\Excel\ExcelServiceProvider::class, Nwidart\Menus\MenusServiceProvider::class, Nwidart\Modules\LaravelModulesServiceProvider::class, Sofa\Eloquence\ServiceProvider::class, @@ -257,6 +259,7 @@ return [ 'Debugbar' => Barryvdh\Debugbar\Facade::class, 'Date' => Jenssegers\Date\Date::class, 'DotenvEditor' => Jackiedo\DotenvEditor\Facades\DotenvEditor::class, + 'Excel' => Maatwebsite\Excel\Facades\Excel::class, 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, 'Image' => Intervention\Image\Facades\Image::class, diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 000000000..3e682141b --- /dev/null +++ b/config/excel.php @@ -0,0 +1,704 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Enable/Disable cell caching + |-------------------------------------------------------------------------- + */ + 'enable' => true, + + /* + |-------------------------------------------------------------------------- + | Caching driver + |-------------------------------------------------------------------------- + | + | Set the caching driver + | + | Available methods: + | memory|gzip|serialized|igbinary|discISAM|apc|memcache|temp|wincache|sqlite|sqlite3 + | + */ + 'driver' => 'memory', + + /* + |-------------------------------------------------------------------------- + | Cache settings + |-------------------------------------------------------------------------- + */ + 'settings' => [ + + 'memoryCacheSize' => '32MB', + 'cacheTime' => 600 + + ], + + /* + |-------------------------------------------------------------------------- + | Memcache settings + |-------------------------------------------------------------------------- + */ + 'memcache' => [ + + 'host' => 'localhost', + 'port' => 11211, + + ], + + /* + |-------------------------------------------------------------------------- + | Cache dir (for discISAM) + |-------------------------------------------------------------------------- + */ + + 'dir' => storage_path('cache') + ], + + 'properties' => [ + 'creator' => 'Akaunting', + 'lastModifiedBy' => 'Akaunting', + 'title' => 'Spreadsheet', + 'description' => 'Default spreadsheet export', + 'subject' => 'Spreadsheet export', + 'keywords' => 'akaunting, excel, export', + 'category' => 'Excel', + 'manager' => 'Akaunting', + 'company' => 'Akaunting', + ], + + /* + |-------------------------------------------------------------------------- + | Sheets settings + |-------------------------------------------------------------------------- + */ + 'sheets' => [ + + /* + |-------------------------------------------------------------------------- + | Default page setup + |-------------------------------------------------------------------------- + */ + 'pageSetup' => [ + 'orientation' => 'portrait', + 'paperSize' => '9', + 'scale' => '100', + 'fitToPage' => false, + 'fitToHeight' => true, + 'fitToWidth' => true, + 'columnsToRepeatAtLeft' => ['', ''], + 'rowsToRepeatAtTop' => [0, 0], + 'horizontalCentered' => false, + 'verticalCentered' => false, + 'printArea' => null, + 'firstPageNumber' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Creator + |-------------------------------------------------------------------------- + | + | The default creator of a new Excel file + | + */ + + 'creator' => 'Akaunting', + + 'csv' => [ + /* + |-------------------------------------------------------------------------- + | Delimiter + |-------------------------------------------------------------------------- + | + | The default delimiter which will be used to read out a CSV file + | + */ + + 'delimiter' => ',', + + /* + |-------------------------------------------------------------------------- + | Enclosure + |-------------------------------------------------------------------------- + */ + + 'enclosure' => '"', + + /* + |-------------------------------------------------------------------------- + | Line endings + |-------------------------------------------------------------------------- + */ + + 'line_ending' => "\r\n", + + /* + |-------------------------------------------------------------------------- + | setUseBom + |-------------------------------------------------------------------------- + */ + + 'use_bom' => false + ], + + 'export' => [ + + /* + |-------------------------------------------------------------------------- + | Autosize columns + |-------------------------------------------------------------------------- + | + | Disable/enable column autosize or set the autosizing for + | an array of columns ( array('A', 'B') ) + | + */ + 'autosize' => true, + + /* + |-------------------------------------------------------------------------- + | Autosize method + |-------------------------------------------------------------------------- + | + | --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX + | The default is based on an estimate, which does its calculation based + | on the number of characters in the cell value (applying any calculation + | and format mask, and allowing for wordwrap and rotation) and with an + | "arbitrary" adjustment based on the font (Arial, Calibri or Verdana, + | defaulting to Calibri if any other font is used) and a proportional + | adjustment for the font size. + | + | --> PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT + | The second method is more accurate, based on actual style formatting as + | well (bold, italic, etc), and is calculated by generating a gd2 imagettf + | bounding box and using its dimensions to determine the size; but this + | method is significantly slower, and its accuracy is still dependent on + | having the appropriate fonts installed. + | + */ + 'autosize-method' => PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX, + + /* + |-------------------------------------------------------------------------- + | Auto generate table heading + |-------------------------------------------------------------------------- + | + | If set to true, the array indices (or model attribute names) + | will automatically be used as first row (table heading) + | + */ + 'generate_heading_by_indices' => true, + + /* + |-------------------------------------------------------------------------- + | Auto set alignment on merged cells + |-------------------------------------------------------------------------- + */ + 'merged_cell_alignment' => 'left', + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'calculate' => false, + + /* + |-------------------------------------------------------------------------- + | Include Charts during export + |-------------------------------------------------------------------------- + */ + 'includeCharts' => false, + + /* + |-------------------------------------------------------------------------- + | Default sheet settings + |-------------------------------------------------------------------------- + */ + 'sheets' => [ + + /* + |-------------------------------------------------------------------------- + | Default page margin + |-------------------------------------------------------------------------- + | + | 1) When set to false, default margins will be used + | 2) It's possible to enter a single margin which will + | be used for all margins. + | 3) Alternatively you can pass an array with 4 margins + | Default order: array(top, right, bottom, left) + | + */ + 'page_margin' => false, + + /* + |-------------------------------------------------------------------------- + | Value in source array that stands for blank cell + |-------------------------------------------------------------------------- + */ + 'nullValue' => null, + + /* + |-------------------------------------------------------------------------- + | Insert array starting from this cell address as the top left coordinate + |-------------------------------------------------------------------------- + */ + 'startCell' => 'A1', + + /* + |-------------------------------------------------------------------------- + | Apply strict comparison when testing for null values in the array + |-------------------------------------------------------------------------- + */ + 'strictNullComparison' => false + ], + + /* + |-------------------------------------------------------------------------- + | Store settings + |-------------------------------------------------------------------------- + */ + + 'store' => [ + + /* + |-------------------------------------------------------------------------- + | Path + |-------------------------------------------------------------------------- + | + | The path we want to save excel file to + | + */ + 'path' => storage_path('app/exports'), + + /* + |-------------------------------------------------------------------------- + | Return info + |-------------------------------------------------------------------------- + | + | Whether we want to return information about the stored file or not + | + */ + 'returnInfo' => false + + ], + + /* + |-------------------------------------------------------------------------- + | PDF Settings + |-------------------------------------------------------------------------- + */ + 'pdf' => [ + + /* + |-------------------------------------------------------------------------- + | PDF Drivers + |-------------------------------------------------------------------------- + | Supported: DomPDF, tcPDF, mPDF + */ + 'driver' => 'DomPDF', + + /* + |-------------------------------------------------------------------------- + | PDF Driver settings + |-------------------------------------------------------------------------- + */ + 'drivers' => [ + + /* + |-------------------------------------------------------------------------- + | DomPDF settings + |-------------------------------------------------------------------------- + */ + 'DomPDF' => [ + 'path' => base_path('vendor/dompdf/dompdf/') + ], + + /* + |-------------------------------------------------------------------------- + | tcPDF settings + |-------------------------------------------------------------------------- + */ + 'tcPDF' => [ + 'path' => base_path('vendor/tecnick.com/tcpdf/') + ], + + /* + |-------------------------------------------------------------------------- + | mPDF settings + |-------------------------------------------------------------------------- + */ + 'mPDF' => [ + 'path' => base_path('vendor/mpdf/mpdf/') + ], + ] + ] + ], + + 'filters' => [ + /* + |-------------------------------------------------------------------------- + | Register read filters + |-------------------------------------------------------------------------- + */ + + 'registered' => [ + 'chunk' => 'Maatwebsite\Excel\Filters\ChunkReadFilter' + ], + + /* + |-------------------------------------------------------------------------- + | Enable certain filters for every file read + |-------------------------------------------------------------------------- + */ + + 'enabled' => [] + ], + + 'import' => [ + + /* + |-------------------------------------------------------------------------- + | Has heading + |-------------------------------------------------------------------------- + | + | The sheet has a heading (first) row which we can use as attribute names + | + | Options: true|false|slugged|slugged_with_count|ascii|numeric|hashed|trans|original + | + */ + + 'heading' => 'slugged', + + /* + |-------------------------------------------------------------------------- + | First Row with data or heading of data + |-------------------------------------------------------------------------- + | + | If the heading row is not the first row, or the data doesn't start + | on the first row, here you can change the start row. + | + */ + + 'startRow' => 1, + + /* + |-------------------------------------------------------------------------- + | Cell name word separator + |-------------------------------------------------------------------------- + | + | The default separator which is used for the cell names + | Note: only applies to 'heading' settings 'true' && 'slugged' + | + */ + + 'separator' => '_', + + /* + |-------------------------------------------------------------------------- + | Slug whitelisting + |-------------------------------------------------------------------------- + | + | Here you can whitelist certain characters in the slug. + | E.g. user.last_name will not remove . and _ + | Note: only applies to 'heading' settings 'true' && 'slugged' + | + */ + + 'slug_whitelist' => '._', + + /* + |-------------------------------------------------------------------------- + | Include Charts during import + |-------------------------------------------------------------------------- + */ + + 'includeCharts' => false, + + /* + |-------------------------------------------------------------------------- + | Sheet heading conversion + |-------------------------------------------------------------------------- + | + | Convert headings to ASCII + | Note: only applies to 'heading' settings 'true' && 'slugged' + | + */ + + 'to_ascii' => true, + + /* + |-------------------------------------------------------------------------- + | Import encoding + |-------------------------------------------------------------------------- + */ + + 'encoding' => [ + + 'input' => 'UTF-8', + 'output' => 'UTF-8' + + ], + + /* + |-------------------------------------------------------------------------- + | Calculate + |-------------------------------------------------------------------------- + | + | By default cells with formulas will be calculated. + | + */ + + 'calculate' => true, + + /* + |-------------------------------------------------------------------------- + | Ignore empty cells + |-------------------------------------------------------------------------- + | + | By default empty cells are not ignored + | + */ + + 'ignoreEmpty' => true, + + /* + |-------------------------------------------------------------------------- + | Force sheet collection + |-------------------------------------------------------------------------- + | + | For a sheet collection even when there is only 1 sheets. + | When set to false and only 1 sheet found, the parsed file will return + | a row collection instead of a sheet collection. + | When set to true, it will return a sheet collection instead. + | + */ + 'force_sheets_collection' => false, + + /* + |-------------------------------------------------------------------------- + | Date format + |-------------------------------------------------------------------------- + | + | The format dates will be parsed to + | + */ + + 'dates' => [ + + /* + |-------------------------------------------------------------------------- + | Enable/disable date formatting + |-------------------------------------------------------------------------- + */ + 'enabled' => true, + + /* + |-------------------------------------------------------------------------- + | Default date format + |-------------------------------------------------------------------------- + | + | If set to false, a carbon object will return + | + */ + 'format' => false, + + /* + |-------------------------------------------------------------------------- + | Date columns + |-------------------------------------------------------------------------- + */ + 'columns' => [] + ], + + /* + |-------------------------------------------------------------------------- + | Import sheets by config + |-------------------------------------------------------------------------- + */ + 'sheets' => [ + + /* + |-------------------------------------------------------------------------- + | Example sheet + |-------------------------------------------------------------------------- + | + | Example sheet "test" will grab the firstname at cell A2 + | + */ + + 'test' => [ + + 'firstname' => 'A2' + + ] + + ] + ], + + 'views' => [ + + /* + |-------------------------------------------------------------------------- + | Styles + |-------------------------------------------------------------------------- + | + | The default styles which will be used when parsing a view + | + */ + + 'styles' => [ + + /* + |-------------------------------------------------------------------------- + | Table headings + |-------------------------------------------------------------------------- + */ + 'th' => [ + 'font' => [ + 'bold' => true, + 'size' => 12, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Strong tags + |-------------------------------------------------------------------------- + */ + 'strong' => [ + 'font' => [ + 'bold' => true, + 'size' => 12, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Bold tags + |-------------------------------------------------------------------------- + */ + 'b' => [ + 'font' => [ + 'bold' => true, + 'size' => 12, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Italic tags + |-------------------------------------------------------------------------- + */ + 'i' => [ + 'font' => [ + 'italic' => true, + 'size' => 12, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 1 + |-------------------------------------------------------------------------- + */ + 'h1' => [ + 'font' => [ + 'bold' => true, + 'size' => 24, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 2 + |-------------------------------------------------------------------------- + */ + 'h2' => [ + 'font' => [ + 'bold' => true, + 'size' => 18, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 3 + |-------------------------------------------------------------------------- + */ + 'h3' => [ + 'font' => [ + 'bold' => true, + 'size' => 13.5, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 4 + |-------------------------------------------------------------------------- + */ + 'h4' => [ + 'font' => [ + 'bold' => true, + 'size' => 12, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 5 + |-------------------------------------------------------------------------- + */ + 'h5' => [ + 'font' => [ + 'bold' => true, + 'size' => 10, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Heading 6 + |-------------------------------------------------------------------------- + */ + 'h6' => [ + 'font' => [ + 'bold' => true, + 'size' => 7.5, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Hyperlinks + |-------------------------------------------------------------------------- + */ + 'a' => [ + 'font' => [ + 'underline' => true, + 'color' => ['argb' => 'FF0000FF'], + ] + ], + + /* + |-------------------------------------------------------------------------- + | Horizontal rules + |-------------------------------------------------------------------------- + */ + 'hr' => [ + 'borders' => [ + 'bottom' => [ + 'style' => 'thin', + 'color' => ['FF000000'] + ], + ] + ] + ] + + ] + +); diff --git a/config/language.php b/config/language.php index d8184b026..21d8d3a37 100644 --- a/config/language.php +++ b/config/language.php @@ -115,7 +115,7 @@ return [ | */ - 'allowed' => ['en-GB', 'de-DE', 'es-ES', 'fa-IR', 'fr-FR', 'pt-BR', 'ru-RU', 'sq-AL', 'tr-TR', 'zh-TW'], + 'allowed' => ['en-GB', 'de-DE', 'es-ES', 'fa-IR', 'fr-FR', 'nl-NL', 'pt-BR', 'ru-RU', 'sq-AL', 'tr-TR', 'vi-VN', 'zh-TW'], /* |-------------------------------------------------------------------------- diff --git a/config/clicknow.money.php b/config/money.php similarity index 100% rename from config/clicknow.money.php rename to config/money.php diff --git a/database/seeds/Roles.php b/database/seeds/Roles.php index fc3005018..db424e010 100644 --- a/database/seeds/Roles.php +++ b/database/seeds/Roles.php @@ -35,6 +35,7 @@ class Roles extends Seeder 'auth-permissions' => 'c,r,u,d', 'auth-profile' => 'r,u', 'companies-companies' => 'c,r,u,d', + 'common-import' => 'c', 'items-items' => 'c,r,u,d', 'incomes-invoices' => 'c,r,u,d', 'incomes-revenues' => 'c,r,u,d', @@ -64,6 +65,7 @@ class Roles extends Seeder 'admin-panel' => 'r', 'auth-profile' => 'r,u', 'companies-companies' => 'c,r,u,d', + 'common-import' => 'c', 'items-items' => 'c,r,u,d', 'incomes-invoices' => 'c,r,u,d', 'incomes-revenues' => 'c,r,u,d', diff --git a/index.php b/index.php index 61339a274..6f29ad120 100644 --- a/index.php +++ b/index.php @@ -6,6 +6,14 @@ * @link https://akaunting.com */ +// Define minimum supported PHP version +define('AKAUNTING_PHP', '5.6.4'); + +// Check PHP version +if (version_compare(PHP_VERSION, AKAUNTING_PHP, '<')) { + die('Your host needs to use PHP ' . AKAUNTING_PHP . ' or higher to run Akaunting'); +} + // Register the auto-loader require(__DIR__.'/bootstrap/autoload.php'); diff --git a/modules/OfflinePayment/Resources/lang/en-GB/offlinepayment.php b/modules/OfflinePayment/Resources/lang/en-GB/offlinepayment.php index 9b702ed82..541a5c57c 100644 --- a/modules/OfflinePayment/Resources/lang/en-GB/offlinepayment.php +++ b/modules/OfflinePayment/Resources/lang/en-GB/offlinepayment.php @@ -10,4 +10,7 @@ return [ 'order' => 'Order', 'payment_gateways' => 'Offline Payment Methods', + 'confirm' => 'Confirm', + 'loading' => 'Loading', + ]; diff --git a/modules/OfflinePayment/Resources/views/edit.blade.php b/modules/OfflinePayment/Resources/views/edit.blade.php index 99305c2f1..97caf406b 100644 --- a/modules/OfflinePayment/Resources/views/edit.blade.php +++ b/modules/OfflinePayment/Resources/views/edit.blade.php @@ -3,82 +3,84 @@ @section('title', trans('offlinepayment::offlinepayment.offlinepayment')) @section('content') -
-
-
-

{{ trans('offlinepayment::offlinepayment.add_new') }}

- -
- - - {!! Form::open(['url' => 'apps/offlinepayment/settings', 'files' => true, 'role' => 'form']) !!} - -
-
- - {{ Form::textGroup('name', trans('general.name'), 'id-card-o', ['required' => 'required'], null, 'col-md-12') }} - - {{ Form::textGroup('code', trans('offlinepayment::offlinepayment.code'), 'key', ['required' => 'required'], null, 'col-md-12') }} - - {{ Form::radioGroup('customer', trans('offlinepayment::offlinepayment.customer'), '', ['required' => 'required'], 0, 'col-md-12') }} - - {{ Form::textGroup('order', trans('offlinepayment::offlinepayment.order'), 'sort', [], null, 'col-md-12') }} - - {{ Form::textareaGroup('description', trans('general.description')) }} -
- - - - - - {!! Form::close() !!} -
- -
-
- -
-
-

{{ trans('offlinepayment::offlinepayment.payment_gateways') }}

- -
- -
-
- - - - - - - - - - - @if($items) - @foreach($items as $item) - - - - - - - @endforeach - @else - - @endif - -
{{ trans('general.name') }}{{ trans('offlinepayment::offlinepayment.code') }}{{ trans('offlinepayment::offlinepayment.order') }}{{ trans('general.actions') }}
{{ $item->name }}{{ $item->code }}{{ $item->order }} - - -
+
+
+
+
+

{{ trans('offlinepayment::offlinepayment.add_new') }}

+
+ + + {!! Form::open(['url' => 'apps/offlinepayment/settings', 'files' => true, 'role' => 'form']) !!} + +
+
+ + {{ Form::textGroup('name', trans('general.name'), 'id-card-o', ['required' => 'required'], null, 'col-md-12') }} + + {{ Form::textGroup('code', trans('offlinepayment::offlinepayment.code'), 'key', ['required' => 'required'], null, 'col-md-12') }} + + {{ Form::radioGroup('customer', trans('offlinepayment::offlinepayment.customer'), '', ['required' => 'required'], 0, 'col-md-12') }} + + {{ Form::textGroup('order', trans('offlinepayment::offlinepayment.order'), 'sort', [], null, 'col-md-12') }} + + {{ Form::textareaGroup('description', trans('general.description')) }} +
+ + + + + + {!! Form::close() !!}
- + +
+
+ +
+
+

{{ trans('offlinepayment::offlinepayment.payment_gateways') }}

+ +
+ +
+
+ + + + + + + + + + + @if($items) + @foreach($items as $item) + + + + + + + @endforeach + @else + + @endif + +
{{ trans('general.name') }}{{ trans('offlinepayment::offlinepayment.code') }}{{ trans('offlinepayment::offlinepayment.order') }}{{ trans('general.actions') }}
{{ $item->name }}{{ $item->code }}{{ $item->order }} + + +
+
+
+ +
+
-
@endsection diff --git a/public/css/app.css b/public/css/app.css index 26a2151b6..78f922c22 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -453,6 +453,10 @@ ul.add-new.nav.navbar-nav.pull-left { overflow-x: visible; } +.margin-top { + margin-top: 20px; +} + @media only screen and (max-width : 768px) { .main-header .add-new.nav.navbar-nav i { margin-top: 3px; diff --git a/public/files/import/bills.csv b/public/files/import/bills.csv new file mode 100644 index 000000000..60839ef4f --- /dev/null +++ b/public/files/import/bills.csv @@ -0,0 +1,2 @@ +"bill_number","order_number","bill_status_code","billed_at","due_at","amount","currency_code","currency_rate","vendor_id","vendor_name","vendor_email","vendor_tax_number","vendor_phone","vendor_address","notes","attachment","created_at","updated_at","deleted_at" +"987654","","received","2017-11-30","2017-12-07","10.0000","USD","1.00000000","1","Test Vendor","test@vendor.com","","","","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/customers.csv b/public/files/import/customers.csv new file mode 100644 index 000000000..b24d6c976 --- /dev/null +++ b/public/files/import/customers.csv @@ -0,0 +1,2 @@ +"user_id","name","email","tax_number","phone","address","website","currency_code","enabled","created_at","updated_at","deleted_at" +"","Test Customer","test@customer.com","","","","","USD","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/invoices.csv b/public/files/import/invoices.csv new file mode 100644 index 000000000..bfd0e99af --- /dev/null +++ b/public/files/import/invoices.csv @@ -0,0 +1,2 @@ +"invoice_number","order_number","invoice_status_code","invoiced_at","due_at","amount","currency_code","currency_rate","customer_id","customer_name","customer_email","customer_tax_number","customer_phone","customer_address","notes","attachment","created_at","updated_at","deleted_at" +"INV-00001","","sent","2017-11-30","2017-12-07","10.0000","USD","1.00000000","1","Test Customer","test@customer.com","","","","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/items.csv b/public/files/import/items.csv new file mode 100644 index 000000000..5aea19d2f --- /dev/null +++ b/public/files/import/items.csv @@ -0,0 +1,2 @@ +"name","sku","description","sale_price","purchase_price","quantity","category_id","tax_id","picture","enabled","created_at","updated_at","deleted_at" +"Test Item","test-item","","10.0000","5.0000","1","5","2","items/test-item.png","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/payments.csv b/public/files/import/payments.csv new file mode 100644 index 000000000..363dc2b9b --- /dev/null +++ b/public/files/import/payments.csv @@ -0,0 +1,2 @@ +"account_id","paid_at","amount","currency_code","currency_rate","vendor_id","description","category_id","payment_method","reference","attachment","created_at","updated_at","deleted_at" +"1","2017-11-30","10.0000","USD","1.00000000","1","","4","offlinepayment.cash.1","","","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/revenues.csv b/public/files/import/revenues.csv new file mode 100644 index 000000000..bd110fc1f --- /dev/null +++ b/public/files/import/revenues.csv @@ -0,0 +1,2 @@ +"account_id","paid_at","amount","currency_code","currency_rate","customer_id","description","category_id","payment_method","reference","attachment","created_at","updated_at","deleted_at" +"1","2017-11-30","10.0000","USD","1.00000000","","","3","offlinepayment.cash.1","","revenues/test-revenue.pdf","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/public/files/import/vendors.csv b/public/files/import/vendors.csv new file mode 100644 index 000000000..83b680232 --- /dev/null +++ b/public/files/import/vendors.csv @@ -0,0 +1,2 @@ +"user_id","name","email","tax_number","phone","address","website","currency_code","enabled","created_at","updated_at","deleted_at" +"","Test Vendor","test@vendor.com","","","","","USD","1","2017-11-30 00:00:00","2017-11-30 00:00:00",NULL diff --git a/resources/lang/de-DE/accounts.php b/resources/lang/de-DE/accounts.php index 121933fac..849c8dc8b 100644 --- a/resources/lang/de-DE/accounts.php +++ b/resources/lang/de-DE/accounts.php @@ -10,6 +10,5 @@ return [ 'bank_phone' => 'Bank Telefonnummer', 'bank_address' => 'Bank Adresse', 'default_account' => 'Standardkonto', - 'all' => 'Alle Konten', ]; diff --git a/resources/lang/de-DE/auth.php b/resources/lang/de-DE/auth.php index ce2cf8d14..7c8c66f0d 100644 --- a/resources/lang/de-DE/auth.php +++ b/resources/lang/de-DE/auth.php @@ -24,6 +24,7 @@ return [ ], 'failed' => 'Diese Anmeldeinformationen entsprechen nicht unseren Aufzeichnungen.', + 'disabled' => 'Dieses Konto ist deaktiviert! Bitte kontaktieren Sie den Systemadministrator.', 'throttle' => 'Zu viele fehlgeschlagene Anmeldeversuche. Bitte versuchen Sie es erneut in :seconds Sekunden.', ]; diff --git a/resources/lang/de-DE/bills.php b/resources/lang/de-DE/bills.php index 36bd73c28..467c96e31 100644 --- a/resources/lang/de-DE/bills.php +++ b/resources/lang/de-DE/bills.php @@ -23,14 +23,19 @@ return [ 'histories' => 'Historie', 'payments' => 'Zahlungen', 'add_payment' => 'Zahlung hinzufügen', + 'mark_received' => 'Als erhalten markieren', 'download_pdf' => 'PDF herunterladen', 'send_mail' => 'E-Mail senden', 'status' => [ - 'new' => 'Neu', - 'updated' => 'Aktualisiert', + 'draft' => 'Entwurf', + 'received' => 'Erhalten', 'partial' => 'Teilweise', 'paid' => 'Bezahlt', ], + 'messages' => [ + 'received' => 'Rechnung als erfolgreich erhalten markiert!', + ], + ]; diff --git a/resources/lang/de-DE/customer.php b/resources/lang/de-DE/customer.php deleted file mode 100644 index a51f8fea1..000000000 --- a/resources/lang/de-DE/customer.php +++ /dev/null @@ -1,5 +0,0 @@ - 'Alle Kunden', -]; diff --git a/resources/lang/de-DE/customers.php b/resources/lang/de-DE/customers.php new file mode 100644 index 000000000..7cb47b5ce --- /dev/null +++ b/resources/lang/de-DE/customers.php @@ -0,0 +1,11 @@ + 'Login erlauben?', + 'user_created' => 'Benutzer angelegt', + + 'error' => [ + 'email' => 'Diese Email wurde bereits benutzt.' + ] +]; diff --git a/resources/lang/de-DE/demo.php b/resources/lang/de-DE/demo.php index c421e190d..849e1a0d3 100644 --- a/resources/lang/de-DE/demo.php +++ b/resources/lang/de-DE/demo.php @@ -11,7 +11,7 @@ return [ 'currencies_gbp' => 'Britisches Pfund', 'currencies_try' => 'Türkische Lira', 'taxes_exempt' => 'Steuerbefreit', - 'taxes_normal' => 'Normal', + 'taxes_normal' => 'Normale Steuer', 'taxes_sales' => 'Umsatzsteuer', ]; diff --git a/resources/lang/de-DE/general.php b/resources/lang/de-DE/general.php index b97107100..9669f06e4 100644 --- a/resources/lang/de-DE/general.php +++ b/resources/lang/de-DE/general.php @@ -35,6 +35,7 @@ return [ 'languages' => 'Sprache | Sprachen', 'updates' => 'Aktualisierung| Aktualisierungen', 'numbers' => 'Nummer| Nummern', + 'statuses' => 'Status | Stati', 'dashboard' => 'Kontrollzentrum', 'banking' => 'Banking', @@ -76,22 +77,20 @@ return [ 'color' => 'Farbe', 'save' => 'Speichern', 'cancel' => 'Abbrechen', - 'status' => 'Status', 'from' => 'Von', 'to' => 'An', 'print' => 'Drucken', 'search' => 'Suchen', 'search_placeholder' => 'Typ um zu suchen..', 'filter' => 'Filter', - 'create_user' => 'Benutzer erstellen', - 'created_user' => 'Erstellter Benutzer', - 'all_statuses' => 'Alle Status', - 'bank' => 'Überweisungen', - 'cash' => 'Bar', - 'paypal' => 'PayPal', 'help' => 'Hilfe', 'all' => 'Alle', + 'all_type' => 'Alle :Typ', 'upcoming' => 'Anstehend', + 'created' => 'Erstellt', + 'id' => 'ID', + 'more_actions' => 'Weitere Aktionen', + 'duplicate' => 'Duplikat', 'title' => [ 'new' => 'Neu :type', diff --git a/resources/lang/de-DE/header.php b/resources/lang/de-DE/header.php index a9a7fcba2..61cb150f3 100644 --- a/resources/lang/de-DE/header.php +++ b/resources/lang/de-DE/header.php @@ -8,6 +8,7 @@ return [ 'counter' => '{0} Sie haben keine Benachrichtigungen|{1} Sie haben :count Benachrichtigung|[2,*] Sie haben :count Benachrichtigungen', 'overdue_invoices' => '{1} :count überfällige Rechnung|[2,*] :count überfällige Rechnungen', 'upcoming_bills' => '{1} :count bevorstehende Rechnung|[2,*] :count bevorstehende Rechnungen', + 'items_stock' => '{1}:count Artikel ausverkauft|[2,*]:count Artikel ausverkauft', 'view_all' => 'Alle anzeigen' ], diff --git a/resources/lang/de-DE/import.php b/resources/lang/de-DE/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/de-DE/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/de-DE/invoices.php b/resources/lang/de-DE/invoices.php index eef824e35..dee9f6da2 100644 --- a/resources/lang/de-DE/invoices.php +++ b/resources/lang/de-DE/invoices.php @@ -22,6 +22,8 @@ return [ 'histories' => 'Historie', 'payments' => 'Zahlungen', 'add_payment' => 'Zahlung hinzufügen', + 'mark_paid' => 'Als bezahlt markieren', + 'mark_sent' => 'Als versendet markieren', 'download_pdf' => 'PDF herunterladen', 'send_mail' => 'E-Mail senden', @@ -34,4 +36,14 @@ return [ 'paid' => 'Bezahlt', ], + 'messages' => [ + 'email_sent' => 'Rechnungsemail wurde erfolgreich versendet!', + 'marked_sent' => 'Rechnung als erfolgreich versendet markiert!', + ], + + 'notification' => [ + 'message' => 'Sie erhalten diese Email, da eine Rechnung in Höhe von :amount für den Kunden :customer ansteht.', + 'button' => 'Jetzt bezahlen', + ], + ]; diff --git a/resources/lang/de-DE/items.php b/resources/lang/de-DE/items.php index fb42f4db4..7b5940e42 100644 --- a/resources/lang/de-DE/items.php +++ b/resources/lang/de-DE/items.php @@ -7,4 +7,9 @@ return [ 'purchase_price' => 'Einkaufspreis', 'sku' => 'SKU', + 'notification' => [ + 'message' => 'Sie erhalten diese EMail, da :name nur noch begrenzt verfügbar ist.', + 'button' => 'Jetzt ansehen', + ], + ]; diff --git a/resources/lang/de-DE/messages.php b/resources/lang/de-DE/messages.php index e47090ab4..8d59413eb 100644 --- a/resources/lang/de-DE/messages.php +++ b/resources/lang/de-DE/messages.php @@ -6,12 +6,17 @@ return [ 'added' => ':type hinzugefügt!', 'updated' => ':type aktualisiert!', 'deleted' => ':type gelöscht!', + 'duplicated' => ':type dupliziert!', + 'imported' => ':type imported!', ], 'error' => [ 'not_user_company' => 'Fehler: Sie haben nicht die Berechtigung um diese Firma zu verwalten!', + 'customer' => 'Fehler: Sie können diesen Benutzer nicht erstellen! :name benutzt diese Email bereits.', + 'no_file' => 'Error: No file selected!', ], 'warning' => [ - 'deleted' => 'Achtung: Sie können :type nicht löschen, da :text', + '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.', ], ]; diff --git a/resources/lang/de-DE/modules.php b/resources/lang/de-DE/modules.php index 93695b293..88a86e876 100644 --- a/resources/lang/de-DE/modules.php +++ b/resources/lang/de-DE/modules.php @@ -2,41 +2,42 @@ return [ - 'api_token' => 'Token', - 'enter_api_token' => 'Geben Sie Ihren API-Schlüssel ein', - 'top_paid' => 'Top bezahlt', - 'new' => 'Neu', - 'top_free' => 'Top kostenlos', - 'free' => 'Kostenlos', - 'install' => 'Installieren', - 'buy_now' => 'Jetzt kaufen', - 'faq' => 'Häufige Fragen / FAQ', - 'changelog' => 'Changelog', - 'installed' => 'Changelog', - 'uninstalled' => 'Changelog', + 'title' => 'API Token', + 'api_token' => 'Token', + 'top_paid' => 'Top bezahlt', + 'new' => 'Neu', + 'top_free' => 'Top kostenlos', + 'free' => 'Kostenlos', + 'install' => 'Installieren', + 'buy_now' => 'Jetzt kaufen', + 'faq' => 'Häufige Fragen / FAQ', + 'changelog' => 'Changelog', + 'installed' => 'Installiert', + 'uninstalled' => 'Deinstalliert', + 'token_link' => 'Hier klicken um Ihren API Token zu erhalten.', - 'enabled' => ':module Modul aktiviert', - 'disabled' => ':module Modul deaktiviert', + 'enabled' => 'Anwendung :module aktiviert', + 'disabled' => 'Anwendung :module deaktiviert', 'installation' => [ - 'header' => 'Modulinstallation', - 'start' => ':module wird installiert.', - 'download' => 'Lade :module Dateien herunter.', - 'unzip' => 'Extrahiere :module Dateien.', - 'install' => 'Lade :module Dateien hoch.', + 'header' => 'Modulinstallation', + 'start' => ':module wird installiert.', + 'download' => 'Lade :module Dateien herunter.', + 'unzip' => 'Extrahiere :module Dateien.', + 'install' => 'Lade :module Dateien hoch.', ], 'history' => [ - 'installed' => ':module installiert', - 'uninstalled' => ':module deinstallieren', - 'updated' => ':module aktualisiert', - 'enabled' => ':module aktiviert', - 'disabled' => ':module deaktiviert', + 'installed' => ':module installiert', + 'uninstalled' => ':module deinstallieren', + 'updated' => ':module aktualisiert', + 'enabled' => ':module aktiviert', + 'disabled' => ':module deaktiviert', ], 'button' => [ - 'uninstall' => 'Deinstallieren', - 'disable' => 'Deaktivieren', - 'enable' => 'Aktivieren', + 'uninstall' => 'Deinstallieren', + 'disable' => 'Deaktivieren', + 'enable' => 'Aktivieren', ], ]; diff --git a/resources/lang/de-DE/settings.php b/resources/lang/de-DE/settings.php index 1fe7e19dd..34637fa78 100644 --- a/resources/lang/de-DE/settings.php +++ b/resources/lang/de-DE/settings.php @@ -24,10 +24,10 @@ return [ ], 'invoice' => [ 'tab' => 'Rechnung', - 'prefix' => 'Rechnung-Präfix', - 'digit' => 'Rechnungsnummer Zahl', - 'start' => 'Rechnungsnummer Start bei', - 'logo' => 'Rechnung-Logo', + 'prefix' => 'Zahlenprefix', + 'digit' => 'Nachkommastellen', + 'next' => 'Nächste Nummer', + 'logo' => 'Logo', ], 'default' => [ 'tab' => 'Standardeinstellungen', diff --git a/resources/lang/de-DE/updates.php b/resources/lang/de-DE/updates.php index d85365c17..7a8273c01 100644 --- a/resources/lang/de-DE/updates.php +++ b/resources/lang/de-DE/updates.php @@ -6,7 +6,10 @@ return [ 'latest_version' => 'Neueste Version', 'update' => 'Update Akaunting auf Version :version', 'changelog' => 'Changelog', + 'check' => 'Prüfen', 'new_core' => 'Eine aktualisierte Version Akaunting ist verfügbar.', 'latest_core' => 'Glückwunsch! Sie nutzen die aktuellste Version von Akaunting. Zukünftige Sicherheitsupdates werden automatisch angewendet.', + 'success' => 'Der Updateprozess wurde erfolgreich ausgeführt.', + 'error' => 'Updateprozess fehlgeschlagen, bitte erneut versuchen.', ]; diff --git a/resources/lang/en-GB/customer.php b/resources/lang/en-GB/customer.php deleted file mode 100644 index e0a68b0c5..000000000 --- a/resources/lang/en-GB/customer.php +++ /dev/null @@ -1,9 +0,0 @@ - 'All Customers', - - 'error' => [ - 'email' => 'The email has already been taken.' - ] -]; diff --git a/resources/lang/en-GB/customers.php b/resources/lang/en-GB/customers.php new file mode 100644 index 000000000..cad4bc8b9 --- /dev/null +++ b/resources/lang/en-GB/customers.php @@ -0,0 +1,11 @@ + 'Allow Login?', + 'user_created' => 'User Created', + + 'error' => [ + 'email' => 'The email has already been taken.' + ] +]; diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index 0e1a74067..954e19688 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -83,8 +83,6 @@ return [ 'search' => 'Search', 'search_placeholder' => 'Type to search..', 'filter' => 'Filter', - 'create_user' => 'Create User', - 'created_user' => 'Created User', 'help' => 'Help', 'all' => 'All', 'all_type' => 'All :type', @@ -92,6 +90,7 @@ return [ 'created' => 'Created', 'id' => 'ID', 'more_actions' => 'More Actions', + 'duplicate' => 'Duplicate', 'title' => [ 'new' => 'New :type', diff --git a/resources/lang/en-GB/import.php b/resources/lang/en-GB/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/en-GB/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/en-GB/install.php b/resources/lang/en-GB/install.php index 40124ea4f..72fd65519 100644 --- a/resources/lang/en-GB/install.php +++ b/resources/lang/en-GB/install.php @@ -17,7 +17,6 @@ return [ ], 'requirements' => [ - 'php_version' => 'PHP 5.6.4 or above needs to be used!', 'enabled' => ':feature needs to be enabled!', 'disabled' => ':feature needs to be disabled!', 'extension' => ':extension extension needs to be loaded!', diff --git a/resources/lang/en-GB/messages.php b/resources/lang/en-GB/messages.php index 3c9cc96eb..62334f8bd 100644 --- a/resources/lang/en-GB/messages.php +++ b/resources/lang/en-GB/messages.php @@ -6,10 +6,13 @@ return [ 'added' => ':type added!', 'updated' => ':type updated!', 'deleted' => ':type deleted!', + 'duplicated' => ':type duplicated!', + 'imported' => ':type imported!', ], 'error' => [ 'not_user_company' => 'Error: You are not allowed to manage this company!', 'customer' => 'Error: You can not created user! :name use this email address.', + 'no_file' => 'Error: No file selected!', ], 'warning' => [ 'deleted' => 'Warning: You are not allowed to delete :name because it has :text related.', diff --git a/resources/lang/es-ES/accounts.php b/resources/lang/es-ES/accounts.php index 87ddccd70..4cd3eef79 100644 --- a/resources/lang/es-ES/accounts.php +++ b/resources/lang/es-ES/accounts.php @@ -10,6 +10,5 @@ return [ 'bank_phone' => 'Teléfono Banco', 'bank_address' => 'Dirección del Banco', 'default_account' => 'Cuenta Predeterminada', - 'all' => 'Todas las cuentas', ]; diff --git a/resources/lang/es-ES/auth.php b/resources/lang/es-ES/auth.php index 26235e3d4..70b661aae 100644 --- a/resources/lang/es-ES/auth.php +++ b/resources/lang/es-ES/auth.php @@ -24,6 +24,7 @@ return [ ], 'failed' => 'Estas credenciales no coinciden con nuestros registros.', + 'disabled' => 'Esta cuenta está deshabilitada. Por favor, póngase en contacto con el administrador del sistema.', 'throttle' => 'Demasiados intentos fallidos de inicio de sesión. Por favor vuelva a intentarlo después de %s segundos.', ]; diff --git a/resources/lang/es-ES/bills.php b/resources/lang/es-ES/bills.php index 4fe97d9b3..659bc8214 100644 --- a/resources/lang/es-ES/bills.php +++ b/resources/lang/es-ES/bills.php @@ -23,14 +23,19 @@ return [ 'histories' => 'Historial', 'payments' => 'Pagos', 'add_payment' => 'Añadir pago', + 'mark_received' => 'Marcar como recibido', 'download_pdf' => 'Descargar PDF', 'send_mail' => 'Enviar Email', 'status' => [ - 'new' => 'Nuevo', - 'updated' => 'Actualizado', + 'draft' => 'Borrador', + 'received' => 'Recibido', 'partial' => 'Parcial', 'paid' => 'Pagado', ], + 'messages' => [ + 'received' => 'Recibo marcado como recibido con éxito!', + ], + ]; diff --git a/resources/lang/es-ES/customer.php b/resources/lang/es-ES/customer.php deleted file mode 100644 index 545c28b09..000000000 --- a/resources/lang/es-ES/customer.php +++ /dev/null @@ -1,5 +0,0 @@ - 'Todos los clientes', -]; diff --git a/resources/lang/es-ES/customers.php b/resources/lang/es-ES/customers.php new file mode 100644 index 000000000..15cfa0729 --- /dev/null +++ b/resources/lang/es-ES/customers.php @@ -0,0 +1,11 @@ + '¿Permitir inicio de sesión?', + 'user_created' => 'Usuario Creado', + + 'error' => [ + 'email' => 'Ese email ya está en uso.' + ] +]; diff --git a/resources/lang/es-ES/demo.php b/resources/lang/es-ES/demo.php index c1ad1ca9c..2eb1dd4ca 100644 --- a/resources/lang/es-ES/demo.php +++ b/resources/lang/es-ES/demo.php @@ -11,7 +11,7 @@ return [ 'currencies_gbp' => 'Libra esterlina', 'currencies_try' => 'Libra turca', 'taxes_exempt' => 'Exentos de impuestos', - 'taxes_normal' => 'Normal', + 'taxes_normal' => 'Impuesto Normal', 'taxes_sales' => 'Impuesto sobre Ventas', ]; diff --git a/resources/lang/es-ES/general.php b/resources/lang/es-ES/general.php index 01e616e3b..fb59ff2a0 100644 --- a/resources/lang/es-ES/general.php +++ b/resources/lang/es-ES/general.php @@ -35,6 +35,7 @@ return [ 'languages' => 'Idioma | Idiomas', 'updates' => 'Actualización | Actualizaciones', 'numbers' => 'Número | Números', + 'statuses' => 'Estado|Estados', 'dashboard' => 'Panel de Control', 'banking' => 'Banking', @@ -76,23 +77,20 @@ return [ 'color' => 'Color', 'save' => 'Guardar', 'cancel' => 'Cancelar', - 'status' => 'Estado', 'from' => 'De ', 'to' => 'Para', 'print' => 'Imprimir', 'search' => 'Buscar', 'search_placeholder' => 'Escriba para buscar..', 'filter' => 'Filtro', - 'create_user' => 'Crear Usuario', - 'created_user' => 'Usuario Creado', - 'all_statuses' => 'Todos los Estados', - 'bank' => 'Transferencia Bancaria', - 'cash' => 'Efectivo', - 'paypal' => 'PayPal', 'help' => 'Ayuda', 'all' => 'Todos', + 'all_type' => 'Todos :type', 'upcoming' => 'Próximos', 'created' => 'Creado', + 'id' => 'ID', + 'more_actions' => 'Más acciones', + 'duplicate' => 'Duplicar', 'title' => [ 'new' => 'Nuevo :type', diff --git a/resources/lang/es-ES/header.php b/resources/lang/es-ES/header.php index 687d49471..642010527 100644 --- a/resources/lang/es-ES/header.php +++ b/resources/lang/es-ES/header.php @@ -7,7 +7,8 @@ return [ 'notifications' => [ 'counter' => '{0} No tiene notificaciones |{1} Tiene :count notificación | [2,*] Tiene :count notificaciones', 'overdue_invoices' => '{1} :count factura vencida | [2,*] :count facturas vencidas', - 'upcoming_bills' => '{1} :count factura vencida|[2,*] :count facturas vencidas', + 'upcoming_bills' => '{1} :count recibo por vencer|[2,*] :count recibo por vencer', + 'items_stock' => '{1} :count artículo sin stock|[2,*] :count artículos sin stock', 'view_all' => 'Ver todas' ], diff --git a/resources/lang/es-ES/import.php b/resources/lang/es-ES/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/es-ES/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/es-ES/invoices.php b/resources/lang/es-ES/invoices.php index ed71a3bdb..798a4fbce 100644 --- a/resources/lang/es-ES/invoices.php +++ b/resources/lang/es-ES/invoices.php @@ -22,6 +22,8 @@ return [ 'histories' => 'Historias', 'payments' => 'Pagos', 'add_payment' => 'Añadir pago', + 'mark_paid' => 'Marcar Como Pagada', + 'mark_sent' => 'Marcar Como Enviada', 'download_pdf' => 'Descargar PDF', 'send_mail' => 'Enviar Email', @@ -34,4 +36,14 @@ return [ 'paid' => 'Pagado', ], + 'messages' => [ + 'email_sent' => 'El email de la factura se ha enviado correctamente!', + 'marked_sent' => 'Factura marcada como enviada con éxito!', + ], + + 'notification' => [ + 'message' => 'Usted está recibiendo este correo electrónico porque usted tiene una factura de :amount para el cliente :cliente .', + 'button' => 'Pagar Ahora', + ], + ]; diff --git a/resources/lang/es-ES/items.php b/resources/lang/es-ES/items.php index 8ee20578d..242ff5e36 100644 --- a/resources/lang/es-ES/items.php +++ b/resources/lang/es-ES/items.php @@ -7,4 +7,9 @@ return [ 'purchase_price' => 'Precio de Compra', 'sku' => 'SKU', + 'notification' => [ + 'message' => '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 bbd1411ff..495d095a4 100644 --- a/resources/lang/es-ES/messages.php +++ b/resources/lang/es-ES/messages.php @@ -6,12 +6,17 @@ return [ 'added' => ':type creado!', 'updated' => ':type actualizado!', 'deleted' => ':type borrado!', + 'duplicated' => ': type duplicado!', + 'imported' => ':type imported!', ], 'error' => [ 'not_user_company' => 'Error: No tiene permisos para administrar esta empresa!', + 'customer' => 'Error: No se puede crear el usuario! :name usa esta dirección de correo electrónico.', + 'no_file' => 'Error: No file selected!', ], 'warning' => [ - 'deleted' => 'Advertencia: No puede borrar :type porque tiene :text', + 'deleted' => 'Advertencia: No puede borrar :name porque tiene :text relacionado.', + 'disabled' => 'Advertencia: No se permite desactivar :name porque tiene :text relacionado.', ], ]; diff --git a/resources/lang/es-ES/modules.php b/resources/lang/es-ES/modules.php index a80184ce3..27c338f20 100644 --- a/resources/lang/es-ES/modules.php +++ b/resources/lang/es-ES/modules.php @@ -16,8 +16,8 @@ return [ 'uninstalled' => 'Desinstalado', 'token_link' => 'Haga Click aquí para obtener su API token.', - 'enabled' => ':module módulo habilitado', - 'disabled' => ':module módulo deshabilitado', + 'enabled' => ':module habilitado', + 'disabled' => ':module deshabilitado', 'installation' => [ 'header' => 'Instalación del módulo', diff --git a/resources/lang/es-ES/passwords.php b/resources/lang/es-ES/passwords.php index ba38b0f40..40b370808 100644 --- a/resources/lang/es-ES/passwords.php +++ b/resources/lang/es-ES/passwords.php @@ -13,7 +13,7 @@ return [ | */ - 'password' => 'Los passwords deben tener mínimo 6 caracteres y coincidir.', + 'password' => 'Las contraseñas deben tener mínimo 6 caracteres y coincidir con la confirmación.', 'reset' => 'Su contraseña ha sido reestablecida!', 'sent' => 'Hemos enviado un enlace para resetear su contraseña!', 'token' => 'Ese token de contraseña ya no es válido.', diff --git a/resources/lang/es-ES/settings.php b/resources/lang/es-ES/settings.php index 00c8e3ecd..a5289bf9c 100644 --- a/resources/lang/es-ES/settings.php +++ b/resources/lang/es-ES/settings.php @@ -24,10 +24,10 @@ return [ ], 'invoice' => [ 'tab' => 'Factura', - 'prefix' => 'Prefijo de Factura', - 'digit' => 'Dígitos del Nº de Factura', - 'start' => 'Número de Factura Inicial', - 'logo' => 'Logotipo de la factura', + 'prefix' => 'Prefijo de número', + 'digit' => 'Número de cifras', + 'next' => 'Siguiente número', + 'logo' => 'Logo', ], 'default' => [ 'tab' => 'Por defecto', @@ -57,7 +57,7 @@ return [ 'tab' => 'Programación', 'send_invoice' => 'Enviar Recordatorio de Factura', 'invoice_days' => 'Enviar después del vencimiento', - 'send_bill' => 'Enviar Recordatorio de Factura', + 'send_bill' => 'Enviar Recordatorio de Recibo', 'bill_days' => 'Enviar Antes del Vencimiento', 'cron_command' => 'Comando Cron', 'schedule_time' => 'Hora de ejecución', diff --git a/resources/lang/es-ES/updates.php b/resources/lang/es-ES/updates.php index 9562b5df6..1ded34b93 100644 --- a/resources/lang/es-ES/updates.php +++ b/resources/lang/es-ES/updates.php @@ -9,5 +9,7 @@ return [ 'check' => 'Comprobar', 'new_core' => 'Una versión actualizada de Akaunting está disponible.', 'latest_core' => '¡Felicidades! Tienes la última versión de Akaunting. Las actualizaciones de seguridad futuras se aplicarán automáticamente.', + 'success' => 'El proceso de actualización se ha completado con éxito.', + 'error' => 'El proceso de actualización ha fallado, por favor inténtelo de nuevo.', ]; diff --git a/resources/lang/es-ES/validation.php b/resources/lang/es-ES/validation.php index 386ef8f85..7188b68f4 100644 --- a/resources/lang/es-ES/validation.php +++ b/resources/lang/es-ES/validation.php @@ -16,7 +16,7 @@ return [ 'accepted' => ':attribute debe ser aceptado.', 'active_url' => ':attribute no es una URL correcta.', 'after' => ':attribute debe ser posterior a :date.', - 'after_or_equal' => ':attribute debe ser posterior a :date.', + 'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.', 'alpha' => ':attribute solo acepta letras.', 'alpha_dash' => ':attribute solo acepta letras, números y guiones.', 'alpha_num' => ':attribute solo acepta letras y números.', @@ -24,7 +24,7 @@ return [ 'before' => ':attribute debe ser anterior a :date.', 'before_or_equal' => ':attribute debe ser anterior o igual a :date.', 'between' => [ - 'numeric' => ':attribute debe estar entre :min - :max.', + 'numeric' => ':attribute debe estar entre :min y :max.', 'file' => ':attribute debe estar entre :min - :max kilobytes.', 'string' => ':attribute debe estar entre :min - :max caracteres.', 'array' => ':attribute debe tener entre :min y :max items.', diff --git a/resources/lang/fa-IR/auth.php b/resources/lang/fa-IR/auth.php index fa009b07f..af2bbe6d7 100644 --- a/resources/lang/fa-IR/auth.php +++ b/resources/lang/fa-IR/auth.php @@ -10,7 +10,7 @@ return [ 'forgot_password' => 'گذرواژه خود را فراموش کرده ام', 'reset_password' => 'تنظیم مجدد رمز عبور', 'enter_email' => 'آدرس ایمیل خود را وارد نمایید', - 'current_email' => 'ایمیل', + 'current_email' => 'ایمیل فعلی', 'reset' => 'بازنشانی', 'never' => 'هرگز', 'password' => [ @@ -20,7 +20,7 @@ return [ 'new_confirm' => 'تکرار رمز عبور', ], 'error' => [ - 'self_delete' => 'خطا: نمی توانید خودتان حذف کنید!' + 'self_delete' => 'خطا: نمی‌توانید خودتان حذف کنید!' ], 'failed' => 'مشخصات وارد شده با اطلاعات ما سازگار نیست.', diff --git a/resources/lang/fa-IR/customer.php b/resources/lang/fa-IR/customer.php deleted file mode 100644 index 8124cb84d..000000000 --- a/resources/lang/fa-IR/customer.php +++ /dev/null @@ -1,5 +0,0 @@ - 'تمام مشتریان', -]; diff --git a/resources/lang/fa-IR/customers.php b/resources/lang/fa-IR/customers.php new file mode 100644 index 000000000..1f98ae08f --- /dev/null +++ b/resources/lang/fa-IR/customers.php @@ -0,0 +1,11 @@ + 'مجاز به ورود به سیستم؟', + 'user_created' => 'کاربر ایجاد شده', + + 'error' => [ + 'email' => 'این ایمیل قبلا انتخاب شده است.' + ] +]; diff --git a/resources/lang/fa-IR/general.php b/resources/lang/fa-IR/general.php index 3634392b4..3664790d9 100644 --- a/resources/lang/fa-IR/general.php +++ b/resources/lang/fa-IR/general.php @@ -83,8 +83,6 @@ return [ 'search' => 'جستجو', 'search_placeholder' => 'جستجو...', 'filter' => 'فیلتر', - 'create_user' => 'ایجاد کاربر', - 'created_user' => 'کاربر ایجاد شده', 'help' => 'راهنما', 'all' => 'همه', 'all_type' => 'همه :type', @@ -92,6 +90,7 @@ return [ 'created' => 'ایجاد شده', 'id' => 'شناسه', 'more_actions' => 'اقدامات بیشتر', + 'duplicate' => 'تکراری', 'title' => [ 'new' => ':type جدید', diff --git a/resources/lang/fa-IR/header.php b/resources/lang/fa-IR/header.php index 43fe8289c..6023cf4aa 100644 --- a/resources/lang/fa-IR/header.php +++ b/resources/lang/fa-IR/header.php @@ -8,6 +8,7 @@ return [ 'counter' => '{0} شما اطلاعیه ای ندارید |{1} شما:count اطلاعیه دارید | [2, *] شما :coun اطلاعیه دارید', 'overdue_invoices' => '{1} :count فاکتور سررسید شده دارید | [2, *]: :count فاکتور سررسید شده دارید', 'upcoming_bills' => '{1}:count صورتحساب دارید | [2, *]:count صورتحساب دارید', + 'items_stock' => '{1} :count موجود است | [2,*] :count موجود است', 'view_all' => 'نمایش همه' ], diff --git a/resources/lang/fa-IR/import.php b/resources/lang/fa-IR/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/fa-IR/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/fa-IR/invoices.php b/resources/lang/fa-IR/invoices.php index 085803f18..101a73430 100644 --- a/resources/lang/fa-IR/invoices.php +++ b/resources/lang/fa-IR/invoices.php @@ -37,7 +37,13 @@ return [ ], 'messages' => [ + 'email_sent' => 'فاکتور با موفقت ارسال شده است!', 'marked_sent' => 'فاکتور با موفقت ارسال شده است!', ], + 'notification' => [ + 'message' => 'شما این ایمیل را دریافت کردید به دلیل اینکه مشتری شما :customer مقدار :amount فاکتور دارد.', + 'button' => 'پرداخت', + ], + ]; diff --git a/resources/lang/fa-IR/items.php b/resources/lang/fa-IR/items.php index 301922b5c..7c6822106 100644 --- a/resources/lang/fa-IR/items.php +++ b/resources/lang/fa-IR/items.php @@ -7,4 +7,9 @@ return [ 'purchase_price' => 'قیمت خرید', 'sku' => 'کد کالا', + 'notification' => [ + 'message' => 'شما به این دلیل این ایمیل را دریافت کرده‌اید که موجودی :name در حال اتمام است.', + 'button' => 'مشاهده', + ], + ]; diff --git a/resources/lang/fa-IR/messages.php b/resources/lang/fa-IR/messages.php index ca42879a8..f68893486 100644 --- a/resources/lang/fa-IR/messages.php +++ b/resources/lang/fa-IR/messages.php @@ -4,11 +4,15 @@ return [ 'success' => [ 'added' => ':type اضافه شد!', - 'updated' => ':type بروز شد!', + 'updated' => ':type به‌روز شد!', 'deleted' => ':type حذف شد!', + 'duplicated' => ':type دو عدد موجود است!', + 'imported' => ':type imported!', ], 'error' => [ - 'not_user_company' => 'خطا:شما نمی توانید این شرکت را مدیریت کنید!', + 'not_user_company' => 'خطا: شما اجازه مدیریت این شرکت را ندارید!', + 'customer' => 'خطا در تعریف کاربر! :name از این ایمیل استفاده می‌کند.', + 'no_file' => 'Error: No file selected!', ], 'warning' => [ 'deleted' => 'هشدار: شما نمی توانید :name را به دلیل :text حذف کنید.', diff --git a/resources/lang/nl-NL/accounts.php b/resources/lang/nl-NL/accounts.php new file mode 100644 index 000000000..e0554b6eb --- /dev/null +++ b/resources/lang/nl-NL/accounts.php @@ -0,0 +1,14 @@ + 'Bedrijfsnaam', + 'number' => 'Nummer', + 'opening_balance' => 'Beginsaldo', + 'current_balance' => 'Huidig saldo', + 'bank_name' => 'Banknaam', + 'bank_phone' => 'Bank telefoon', + 'bank_address' => 'Adres van de Bank', + 'default_account' => 'Standaard account', + +]; diff --git a/resources/lang/nl-NL/auth.php b/resources/lang/nl-NL/auth.php new file mode 100644 index 000000000..67bdca1d2 --- /dev/null +++ b/resources/lang/nl-NL/auth.php @@ -0,0 +1,30 @@ + 'Profiel', + 'logout' => 'Afmelden', + 'login' => 'Aanmelden', + 'login_to' => 'Login om uw sessie te starten', + 'remember_me' => 'Onthoud mijn gegevens', + 'forgot_password' => 'Ik ben mijn wachtwoord vergeten', + 'reset_password' => 'Herstel wachtwoord', + 'enter_email' => 'Vul uw e-mailadres in', + 'current_email' => 'Huidige E-mail', + 'reset' => 'Resetten', + 'never' => 'nooit', + 'password' => [ + 'current' => 'Wachtwoord', + 'current_confirm' => 'Wachtwoordbevestiging', + 'new' => 'Nieuw Wachtwoord', + 'new_confirm' => 'Wachtwoordbevestiging', + ], + 'error' => [ + 'self_delete' => 'Fout: Kan niet zelf verwijderen!' + ], + + 'failed' => 'Deze referenties komen niet overeen met onze administratie.', + 'disabled' => 'Deze account is uitgeschakeld. Alstublieft, neem dan contact op met de systeembeheerder.', + 'throttle' => 'Te veel inlogpogingen. Probeer het opnieuw: seconden seconden.', + +]; diff --git a/resources/lang/nl-NL/bills.php b/resources/lang/nl-NL/bills.php new file mode 100644 index 000000000..d5b807199 --- /dev/null +++ b/resources/lang/nl-NL/bills.php @@ -0,0 +1,41 @@ + 'Faktuur nummer', + 'bill_date' => 'Faktuurdatum', + 'total_price' => 'Totale prijs', + 'due_date' => 'Vervaldatum', + 'order_number' => 'Ordernummer', + 'bill_from' => 'Factuur van', + + 'quantity' => 'Hoeveelheid', + 'price' => 'Prijs', + 'sub_total' => 'Subtotaal', + 'tax_total' => 'Totaal Btw', + 'total' => 'Totaal', + + 'item_name' => 'Item naam', + + 'payment_due' => 'Te betalen voor', + 'amount_due' => 'Bedrag', + 'paid' => 'Betaald', + 'histories' => 'Geschiedenis', + 'payments' => 'Betalingen', + 'add_payment' => 'Toevoegen van betaling', + 'mark_received' => 'Ontvangen', + 'download_pdf' => 'PDF downloaden', + 'send_mail' => 'Verstuur e-mail', + + 'status' => [ + 'draft' => 'Concept', + 'received' => 'Ontvangen', + 'partial' => 'Gedeeltelijk', + 'paid' => 'Betaald', + ], + + 'messages' => [ + 'received' => 'Faktuur gemarkeerd als succesvol ontvangen!', + ], + +]; diff --git a/resources/lang/nl-NL/companies.php b/resources/lang/nl-NL/companies.php new file mode 100644 index 000000000..084b809fc --- /dev/null +++ b/resources/lang/nl-NL/companies.php @@ -0,0 +1,13 @@ + 'Domein', + 'logo' => 'Logo', + 'manage' => 'Bedrijven Beheren', + 'all' => 'Alle bedrijven', + 'error' => [ + 'delete_active' => 'Fout: Kan niet verwijderen van actieve bedrijf, gelieve, het eerste veranderen!', + ], + +]; diff --git a/resources/lang/nl-NL/currencies.php b/resources/lang/nl-NL/currencies.php new file mode 100644 index 000000000..2b2371216 --- /dev/null +++ b/resources/lang/nl-NL/currencies.php @@ -0,0 +1,9 @@ + 'Code', + 'rate' => 'Tarief', + 'default' => 'Standaard Valuta', + +]; diff --git a/resources/lang/nl-NL/customers.php b/resources/lang/nl-NL/customers.php new file mode 100644 index 000000000..f4ff588a5 --- /dev/null +++ b/resources/lang/nl-NL/customers.php @@ -0,0 +1,11 @@ + 'Inloggen toestaan?', + 'user_created' => 'Gebruiker aangemaakt', + + 'error' => [ + 'email' => 'Deze e-mail is reeds geregistreerd.' + ] +]; diff --git a/resources/lang/nl-NL/dashboard.php b/resources/lang/nl-NL/dashboard.php new file mode 100644 index 000000000..7c86cbe81 --- /dev/null +++ b/resources/lang/nl-NL/dashboard.php @@ -0,0 +1,24 @@ + 'Totaal inkomsten', + 'receivables' => 'Vorderingen', + 'open_invoices' => 'Openstaande facturen', + 'overdue_invoices' => 'Vervallen facturen', + 'total_expenses' => 'Totale uitgaven', + 'payables' => 'Schulden', + 'open_bills' => 'Open rekeningen', + 'overdue_bills' => 'Openstaande fakturen', + 'total_profit' => 'Totale winst', + 'open_profit' => 'Open winst', + 'overdue_profit' => 'Achterstallige winst', + 'cash_flow' => 'Cash-Flow', + 'no_profit_loss' => 'Geen winst-verlies', + 'incomes_by_category' => 'Inkomsten per categorie', + 'expenses_by_category' => 'Kosten per categorie', + 'account_balance' => 'Betalingsbalans', + 'latest_incomes' => 'Nieuwste inkomens', + 'latest_expenses' => 'Nieuwste uitgaven', + +]; diff --git a/resources/lang/nl-NL/demo.php b/resources/lang/nl-NL/demo.php new file mode 100644 index 000000000..e69b7a445 --- /dev/null +++ b/resources/lang/nl-NL/demo.php @@ -0,0 +1,17 @@ + 'Contant', + 'categories_uncat' => 'Ongecategoriseerd', + 'categories_deposit' => 'Storting', + 'categories_sales' => 'Verkoop', + 'currencies_usd' => 'Amerikaanse Dollar', + 'currencies_eur' => 'Euro', + 'currencies_gbp' => 'Britse pond', + 'currencies_try' => 'Turkse Lira', + 'taxes_exempt' => 'Vrijgesteld van btw', + 'taxes_normal' => 'Normale btw', + 'taxes_sales' => 'Verkoop Btw', + +]; diff --git a/resources/lang/nl-NL/footer.php b/resources/lang/nl-NL/footer.php new file mode 100644 index 000000000..0ca4290a1 --- /dev/null +++ b/resources/lang/nl-NL/footer.php @@ -0,0 +1,9 @@ + 'Versie', + 'powered' => 'Powered By Akaunting', + 'software' => 'Gratis boekhoudsoftware', + +]; diff --git a/resources/lang/nl-NL/general.php b/resources/lang/nl-NL/general.php new file mode 100644 index 000000000..40a03a655 --- /dev/null +++ b/resources/lang/nl-NL/general.php @@ -0,0 +1,108 @@ + 'Item | Items', + 'incomes' => 'Betalingen', + 'invoices' => 'Factuur | Facturen', + 'revenues' => 'Inkomsten | Inkomsten', + 'customers' => 'Klant | Klanten', + 'expenses' => 'Kosten | Kosten', + 'bills' => 'Fakturen | Rekeningen', + 'payments' => 'Betaling | Betalingen', + 'vendors' => 'Leverancier | Leveranciers', + 'accounts' => 'Account | Rekeningen', + 'transfers' => 'Transfer | Overdrachten', + 'transactions' => 'Transactie | Transacties', + 'reports' => 'Verslag | Verslagen', + 'settings' => 'Instellen | Instellingen', + 'categories' => 'Categorie | Categorieën', + 'currencies' => 'Valuta | Valuta \'s', + 'tax_rates' => 'Btw-tarief | Belastingtarieven', + 'users' => 'Gebruiker | Gebruikers', + 'roles' => 'Rol | Rollen', + 'permissions' => 'Toestemming | Machtigingen', + 'modules' => 'App | Apps', + 'companies' => 'Bedrijf | Bedrijven', + 'profits' => 'Winst | Winst', + 'taxes' => 'Belasting | Btw', + 'pictures' => 'Foto | Foto \'s', + 'types' => 'Type | Types', + 'payment_methods' => 'Betalingsmethode | Betalingsmethoden', + 'compares' => 'Inkomen vs kosten | Inkomen vs kosten', + 'notes' => 'Opmerking | Notities', + 'totals' => 'Totaal | Totalen', + 'languages' => 'Taalpakketten', + 'updates' => 'Update | Updates', + 'numbers' => 'Nummer | Nummers', + 'statuses' => 'Status | Statussen', + + 'dashboard' => 'Dashboard', + 'banking' => 'Banken', + 'general' => 'Algemeen', + 'no_records' => 'Geen gegevens.', + 'date' => 'Datum', + 'amount' => 'Bedrag', + 'enabled' => 'Actief', + 'disabled' => 'Uitgeschakeld', + 'yes' => 'Ja', + 'no' => 'Nee', + 'na' => 'N. v. t', + 'daily' => 'Dagelijks', + 'monthly' => 'Maandelijks', + 'yearly' => 'Jaarlijks', + 'add' => 'Toevoegen', + 'add_new' => 'Nieuw aanmaken', + 'show' => 'Weergeven', + 'edit' => 'Bewerken', + 'delete' => 'Verwijderen', + 'send' => 'Verzenden', + 'download' => 'Download', + 'delete_confirm' => 'Verwijderen bevestigen: naam: type?', + 'name' => 'Naam', + 'email' => 'Email', + 'tax_number' => 'Btw nummer', + 'phone' => 'Telefoonnummer', + 'address' => 'Adres', + 'website' => 'Website', + 'actions' => 'Acties', + 'description' => 'Beschrijving', + 'manage' => 'Beheren', + 'code' => 'Code', + 'alias' => 'Alias', + 'balance' => 'Saldo', + 'reference' => 'Referentie', + 'attachment' => 'Bijlage', + 'change' => 'Wijzigen', + 'color' => 'Kleur', + 'save' => 'Opslaan', + 'cancel' => 'Annuleren', + 'from' => 'Van', + 'to' => 'Aan', + 'print' => 'Afdrukken', + 'search' => 'Zoeken', + 'search_placeholder' => 'Type om te zoeken..', + 'filter' => 'Filter', + 'help' => 'Hulp', + 'all' => 'Alles', + 'all_type' => 'Alle types', + 'upcoming' => 'Aankomende', + 'created' => 'Aangemaakt', + 'id' => 'ID', + 'more_actions' => 'Meer acties', + 'duplicate' => 'Dupliceren', + + 'title' => [ + 'new' => 'Nieuw: type', + 'edit' => 'Bewerken: type', + ], + 'form' => [ + 'enter' => 'Voer: veld', + 'select' => [ + 'field' => '-Selecteer: veld -', + 'file' => 'Selecteer bestand', + ], + 'no_file_selected' => 'Geen bestand geselecteerd...', + ], + +]; diff --git a/resources/lang/nl-NL/header.php b/resources/lang/nl-NL/header.php new file mode 100644 index 000000000..73e30b3c1 --- /dev/null +++ b/resources/lang/nl-NL/header.php @@ -0,0 +1,15 @@ + 'Taal wijzigen', + 'last_login' => 'Laatste login: tijd', + 'notifications' => [ + 'counter' => '{0} je hebt geen melding |{1} je hebt: kennisgeving | [2, *] Je hebt: kennisgevingen', + 'overdue_invoices' => '{1}: aantal openstaande factuur | [2, *]: aantal achterstallige facturen', + 'upcoming_bills' => '{1}: aantal aankomende faktuur | [2, *]: aantal aankomende facturen', + 'items_stock' => '{1}: aantal item niet op voorraad | [2, *]: aantal items niet op voorraad', + 'view_all' => 'Alles Weergeven' + ], + +]; diff --git a/resources/lang/nl-NL/import.php b/resources/lang/nl-NL/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/nl-NL/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/nl-NL/install.php b/resources/lang/nl-NL/install.php new file mode 100644 index 000000000..873605360 --- /dev/null +++ b/resources/lang/nl-NL/install.php @@ -0,0 +1,45 @@ + 'Volgende', + 'refresh' => 'Vernieuwen', + + 'steps' => [ + 'requirements' => 'Alsjeblieft, aan de volgende eisen voldoen!', + 'language' => 'Stap 1/3: Taalkeuze', + 'database' => 'Stap 2/3: Database Setup', + 'settings' => 'Stap 3/3: Bedrijf en Administrator Details', + ], + + 'language' => [ + 'select' => 'Selecteer taal', + ], + + 'requirements' => [ + 'php_version' => 'PHP 5.6.4 of hoger moet worden gebruikt!', + 'enabled' => ': functie moet worden ingeschakeld!', + 'disabled' => ': functie moet worden uitgeschakeld!', + 'extension' => ': extension uitbreiding moet worden geladen!', + 'directory' => ': folder map moet schrijfbaar zijn!', + ], + + 'database' => [ + 'hostname' => 'Hostnaam', + 'username' => 'Gebruikersnaam', + 'password' => 'Wachtwoord', + 'name' => 'Database', + ], + + 'settings' => [ + 'company_name' => 'Bedrijfsnaam', + 'company_email' => 'Bedrijf E-mail', + 'admin_email' => 'Beheerder E-mail', + 'admin_password' => 'Admin Wachtwoord', + ], + + 'error' => [ + 'connection' => 'Fout: Kan geen verbinding met de database! Controleer of dat de gegevens juist zijn.', + ], + +]; diff --git a/resources/lang/nl-NL/invoices.php b/resources/lang/nl-NL/invoices.php new file mode 100644 index 000000000..1c415a470 --- /dev/null +++ b/resources/lang/nl-NL/invoices.php @@ -0,0 +1,49 @@ + 'Factuurnummer', + 'invoice_date' => 'Factuurdatum', + 'total_price' => 'Totale prijs', + 'due_date' => 'Vervaldatum', + 'order_number' => 'Ordernummer', + 'bill_to' => 'Factuur voor', + + 'quantity' => 'Hoeveelheid', + 'price' => 'Prijs', + 'sub_total' => 'Subtotaal', + 'tax_total' => 'Totaal Btw', + 'total' => 'Totaal', + + 'item_name' => 'Item naam', + + 'payment_due' => 'Te betalen voor', + 'paid' => 'Betaald', + 'histories' => 'Geschiedenis', + 'payments' => 'Betalingen', + 'add_payment' => 'Toevoegen van betaling', + 'mark_paid' => 'Markeer betaald', + 'mark_sent' => 'Markeer als verstuurd', + 'download_pdf' => 'PDF downloaden', + 'send_mail' => 'Verstuur e-mail', + + 'status' => [ + 'draft' => 'Concept', + 'sent' => 'Verzonden', + 'viewed' => 'Bekeken', + 'approved' => 'Goedgekeurd', + 'partial' => 'Gedeeltelijk', + 'paid' => 'Betaald', + ], + + 'messages' => [ + 'email_sent' => 'Factuur e-mail is succesvol verzonden!', + 'marked_sent' => 'Factuur e-mail is succesvol verzonden!', + ], + + 'notification' => [ + 'message' => 'U ontvangt deze e-mail omdat voor: factuur bedrag: klant klant.', + 'button' => 'Betaal nu', + ], + +]; diff --git a/resources/lang/nl-NL/items.php b/resources/lang/nl-NL/items.php new file mode 100644 index 000000000..8092ab88b --- /dev/null +++ b/resources/lang/nl-NL/items.php @@ -0,0 +1,15 @@ + 'Hoeveelheid | Hoeveelheden', + 'sales_price' => 'Verkoopprijs', + 'purchase_price' => 'Aankoopprijs', + 'sku' => 'SKU', + + 'notification' => [ + 'message' => 'U ontvangt deze e-mail omdat : naam draait niet op voorraad.', + 'button' => 'Bekijk nu', + ], + +]; diff --git a/resources/lang/nl-NL/messages.php b/resources/lang/nl-NL/messages.php new file mode 100644 index 000000000..ec8035e40 --- /dev/null +++ b/resources/lang/nl-NL/messages.php @@ -0,0 +1,22 @@ + [ + 'added' => ': type toegevoegd!', + 'updated' => ': type bijgewerkt!', + 'deleted' => ': type verwijderd!', + 'duplicated' => ': type gedupliceerd!', + 'imported' => ':type imported!', + ], + 'error' => [ + 'not_user_company' => 'Fout: U bent niet toegestaan voor het beheer van dit bedrijf!', + 'customer' => 'Fout: U kunt geen gebruiker aanmaken! : dit e-mailadres gebruikt in de naam.', + 'no_file' => 'Error: No file selected!', + ], + 'warning' => [ + 'deleted' => 'Waarschuwing: U bent niet toegestaan te verwijderen : naam omdat er: tekst gerelateerde.', + 'disabled' => 'Waarschuwing: U mag niet uitschakelen : naam omdat er: tekst gerelateerde.', + ], + +]; diff --git a/resources/lang/nl-NL/modules.php b/resources/lang/nl-NL/modules.php new file mode 100644 index 000000000..a3f83d78e --- /dev/null +++ b/resources/lang/nl-NL/modules.php @@ -0,0 +1,43 @@ + 'API-Token', + 'api_token' => 'Token', + 'top_paid' => 'Top betaald', + 'new' => 'Nieuw', + 'top_free' => 'Top gratis', + 'free' => 'GRATIS', + 'install' => 'Installeren', + 'buy_now' => 'Koop Nu', + 'faq' => 'Veelgestelde vragen', + 'changelog' => 'Wijzigingen', + 'installed' => 'Geïnstalleerd', + 'uninstalled' => 'Gedeinstalleerd', + 'token_link' => ' Klik hier om uw API token.', + + 'enabled' => ': module app ingeschakeld', + 'disabled' => ': module app uitgeschakeld', + + 'installation' => [ + 'header' => 'Installatie van de module', + 'start' => ': het installeren van de module.', + 'download' => 'Download: module bestand.', + 'unzip' => 'Uitpakken: module bestanden.', + 'install' => 'Uploaden: module bestanden.', + ], + + 'history' => [ + 'installed' => ': module geïnstalleerd', + 'uninstalled' => ': module verwijderen', + 'updated' => ': module bijgewerkt', + 'enabled' => ': module ingeschakeld', + 'disabled' => ': module uitgeschakeld', + ], + + 'button' => [ + 'uninstall' => 'Verwijderen', + 'disable' => 'Uitgeschakeld', + 'enable' => 'Activeren', + ], +]; diff --git a/resources/lang/nl-NL/pagination.php b/resources/lang/nl-NL/pagination.php new file mode 100644 index 000000000..6f331d4bd --- /dev/null +++ b/resources/lang/nl-NL/pagination.php @@ -0,0 +1,9 @@ + '«Vorige', + 'next' => '«Volgende»;', + 'showing' => 'Tonen: eerst aan: laatste van: totale: type', + +]; diff --git a/resources/lang/nl-NL/passwords.php b/resources/lang/nl-NL/passwords.php new file mode 100644 index 000000000..28c46d3ef --- /dev/null +++ b/resources/lang/nl-NL/passwords.php @@ -0,0 +1,22 @@ + 'Wachtwoorden moeten ten minste zes tekens en overeenkomen met de bevestiging.', + 'reset' => 'Uw wachtwoord is opnieuw ingesteld!', + 'sent' => 'Wij hebben per e-mail uw wachtwoord reset link!', + 'token' => 'Dit wachtwoord reset token is ongeldig.', + 'user' => "Wij kunnen een gebruiker met dat e-mail adres niet vinden.", + +]; diff --git a/resources/lang/nl-NL/reports.php b/resources/lang/nl-NL/reports.php new file mode 100644 index 000000000..5e12533cc --- /dev/null +++ b/resources/lang/nl-NL/reports.php @@ -0,0 +1,11 @@ + [ + 'income' => 'Inkomsten Samenvatting', + 'expense' => 'Kosten overzicht', + 'income_expense' => 'Inkomen vs kosten', + ], + +]; diff --git a/resources/lang/nl-NL/settings.php b/resources/lang/nl-NL/settings.php new file mode 100644 index 000000000..a4190efd3 --- /dev/null +++ b/resources/lang/nl-NL/settings.php @@ -0,0 +1,85 @@ + [ + 'name' => 'Naam', + 'email' => 'Email', + 'phone' => 'Telefoonnummer', + 'address' => 'Adres', + 'logo' => 'Logo', + ], + 'localisation' => [ + 'tab' => 'Lokalisatie', + 'date' => [ + 'format' => 'Datum formaat', + 'separator' => 'Datumscheidingsteken', + 'dash' => 'Streepje (-)', + 'dot' => 'Punt (.)', + 'comma' => 'Komma \',\'', + 'slash' => 'Slash (/)', + 'space' => 'Ruimte()', + ], + 'timezone' => 'Tijdzone', + ], + 'invoice' => [ + 'tab' => 'Factuur', + 'prefix' => 'Nummer voorvoegsel', + 'digit' => 'Aantal cijfers', + 'next' => 'Volgende nummer', + 'logo' => 'Logo', + ], + 'default' => [ + 'tab' => 'Standaardwaarden', + 'account' => 'Standaard account', + 'currency' => 'Standaard Valuta', + 'tax' => 'Standaard Btw-tarief', + 'payment' => 'Standaard betalingsmethode', + 'language' => 'Standaard Taal', + ], + 'email' => [ + 'protocol' => 'Protocol', + 'php' => 'PHP mail', + 'smtp' => [ + 'name' => 'SMTP', + 'host' => 'SMTP host', + 'port' => 'SMTP-poort', + 'username' => 'SMTP gebruikersnaam', + 'password' => 'SMTP wachtwoord', + 'encryption' => 'SMTP beveiliging', + 'none' => 'Geen', + ], + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'Sendmail pad', + 'log' => 'Log E-mails', + ], + 'scheduling' => [ + 'tab' => 'Planning', + 'send_invoice' => 'Factuur herinnering sturen', + 'invoice_days' => 'Stuur na vervaldatum dagen', + 'send_bill' => 'Factuur herinnering sturen', + 'bill_days' => 'Stuur voor vervaldatum dagen', + 'cron_command' => 'Cron opdracht', + 'schedule_time' => 'Uren duurtijd', + ], + 'appearance' => [ + 'tab' => 'Uiterlijk', + 'theme' => 'Thema', + 'light' => 'Licht', + 'dark' => 'Donker', + 'list_limit' => 'Records Per pagina', + 'use_gravatar' => 'Gebruik Gravatar', + ], + 'system' => [ + 'tab' => 'Systeem', + 'session' => [ + 'lifetime' => 'Sessie levensduur (minuten)', + 'handler' => 'Sessie Beheerder', + 'file' => 'Bestand', + 'database' => 'Database', + ], + 'file_size' => 'Maximale bestandsgrootte (MB)', + 'file_types' => 'Toegestane bestandstypes', + ], + +]; diff --git a/resources/lang/nl-NL/taxes.php b/resources/lang/nl-NL/taxes.php new file mode 100644 index 000000000..79f2734c6 --- /dev/null +++ b/resources/lang/nl-NL/taxes.php @@ -0,0 +1,8 @@ + 'Tarief', + 'rate_percent' => 'Percentage (%)', + +]; diff --git a/resources/lang/nl-NL/transfers.php b/resources/lang/nl-NL/transfers.php new file mode 100644 index 000000000..2259d14bf --- /dev/null +++ b/resources/lang/nl-NL/transfers.php @@ -0,0 +1,8 @@ + 'Van Account', + 'to_account' => 'Naar Account', + +]; diff --git a/resources/lang/nl-NL/updates.php b/resources/lang/nl-NL/updates.php new file mode 100644 index 000000000..46fdb2853 --- /dev/null +++ b/resources/lang/nl-NL/updates.php @@ -0,0 +1,15 @@ + 'Geïnstalleerde versie', + 'latest_version' => 'Nieuwste versie', + 'update' => 'Bijwerken van Akaunting aan: versie versie', + 'changelog' => 'Wijzigingen', + 'check' => 'Controleren', + 'new_core' => 'Er is een bijgewerkte versie van Akaunting beschikbaar.', + 'latest_core' => 'Gefeliciteerd! U hebt de nieuwste versie van Akaunting. Toekomstige beveiligingsupdates zal automatisch worden toegepast.', + 'success' => 'Update-proces is voltooid.', + 'error' => 'Update-proces is mislukt, alstublieft, probeer het opnieuw.', + +]; diff --git a/resources/lang/nl-NL/validation.php b/resources/lang/nl-NL/validation.php new file mode 100644 index 000000000..b0f572bf5 --- /dev/null +++ b/resources/lang/nl-NL/validation.php @@ -0,0 +1,119 @@ + ':attribute moet geaccepteerd worden.', + 'active_url' => ':attribute is geen geldige URL.', + 'after' => ':attribute moet een datum zijn later dan :date.', + 'after_or_equal' => ':attribute moet een datum zijn later dan :date.', + '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.', + 'before' => ':attribute moet een datum zijn voor :date.', + 'before_or_equal' => ':attribute moet een datum zijn voor :date.', + 'between' => [ + 'numeric' => 'De: kenmerk moet tussen: min en: max.', + 'file' => 'De: kenmerk moet tussen: min en: max kilobytes.', + 'string' => 'De: kenmerk moet tussen: min en: max tekens.', + 'array' => 'De: kenmerk moeten tussen: min en: max items.', + ], + 'boolean' => 'De: kenmerkveld moet waar of onwaar.', + 'confirmed' => 'De: kenmerk bevestiging komt niet overeen.', + 'date' => 'De: kenmerk is niet een geldige datum.', + 'date_format' => ':attribute komt niet overeen met het volgende formaat :format.', + 'different' => 'De: kenmerk en: andere mag niet hetzelfde zijn.', + 'digits' => 'De: kenmerk moet: cijfers cijfers.', + 'digits_between' => ':attribute moet tussen de :min en :max aantal karakters lang zijn.', + 'dimensions' => 'De: kenmerk heeft ongeldige afbeelding afmetingen.', + 'distinct' => 'De: kenmerkveld is een dubbele waarde.', + 'email' => 'De: kenmerk moet een geldig e-mailadres.', + 'exists' => 'Het geselecteerde kenmerk :attribute is ongeldig.', + 'file' => 'De: kenmerk moet een bestand.', + 'filled' => 'De: kenmerkveld moet een waarde hebben.', + 'image' => 'De: kenmerk moet een afbeelding zijn.', + 'in' => 'De geselecteerde: kenmerk is ongeldig.', + 'in_array' => 'De: kenmerkveld bestaat niet: andere.', + 'integer' => 'Het :attribute moet uniek zijn.', + 'ip' => 'De: kenmerk moet een geldig IP-adres.', + 'json' => 'De: kenmerk moet een geldige JSON-tekenreeks.', + 'max' => [ + 'numeric' => 'De: kenmerk kan niet groter zijn dan: max.', + 'file' => 'De: kenmerk kan niet groter zijn dan: max kilobytes.', + 'string' => 'De: kenmerk kan niet groter zijn dan: max tekens.', + 'array' => 'De: kenmerk wellicht niet meer dan: max items.', + ], + 'mimes' => 'De: kenmerk moet een bestand van het type:: waarden.', + 'mimetypes' => 'De: kenmerk moet een bestand van het type:: waarden.', + 'min' => [ + 'numeric' => 'De: kenmerk moet ten minste: min.', + 'file' => 'De: kenmerk moet ten minste: min kilobytes.', + 'string' => 'De: kenmerk moet ten minste: min-tekens.', + 'array' => 'De: kenmerk moet ten minste beschikken over: min punten.', + ], + 'not_in' => 'De geselecteerde: kenmerk is ongeldig.', + 'numeric' => 'De: kenmerk moet een getal zijn.', + 'present' => 'De: kenmerkveld aanwezig moet zijn.', + 'regex' => 'De: indeling van het kenmerk is ongeldig.', + 'required' => 'De: kenmerkveld is verplicht.', + 'required_if' => 'De: kenmerkveld is vereist wanneer: andere is: waarde.', + 'required_unless' => ':attribute musí být vyplněno dokud :other je v :values.', + 'required_with' => 'De: kenmerkveld is vereist wanneer: waarden aanwezig is.', + 'required_with_all' => 'De: kenmerkveld is vereist wanneer: waarden aanwezig is.', + 'required_without' => 'De: kenmerkveld is vereist wanneer: waarden niet aanwezig is.', + 'required_without_all' => 'De: kenmerkveld is vereist wanneer geen van: waarden aanwezig zijn.', + 'same' => 'De: kenmerk en: andere moet overeenkomen.', + 'size' => [ + 'numeric' => 'De: kenmerk moet: grootte.', + 'file' => 'De: kenmerk moet: grootte van kilobytes.', + 'string' => 'De: kenmerk moet: het formaat van tekens.', + 'array' => 'De: kenmerk moet bevatten: het formaat van objecten.', + ], + 'string' => 'De: kenmerk moet een tekenreeks zijn.', + 'timezone' => 'De: kenmerk moet een geldige zone.', + 'unique' => 'Het veld :attribute is reeds in gebruik.', + 'uploaded' => 'De: kenmerk mislukt om te uploaden.', + 'url' => 'De: indeling van het kenmerk is ongeldig.', + + /* + |-------------------------------------------------------------------------- + | 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' => 'aangepast-bericht', + ], + ], + + /* + |-------------------------------------------------------------------------- + | 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/tr-TR/customer.php b/resources/lang/tr-TR/customer.php deleted file mode 100644 index 4f8d95132..000000000 --- a/resources/lang/tr-TR/customer.php +++ /dev/null @@ -1,5 +0,0 @@ - 'Tüm Müşteriler', -]; diff --git a/resources/lang/tr-TR/customers.php b/resources/lang/tr-TR/customers.php new file mode 100644 index 000000000..412c45aaf --- /dev/null +++ b/resources/lang/tr-TR/customers.php @@ -0,0 +1,11 @@ + 'Giriş yapabilsin?', + 'user_created' => 'Kullanıcı oluşturuldu', + + 'error' => [ + 'email' => 'Bu email adresi kullanılmaktadır.' + ] +]; diff --git a/resources/lang/tr-TR/general.php b/resources/lang/tr-TR/general.php index 51bfad5cb..8797ca67e 100644 --- a/resources/lang/tr-TR/general.php +++ b/resources/lang/tr-TR/general.php @@ -83,8 +83,6 @@ return [ 'search' => 'Ara', 'search_placeholder' => 'Aranacak kelime..', 'filter' => 'Filtrele', - 'create_user' => 'Kullanıcı Oluştur', - 'created_user' => 'Oluşturulan Kullanıcı', 'help' => 'Yardım', 'all' => 'Hepsi', 'all_type' => 'Tüm :type', @@ -92,6 +90,7 @@ return [ 'created' => 'Oluşturuldu', 'id' => 'ID', 'more_actions' => 'Diğer İşlemler', + 'duplicate' => 'Çoğalt', 'title' => [ 'new' => 'Yeni :type', diff --git a/resources/lang/tr-TR/header.php b/resources/lang/tr-TR/header.php index 9071d4943..421bc3314 100644 --- a/resources/lang/tr-TR/header.php +++ b/resources/lang/tr-TR/header.php @@ -8,6 +8,7 @@ return [ 'counter' => '{0} Bildirim yok|{1} :count bildiriminiz var|[2,*] :count bildiriminiz var', 'overdue_invoices' => '{1} :count Gecikmiş Fatura Mevcut |[2,*] :count Gecikmiş Fatura Mevcut', 'upcoming_bills' => '{1} :count Yaklaşan Fatura Mevcut|[2,*] :count Yaklaşan Fatura Mevcut', + 'items_stock' => '{1} :count ürün stok dışı|[2,*] :count ürün stok dışı', 'view_all' => 'Tümünü Görüntüle' ], diff --git a/resources/lang/tr-TR/import.php b/resources/lang/tr-TR/import.php new file mode 100644 index 000000000..7ead1b506 --- /dev/null +++ b/resources/lang/tr-TR/import.php @@ -0,0 +1,9 @@ + 'İçe Aktar', + 'title' => ':type İçe Aktar', + 'message' => 'İzin verilen dosya türleri: CSV, XLS. Lütfen, örnek dosyayı indirin.', + +]; diff --git a/resources/lang/tr-TR/invoices.php b/resources/lang/tr-TR/invoices.php index 76c8411b2..85091a10c 100644 --- a/resources/lang/tr-TR/invoices.php +++ b/resources/lang/tr-TR/invoices.php @@ -37,7 +37,13 @@ return [ ], 'messages' => [ + 'email_sent' => 'Fatura emaili başarı ile gönderildi!', 'marked_sent' => 'Fatura başarıyla gönderilmiş olarak işaretlendi!', ], + 'notification' => [ + 'message' => ':amount tutarında faturayı :customer ödemediği için bu iletiyi almaktasınız.', + 'button' => 'Şimdi Öde', + ], + ]; diff --git a/resources/lang/tr-TR/items.php b/resources/lang/tr-TR/items.php index e3a24216c..b733230ec 100644 --- a/resources/lang/tr-TR/items.php +++ b/resources/lang/tr-TR/items.php @@ -7,4 +7,9 @@ return [ 'purchase_price' => 'Alış Fiyatı', 'sku' => 'Ürün Kodu', + 'notification' => [ + 'message' => ':name ürünün stoğu tükendiği için bu iletiyi almaktasınız.', + 'button' => 'Şimdi Görüntüle', + ], + ]; diff --git a/resources/lang/tr-TR/messages.php b/resources/lang/tr-TR/messages.php index afad16081..bb04a2de8 100644 --- a/resources/lang/tr-TR/messages.php +++ b/resources/lang/tr-TR/messages.php @@ -6,9 +6,13 @@ return [ 'added' => ':type eklendi!', 'updated' => ':type güncellendi!', 'deleted' => ':type silindi!', + 'duplicated' => ':type çoğaltıldı!', + 'imported' => ':type içe aktarıldı!', ], 'error' => [ 'not_user_company' => 'Hata: Bu şirketi yönetme yetkiniz yok!', + 'customer' => 'Hata: :name bu email adresini kullanmaktadır.', + 'no_file' => 'Hata: Dosya seçilmedi!', ], 'warning' => [ 'deleted' => 'Uyarı: :name silinemez çünkü :text ile ilişkilidir.', diff --git a/resources/lang/vi-VN/accounts.php b/resources/lang/vi-VN/accounts.php new file mode 100644 index 000000000..d30c3fe89 --- /dev/null +++ b/resources/lang/vi-VN/accounts.php @@ -0,0 +1,14 @@ + 'Tên tài khoản', + 'number' => 'Số', + 'opening_balance' => 'Số dư đầu năm', + 'current_balance' => 'Số dư hiện tại', + 'bank_name' => 'Tên ngân hàng', + 'bank_phone' => 'Số điện thoại ngân hàng', + 'bank_address' => 'Địa chỉ ngân hàng', + 'default_account' => 'Tài khoản mặc định', + +]; diff --git a/resources/lang/vi-VN/auth.php b/resources/lang/vi-VN/auth.php new file mode 100644 index 000000000..18ea00145 --- /dev/null +++ b/resources/lang/vi-VN/auth.php @@ -0,0 +1,30 @@ + 'Hồ sơ', + 'logout' => 'Đăng xuất', + 'login' => 'Đăng nhập', + 'login_to' => 'Đăng nhập ngay', + 'remember_me' => 'Ghi nhớ tôi', + 'forgot_password' => 'Quên mật khẩu', + 'reset_password' => 'Khôi phục mật khẩu', + 'enter_email' => 'Nhập địa chỉ email của bạn', + 'current_email' => 'Email hiện tại của bạn', + 'reset' => 'Đặt lại', + 'never' => 'không bao giờ', + 'password' => [ + 'current' => 'Mật khẩu', + 'current_confirm' => 'Xác nhân mật khẩu', + 'new' => 'Mật khẩu mới', + 'new_confirm' => 'Xác nhận mật khẩu mới', + ], + 'error' => [ + 'self_delete' => 'Lỗi: Bạn không thể xoá chính bạn!' + ], + + 'failed' => 'Thông tin tài khoản không tìm thấy trong hệ thống.', + 'disabled' => 'Tài khoản của bạn bị khoá. Vui lòng liên hệ với quản trị viên.', + 'throttle' => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.', + +]; diff --git a/resources/lang/vi-VN/bills.php b/resources/lang/vi-VN/bills.php new file mode 100644 index 000000000..9e3f3b11a --- /dev/null +++ b/resources/lang/vi-VN/bills.php @@ -0,0 +1,41 @@ + 'Số hoá đơn', + 'bill_date' => 'Ngày trên hoá đơn', + 'total_price' => 'Tổng giá', + 'due_date' => 'Ngày hết hạn', + 'order_number' => 'Số đơn hàng', + 'bill_from' => 'Hoá đơn từ', + + 'quantity' => 'Số lượng', + 'price' => 'Đơn giá', + 'sub_total' => 'Tổng phụ', + 'tax_total' => 'Tổng thuế', + 'total' => 'Tổng số', + + 'item_name' => 'Tên mục | Tên mục', + + 'payment_due' => 'Hạn thanh toán', + 'amount_due' => 'Số tiền phải trả', + 'paid' => 'Đã thanh toán', + 'histories' => 'Lịch sử thanh toán', + 'payments' => 'Thanh toán', + 'add_payment' => 'Thêm thanh toán', + 'mark_received' => 'Đã nhận được', + 'download_pdf' => 'Tải PDF', + 'send_mail' => 'Gửi email', + + 'status' => [ + 'draft' => 'Bản nháp', + 'received' => 'Đã nhận', + 'partial' => 'Một phần', + 'paid' => 'Đã thanh toán', + ], + + 'messages' => [ + 'received' => 'Hoá đợn được đánh dấu là đã nhận thanh toán!', + ], + +]; diff --git a/resources/lang/vi-VN/companies.php b/resources/lang/vi-VN/companies.php new file mode 100644 index 000000000..3bc0883c8 --- /dev/null +++ b/resources/lang/vi-VN/companies.php @@ -0,0 +1,13 @@ + 'Tên miền', + 'logo' => 'Logo', + 'manage' => 'Quản lý công ty', + 'all' => 'Tất cả công ty', + 'error' => [ + 'delete_active' => 'Lỗi: Không có thể xóa các công ty đang hoạt động, xin vui lòng, thay đổi trạng thái nó trước tiên!', + ], + +]; diff --git a/resources/lang/vi-VN/currencies.php b/resources/lang/vi-VN/currencies.php new file mode 100644 index 000000000..8e22f7f26 --- /dev/null +++ b/resources/lang/vi-VN/currencies.php @@ -0,0 +1,9 @@ + 'Mã', + 'rate' => 'Tỷ giá', + 'default' => 'Tiền tệ mặc định', + +]; diff --git a/resources/lang/vi-VN/customers.php b/resources/lang/vi-VN/customers.php new file mode 100644 index 000000000..ebbee889f --- /dev/null +++ b/resources/lang/vi-VN/customers.php @@ -0,0 +1,11 @@ + 'Cho phép đăng nhập?', + 'user_created' => 'Người dùng đã được tạo', + + 'error' => [ + 'email' => 'Email đã được đăng ký.' + ] +]; diff --git a/resources/lang/vi-VN/dashboard.php b/resources/lang/vi-VN/dashboard.php new file mode 100644 index 000000000..dd9035675 --- /dev/null +++ b/resources/lang/vi-VN/dashboard.php @@ -0,0 +1,24 @@ + 'Tổng thu nhập', + 'receivables' => 'Khoản phải thu', + 'open_invoices' => 'Hoá đơn phải thu', + 'overdue_invoices' => 'Hoá đơn quá hạn', + 'total_expenses' => 'Tổng chi phí', + 'payables' => 'Khoản phải trả', + 'open_bills' => 'Hoá đơn phải thu', + 'overdue_bills' => 'Hoá đơn quá hạn', + 'total_profit' => 'Tổng lợi nhuận', + 'open_profit' => 'Lợi nhuận', + 'overdue_profit' => 'Lợi nhuận quá hạn', + 'cash_flow' => 'Dòng tiền', + 'no_profit_loss' => 'Không thất thoát lợi nhuận', + 'incomes_by_category' => 'Doanh thu theo danh mục', + 'expenses_by_category' => 'Chi phí theo danh mục', + 'account_balance' => 'Số dư tài khoản', + 'latest_incomes' => 'Doanh thu gần đây', + 'latest_expenses' => 'Chi phí gần đây', + +]; diff --git a/resources/lang/vi-VN/demo.php b/resources/lang/vi-VN/demo.php new file mode 100644 index 000000000..da282fb9c --- /dev/null +++ b/resources/lang/vi-VN/demo.php @@ -0,0 +1,17 @@ + 'Tiền mặt', + 'categories_uncat' => 'Chưa phân loại', + 'categories_deposit' => 'Tiền gửi', + 'categories_sales' => 'Bán hàng', + 'currencies_usd' => 'Đô-la Mỹ', + 'currencies_eur' => 'Euro', + 'currencies_gbp' => 'Bảng Anh', + 'currencies_try' => 'Lia Thổ Nhĩ Kỳ', + 'taxes_exempt' => 'Miễn thuế', + 'taxes_normal' => 'Thuế', + 'taxes_sales' => 'Thuế bán hàng', + +]; diff --git a/resources/lang/vi-VN/footer.php b/resources/lang/vi-VN/footer.php new file mode 100644 index 000000000..57bdd9ffb --- /dev/null +++ b/resources/lang/vi-VN/footer.php @@ -0,0 +1,9 @@ + 'Phiên bản', + 'powered' => 'Powered By Akaunting', + '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 new file mode 100644 index 000000000..91b88f1f9 --- /dev/null +++ b/resources/lang/vi-VN/general.php @@ -0,0 +1,108 @@ + 'Mục | Mục', + 'incomes' => 'Thu nhập | Thu nhập', + 'invoices' => 'Hoá đơn | Hoá đơn', + 'revenues' => 'Doanh thu | Doanh thu', + 'customers' => 'Khách hàng | Khách hàng', + 'expenses' => 'Chi phí | Chi phí', + 'bills' => 'Hoá đơn | Hoá đơn', + 'payments' => 'Thanh toán | Thanh toán', + 'vendors' => 'Nhà cung cấp | Nhà cung cấp', + 'accounts' => 'Tài khoản | Tài khoản', + 'transfers' => 'Chuyển khoản | Chuyển khoản', + 'transactions' => 'Giao dịch | Giao dịch', + 'reports' => 'Báo cáo | Báo cáo', + 'settings' => 'Thiết lập | Thiết lập', + 'categories' => 'Danh mục | Danh mục', + 'currencies' => 'Tiền tệ | Tiền tệ', + 'tax_rates' => 'Thuế suất | Thuế suất', + 'users' => 'Người dùng | Người dùng', + 'roles' => 'Vai trò | Vai trò', + 'permissions' => 'Phân quyền | Phân quyền', + 'modules' => 'Ứng dụng | Ứng dụng', + 'companies' => 'Công ty | Công ty', + 'profits' => 'Lợi nhuận | Lợi nhuận', + 'taxes' => 'Thuế | Thuế', + 'pictures' => 'Hình ảnh | Hình ảnh', + 'types' => 'Loại | Loại', + 'payment_methods' => 'Phương thức thanh toán | Phương thức thanh toán', + 'compares' => 'Thu nhập vs chi phí | Thu nhập vs chi phí', + 'notes' => 'Ghi chú | Ghi chú', + 'totals' => 'Tổng số | Tổng số', + 'languages' => 'Ngôn ngữ | Ngôn ngữ', + 'updates' => 'Cập Nhật | Cập Nhật', + 'numbers' => 'Số | Số', + 'statuses' => 'Tình trạng | Trạng thái', + + 'dashboard' => 'Bảng điều khiển', + 'banking' => 'Ngân hàng', + 'general' => 'Tổng quan', + 'no_records' => 'Không có mục nào.', + 'date' => 'Ngày', + 'amount' => 'Số tiền', + 'enabled' => 'Đã kích hoạt', + 'disabled' => 'Bị vô hiệu hóa', + 'yes' => 'Có', + 'no' => 'Không', + 'na' => 'N/A', + 'daily' => 'Hàng ngày', + 'monthly' => 'Hàng tháng', + 'yearly' => 'Hàng Năm', + 'add' => 'Thêm', + 'add_new' => 'Thêm mới', + 'show' => 'Hiển thị', + 'edit' => 'Sửa', + 'delete' => 'Xóa', + 'send' => 'Gửi', + 'download' => 'Tải về', + 'delete_confirm' => 'Bạn có chắc muốn xoá :name :type?', + 'name' => 'Tên', + 'email' => 'Email', + 'tax_number' => 'Mã số thuế', + 'phone' => 'Điện thoại', + 'address' => 'Địa chỉ', + 'website' => 'Website', + 'actions' => 'Tác vụ', + 'description' => 'Mô tả', + 'manage' => 'Quản lý', + 'code' => 'Mã', + 'alias' => 'Đại diện', + 'balance' => 'Số dư', + 'reference' => 'Tham chiếu', + 'attachment' => 'Đính kèm', + 'change' => 'Thay đổi', + 'color' => 'Màu', + 'save' => 'Lưu', + 'cancel' => 'Huỷ', + 'from' => 'Từ', + 'to' => 'Đến', + 'print' => 'In', + 'search' => 'Tìm kiếm', + 'search_placeholder' => 'Nhập từ cần tìm..', + 'filter' => 'Bộ lọc', + 'help' => 'Trợ giúp', + 'all' => 'Tất cả', + 'all_type' => 'Tất cả :type', + 'upcoming' => 'Sắp tới', + 'created' => 'Đã tạo', + 'id' => 'ID', + 'more_actions' => 'Thao tác khác', + 'duplicate' => 'Bản sao', + + 'title' => [ + 'new' => 'Thêm loại :type', + 'edit' => 'Chỉnh sửa loại :type', + ], + 'form' => [ + 'enter' => 'Nhập trường :field', + 'select' => [ + 'field' => '-Chọn trường :field -', + 'file' => 'Chọn tập tin', + ], + 'no_file_selected' => 'Không có tập tin nào được chọn...', + ], + +]; diff --git a/resources/lang/vi-VN/header.php b/resources/lang/vi-VN/header.php new file mode 100644 index 000000000..18419e67d --- /dev/null +++ b/resources/lang/vi-VN/header.php @@ -0,0 +1,15 @@ + 'Chọn ngôn ngữ', + 'last_login' => 'Đăng nhập lần cuối :time', + 'notifications' => [ + 'counter' => '{0} Bạn không có thông báo nào |{1} Bạn có :count thông báo | [2, *] Bạn có :count thông báo', + 'overdue_invoices' => '{1} :count hóa đơn quá hạn | [2, *] :count hóa đơn quá hạn', + 'upcoming_bills' => '{1} :count hoá đơn chờ thanh toán | [2, *] :count hoá đơn chờ thanh toán', + 'items_stock' => '{1} :count mục hết hàng | [2, *] :count mục hết hàng', + 'view_all' => 'Xem tất cả' + ], + +]; diff --git a/resources/lang/vi-VN/import.php b/resources/lang/vi-VN/import.php new file mode 100644 index 000000000..fe5acbbc0 --- /dev/null +++ b/resources/lang/vi-VN/import.php @@ -0,0 +1,9 @@ + 'Import', + 'title' => 'Import :type', + 'message' => 'Allowed file types: CSV, XLS. Please, download the sample file.', + +]; diff --git a/resources/lang/vi-VN/install.php b/resources/lang/vi-VN/install.php new file mode 100644 index 000000000..980ddc353 --- /dev/null +++ b/resources/lang/vi-VN/install.php @@ -0,0 +1,45 @@ + 'Tiếp theo', + 'refresh' => 'Làm mới', + + 'steps' => [ + 'requirements' => 'Xin vui lòng, đáp ứng các yêu cầu sau đây!', + '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ị', + ], + + 'language' => [ + 'select' => 'Chọn ngôn ngữ', + ], + + 'requirements' => [ + 'php_version' => 'Hệ thống yêu cầu cài đặt phiên bản PHP từ 5.6.4 trở lên!', + '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!', + 'directory' => 'Thư mục :directory cần được cấp quyền writable!', + ], + + 'database' => [ + 'hostname' => 'Hostname', + 'username' => 'Username', + 'password' => 'Mật Khẩu', + 'name' => 'Cơ sở dữ liệu', + ], + + 'settings' => [ + 'company_name' => 'Tên công ty', + 'company_email' => 'Email công ty', + 'admin_email' => 'Email người quản trị', + 'admin_password' => 'Mật khẩu người quản trị', + ], + + 'error' => [ + 'connection' => 'Lỗi: Không thể kết nối cơ sở dữ liệu! Vui lòng kiểm tra lại thông tin chi tiết.', + ], + +]; diff --git a/resources/lang/vi-VN/invoices.php b/resources/lang/vi-VN/invoices.php new file mode 100644 index 000000000..7b007dfae --- /dev/null +++ b/resources/lang/vi-VN/invoices.php @@ -0,0 +1,49 @@ + 'Số hoá đơn', + 'invoice_date' => 'Ngày hóa đơn', + 'total_price' => 'Tổng giá', + 'due_date' => 'Ngày hết hạn', + 'order_number' => 'Số đơn hàng', + 'bill_to' => 'Hoá đơn tới', + + 'quantity' => 'Số lượng', + 'price' => 'Đơn giá', + 'sub_total' => 'Tổng phụ', + 'tax_total' => 'Tổng thuế', + 'total' => 'Tổng số', + + 'item_name' => 'Tên mục | Tên mục', + + 'payment_due' => 'Hạn thanh toán', + 'paid' => 'Đã thanh toán', + 'histories' => 'Lịch sử thanh toán', + 'payments' => 'Thanh toán', + 'add_payment' => 'Thêm thanh toán', + 'mark_paid' => 'Đánh dấu đã trả tiền', + 'mark_sent' => 'Đánh dấu đã gửi', + 'download_pdf' => 'Tải PDF', + 'send_mail' => 'Gửi Email', + + 'status' => [ + 'draft' => 'Bản nháp', + 'sent' => 'Đã gửi', + 'viewed' => 'Đã xem', + 'approved' => 'Đã duyệt', + 'partial' => 'Một phần', + 'paid' => 'Đã thanh toán', + ], + + 'messages' => [ + '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!', + ], + + 'notification' => [ + 'message' => 'Bạn nhận được email này bởi vì bạn sắp có :amount hóa đơn cần thanh toán cho khách hàng :customer.', + 'button' => 'Trả ngay', + ], + +]; diff --git a/resources/lang/vi-VN/items.php b/resources/lang/vi-VN/items.php new file mode 100644 index 000000000..742700816 --- /dev/null +++ b/resources/lang/vi-VN/items.php @@ -0,0 +1,15 @@ + 'Số lượng | Số lượng', + 'sales_price' => 'Giá bán', + 'purchase_price' => 'Giá Mua', + 'sku' => 'SKU', + + 'notification' => [ + 'message' => 'Bạn nhận được email này bởi vì :name đang hết hàng.', + 'button' => 'Xem ngay', + ], + +]; diff --git a/resources/lang/vi-VN/messages.php b/resources/lang/vi-VN/messages.php new file mode 100644 index 000000000..573b6a27f --- /dev/null +++ b/resources/lang/vi-VN/messages.php @@ -0,0 +1,22 @@ + [ + 'added' => ':type đã được thêm!', + 'updated' => ':type đã được cập nhật!', + 'deleted' => ':type đã được xoá!', + 'duplicated' => ':type bị trùng!', + 'imported' => ':type imported!', + ], + 'error' => [ + 'not_user_company' => 'Lỗi: Bạn không được phép để quản lý công ty này!', + 'customer' => 'Lỗi: Bạn có thể không tạo người dùng! :name đã sử dụng địa chỉ email này.', + 'no_file' => 'Error: No file selected!', + ], + 'warning' => [ + 'deleted' => 'Chú ý: Bạn không được phép xoá :name này bởi vì nó có :text liên quan.', + 'disabled' => 'Chú ý: Bạn không được phép vô hiệu hoá :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 new file mode 100644 index 000000000..bb56dec49 --- /dev/null +++ b/resources/lang/vi-VN/modules.php @@ -0,0 +1,43 @@ + 'API Token', + 'api_token' => 'Token', + 'top_paid' => 'Top trả tiền', + 'new' => 'Mới', + 'top_free' => 'Top miễn phí', + 'free' => 'MIỄN PHÍ', + 'install' => 'Cài đặt', + 'buy_now' => 'Mua ngay', + 'faq' => 'CÂU HỎI THƯỜNG GẶP', + 'changelog' => 'Nhật ký thay đổi', + 'installed' => 'Đã cài đặt', + 'uninstalled' => 'Đã gỡ cài đặt', + 'token_link' => ' Click vào đây để lấy API token của bạn.', + + 'enabled' => ':module app được kích hoạt', + 'disabled' => ':module app được vô hiệu', + + 'installation' => [ + 'header' => 'Cài đặt Module', + 'start' => ':module đang cài đặt.', + 'download' => 'Đang tải tập tin :module.', + 'unzip' => 'Đang giải nén tập tin :module.', + 'install' => 'Đang tải lên tập tin :module.', + ], + + 'history' => [ + 'installed' => ':module đã được cài đặt', + 'uninstalled' => ':module gỡ cài đặt', + 'updated' => ':module được cập nhật', + 'enabled' => ':module được kích hoạt', + 'disabled' => ':module được vô hiệu', + ], + + 'button' => [ + 'uninstall' => 'Gỡ bỏ cài đặt', + 'disable' => 'Vô hiệu', + 'enable' => 'Kích hoạt', + ], +]; diff --git a/resources/lang/vi-VN/pagination.php b/resources/lang/vi-VN/pagination.php new file mode 100644 index 000000000..fc7c3ab0a --- /dev/null +++ b/resources/lang/vi-VN/pagination.php @@ -0,0 +1,9 @@ + '« Trang sau', + 'next' => 'Trang trước »', + 'showing' => 'Hiển thị :đầu đến :cuối của :tất cả :loại', + +]; diff --git a/resources/lang/vi-VN/passwords.php b/resources/lang/vi-VN/passwords.php new file mode 100644 index 000000000..aa568c767 --- /dev/null +++ b/resources/lang/vi-VN/passwords.php @@ -0,0 +1,22 @@ + 'Mật khẩu phải gồm 6 ký tự và khớp với phần xác nhận.', + 'reset' => 'Mật khẩu mới đã được cập nhật!', + 'sent' => 'Hướng dẫn cấp lại mật khẩu đã được gửi!', + 'token' => 'Mã khôi phục mật khẩu không hợp lệ.', + 'user' => "Không tìm thấy người dùng với địa chỉ email này.", + +]; diff --git a/resources/lang/vi-VN/reports.php b/resources/lang/vi-VN/reports.php new file mode 100644 index 000000000..c8858b0d2 --- /dev/null +++ b/resources/lang/vi-VN/reports.php @@ -0,0 +1,11 @@ + [ + 'income' => 'Tổng hợp thu nhập', + 'expense' => 'Tổng hợp chi phí', + 'income_expense' => 'Thu nhập vs Chi phí', + ], + +]; diff --git a/resources/lang/vi-VN/settings.php b/resources/lang/vi-VN/settings.php new file mode 100644 index 000000000..81df2c056 --- /dev/null +++ b/resources/lang/vi-VN/settings.php @@ -0,0 +1,85 @@ + [ + 'name' => 'Tên', + 'email' => 'Email', + 'phone' => 'Điện thoại', + 'address' => 'Địa chỉ', + 'logo' => 'Logo', + ], + 'localisation' => [ + 'tab' => 'Địa phương hóa', + 'date' => [ + 'format' => 'Định dạng Ngày tháng', + 'separator' => 'Dấu cách ngày tháng', + 'dash' => 'Gạch (-)', + 'dot' => 'Chấm (.)', + 'comma' => 'Phẩy (,)', + 'slash' => 'Gạch chéo (/)', + 'space' => 'Khoảng trắng ( )', + ], + 'timezone' => 'Múi giờ', + ], + 'invoice' => [ + 'tab' => 'Hoá đơn', + 'prefix' => 'Số tiền số', + 'digit' => 'Số chữ số', + 'next' => 'Số tiếp theo', + 'logo' => 'Logo', + ], + 'default' => [ + 'tab' => 'Mặc định', + 'account' => 'Tài khoản mặc định', + 'currency' => 'Tiền tệ mặc định', + 'tax' => 'Thuế mặc định', + 'payment' => 'Phương thức thanh toán mặc định', + 'language' => 'Ngôn ngữ mặc định', + ], + 'email' => [ + 'protocol' => 'Giao thức', + 'php' => 'PHP Mail', + 'smtp' => [ + 'name' => 'SMTP', + 'host' => 'SMTP Host', + 'port' => 'Cổng SMTP', + 'username' => 'Tài khoản SMTP', + 'password' => 'Mật khẩu SMTP', + 'encryption' => 'SMTP Security', + 'none' => 'Không có', + ], + 'sendmail' => 'Sendmail', + 'sendmail_path' => 'Đường dẫn sendmail', + 'log' => 'Ghi nhận email', + ], + 'scheduling' => [ + 'tab' => 'Lập lịch', + 'send_invoice' => 'Gửi lời nhắc nhở hóa đơn', + 'invoice_days' => 'Gửi sau số ngày quá hạn', + 'send_bill' => 'Gửi nhắc thanh toán hoá đơn', + 'bill_days' => 'Gửi trước số ngày quá hạn', + 'cron_command' => 'Lệnh Cronjob', + 'schedule_time' => 'Giờ chạy', + ], + 'appearance' => [ + 'tab' => 'Hiển thị', + 'theme' => 'Giao diện', + 'light' => 'Sáng', + 'dark' => 'Tối', + 'list_limit' => 'Kết quả mỗi trang', + 'use_gravatar' => 'Sử dụng Gravatar', + ], + 'system' => [ + 'tab' => 'Hệ thống', + 'session' => [ + 'lifetime' => 'Giới hạn phiên làm việc (phút)', + 'handler' => 'Quản lý phiên làm việc', + 'file' => 'Tập tin', + 'database' => 'Cơ sở dữ liệu', + ], + 'file_size' => 'Kích thước tối đa tập tin (MB)', + 'file_types' => 'Loại tập tin cho phép', + ], + +]; diff --git a/resources/lang/vi-VN/taxes.php b/resources/lang/vi-VN/taxes.php new file mode 100644 index 000000000..0e918d207 --- /dev/null +++ b/resources/lang/vi-VN/taxes.php @@ -0,0 +1,8 @@ + 'Tỷ suất', + 'rate_percent' => 'Tỷ suất (%)', + +]; diff --git a/resources/lang/vi-VN/transfers.php b/resources/lang/vi-VN/transfers.php new file mode 100644 index 000000000..8cdd7a119 --- /dev/null +++ b/resources/lang/vi-VN/transfers.php @@ -0,0 +1,8 @@ + 'Từ Tài khoản', + 'to_account' => 'Tới Tài khoản', + +]; diff --git a/resources/lang/vi-VN/updates.php b/resources/lang/vi-VN/updates.php new file mode 100644 index 000000000..aabb31ad8 --- /dev/null +++ b/resources/lang/vi-VN/updates.php @@ -0,0 +1,15 @@ + 'Phiên bản cài đặt', + 'latest_version' => 'Phiên bản mới nhất', + 'update' => 'Cập nhật phần mềm Akaunting đến :version', + 'changelog' => 'Nhật ký thay đổi', + 'check' => 'Kiểm tra', + 'new_core' => 'Có phiên bản mới của Akaunting.', + 'latest_core' => 'Chúc mừng! Bạn vừa nâng cấp phiên bản mới nhất của Akaunting. Các bản cập nhật liên quan tới bảo mật sẽ được cập nhật 1 cách tự động.', + 'success' => 'Cập nhật hoàn tất.', + 'error' => 'Cập nhật thất bại. Vui lòng thử lại. ', + +]; diff --git a/resources/lang/vi-VN/validation.php b/resources/lang/vi-VN/validation.php new file mode 100644 index 000000000..4357ecdc6 --- /dev/null +++ b/resources/lang/vi-VN/validation.php @@ -0,0 +1,119 @@ + 'Trường :attribute phải được chấp nhận.', + 'active_url' => 'Trường :attribute không phải là một URL hợp lệ.', + 'after' => 'Trường :attribute phải là một ngày sau ngày :date.', + 'after_or_equal' => 'Trường :attribute phải là thời gian bắt đầu sau :date.', + 'alpha' => 'Trường :attribute chỉ có thể chứa các chữ cái.', + 'alpha_dash' => 'Trường :attribute chỉ có thể chứa chữ cái, số và dấu gạch ngang.', + 'alpha_num' => 'Trường :attribute chỉ có thể chứa chữ cái và số.', + 'array' => 'Trường :attribute phải là dạng mảng.', + 'before' => 'Trường :attribute phải là một ngày trước ngày :date.', + 'before_or_equal' => 'Trường :attribute phải là thời gian bắt đầu trước :date.', + 'between' => [ + 'numeric' => 'Trường :attribute phải nằm trong khoảng :min - :max.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải từ :min - :max kB.', + 'string' => 'Trường :attribute phải từ :min - :max ký tự.', + 'array' => 'Trường :attribute phải có từ :min - :max phần tử.', + ], + 'boolean' => 'Trường :attribute phải là true hoặc false.', + 'confirmed' => 'Giá trị xác nhận trong trường :attribute không khớp.', + 'date' => 'Trường :attribute không phải là định dạng của ngày-tháng.', + 'date_format' => 'Trường :attribute không giống với định dạng :format.', + 'different' => 'Trường :attribute và :other phải khác nhau.', + 'digits' => 'Độ dài của trường :attribute phải gồm :digits chữ số.', + 'digits_between' => 'Độ dài của trường :attribute phải nằm trong khoảng :min and :max chữ số.', + 'dimensions' => 'Trường :attribute có kích thước không hợp lệ.', + 'distinct' => 'Trường :attribute có giá trị trùng lặp.', + 'email' => 'Trường :attribute phải là một địa chỉ email hợp lệ.', + 'exists' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'file' => 'Trường :attribute phải là một tệp tin.', + 'filled' => 'Trường :attribute không được bỏ trống.', + 'image' => 'Trường :attribute phải là định dạng hình ảnh.', + 'in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'in_array' => 'Trường :attribute phải thuộc tập cho phép: :other.', + 'integer' => 'Trường :attribute phải là một số nguyên.', + 'ip' => 'Trường :attribute phải là một địa chỉ IP.', + 'json' => 'Trường :attribute phải là một chuỗi JSON.', + 'max' => [ + 'numeric' => 'Trường :attribute không được lớn hơn :max.', + 'file' => 'Dung lượng tập tin trong trường :attribute không được lớn hơn :max kB.', + 'string' => 'Trường :attribute không được lớn hơn :max ký tự.', + 'array' => 'Trường :attribute không được lớn hơn :max phần tử.', + ], + 'mimes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', + 'mimetypes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', + 'min' => [ + 'numeric' => 'Trường :attribute phải tối thiểu là :min.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải tối thiểu :min kB.', + 'string' => 'Trường :attribute phải có tối thiểu :min ký tự.', + 'array' => 'Trường :attribute phải có tối thiểu :min phần tử.', + ], + 'not_in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'numeric' => 'Trường :attribute phải là một số.', + 'present' => 'Trường :attribute phải được cung cấp.', + 'regex' => 'Định dạng trường :attribute không hợp lệ.', + 'required' => 'Trường :attribute không được bỏ trống.', + 'required_if' => 'Trường :attribute không được bỏ trống khi trường :other là :value.', + 'required_unless' => 'Trường :attribute không được bỏ trống trừ khi :other là :values.', + 'required_with' => 'Trường :attribute không được bỏ trống khi một trong :values có giá trị.', + 'required_with_all' => 'Trường :attribute không được bỏ trống khi tất cả :values có giá trị.', + 'required_without' => 'Trường :attribute không được bỏ trống khi một trong :values không có giá trị.', + 'required_without_all' => 'Trường :attribute không được bỏ trống khi tất cả :values không có giá trị.', + 'same' => 'Trường :attribute và :other phải giống nhau.', + 'size' => [ + 'numeric' => 'Trường :attribute phải bằng :size.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải bằng :size kB.', + 'string' => 'Trường :attribute phải chứa :size ký tự.', + 'array' => 'Trường :attribute phải chứa :size phần tử.', + ], + 'string' => 'Trường :attribute phải là một chuỗi ký tự.', + 'timezone' => 'Trường :attribute phải là một múi giờ hợp lệ.', + 'unique' => 'Trường :attribute đã có trong cơ sở dữ liệu.', + 'uploaded' => 'Trường :attribute tải lên thất bại.', + 'url' => 'Trường :attribute không giống với định dạng mộ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' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | 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/views/common/import/create.blade.php b/resources/views/common/import/create.blade.php new file mode 100644 index 000000000..07cb70c93 --- /dev/null +++ b/resources/views/common/import/create.blade.php @@ -0,0 +1,54 @@ +@extends('layouts.admin') + +@section('title', trans('import.title', ['type' => trans_choice('general.' . $type, 2)])) + +@section('content') +
+ {!! Form::open(['url' => $path . '/import', 'files' => true, 'role' => 'form']) !!} + +
+
+
+ {!! trans('import.message', ['link' => url('public/files/import/' . $type . '.csv')]) !!} +
+
+
+ {!! Form::label('import', trans('general.form.select.file'), ['class' => 'control-label']) !!} + {!! Form::file('import', null, ['class' => 'form-control']) !!} + {!! $errors->first('import', '

:message

') !!} +
+
+ + + + + {!! Form::close() !!} +
+@endsection + +@push('js') + +@endpush + +@push('css') + +@endpush + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/customers/invoices/show.blade.php b/resources/views/customers/invoices/show.blade.php index c4a9cf3be..f693346b7 100644 --- a/resources/views/customers/invoices/show.blade.php +++ b/resources/views/customers/invoices/show.blade.php @@ -142,17 +142,20 @@