mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 19:51:09 -04:00
Compare commits
50 Commits
3.0.0
...
Geoffry304
| Author | SHA1 | Date | |
|---|---|---|---|
| a0a46d306e | |||
| 8f0af3dcd6 | |||
| 53860378b9 | |||
| e8e44c5dc8 | |||
| ac33164342 | |||
| 5c7c0d84ea | |||
| 7ca725ac37 | |||
| 510a4b3dbb | |||
| 25114009e3 | |||
| 79c16d74ce | |||
| 742e1e445a | |||
| 386f96d60e | |||
| 82d85af672 | |||
| 4d1b267688 | |||
| bc99ad63a6 | |||
| 4bb44f8c93 | |||
| c72265ed50 | |||
| b8958c9eb6 | |||
| e33e314cb7 | |||
| 84cebee9da | |||
| 34d3cf7ae8 | |||
| 93d0da836a | |||
| fd51276948 | |||
| d6274854ba | |||
| ea4bd1a31d | |||
| 286e047963 | |||
| be16f48f3d | |||
| ebea1e0813 | |||
| cc8d08f829 | |||
| aacffc22eb | |||
| d71ca4ffb9 | |||
| 186004f7f8 | |||
| c2eb22d666 | |||
| af189b15b6 | |||
| 1c19be85c3 | |||
| 4bb4362d23 | |||
| f6f66b3ae6 | |||
| b4ccecbcf1 | |||
| 92f1f196bb | |||
| ee14070a7b | |||
| 8ce7e14a02 | |||
| 3401ca049e | |||
| 5dcc7b9efd | |||
| 3baeb72892 | |||
| 406d098172 | |||
| 84f8d281a7 | |||
| fb49332de9 | |||
| f68e86e4cf | |||
| 0990ce4678 | |||
| 353c2479f1 |
12
.eslintrc
12
.eslintrc
@ -2,9 +2,17 @@
|
||||
"root": true,
|
||||
"extends": [
|
||||
"plugin:vue/recommended",
|
||||
"standard"
|
||||
"eslint:recommended",
|
||||
"prettier/vue",
|
||||
"plugin:prettier/recommended"
|
||||
],
|
||||
"rules": {
|
||||
"vue/max-attributes-per-line" : 3
|
||||
"vue/max-attributes-per-line": ["error", {
|
||||
"singleline": 10,
|
||||
"multiline": {
|
||||
"max": 1,
|
||||
"allowFirstLine": false
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
5
.prettierrc.json
Normal file
5
.prettierrc.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"tabWidth": 2
|
||||
}
|
||||
@ -23,9 +23,11 @@ FROM php:7.3.12-fpm-alpine
|
||||
# Use the default production configuration
|
||||
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
||||
|
||||
RUN apk add --no-cache libpng-dev libxml2-dev oniguruma-dev libzip-dev && \
|
||||
RUN apk add --no-cache libpng-dev libxml2-dev oniguruma-dev libzip-dev gnu-libiconv && \
|
||||
docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml zip
|
||||
|
||||
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
|
||||
|
||||
# Set container's working dir
|
||||
WORKDIR /app
|
||||
|
||||
@ -49,4 +51,3 @@ RUN touch database/database.sqlite && \
|
||||
EXPOSE 9000
|
||||
|
||||
CMD ["php-fpm", "--nodaemonize"]
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
||||
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
|
||||
use Crater\ExpenseCategory;
|
||||
use Crater\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
@ -16,6 +17,7 @@ class Expense extends Model implements HasMedia
|
||||
'expense_category_id',
|
||||
'amount',
|
||||
'company_id',
|
||||
'user_id',
|
||||
'expense_date',
|
||||
'notes',
|
||||
'attachment_receipt'
|
||||
@ -32,6 +34,11 @@ class Expense extends Model implements HasMedia
|
||||
return $this->belongsTo(ExpenseCategory::class, 'expense_category_id');
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class);
|
||||
}
|
||||
|
||||
public function getFormattedExpenseDateAttribute($value)
|
||||
{
|
||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
|
||||
@ -81,6 +88,11 @@ class Expense extends Model implements HasMedia
|
||||
return $query->where('expenses.expense_category_id', $categoryId);
|
||||
}
|
||||
|
||||
public function scopeWhereUser($query, $user_id)
|
||||
{
|
||||
return $query->where('expenses.user_id', $user_id);
|
||||
}
|
||||
|
||||
public function scopeApplyFilters($query, array $filters)
|
||||
{
|
||||
$filters = collect($filters);
|
||||
@ -89,6 +101,10 @@ class Expense extends Model implements HasMedia
|
||||
$query->whereCategory($filters->get('expense_category_id'));
|
||||
}
|
||||
|
||||
if ($filters->get('user_id')) {
|
||||
$query->whereUser($filters->get('user_id'));
|
||||
}
|
||||
|
||||
if ($filters->get('from_date') && $filters->get('to_date')) {
|
||||
$start = Carbon::createFromFormat('d/m/Y', $filters->get('from_date'));
|
||||
$end = Carbon::createFromFormat('d/m/Y', $filters->get('to_date'));
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Crater\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
@ -122,17 +123,17 @@ class CompanyController extends Controller
|
||||
|
||||
$time_zones = TimeZones::get_list();
|
||||
$fiscal_years = [
|
||||
['key' => 'january-december' , 'value' => '1-12'],
|
||||
['key' => 'february-january' , 'value' => '2-1'],
|
||||
['key' => 'march-february' , 'value' => '3-2'],
|
||||
['key' => 'april-march' , 'value' => '4-3'],
|
||||
['key' => 'may-april' , 'value' => '5-4'],
|
||||
['key' => 'june-may' , 'value' => '6-5'],
|
||||
['key' => 'july-june' , 'value' => '7-6'],
|
||||
['key' => 'august-july' , 'value' => '8-7'],
|
||||
['key' => 'september-august' , 'value' => '9-8'],
|
||||
['key' => 'january-december', 'value' => '1-12'],
|
||||
['key' => 'february-january', 'value' => '2-1'],
|
||||
['key' => 'march-february', 'value' => '3-2'],
|
||||
['key' => 'april-march', 'value' => '4-3'],
|
||||
['key' => 'may-april', 'value' => '5-4'],
|
||||
['key' => 'june-may', 'value' => '6-5'],
|
||||
['key' => 'july-june', 'value' => '7-6'],
|
||||
['key' => 'august-july', 'value' => '8-7'],
|
||||
['key' => 'september-august', 'value' => '9-8'],
|
||||
['key' => 'october-september', 'value' => '10-9'],
|
||||
['key' => 'november-october' , 'value' => '11-10'],
|
||||
['key' => 'november-october', 'value' => '11-10'],
|
||||
['key' => 'december-november', 'value' => '12-11'],
|
||||
];
|
||||
|
||||
@ -143,13 +144,17 @@ class CompanyController extends Controller
|
||||
$currency = CompanySetting::getSetting('currency', $request->header('company'));
|
||||
$fiscal_year = CompanySetting::getSetting('fiscal_year', $request->header('company'));
|
||||
|
||||
$languages = [
|
||||
["code"=>"en", "name" => "English"],
|
||||
["code"=>"fr", "name" => "French"],
|
||||
["code"=>"es", "name" => "Spanish"],
|
||||
["code"=>"ar", "name" => "العربية"],
|
||||
["code"=>"de", "name" => "German"],
|
||||
["code"=>"pt_BR", "name" => "Brazilian Portuguese"],
|
||||
$languages = [ // alphabetical order
|
||||
["code" => "pt_BR", "name" => "Brazilian Portuguese"],
|
||||
["code" => "en", "name" => "English"],
|
||||
["code" => "fr", "name" => "French"],
|
||||
["code" => "de", "name" => "German"],
|
||||
["code" => "it", "name" => "Italian"],
|
||||
["code" => "es", "name" => "Spanish"],
|
||||
["code" => "ar", "name" => "العربية"],
|
||||
["code" => "de", "name" => "German"],
|
||||
["code" => "pt_BR", "name" => "Brazilian Portuguese"],
|
||||
["code" => "nl", "name" => "Dutch"]
|
||||
];
|
||||
|
||||
return response()->json([
|
||||
@ -194,7 +199,7 @@ class CompanyController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function getCustomizeSetting (Request $request)
|
||||
public function getCustomizeSetting(Request $request)
|
||||
{
|
||||
$invoice_prefix = CompanySetting::getSetting('invoice_prefix', $request->header('company'));
|
||||
$invoice_auto_generate = CompanySetting::getSetting('invoice_auto_generate', $request->header('company'));
|
||||
@ -215,7 +220,7 @@ class CompanyController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function updateCustomizeSetting (Request $request)
|
||||
public function updateCustomizeSetting(Request $request)
|
||||
{
|
||||
$sets = [];
|
||||
|
||||
@ -320,10 +325,10 @@ class CompanyController extends Controller
|
||||
{
|
||||
$data = json_decode($request->company_logo);
|
||||
|
||||
if($data) {
|
||||
if ($data) {
|
||||
$company = Company::find($request->header('company'));
|
||||
|
||||
if($company) {
|
||||
if ($company) {
|
||||
$company->clearMediaCollection('logo');
|
||||
|
||||
$company->addMediaFromBase64($data->data)
|
||||
@ -347,10 +352,10 @@ class CompanyController extends Controller
|
||||
{
|
||||
$data = json_decode($request->admin_avatar);
|
||||
|
||||
if($data) {
|
||||
if ($data) {
|
||||
$user = auth()->user();
|
||||
|
||||
if($user) {
|
||||
if ($user) {
|
||||
$user->clearMediaCollection('admin_avatar');
|
||||
|
||||
$user->addMediaFromBase64($data->data)
|
||||
|
||||
@ -175,12 +175,6 @@ class EstimatesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if (!config('mail.from.name')) {
|
||||
return response()->json([
|
||||
'error' => 'from_email_does_not_exist'
|
||||
]);
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new EstimatePdf($data));
|
||||
}
|
||||
|
||||
@ -343,12 +337,6 @@ class EstimatesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if (!config('mail.from.name')) {
|
||||
return response()->json([
|
||||
'error' => 'from_email_does_not_exist'
|
||||
]);
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new EstimatePdf($data));
|
||||
|
||||
if ($estimate->status == Estimate::STATUS_DRAFT) {
|
||||
|
||||
@ -24,9 +24,11 @@ class ExpensesController extends Controller
|
||||
$limit = $request->has('limit') ? $request->limit : 10;
|
||||
|
||||
$expenses = Expense::with('category')
|
||||
->leftJoin('users', 'users.id', '=', 'expenses.user_id')
|
||||
->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id')
|
||||
->applyFilters($request->only([
|
||||
'expense_category_id',
|
||||
'user_id',
|
||||
'search',
|
||||
'from_date',
|
||||
'to_date',
|
||||
@ -34,11 +36,16 @@ class ExpensesController extends Controller
|
||||
'orderBy'
|
||||
]))
|
||||
->whereCompany($request->header('company'))
|
||||
->select('expenses.*', 'expense_categories.name')
|
||||
->select('expenses.*', 'expense_categories.name', 'users.name as user_name')
|
||||
->paginate($limit);
|
||||
|
||||
$customers = User::customer()
|
||||
->whereCompany($request->header('company'))
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'expenses' => $expenses,
|
||||
'customers' => $customers,
|
||||
'currency' => Currency::findOrFail(
|
||||
CompanySetting::getSetting('currency', $request->header('company'))
|
||||
)
|
||||
@ -53,9 +60,13 @@ class ExpensesController extends Controller
|
||||
public function create(Request $request)
|
||||
{
|
||||
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
||||
$customers = User::customer()
|
||||
->whereCompany($request->header('company'))
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'categories' => $categories
|
||||
'categories' => $categories,
|
||||
'customers' => $customers
|
||||
]);
|
||||
}
|
||||
|
||||
@ -72,6 +83,7 @@ class ExpensesController extends Controller
|
||||
$expense = new Expense();
|
||||
$expense->notes = $request->notes;
|
||||
$expense->expense_category_id = $request->expense_category_id;
|
||||
$expense->user_id = $request->user_id;
|
||||
$expense->amount = $request->amount;
|
||||
$expense->company_id = $request->header('company');
|
||||
$expense->expense_date = $expense_date;
|
||||
@ -107,7 +119,9 @@ class ExpensesController extends Controller
|
||||
public function edit(Request $request,$id)
|
||||
{
|
||||
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
||||
$customers = User::where('role', 'customer')->whereCompany($request->header('company'))->get();
|
||||
$customers = User::customer()
|
||||
->whereCompany($request->header('company'))
|
||||
->get();
|
||||
$expense = Expense::with('category')->where('id', $id)->first();
|
||||
|
||||
return response()->json([
|
||||
@ -132,6 +146,7 @@ class ExpensesController extends Controller
|
||||
$expense->notes = $request->notes;
|
||||
$expense->expense_category_id = $request->expense_category_id;
|
||||
$expense->amount = $request->amount;
|
||||
$expense->user_id = $request->user_id;
|
||||
$expense->expense_date = $expense_date;
|
||||
$expense->save();
|
||||
|
||||
@ -205,7 +220,7 @@ class ExpensesController extends Controller
|
||||
* Retrive details of an expense receipt from storage.
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
*/
|
||||
public function showReceipt($id)
|
||||
{
|
||||
$expense = Expense::find($id);
|
||||
@ -239,7 +254,7 @@ class ExpensesController extends Controller
|
||||
* @param int $id
|
||||
* @param strig $hash
|
||||
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse | \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
*/
|
||||
public function downloadReceipt($id, $hash)
|
||||
{
|
||||
$company = Company::where('unique_hash', $hash)->first();
|
||||
|
||||
@ -12,7 +12,7 @@ use Crater\Invoice;
|
||||
use Crater\InvoiceItem;
|
||||
use Carbon\Carbon;
|
||||
use Crater\Item;
|
||||
use Crater\Mail\invoicePdf;
|
||||
use Crater\Mail\InvoicePdf;
|
||||
use function MongoDB\BSON\toJSON;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Crater\User;
|
||||
@ -175,13 +175,7 @@ class InvoicesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if (!config('mail.from.name')) {
|
||||
return response()->json([
|
||||
'error' => 'from_email_does_not_exist'
|
||||
]);
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new invoicePdf($data));
|
||||
\Mail::to($email)->send(new InvoicePdf($data));
|
||||
}
|
||||
|
||||
$invoice = Invoice::with(['items', 'user', 'invoiceTemplate', 'taxes'])->find($invoice->id);
|
||||
@ -410,13 +404,7 @@ class InvoicesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if (!config('mail.from.name')) {
|
||||
return response()->json([
|
||||
'error' => 'from_email_does_not_exist'
|
||||
]);
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new invoicePdf($data));
|
||||
\Mail::to($email)->send(new InvoicePdf($data));
|
||||
|
||||
if ($invoice->status == Invoice::STATUS_DRAFT) {
|
||||
$invoice->status = Invoice::STATUS_SENT;
|
||||
|
||||
@ -50,7 +50,8 @@ class OnboardingController extends Controller
|
||||
["code"=>"es", "name" => "Spanish"],
|
||||
["code"=>"ar", "name" => "العربية"],
|
||||
["code"=>"de", "name" => "German"],
|
||||
["code"=>"pt-br", "name" => "Portuguese (Brazilian)"]
|
||||
["code"=>"pt-br", "name" => "Portuguese (Brazilian)"],
|
||||
["code"=>"it", "name" => "Italian"],
|
||||
];
|
||||
$fiscal_years = [
|
||||
['key' => 'january-december' , 'value' => '1-12'],
|
||||
|
||||
@ -305,10 +305,6 @@ class PaymentController extends Controller
|
||||
$data['user'] = User::find($userId)->toArray();
|
||||
$data['company'] = Company::find($payment->company_id);
|
||||
$email = $data['user']['email'];
|
||||
$notificationEmail = CompanySetting::getSetting(
|
||||
'notification_email',
|
||||
$request->header('company')
|
||||
);
|
||||
|
||||
if (!$email) {
|
||||
return response()->json([
|
||||
@ -316,13 +312,7 @@ class PaymentController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if (!$notificationEmail) {
|
||||
return response()->json([
|
||||
'error' => 'notification_email_does_not_exist'
|
||||
]);
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new PaymentPdf($data, $notificationEmail));
|
||||
\Mail::to($email)->send(new PaymentPdf($data));
|
||||
|
||||
return response()->json([
|
||||
'success' => true
|
||||
|
||||
51
app/Listeners/Updates/v3/Version301.php
Normal file
51
app/Listeners/Updates/v3/Version301.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Crater\Listeners\Updates\v3;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Crater\Events\UpdateFinished;
|
||||
use Crater\Listeners\Updates\Listener;
|
||||
use Crater\Setting;
|
||||
use Crater\Currency;
|
||||
|
||||
class Version301 extends Listener
|
||||
{
|
||||
const VERSION = '3.0.1';
|
||||
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(UpdateFinished $event)
|
||||
{
|
||||
if ($this->isListenerFired($event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Currency::create([
|
||||
'name' => 'Kyrgyzstani som',
|
||||
'code' => 'KGS',
|
||||
'symbol' => 'С̲ ',
|
||||
'precision' => '2',
|
||||
'thousand_separator' => '.',
|
||||
'decimal_separator' => ','
|
||||
]);
|
||||
|
||||
// Update Crater app version
|
||||
Setting::setSetting('version', static::VERSION);
|
||||
}
|
||||
}
|
||||
36
app/Listeners/Updates/v3/Version310.php
Normal file
36
app/Listeners/Updates/v3/Version310.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Crater\Listeners\Updates\v3;
|
||||
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Crater\Listeners\Updates\Listener;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Crater\Events\UpdateFinished;
|
||||
|
||||
class Version310
|
||||
{
|
||||
/**
|
||||
* Create the event listener.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the event.
|
||||
*
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function handle(UpdateFinished $event)
|
||||
{
|
||||
\Schema::table('expenses', function (Blueprint $table) {
|
||||
$table->integer('user_id')->unsigned()->nullable();
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -29,6 +29,9 @@ class EstimatePdf extends Mailable
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->markdown('emails.send.estimate', ['data', $this->data]);
|
||||
$company = $this->data['company']['name'];
|
||||
|
||||
return $this->subject("Estimate from $company")
|
||||
->markdown('emails.send.estimate', ['data', $this->data]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,6 +31,8 @@ class EstimateViewed extends Mailable
|
||||
public function build()
|
||||
{
|
||||
$email = $this->data['user']['email'];
|
||||
return $this->from($email)->markdown('emails.viewed.estimate', ['data', $this->data]);
|
||||
$name = $this->data['user']['name'];
|
||||
return $this->from($email, $name)
|
||||
->markdown('emails.viewed.estimate', ['data', $this->data]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
||||
class invoicePdf extends Mailable
|
||||
class InvoicePdf extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
@ -29,6 +29,9 @@ class invoicePdf extends Mailable
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->markdown('emails.send.invoice', ['data', $this->data]);
|
||||
$company = $this->data['company']['name'];
|
||||
|
||||
return $this->subject("Invoice from $company")
|
||||
->markdown('emails.send.invoice', ['data', $this->data]);
|
||||
}
|
||||
}
|
||||
@ -31,6 +31,8 @@ class InvoiceViewed extends Mailable
|
||||
public function build()
|
||||
{
|
||||
$email = $this->data['user']['email'];
|
||||
return $this->from($email)->markdown('emails.viewed.invoice', ['data', $this->data]);
|
||||
$name = $this->data['user']['name'];
|
||||
return $this->from($email, $name)
|
||||
->markdown('emails.viewed.invoice', ['data', $this->data]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,17 +13,14 @@ class PaymentPdf extends Mailable
|
||||
|
||||
public $data = [];
|
||||
|
||||
public $notificationEmail = '';
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($data, $notificationEmail)
|
||||
public function __construct($data)
|
||||
{
|
||||
$this->data = $data;
|
||||
$this->notificationEmail = $notificationEmail;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -33,6 +30,9 @@ class PaymentPdf extends Mailable
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->from($this->notificationEmail)->markdown('emails.send.payment', ['data', $this->data]);
|
||||
$company = $this->data['company']['name'];
|
||||
|
||||
return $this->subject("Payment from $company")
|
||||
->markdown('emails.send.payment', ['data', $this->data]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,8 @@ use Crater\Listeners\Updates\v2\Version201;
|
||||
use Crater\Listeners\Updates\v2\Version202;
|
||||
use Crater\Listeners\Updates\v2\Version210;
|
||||
use Crater\Listeners\Updates\v3\Version300;
|
||||
use Crater\Listeners\Updates\v3\Version301;
|
||||
use Crater\Listeners\Updates\v3\Version310;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
@ -27,6 +29,8 @@ class EventServiceProvider extends ServiceProvider
|
||||
Version202::class,
|
||||
Version210::class,
|
||||
Version300::class,
|
||||
Version301::class,
|
||||
Version310::class,
|
||||
],
|
||||
Registered::class => [
|
||||
SendEmailVerificationNotification::class,
|
||||
|
||||
@ -9,6 +9,7 @@ use carbon\carbon;
|
||||
use Crater\MemberLoan;
|
||||
use Crater\Address;
|
||||
use Crater\Payment;
|
||||
use Crater\Expense;
|
||||
use Crater\Company;
|
||||
use Crater\Notifications\MailResetPasswordNotification;
|
||||
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
||||
@ -105,6 +106,11 @@ class User extends Authenticatable implements HasMedia
|
||||
return $this->hasMany(Address::class);
|
||||
}
|
||||
|
||||
public function expenses()
|
||||
{
|
||||
return $this->hasMany(Expense::class);
|
||||
}
|
||||
|
||||
public function billingAddress()
|
||||
{
|
||||
return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "laravel/laravel",
|
||||
"description": "The Laravel Framework.",
|
||||
"name": "bytefury/crater",
|
||||
"description": "Free & Open Source Invoice App for Freelancers & Small Businesses. https://craterapp.com",
|
||||
"keywords": [
|
||||
"framework",
|
||||
"laravel"
|
||||
@ -53,11 +53,20 @@
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"scripts": {
|
||||
"initial-setup": [
|
||||
"test -f .env || (cp .env.example .env; php artisan key:generate 2>/dev/null; exit 0)"
|
||||
],
|
||||
"pre-install-cmd": [
|
||||
"@initial-setup"
|
||||
],
|
||||
"pre-update-cmd": [
|
||||
"@initial-setup"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
"@initial-setup"
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"php artisan key:generate --ansi"
|
||||
"@initial-setup"
|
||||
],
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
|
||||
@ -23,6 +23,8 @@ class CreateExpensesTable extends Migration
|
||||
$table->foreign('expense_category_id')->references('id')->on('expense_categories')->onDelete('cascade');
|
||||
$table->integer('company_id')->unsigned()->nullable();
|
||||
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
||||
$table->integer('user_id')->unsigned()->nullable();
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@ -532,6 +532,14 @@ class CurrenciesTableSeeder extends Seeder
|
||||
'thousand_separator' => '.',
|
||||
'decimal_separator' => ','
|
||||
],
|
||||
[
|
||||
'name' => 'Kyrgyzstani som',
|
||||
'code' => 'KGS',
|
||||
'symbol' => 'С̲ ',
|
||||
'precision' => '2',
|
||||
'thousand_separator' => '.',
|
||||
'decimal_separator' => ','
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
|
||||
5516
package-lock.json
generated
5516
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
23
package.json
23
package.json
@ -8,19 +8,16 @@
|
||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-eslint": "^8.2.3",
|
||||
"browser-sync": "^2.26.7",
|
||||
"browser-sync-webpack-plugin": "^2.0.1",
|
||||
"babel-eslint": "^8.2.6",
|
||||
"cross-env": "^5.1",
|
||||
"css-loader": "^0.28.8",
|
||||
"eslint": "^4.14.0",
|
||||
"eslint-config-standard": "^11.0.0-beta.0",
|
||||
"eslint-plugin-import": "^2.11.0",
|
||||
"eslint-plugin-node": "^5.2.1",
|
||||
"eslint-plugin-promise": "^3.6.0",
|
||||
"eslint-plugin-standard": "^3.0.1",
|
||||
"eslint-plugin-vue": "^4.0.1",
|
||||
"eslint": "^4.19.1",
|
||||
"eslint-config-prettier": "^6.10.1",
|
||||
"eslint-loader": "^3.0.3",
|
||||
"eslint-plugin-prettier": "^3.1.2",
|
||||
"eslint-plugin-vue": "^4.7.1",
|
||||
"laravel-mix": "^5.0.0",
|
||||
"prettier": "^2.0.2",
|
||||
"resolve-url-loader": "3.1.0",
|
||||
"sass": "^1.22.9",
|
||||
"sass-loader": "7.*",
|
||||
@ -35,18 +32,12 @@
|
||||
"axios": "^0.19",
|
||||
"bootstrap": "^4.1.0",
|
||||
"chart.js": "^2.7.3",
|
||||
"cross-env": "^5.1.4",
|
||||
"easy-pie-chart": "^2.1.7",
|
||||
"fs": "0.0.1-security",
|
||||
"guid": "0.0.12",
|
||||
"lodash": "^4.17.13",
|
||||
"moment": "^2.18.1",
|
||||
"npm": "^6.4.1",
|
||||
"popper.js": "^1.12.9",
|
||||
"sweet-modal-vue": "^2.0.0",
|
||||
"sweetalert": "^2.1.2",
|
||||
"toastr": "^2.1.4",
|
||||
"upgrade": "^1.1.0",
|
||||
"v-money": "^0.8.1",
|
||||
"v-tooltip": "^2.0.2",
|
||||
"vue": "^2.5.17",
|
||||
|
||||
2
public/assets/css/crater.css
vendored
2
public/assets/css/crater.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
||||
{
|
||||
"/assets/js/app.js": "/assets/js/app.js?id=397e57d36ef22a2e14fc",
|
||||
"/assets/css/crater.css": "/assets/css/crater.css?id=616996a79c1df69d18de"
|
||||
"/assets/js/app.js": "/assets/js/app.js?id=08d4f6357dbe7738effa",
|
||||
"/assets/css/crater.css": "/assets/css/crater.css?id=a00ceebbb86dd82a024b"
|
||||
}
|
||||
|
||||
22
resources/assets/js/bootstrap.js
vendored
22
resources/assets/js/bootstrap.js
vendored
@ -88,17 +88,27 @@ window.axios.interceptors.request.use(function (config) {
|
||||
|
||||
global.axios.interceptors.response.use(undefined, function (err) {
|
||||
// Do something with request error
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!err.response) {
|
||||
window.toastr['error']('Network error: Please check your internet connection or wait until servers are back online')
|
||||
console.log('Network error: Please check your internet connection.')
|
||||
} else {
|
||||
console.log(err.response)
|
||||
if (err.response.data.error === 'invalid_credentials') {
|
||||
window.toastr['error']('Invalid Credentials')
|
||||
}
|
||||
if (err.response.data && (err.response.statusText === 'Unauthorized' || err.response.data === ' Unauthorized.')) {
|
||||
// Unauthorized and log out
|
||||
window.toastr['error']((err.response.data.message) ? err.response.data.message : 'Unauthorized')
|
||||
store.dispatch('auth/logout', true)
|
||||
} else if (err.response.data.errors) {
|
||||
// Show a notification per error
|
||||
const errors = JSON.parse(JSON.stringify(err.response.data.errors))
|
||||
for (const i in errors) {
|
||||
window.toastr['error'](errors[i])
|
||||
}
|
||||
} else {
|
||||
throw err
|
||||
// Unknown error
|
||||
window.toastr['error']((err.response.data.message) ? err.response.data.message : 'Unknown error occurred')
|
||||
}
|
||||
})
|
||||
}
|
||||
return Promise.reject(err)
|
||||
})
|
||||
|
||||
/**
|
||||
|
||||
@ -1,69 +0,0 @@
|
||||
<template>
|
||||
<div class="graph-container">
|
||||
<canvas
|
||||
id="graph"
|
||||
ref="graph"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Chart from 'chart.js'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
labels: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
values: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
let context = this.$refs.graph.getContext('2d')
|
||||
let options = {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
legend: {
|
||||
display: false
|
||||
}
|
||||
}
|
||||
|
||||
let data = {
|
||||
labels: this.labels,
|
||||
datasets: [
|
||||
{
|
||||
label: 'My First dataset',
|
||||
backgroundColor: 'rgba(79, 196, 127,0.2)',
|
||||
borderColor: 'rgba(79, 196, 127,1)',
|
||||
borderWidth: 1,
|
||||
hoverBackgroundColor: 'rgba(79, 196, 127,0.4)',
|
||||
hoverBorderColor: 'rgba(79, 196, 127,1)',
|
||||
data: this.values
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.myBarChart = new Chart(context, {
|
||||
type: 'bar',
|
||||
data: data,
|
||||
options: options
|
||||
})
|
||||
},
|
||||
|
||||
beforeDestroy () {
|
||||
this.myBarChart.destroy()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.graph-container {
|
||||
height: 300px;
|
||||
}
|
||||
</style>
|
||||
@ -1,71 +0,0 @@
|
||||
<template>
|
||||
<div class="graph-container">
|
||||
<canvas
|
||||
id="graph"
|
||||
ref="graph"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Chart from 'chart.js'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
labels: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
values: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
bgColors: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
hoverBgColors: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
let context = this.$refs.graph.getContext('2d')
|
||||
let options = {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false
|
||||
}
|
||||
|
||||
let data = {
|
||||
labels: this.labels,
|
||||
datasets: [
|
||||
{
|
||||
data: this.values,
|
||||
backgroundColor: this.bgColors,
|
||||
hoverBackgroundColor: this.hoverBgColors
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.myDoughnutChart = new Chart(context, {
|
||||
type: 'doughnut',
|
||||
data: data,
|
||||
options: options
|
||||
})
|
||||
},
|
||||
|
||||
beforeDestroy () {
|
||||
this.myDoughnutChart.destroy()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.graph-container {
|
||||
height: 300px;
|
||||
}
|
||||
</style>
|
||||
@ -1,8 +1,6 @@
|
||||
<template>
|
||||
<div class="graph-container">
|
||||
<canvas
|
||||
id="graph"
|
||||
ref="graph" />
|
||||
<canvas id="graph" ref="graph" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -16,58 +14,56 @@ export default {
|
||||
labels: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
values: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
invoices: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
expenses: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
receipts: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
income: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
default: Array,
|
||||
},
|
||||
formatMoney: {
|
||||
type: Function,
|
||||
require: false,
|
||||
default: Function
|
||||
default: Function,
|
||||
},
|
||||
FormatGraphMoney: {
|
||||
type: Function,
|
||||
require: false,
|
||||
default: Function
|
||||
}
|
||||
default: Function,
|
||||
},
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters('currency', [
|
||||
'defaultCurrency'
|
||||
])
|
||||
...mapGetters('currency', ['defaultCurrency']),
|
||||
},
|
||||
|
||||
watch: {
|
||||
labels (val) {
|
||||
labels(val) {
|
||||
this.update()
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
mounted () {
|
||||
mounted() {
|
||||
let self = this
|
||||
let context = this.$refs.graph.getContext('2d')
|
||||
let options = {
|
||||
@ -77,13 +73,16 @@ export default {
|
||||
enabled: true,
|
||||
callbacks: {
|
||||
label: function (tooltipItem, data) {
|
||||
return self.FormatGraphMoney(tooltipItem.value, self.defaultCurrency)
|
||||
}
|
||||
}
|
||||
return self.FormatGraphMoney(
|
||||
tooltipItem.value * 100,
|
||||
self.defaultCurrency
|
||||
)
|
||||
},
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
}
|
||||
display: false,
|
||||
},
|
||||
}
|
||||
let data = {
|
||||
labels: this.labels,
|
||||
@ -107,7 +106,7 @@ export default {
|
||||
pointHoverBorderWidth: 2,
|
||||
pointRadius: 4,
|
||||
pointHitRadius: 10,
|
||||
data: this.invoices
|
||||
data: this.invoices.map((invoice) => invoice / 100),
|
||||
},
|
||||
{
|
||||
label: 'Receipts',
|
||||
@ -128,7 +127,7 @@ export default {
|
||||
pointHoverBorderWidth: 2,
|
||||
pointRadius: 4,
|
||||
pointHitRadius: 10,
|
||||
data: this.receipts
|
||||
data: this.receipts.map((receipt) => receipt / 100),
|
||||
},
|
||||
{
|
||||
label: 'Expenses',
|
||||
@ -149,7 +148,7 @@ export default {
|
||||
pointHoverBorderWidth: 2,
|
||||
pointRadius: 4,
|
||||
pointHitRadius: 10,
|
||||
data: this.expenses
|
||||
data: this.expenses.map((expense) => expense / 100),
|
||||
},
|
||||
{
|
||||
label: 'Net Income',
|
||||
@ -170,34 +169,40 @@ export default {
|
||||
pointHoverBorderWidth: 2,
|
||||
pointRadius: 4,
|
||||
pointHitRadius: 10,
|
||||
data: this.income
|
||||
}
|
||||
]
|
||||
data: this.income.map((_i) => _i / 100),
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
this.myLineChart = new Chart(context, {
|
||||
type: 'line',
|
||||
data: data,
|
||||
options: options
|
||||
options: options,
|
||||
})
|
||||
},
|
||||
|
||||
methods: {
|
||||
update () {
|
||||
update() {
|
||||
this.myLineChart.data.labels = this.labels
|
||||
this.myLineChart.data.datasets[0].data = this.invoices
|
||||
this.myLineChart.data.datasets[1].data = this.receipts
|
||||
this.myLineChart.data.datasets[2].data = this.expenses
|
||||
this.myLineChart.data.datasets[3].data = this.income
|
||||
this.myLineChart.data.datasets[0].data = this.invoices.map(
|
||||
(invoice) => invoice / 100
|
||||
)
|
||||
this.myLineChart.data.datasets[1].data = this.receipts.map(
|
||||
(receipt) => receipt / 100
|
||||
)
|
||||
this.myLineChart.data.datasets[2].data = this.expenses.map(
|
||||
(expense) => expense / 100
|
||||
)
|
||||
this.myLineChart.data.datasets[3].data = this.income.map((_i) => _i / 100)
|
||||
this.myLineChart.update({
|
||||
lazy: true
|
||||
lazy: true,
|
||||
})
|
||||
},
|
||||
|
||||
beforeDestroy () {
|
||||
beforeDestroy() {
|
||||
this.myLineChart.destroy()
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@ -1,72 +0,0 @@
|
||||
<template>
|
||||
<div class="graph-container">
|
||||
<canvas
|
||||
id="graph"
|
||||
ref="graph" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Chart from 'chart.js'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
labels: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
values: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
bgColors: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
},
|
||||
hoverBgColors: {
|
||||
type: Array,
|
||||
require: true,
|
||||
default: Array
|
||||
}
|
||||
},
|
||||
|
||||
mounted () {
|
||||
let context = this.$refs.graph.getContext('2d')
|
||||
|
||||
let options = {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false
|
||||
}
|
||||
|
||||
let data = {
|
||||
labels: this.labels,
|
||||
datasets: [
|
||||
{
|
||||
data: this.values,
|
||||
backgroundColor: this.bgColors,
|
||||
hoverBackgroundColor: this.hoverBgColors
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
this.pieChart = new Chart(context, {
|
||||
type: 'pie',
|
||||
data: data,
|
||||
options: options
|
||||
})
|
||||
},
|
||||
|
||||
beforeDestroy () {
|
||||
this.pieChart.destroy()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.graph-container {
|
||||
height: 300px;
|
||||
}
|
||||
</style>
|
||||
@ -1,95 +0,0 @@
|
||||
<template>
|
||||
<div class="graph-container easy-pie-chart">
|
||||
<svg width="100%" height="100%" viewBox="0 0 34 34" class="donut">
|
||||
<circle :stroke-width="strokeWidth" class="donut-segment" cx="17" cy="17" r="15.91549430918954" fill="transparent" :stroke="strokeColor" stroke-dasharray="100 0" />
|
||||
<circle :stroke-width="strokeWidth" :stroke="color" :stroke-dasharray="successProgress" class="donut-segment" cx="17" cy="17" r="15.91549430918954" fill="transparent" />
|
||||
<!-- <g class="chart-text">
|
||||
<text :style="'fill:' + color" x="48%" y="50%" class="chart-number" >
|
||||
{{ progress }}
|
||||
</text>
|
||||
<text :style="'fill:' + color" x="73%" y="50%" class="chart-label" >
|
||||
%
|
||||
</text>
|
||||
</g> -->
|
||||
</svg>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
values: {
|
||||
type: Number,
|
||||
require: true,
|
||||
default: 100
|
||||
},
|
||||
strokeWidth: {
|
||||
type: Number,
|
||||
require: false,
|
||||
default: 1.2
|
||||
},
|
||||
strokeColor: {
|
||||
type: String,
|
||||
require: true,
|
||||
default: '#eeeeee'
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
require: true,
|
||||
default: '#007dcc'
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
progress: 0
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
values (newvalue, oldvalue) {
|
||||
if (newvalue !== oldvalue) {
|
||||
this.setProgress()
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
successProgress () {
|
||||
return this.progress + ' ' + (100 - this.progress)
|
||||
},
|
||||
remainProgress () {
|
||||
return 100 - this.progress + ' ' + this.progress
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
this.setProgress()
|
||||
},
|
||||
methods: {
|
||||
setProgress () {
|
||||
let self = this
|
||||
for (let i = 0; i < this.values; i++) {
|
||||
setTimeout(function () {
|
||||
++self.progress
|
||||
}, 15 * i)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.chart-text {
|
||||
font: 6px "Montserrat", Arial, sans-serif;
|
||||
fill: #000;
|
||||
-moz-transform: translateY(0.25em);
|
||||
-ms-transform: translateY(0.25em);
|
||||
-webkit-transform: translateY(0.25em);
|
||||
transform: translateY(0.5em);
|
||||
}
|
||||
.chart-number {
|
||||
font-size: 8px;
|
||||
line-height: 1;
|
||||
text-anchor: middle;
|
||||
}
|
||||
.chart-label {
|
||||
font-size: 5px;
|
||||
text-transform: uppercase;
|
||||
text-anchor: middle;
|
||||
}
|
||||
</style>
|
||||
@ -412,6 +412,8 @@
|
||||
"title": "النفقات",
|
||||
"expenses_list": "قائمة النفقات",
|
||||
"expense_title": "Title",
|
||||
"select_a_customer": "حدد عميلاً",
|
||||
"customer": "العميل",
|
||||
"contact": "تواصل",
|
||||
"category": "الفئة",
|
||||
"from_date": "من تاريخ",
|
||||
|
||||
@ -201,6 +201,7 @@
|
||||
"action": "Aktion",
|
||||
"add_expense": "Aufwendung hinzufügen",
|
||||
"add_new_expense": "Neue Aufwendung hinzufügen",
|
||||
"select_a_customer": "Wählen Sie einen Kunden aus",
|
||||
"amount": "Summe",
|
||||
"categories": {
|
||||
"actions": "Aktionen",
|
||||
@ -215,6 +216,7 @@
|
||||
"title": "Titel"
|
||||
},
|
||||
"category": "Kategorie",
|
||||
"customer": "Kunden",
|
||||
"category_id": "Kategorie-Id",
|
||||
"confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.",
|
||||
"contact": "Kontakt",
|
||||
|
||||
@ -426,7 +426,9 @@
|
||||
"expenses": {
|
||||
"title": "Expenses",
|
||||
"expenses_list": "Expenses List",
|
||||
"select_a_customer": "Select a customer",
|
||||
"expense_title": "Title",
|
||||
"customer": "Customer",
|
||||
"contact": "Contact",
|
||||
"category": "Category",
|
||||
"from_date": "From Date",
|
||||
|
||||
@ -412,6 +412,8 @@
|
||||
"expenses_list": "Lista de gastos",
|
||||
"expense_title": "Título",
|
||||
"contact": "Contacto",
|
||||
"customer": "Cliente",
|
||||
"select_a_customer": "Selecciona un cliente",
|
||||
"category": "Categoría",
|
||||
"from_date": "Desde la fecha",
|
||||
"to_date": "Hasta la fecha",
|
||||
|
||||
@ -410,6 +410,8 @@
|
||||
"expenses_list": "Liste des dépenses",
|
||||
"expense_title": "Titre",
|
||||
"contact": "Contact",
|
||||
"customer": "Client Client",
|
||||
"select_a_customer": "Sélectionnez un client",
|
||||
"category": "Catégorie",
|
||||
"from_date": "A partir de la date",
|
||||
"to_date": "À ce jour",
|
||||
|
||||
@ -6,6 +6,8 @@ import es from './es.json'
|
||||
import ar from './ar.json'
|
||||
import de from './de.json'
|
||||
import pt_BR from './pt-br.json'
|
||||
import it from './it.json'
|
||||
import nl from './nl.json'
|
||||
|
||||
Vue.use(VueI18n)
|
||||
|
||||
@ -17,8 +19,10 @@ const i18n = new VueI18n({
|
||||
es,
|
||||
ar,
|
||||
de,
|
||||
pt_BR
|
||||
}
|
||||
pt_BR,
|
||||
it,
|
||||
nl,
|
||||
},
|
||||
})
|
||||
|
||||
export default i18n
|
||||
|
||||
922
resources/assets/js/plugins/it.json
Normal file
922
resources/assets/js/plugins/it.json
Normal file
@ -0,0 +1,922 @@
|
||||
{
|
||||
"_comment": "Italian - IT translation - by Alessandro Fuda - Milan, Italy - 20/03/2020 - Coronavirus's times But towards spring :-) ",
|
||||
"navigation": {
|
||||
"dashboard": "Dashboard",
|
||||
"customers": "Clienti",
|
||||
"items": "Commesse",
|
||||
"invoices": "Fatture",
|
||||
"expenses": "Spese",
|
||||
"estimates": "Preventivi",
|
||||
"payments": "Pagamenti",
|
||||
"reports": "Reports",
|
||||
"settings": "Configurazione",
|
||||
"logout": "Logout"
|
||||
},
|
||||
"general": {
|
||||
"view_pdf": "Vedi PDF",
|
||||
"download_pdf": "Download PDF",
|
||||
"save": "Salva",
|
||||
"cancel": "Elimina",
|
||||
"update": "Aggiorna",
|
||||
"deselect": "Deseleziona",
|
||||
"download": "Download",
|
||||
"from_date": "Dalla Data",
|
||||
"to_date": "Alla Data",
|
||||
"from": "Da",
|
||||
"to": "A",
|
||||
"sort_by": "Ordina per",
|
||||
"ascending": "Crescente",
|
||||
"descending": "Decrescente",
|
||||
"subject": "Oggetto",
|
||||
"message": "Messaggio",
|
||||
"go_back": "Torna indietro",
|
||||
"back_to_login": "Torna al Login?",
|
||||
"home": "Home",
|
||||
"filter": "Filtro",
|
||||
"delete": "Elimina",
|
||||
"edit": "Modifica",
|
||||
"view": "Visualizza",
|
||||
"add_new_item": "Aggiungi nuova Commessa",
|
||||
"clear_all": "Pulisci tutto",
|
||||
"showing": "Showing",
|
||||
"of": "di",
|
||||
"actions": "Azioni",
|
||||
"subtotal": "SUBTOTALE",
|
||||
"discount": "SCONTO",
|
||||
"fixed": "Fissato",
|
||||
"percentage": "Percentuale",
|
||||
"tax": "TASSA",
|
||||
"total_amount": "AMMONTARE TOTALE",
|
||||
"bill_to": "Fattura a",
|
||||
"ship_to": "Invia a",
|
||||
"due": "Dovuto",
|
||||
"draft": "Bozza",
|
||||
"sent": "Inviata",
|
||||
"all": "Tutte",
|
||||
"select_all": "Seleziona tutto",
|
||||
"choose_file": "Clicca per selezionare un file",
|
||||
"choose_template": "Scegli un modello",
|
||||
"choose": "Scegli",
|
||||
"remove": "Rimuovi",
|
||||
"powered_by": "Prodotto da",
|
||||
"bytefury": "Bytefury",
|
||||
"select_a_status": "Seleziona uno Stato",
|
||||
"select_a_tax": "Seleziona una Tassa",
|
||||
"search": "Cerca",
|
||||
"are_you_sure": "Sei sicuro/a?",
|
||||
"list_is_empty": "La lista è vuota.",
|
||||
"no_tax_found": "Nessuna Tassa trovata!",
|
||||
"four_zero_four": "404",
|
||||
"you_got_lost": "Hoops! Ti sei perso",
|
||||
"go_home": "Vai alla Home",
|
||||
"test_mail_conf": "Configurazione della mail di test",
|
||||
"send_mail_successfully": "Mail inviata con successo",
|
||||
|
||||
"setting_updated": "Configurazioni aggiornate con successo",
|
||||
"select_state": "Seleziona lo Stato",
|
||||
"select_country": "Seleziona Paese",
|
||||
"select_city": "Seleziona Città",
|
||||
"street_1": "Indirizzo 1",
|
||||
"street_2": "Indirizzo 2",
|
||||
"action_failed": "Errore"
|
||||
},
|
||||
"dashboard": {
|
||||
"select_year": "Seleziona anno",
|
||||
"cards": {
|
||||
"due_amount": "Somma dovuta",
|
||||
"customers": "Clienti",
|
||||
"invoices": "Fatture",
|
||||
"estimates": "Preventivi"
|
||||
},
|
||||
"chart_info": {
|
||||
"total_sales": "Vendite",
|
||||
"total_receipts": "Ricevute",
|
||||
"total_expense": "Uscite",
|
||||
"net_income": "Guadagno netto",
|
||||
"year": "Seleziona anno"
|
||||
},
|
||||
"weekly_invoices": {
|
||||
"title": "Fatture a settimana"
|
||||
},
|
||||
"monthly_chart": {
|
||||
"title": "Entrate & Uscite"
|
||||
},
|
||||
"recent_invoices_card": {
|
||||
"title": "Fatture insolute",
|
||||
"due_on": "Data di scadenza",
|
||||
"customer": "Cliente",
|
||||
"amount_due": "Ammontare dovuto",
|
||||
"actions": "Azioni",
|
||||
"view_all": "Vedi tutto"
|
||||
},
|
||||
"recent_estimate_card": {
|
||||
"title": "Preventivi recenti",
|
||||
"date": "Data",
|
||||
"customer": "Cliente",
|
||||
"amount_due": "Ammontare dovuto",
|
||||
"actions": "Azioni",
|
||||
"view_all": "Vedi tutto"
|
||||
}
|
||||
},
|
||||
"tax_types": {
|
||||
"name": "Nome",
|
||||
"description": "Descrizione",
|
||||
"percent": "Percento",
|
||||
"compound_tax": "Tassa composta"
|
||||
},
|
||||
"customers": {
|
||||
"title": "Clienti",
|
||||
"add_customer": "Aggiungi cliente",
|
||||
"contacts_list": "Lista clienti",
|
||||
"name": "Nome",
|
||||
"display_name": "Mostra nome",
|
||||
"primary_contact_name": "Riferimento",
|
||||
"contact_name": "Nome Contatto",
|
||||
"amount_due": "Ammontare dovuto",
|
||||
"email": "Email",
|
||||
"address": "Indirizzo",
|
||||
"phone": "Telefono",
|
||||
"website": "Sito web",
|
||||
"country": "Paese",
|
||||
"state": "Stato",
|
||||
"city": "Città",
|
||||
"zip_code": "Codice Postale",
|
||||
"added_on": "Aggiunto il",
|
||||
"action": "Azione",
|
||||
"password": "Password",
|
||||
"street_number": "Numero Civico",
|
||||
"primary_currency": "Valùta Principale",
|
||||
"add_new_customer": "Aggiungi nuovo Cliente",
|
||||
"save_customer": "Salva Cliente",
|
||||
"update_customer": "Aggiorna Cliente",
|
||||
"customer": "Cliente | Clienti",
|
||||
"new_customer": "Nuovo cliente",
|
||||
"edit_customer": "Modifica Cliente",
|
||||
"basic_info": "Informazioni",
|
||||
"billing_address": "Indirizzo di Fatturazione",
|
||||
"shipping_address": "Indirizzo di Spedizione",
|
||||
"copy_billing_address": "Copia da Fatturazione",
|
||||
"no_customers": "Ancora nessun Cliente!",
|
||||
"no_customers_found": "Nessun cliente trovato!",
|
||||
"list_of_customers": "Qui ci sarà la lista dei tuoi clienti",
|
||||
"primary_display_name": "Mostra il Nome Principale",
|
||||
"select_currency": "Selezione Valùta",
|
||||
"select_a_customer": "Seleziona Cliente",
|
||||
"type_or_click": "Scrivi o clicca per selezionare",
|
||||
|
||||
"confirm_delete": "Non potrai più recuperare il cliente cancellato | Non potrai più recuperare i clienti cancellati",
|
||||
"created_message": "Cliente creato con successo",
|
||||
"updated_message": "Cliente aggiornato con successo",
|
||||
"deleted_message": "Cliente cancellato con successo | Clienti cancellati con successo"
|
||||
},
|
||||
"items": {
|
||||
"title": "Commesse",
|
||||
"items_list": "Lista Commesse",
|
||||
"name": "Nome",
|
||||
"unit": "Unità/Tipo",
|
||||
"description": "Descrizione",
|
||||
"added_on": "Aggiunto il",
|
||||
"price": "Prezzo",
|
||||
"date_of_creation": "Data di creazione",
|
||||
"action": "Azione",
|
||||
"add_item": "Aggiungi Commessa",
|
||||
"save_item": "Salva",
|
||||
"update_item": "Aggiorna",
|
||||
"item": "Commessa | Commesse",
|
||||
"add_new_item": "Aggiungi nuova Commessa",
|
||||
"new_item": "Nuova Commessa",
|
||||
"edit_item": "Modifica Commessa",
|
||||
"no_items": "Ancora nessuna commessa!",
|
||||
"list_of_items": "Qui ci sarà la lista delle commesse.",
|
||||
"select_a_unit": "Seleziona",
|
||||
"taxes": "Imposte",
|
||||
"item_attached_message": "Non puoi eliminare una Commessa che è già attiva",
|
||||
"confirm_delete": "Non potrai ripristinare la Commessa | Non potrai ripristinare le Commesse",
|
||||
"created_message": "Commessa creata con successo",
|
||||
"updated_message": "Commessa aggiornata con successo",
|
||||
"deleted_message": "Commessa eliminata con successo | Commesse eliminate con successo"
|
||||
},
|
||||
"estimates": {
|
||||
"title": "Preventivi",
|
||||
"estimate": "Preventivo | Preventivi",
|
||||
"estimates_list": "Lista Preventivi",
|
||||
"days": "{days} Giorni",
|
||||
"months": "{months} Mese",
|
||||
"years": "{years} Anno",
|
||||
"all": "Tutti",
|
||||
"paid": "Pagato",
|
||||
"unpaid": "Non pagato",
|
||||
"customer": "CLIENTE",
|
||||
"ref_no": "RIF N.",
|
||||
"number": "NUMERO",
|
||||
"amount_due": "AMMONTARE DOVUTO",
|
||||
"partially_paid": "Pagamento Parziale",
|
||||
"total": "Totale",
|
||||
"discount": "Sconto",
|
||||
"sub_total": "Sub Totale",
|
||||
"estimate_number": "Preventivo Numero",
|
||||
"ref_number": "Numero di Rif.",
|
||||
"contact": "Contatto",
|
||||
"add_item": "Aggiungi un item",
|
||||
"date": "Data",
|
||||
"due_date": "Data di pagamento",
|
||||
"expiry_date": "Data di scadenza",
|
||||
"status": "Status",
|
||||
"add_tax": "Aggiungi Imposta",
|
||||
"amount": "Ammontare",
|
||||
"action": "Azione",
|
||||
"notes": "Note",
|
||||
"tax": "Imposta",
|
||||
"estimate_template": "Modello",
|
||||
"convert_to_invoice": "Converti in Fattura",
|
||||
"mark_as_sent": "Segna come Inviata",
|
||||
"send_estimate": "Invia preventivo",
|
||||
"record_payment": "Registra Pagamento",
|
||||
"add_estimate": "Aggiungi Preventivo",
|
||||
"save_estimate": "Salva Preventivo",
|
||||
"confirm_conversion": "Questo preventivo verrà usato per generare una nuova fattura.",
|
||||
"conversion_message": "Fattura creata",
|
||||
"confirm_send_estimate": "Questo preventivo verrà inviato al cliente via mail",
|
||||
"confirm_mark_as_sent": "Questo preventivo verrà contrassegnato come inviato",
|
||||
"confirm_mark_as_accepted": "Questo preventivo verrà contrassegnato come Accettato",
|
||||
"confirm_mark_as_rejected": "Questo preventivo verrà contrassegnato come Rifiutato",
|
||||
"no_matching_estimates": "Nessun preventivo trovato!",
|
||||
"mark_as_sent_successfully": "Preventivo contrassegnato come inviato con successo",
|
||||
"send_estimate_successfully": "Preventivo inviato con successo",
|
||||
"errors": {
|
||||
"required": "Campo obbligatorio"
|
||||
},
|
||||
"accepted": "Accettato",
|
||||
"sent": "Inviato",
|
||||
"draft": "Bozza",
|
||||
"declined": "Rifiutato",
|
||||
"new_estimate": "Nuovo Preventivo",
|
||||
"add_new_estimate": "Crea Nuovo Preventivo",
|
||||
"update_Estimate": "Aggiorna preventivo",
|
||||
"edit_estimate": "Modifica Preventivo",
|
||||
"items": "Commesse",
|
||||
"Estimate": "Preventivo | Preventivi",
|
||||
"add_new_tax": "Aggiungi una nuova tassa/imposta",
|
||||
"no_estimates": "Ancora nessun preventivo!",
|
||||
"list_of_estimates": "Questa sezione conterrà la lista dei preventivi.",
|
||||
"mark_as_rejected": "Segna come Rifiutato",
|
||||
"mark_as_accepted": "Segna come Accettato",
|
||||
|
||||
"marked_as_accepted_message": "Preventivo contrassegnato come accettato",
|
||||
"marked_as_rejected_message": "Preventivo contrassegnato come rifiutato",
|
||||
"confirm_delete": "Non potrai più recuperare questo preventivo | Non potrai più recuperare questi preventivi",
|
||||
"created_message": "Preventivo creato con successo",
|
||||
"updated_message": "Preventivo modificato con successo",
|
||||
"deleted_message": "Preventivo eliminato con successo | Preventivi eliminati con successo",
|
||||
"user_email_does_not_exist": "La Email utente non esiste",
|
||||
"something_went_wrong": "Si è verificato un errore",
|
||||
"item": {
|
||||
"title": "Titolo Commessa",
|
||||
"description": "Descrizione",
|
||||
"quantity": "Quantità",
|
||||
"price": "Prezzo",
|
||||
"discount": "Sconto",
|
||||
"total": "Totale",
|
||||
"total_discount": "Sconto Totale",
|
||||
"sub_total": "Sub Totale",
|
||||
"tax": "Tasse",
|
||||
"amount": "Ammontare",
|
||||
"select_an_item": "Scrivi o clicca per selezionare un item",
|
||||
"type_item_description": "Scrivi una Descrizione (opzionale)"
|
||||
}
|
||||
},
|
||||
"invoices": {
|
||||
"title": "Fatture",
|
||||
"invoices_list": "Lista Fatture",
|
||||
"days": "{days} Giorni",
|
||||
"months": "{months} Mese",
|
||||
"years": "{years} Anno",
|
||||
"all": "Tutti",
|
||||
"paid": "Pagato",
|
||||
"unpaid": "Insoluto",
|
||||
"customer": "CLIENTE",
|
||||
"paid_status": "STATO DI PAGAMENTO",
|
||||
"ref_no": "RIF N.",
|
||||
"number": "NUMERO",
|
||||
"amount_due": "AMMONTARE DOVUTO",
|
||||
"partially_paid": "Parzialmente Pagata",
|
||||
"total": "Totale",
|
||||
"discount": "Sconto",
|
||||
"sub_total": "Sub Totale",
|
||||
"invoice": "Fattura | Fatture",
|
||||
"invoice_number": "Numero Fattura",
|
||||
"ref_number": "Rif Numero",
|
||||
"contact": "Contatto",
|
||||
"add_item": "Aggiungi Commessa/Item",
|
||||
"date": "Data",
|
||||
"due_date": "Data di pagamento",
|
||||
"status": "Stato",
|
||||
"add_tax": "Aggiungi Imposta",
|
||||
"amount": "Ammontare",
|
||||
"action": "Azione",
|
||||
"notes": "Note",
|
||||
"view": "Vedi",
|
||||
"send_invoice": "Invia Fattura",
|
||||
"invoice_template": "Modello Fattura",
|
||||
"template": "Modello",
|
||||
"mark_as_sent": "Segna come inviata",
|
||||
"confirm_send_invoice": "Questa fattura sarà inviata via Mail al Cliente",
|
||||
"invoice_mark_as_sent": "Questa fattura sarà contrassegnata come inviata",
|
||||
"confirm_send": "Questa fattura sarà inviata via Mail al Cliente",
|
||||
"invoice_date": "Data fattura",
|
||||
"record_payment": "Registra Pagamento",
|
||||
"add_new_invoice": "Aggiungi nuova Fattura",
|
||||
"update_expense": "Aggiorna Costo",
|
||||
"edit_invoice": "Modifica Fattura",
|
||||
"new_invoice": "Nuova Fattura",
|
||||
"save_invoice": "Salva fattura",
|
||||
"update_invoice": "Aggiorna Fattura",
|
||||
"add_new_tax": "Aggiungi tassa/imposta",
|
||||
"no_invoices": "Ancora nessuna fattura!",
|
||||
"list_of_invoices": "Questa sezione conterrà la lista delle Fatture.",
|
||||
"select_invoice": "Seleziona Fattura",
|
||||
"no_matching_invoices": "Nessuna fattura trovata!",
|
||||
"mark_as_sent_successfully": "Fattura contassegnata come inviata con successo",
|
||||
"send_invoice_successfully": "Fattura inviata con successo",
|
||||
"cloned_successfully": "Fattura copiata con successo",
|
||||
"clone_invoice": "Clona Fattura",
|
||||
"confirm_clone": "Questa fattura verrà clonata in una nuova fattura",
|
||||
"item": {
|
||||
"title": "Titolo Commessa",
|
||||
"description": "Descrizione",
|
||||
"quantity": "Quantità",
|
||||
"price": "Prezzo",
|
||||
"discount": "Sconto",
|
||||
"total": "Totale",
|
||||
"total_discount": "Sconto Totale",
|
||||
"sub_total": "Sub Totale",
|
||||
"tax": "Tassa",
|
||||
"amount": "Ammontare",
|
||||
"select_an_item": "Scrivi o clicca per selezionare un item",
|
||||
"type_item_description": "Scrivi una descrizione (opzionale)"
|
||||
},
|
||||
"payment_attached_message": "Una delle fatture selezionate ha già associato un pagamento. Assicurati di eliminare il pagamento associato prima di procedere con la rimozione",
|
||||
"confirm_delete": "Non potrai recuperare la Fattura cancellata | Non potrai recuperare le Fatture cancellate",
|
||||
"created_message": "Fattura creata con successo",
|
||||
"updated_message": "Fattura aggiornata con successo",
|
||||
"deleted_message": "Fattura cancellata con successo | Fatture cancellate con successo",
|
||||
"marked_as_sent_message": "Fattura contrassegnata come inviata con successo",
|
||||
"user_email_does_not_exist": "La Email utente non esiste",
|
||||
"something_went_wrong": "Si è verificato un errore",
|
||||
"invalid_due_amount_message": "L'ammontare totale della fattura non può essere inferiore all'ammontare totale pagato per questa fattura. Modifica la fattura o cancella i pagamenti associati per continuare."
|
||||
},
|
||||
"credit_notes": {
|
||||
"title": "Note di Credito",
|
||||
"credit_notes_list": "Lista Note di Credito",
|
||||
"credit_notes": "Note di Credito",
|
||||
"contact": "Contatta",
|
||||
"date": "Data",
|
||||
"amount": "Ammontare",
|
||||
"action": "Azione",
|
||||
"credit_number": "Numero Credito",
|
||||
"notes": "Note",
|
||||
"confirm_delete": "Vuoi cancellare questa nota di credito?",
|
||||
"item": {
|
||||
"title": "Titolo",
|
||||
"description": "Descrizione",
|
||||
"quantity": "Quantità",
|
||||
"price": "Prezzo",
|
||||
"discount": "Sconto",
|
||||
"total": "Totale",
|
||||
"total_discount": "Sconto Totale",
|
||||
"sub_total": "Sub Totale",
|
||||
"tax": "Tassa"
|
||||
}
|
||||
},
|
||||
"payments": {
|
||||
"title": "Pagamenti",
|
||||
"payments_list": "Lista Pagamenti",
|
||||
"record_payment": "Registra Pagamento",
|
||||
"customer": "Cliente",
|
||||
"date": "Data",
|
||||
"amount": "Ammontare",
|
||||
"action": "Azione",
|
||||
"payment_number": "Numero di pagamento",
|
||||
"payment_mode": "Modalità di Pagamento",
|
||||
"invoice": "Fattura",
|
||||
"note": "Note",
|
||||
"add_payment": "Aggiungi Pagamento",
|
||||
"new_payment": "Nuovo Pagamento",
|
||||
"edit_payment": "Modifica Pagamento",
|
||||
"view_payment": "Vedi Pagamento",
|
||||
"add_new_payment": "Aggiungi nuovo pagamento",
|
||||
"send_payment_receipt": "Invia ricevuta di pagamento",
|
||||
"save_payment": "Salva pagamento",
|
||||
"update_payment": "Aggiorna pagamento",
|
||||
"payment": "Pagamento | Pagamenti",
|
||||
"no_payments": "Ancora nessun pagamento!",
|
||||
"no_matching_payments": "Non ci sono pagamenti!",
|
||||
"list_of_payments": "Questa sezione conterrà la lista dei pagamenti.",
|
||||
"select_payment_mode": "Seleziona modalità di pagamento",
|
||||
"confirm_send_payment": "Questo pagamento verrà inviato via email al cliente",
|
||||
"send_payment_successfully": "Pagamento inviato con successo",
|
||||
"user_email_does_not_exist": "Email utente non esiste",
|
||||
"something_went_wrong": "si è verificato un errore",
|
||||
|
||||
"confirm_delete": "Non potrai recuperare questo pagamento | Non potrai recuperare questi pagamenti",
|
||||
"created_message": "Pagamento creato con successo",
|
||||
"updated_message": "Pagamento aggiornato con successo",
|
||||
"deleted_message": "Pagamento cancellato con successo | Pagamenti cancellati con successo",
|
||||
"invalid_amount_message": "L'ammontare del pagamento non è valido"
|
||||
},
|
||||
"expenses": {
|
||||
"title": "Spese",
|
||||
"expenses_list": "Lista Costi",
|
||||
"expense_title": "Titolo",
|
||||
"contact": "Contatto",
|
||||
"category": "Categoria",
|
||||
"from_date": "Dalla Data",
|
||||
"to_date": "Alla Data",
|
||||
"expense_date": "Data",
|
||||
"description": "Descrizione",
|
||||
"receipt": "Ricevuta",
|
||||
"amount": "Ammontare",
|
||||
"action": "Azione",
|
||||
"note": "Nota",
|
||||
"category_id": "Id categoria",
|
||||
"date": "Data Spesa",
|
||||
"add_expense": "Aggiungi Spesa",
|
||||
"add_new_expense": "Aggiungi nuova Spesa",
|
||||
"save_expense": "Salva la Spesa",
|
||||
"update_expense": "Aggiorna Spesa",
|
||||
"download_receipt": "Scarica la Ricevuta",
|
||||
"edit_expense": "Modifica Spesa",
|
||||
"new_expense": "Nuova Spesa",
|
||||
"expense": "Spesa | Spese",
|
||||
"no_expenses": "Ancora nessuna spesa!",
|
||||
"list_of_expenses": "Questa sezione conterrà la lista delle Spese.",
|
||||
|
||||
"confirm_delete": "Non potrai recuperare questa spesa | Non potrai recuperare queste spese",
|
||||
"created_message": "Spesa creata con successo",
|
||||
"updated_message": "Spesa modificata con successo",
|
||||
"deleted_message": "Spesa cancellata con successo | Spese cancellate con successo",
|
||||
"categories": {
|
||||
"categories_list": "Lista categorie",
|
||||
"title": "Titolo",
|
||||
"name": "Nome",
|
||||
"description": "Descrizione",
|
||||
"amount": "Ammontare",
|
||||
"actions": "Azioni",
|
||||
"add_category": "Aggiungi Categoria",
|
||||
"new_category": "Nuova Categoria",
|
||||
"category": "Categoria | Categorie",
|
||||
"select_a_category": "Seleziona Categoria"
|
||||
}
|
||||
},
|
||||
"login": {
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"forgot_password": "Password dimenticata?",
|
||||
"or_signIn_with": "o fai login con",
|
||||
"login": "Login",
|
||||
"register": "Registrati",
|
||||
"reset_password": "Resetta Password",
|
||||
"password_reset_successfully": "Password Resettata con successo",
|
||||
"enter_email": "Inserisci email",
|
||||
"enter_password": "Inserisci Password",
|
||||
"retype_password": "Ridigita Password",
|
||||
"login_placeholder": "mail@example.com"
|
||||
},
|
||||
"reports": {
|
||||
"title": "Report",
|
||||
"from_date": "Da",
|
||||
"to_date": "A",
|
||||
"status": "Status",
|
||||
"paid": "Pagato",
|
||||
"unpaid": "Non pagato",
|
||||
"download_pdf": "Scarica PDF",
|
||||
"view_pdf": "Vedi PDF",
|
||||
"update_report": "Aggiorna Report",
|
||||
"report": "Report | Reports",
|
||||
"profit_loss": {
|
||||
"profit_loss": "Guadagni & Perdite",
|
||||
"to_date": "A",
|
||||
"from_date": "Da",
|
||||
"date_range": "Seleziona intervallo date"
|
||||
},
|
||||
"sales": {
|
||||
"sales": "Vendite",
|
||||
"date_range": "Seleziona intervallo date",
|
||||
"to_date": "A",
|
||||
"from_date": "Da",
|
||||
"report_type": "Tipo di report"
|
||||
},
|
||||
"taxes": {
|
||||
"taxes": "Tasse",
|
||||
"to_date": "Alla data",
|
||||
"from_date": "Dalla data",
|
||||
"date_range": "Seleziona intervallo date"
|
||||
},
|
||||
"errors": {
|
||||
"required": "Campo obbligatorio"
|
||||
},
|
||||
"invoices": {
|
||||
"invoice": "Fattura",
|
||||
"invoice_date": "Data fattura",
|
||||
"due_date": "Data di pagamento",
|
||||
"amount": "Ammontare",
|
||||
"contact_name": "Nome contatto",
|
||||
"status": "Status"
|
||||
},
|
||||
"estimates": {
|
||||
"estimate": "Preventivo",
|
||||
"estimate_date": "Data preventivo",
|
||||
"due_date": "Data di pagamento",
|
||||
"estimate_number": "Numero di preventivo",
|
||||
"ref_number": "Numero di Rif.",
|
||||
"amount": "Ammontare",
|
||||
"contact_name": "Nome contatto",
|
||||
"status": "Status"
|
||||
},
|
||||
"expenses": {
|
||||
"expenses": "Spese",
|
||||
"category": "Categoria",
|
||||
"date": "Data",
|
||||
"amount": "Ammontare",
|
||||
"to_date": "Alla data",
|
||||
"from_date": "Dalla data",
|
||||
"date_range": "Seleziona intervallo date"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"menu_title": {
|
||||
"account_settings": "Impostazioni Account",
|
||||
"company_information": "Informazioni Azienda",
|
||||
"customization": "Personalizzazione",
|
||||
"preferences": "Opzioni",
|
||||
"notifications": "Notifiche",
|
||||
"tax_types": "Tupi di Tasse",
|
||||
"expense_category": "Categorie di spesa",
|
||||
"update_app": "Aggiorna App"
|
||||
},
|
||||
"title": "Impostazioni",
|
||||
"setting": "Opzione | Impostazioni",
|
||||
"general": "Generale",
|
||||
"language": "Lingua",
|
||||
"primary_currency": "Valuta Principale",
|
||||
"timezone": "Time Zone",
|
||||
"date_format": "Formato data",
|
||||
"currencies": {
|
||||
"title": "Valute",
|
||||
"currency": "Valùta | Valute",
|
||||
"currencies_list": "Lista valute",
|
||||
"select_currency": "Seleziona Valùta",
|
||||
"name": "Nome",
|
||||
"code": "Codice",
|
||||
"symbol": "Simbolo",
|
||||
"precision": "Precisione",
|
||||
"thousand_separator": "Separatore migliaia",
|
||||
"decimal_separator": "Separatore decimali",
|
||||
"position": "Posizione",
|
||||
"position_of_symbol": "Posizione del Simbolo",
|
||||
"right": "Destra",
|
||||
"left": "Sinistra",
|
||||
"action": "Azione",
|
||||
"add_currency": "Aggiungi Valùta"
|
||||
},
|
||||
"mail": {
|
||||
"host": "Mail Host",
|
||||
"port": "Mail Port",
|
||||
"driver": "Mail Driver",
|
||||
"secret": "Secret",
|
||||
"mailgun_secret": "Mailgun Secret",
|
||||
"mailgun_domain": "Domain",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Configurazione Mail",
|
||||
"from_name": "Nome Mittente Mail",
|
||||
"from_mail": "Indirizzo Mittente Mail",
|
||||
"encryption": "Mail Encryption",
|
||||
"mail_config_desc": "Form per Configurazione Driver Mail per invio mail dall'App. Puoi anche configurare providers di terze parti come Sendgrid, SES, etc.."
|
||||
},
|
||||
"pdf": {
|
||||
"title": "Configurazione PDF",
|
||||
"footer_text": "Testo Footer",
|
||||
"pdf_layout": "Layout PDF"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Info azienda",
|
||||
"company_name": "Nome azienda",
|
||||
"company_logo": "Logo azienda",
|
||||
"section_description": "Informazioni sulla tua azienda che saranno mostrate in fattura, preventivi ed altri documenti creati dell'applicazione.",
|
||||
"phone": "Telefono",
|
||||
"country": "Paese",
|
||||
"state": "Stato",
|
||||
"city": "Città",
|
||||
"address": "Indirizzo",
|
||||
"zip": "CAP",
|
||||
"save": "Salva",
|
||||
"updated_message": "Informazioni Azienda aggiornate con successo."
|
||||
},
|
||||
"customization": {
|
||||
"customization": "personalizzazione",
|
||||
"save": "Salva",
|
||||
"addresses": {
|
||||
"title": "Indirizzi",
|
||||
"section_description": "Puoi settare l'indirizzo di fatturazione del Cliente e/o il formato dell'indirizzo di spedizione (Mostrato solo sul PDF). ",
|
||||
"customer_billing_address": "Indirizzo Fatturazione Cliente",
|
||||
"customer_shipping_address": "Indirizzo spedizione Cliente",
|
||||
"company_address": "Indirizzo Azienda",
|
||||
"insert_fields": "Inserisci Campi",
|
||||
"contact": "Contatto",
|
||||
"address": "Indirizzo",
|
||||
"display_name": "Mostra nome",
|
||||
"primary_contact_name": "Nome contatto primario",
|
||||
"email": "Email",
|
||||
"website": "Sito web",
|
||||
"name": "Nome",
|
||||
"country": "Paese",
|
||||
"state": "Stato",
|
||||
"city": "Città",
|
||||
"company_name": "Nome Azienda",
|
||||
"address_street_1": "Indirizzo 1",
|
||||
"address_street_2": "Indirizzo 2",
|
||||
"phone": "Telefono",
|
||||
"zip_code": "CAP/ZIP Code",
|
||||
"address_setting_updated": "Indirizzo aggiornato con Successo"
|
||||
},
|
||||
"updated_message": "Info azienda aggiornate con successo",
|
||||
|
||||
"invoices": {
|
||||
"title": "Fatture",
|
||||
"notes": "Note",
|
||||
"invoice_prefix": "Prefisso Fattura",
|
||||
"invoice_settings": "Impostazioni fattura",
|
||||
"autogenerate_invoice_number": "Auto genera numero di fattura",
|
||||
"invoice_setting_description": "Disabilita, se non vuoi auto-generare i numeri delle fatture ogni volta che crei una nuova fattura.",
|
||||
"enter_invoice_prefix": "Inserisci prefisso fattura",
|
||||
"terms_and_conditions": "Termini e Condizioni",
|
||||
"invoice_setting_updated": "Impostazioni fatture aggiornate con successo"
|
||||
},
|
||||
|
||||
"estimates": {
|
||||
"title": "Preventivi",
|
||||
"estimate_prefix": "Prefisso Preventivi",
|
||||
"estimate_settings": "Impostazioni Preventivi",
|
||||
"autogenerate_estimate_number": "Auto-genera Numero di preventivo",
|
||||
"estimate_setting_description": "Disabilita, se non vuoi autogenerare il numero di preventivo ogni volta che ne viene creato uno nuovo.",
|
||||
"enter_estimate_prefix": "Inserisci prefisso preventivo",
|
||||
"estimate_setting_updated": "Impostazioni preventivi aggiornate con successo"
|
||||
},
|
||||
|
||||
"payments": {
|
||||
"title": "Pagamenti",
|
||||
"payment_prefix": "Prefisso Pagamento",
|
||||
"payment_settings": "Impostazioni Pagamento",
|
||||
"autogenerate_payment_number": "Auto genera il numero di Pagamento",
|
||||
"payment_setting_description": "Disabilita, se non vuoi autogenerare il numero di pagamento ogni volta che ne viene creato uno nuovo.",
|
||||
"enter_payment_prefix": "Inserisci prefisso di pagamento",
|
||||
"payment_setting_updated": "Impostazioni di pagamento aggiornate con successo",
|
||||
"payment_mode": "Modalità di pagamento",
|
||||
"add_payment_mode": "Aggiungi modalità di pagamento",
|
||||
"mode_name": "Nome modalità",
|
||||
"payment_mode_added": "Modalità di pagamento aggiunta",
|
||||
"payment_mode_updated": "Modalità di pagamento aggiornata",
|
||||
"payment_mode_confirm_delete":"Non potrai ripristinare la modalità di pagamento",
|
||||
"already_in_use": "Modalità di pagamento già in uso",
|
||||
"deleted_message": "Payment Mode deleted successfully"
|
||||
},
|
||||
|
||||
"items": {
|
||||
"title": "Items",
|
||||
"units": "unità",
|
||||
"add_item_unit": "Aggiungi Unità Item",
|
||||
"unit_name": "Nome",
|
||||
"item_unit_added": "Unità aggiunta",
|
||||
"item_unit_updated": "Unità aggiornata",
|
||||
"item_unit_confirm_delete":"Non potrai ripristinare questa unità Item",
|
||||
"already_in_use": "Unità Item già in uso",
|
||||
"deleted_message": "Unità item eliminata con successo"
|
||||
}
|
||||
},
|
||||
"account_settings": {
|
||||
"profile_picture": "Immagine profilo",
|
||||
"name": "Nome",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"confirm_password": "Conferma Password",
|
||||
"account_settings": "Impostazioni Account",
|
||||
"save": "Salva",
|
||||
"section_description": "Puoi aggiornare nome email e password utilizzando il form qui sotto.",
|
||||
"updated_message": "Impostazioni account aggiornate con successo"
|
||||
},
|
||||
"user_profile": {
|
||||
"name": "Nome",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"confirm_password": "Conferma Password"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Notifica",
|
||||
"email": "Invia notifiche a",
|
||||
"description": "Quali notifiche email vorresti ricevere quando qualcosa cambia?",
|
||||
"invoice_viewed": "Fattura visualizzata",
|
||||
"invoice_viewed_desc": "Quando il cliente visualizza la fattura inviata via dashboard applicazione.",
|
||||
"estimate_viewed": "Preventivo visualizzato",
|
||||
"estimate_viewed_desc": "Quando il cliente visualizza il preventivo inviato dall'applicazione.",
|
||||
"save": "Salva",
|
||||
"email_save_message": "Email salvata con successo",
|
||||
"please_enter_email": "Inserisci Email"
|
||||
},
|
||||
"tax_types": {
|
||||
"title": "Tipi di Imposta",
|
||||
"add_tax": "Aggiungi Imposta",
|
||||
"description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.",
|
||||
"add_new_tax": "Aggiungi nuova imposta",
|
||||
"tax_settings": "Impostazioni Imposte",
|
||||
"tax_per_item": "Tassa per prodotto/servizio",
|
||||
"tax_name": "Nome imposta",
|
||||
"compound_tax": "Imposta composta",
|
||||
"percent": "Percento",
|
||||
"action": "Azione",
|
||||
"tax_setting_description": "Abilita se vuoi aggiungere imposte specifiche per prodotti o servizi. Di default le imposte sono aggiunte direttamente alla fattura.",
|
||||
"created_message": "Tipo di imposta creato con successo",
|
||||
"updated_message": "Tipo di imposta aggiornato con successo",
|
||||
"deleted_message": "Tipo di imposta eliminato con successo",
|
||||
"confirm_delete": "Non potrai ripristinare questo tipo di imposta",
|
||||
"already_in_use": "Imposta già in uso"
|
||||
},
|
||||
"expense_category": {
|
||||
"title": "Categorie di spesa",
|
||||
"action": "Azione",
|
||||
"description": "Le categorie sono necessarie per aggiungere delle voci di spesa. Puoi aggiungere o eliminare queste categorie in base alle tue preferenze.",
|
||||
"add_new_category": "Aggiungi nuova categoria",
|
||||
"category_name": "Nome Categoria",
|
||||
"category_description": "Descrizione",
|
||||
"created_message": "Categoria di spesa creata con successo",
|
||||
"deleted_message": "Categoria di spesa eliminata con successo",
|
||||
"updated_message": "Categoria di spesa aggiornata con successo",
|
||||
"confirm_delete": "Non potrai ripristinare questa categoria di spesa",
|
||||
"already_in_use": "Categoria già in uso"
|
||||
},
|
||||
"preferences": {
|
||||
"currency": "Valùta",
|
||||
"language": "Lingua",
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Anno finanziario",
|
||||
"date_format": "Formato Data",
|
||||
"discount_setting": "Impostazione Sconto",
|
||||
"discount_per_item": "Sconto Per Item ",
|
||||
"discount_setting_description": "Abilita se vuoi aggiungere uno sconto ad uno specifica fattura. Di default, lo sconto è aggiunto direttamente in fattura.",
|
||||
"save": "Salva",
|
||||
"preference": "Preferenza | Preferenze",
|
||||
"general_settings": "Impostazioni di default del sistema.",
|
||||
"updated_message": "Preferenze aggiornate con successo",
|
||||
"select_language": "seleziona lingua",
|
||||
"select_time_zone": "Seleziona Time Zone",
|
||||
"select_date_formate": "Seleziona Formato Data",
|
||||
"select_financial_year": "Seleziona anno finanziario"
|
||||
},
|
||||
"update_app": {
|
||||
"title": "Aggiorna App",
|
||||
"description": "Puoi facilmente aggiornare l'app. Aggiorna cliccando sul bottone qui sotto",
|
||||
"check_update": "Controllo aggiornamenti",
|
||||
"avail_update": "Aggiornamento disponibile",
|
||||
"next_version": "Versione successiva",
|
||||
"update": "Aggiorna ora",
|
||||
"update_progress": "Aggiornamento in corso...",
|
||||
"progress_text": "Sarà necessario qualche minuto. Per favore non aggiornare la pagina e non chiudere la finestra prima che l'aggiornamento sia completato",
|
||||
"update_success": "L'App è aggiornata! Attendi che la pagina venga ricaricata automaticamente.",
|
||||
"latest_message": "Nessun aggiornamneto disponibile! Sei già alla versione più recente.",
|
||||
"current_version": "Versione corrente"
|
||||
}
|
||||
},
|
||||
"wizard": {
|
||||
"account_info": "Informazioni Account",
|
||||
"account_info_desc": "I dettagli qui sotto verranno usati per creare l'account principale dell'Amministratore. Puoi modificarli in qualsiasi momento dopo esserti loggato come Amministratore.",
|
||||
"name": "Nome",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"confirm_password": "Conferma Password",
|
||||
"save_cont": "Salva & Continua",
|
||||
"company_info": "Informazioni Azienda",
|
||||
"company_info_desc": "Questa informazione verrà mostrata nelle fatture. Puoi modificare queste informazione in un momento successivo dalla pagina delle impostazioni.",
|
||||
"company_name": "Nome Azienda",
|
||||
"company_logo": "Logo Azienda",
|
||||
"logo_preview": "Anteprima Logo",
|
||||
"preferences": "Impostazioni",
|
||||
"preferences_desc": "Impostazioni di default del sistema.",
|
||||
"country": "Paese",
|
||||
"state": "Stato",
|
||||
"city": "Città",
|
||||
"address": "Indirizzo",
|
||||
"street": "Indirizzo1 | Indirizzo2",
|
||||
"phone": "Telefono",
|
||||
"zip_code": "CAP/Zip Code",
|
||||
"go_back": "Torna indietro",
|
||||
"currency": "Valùta",
|
||||
"language": "Lingua",
|
||||
"time_zone": "Time Zone",
|
||||
"fiscal_year": "Anno Finanziario",
|
||||
"date_format": "Formato Date",
|
||||
"from_address": "Indirizzo - Da",
|
||||
"username": "Username",
|
||||
"next": "Successivo",
|
||||
"continue": "Continua",
|
||||
"skip": "Salta",
|
||||
"database": {
|
||||
"database": "URL del sito & database",
|
||||
"connection": "Connessione Database",
|
||||
"host": "Database Host",
|
||||
"port": "Database - Porta",
|
||||
"password": "Database Password",
|
||||
"app_url": "App URL",
|
||||
"username": "Database Username",
|
||||
"db_name": "Database Nome",
|
||||
"desc": "Crea un database sul tuo server e setta le credenziali usando il form qui sotto."
|
||||
},
|
||||
"permissions": {
|
||||
"permissions": "Permessi",
|
||||
"permission_confirm_title": "Sei sicuro di voler continuare?",
|
||||
"permission_confirm_desc": "Controllo sui permessi Cartelle, fallito",
|
||||
"permission_desc": "Qui sotto la lista dei permessi richiesti per far funzionare correttamente l'App. Se il controllo dei permessi fallisce, assicurati di aggiornare/modificare i permessi sulle cartelle."
|
||||
},
|
||||
"mail": {
|
||||
"host": "Mail Host",
|
||||
"port": "Mail - Porta",
|
||||
"driver": "Mail Driver",
|
||||
"secret": "Secret",
|
||||
"mailgun_secret": "Mailgun Secret",
|
||||
"mailgun_domain": "Domain",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"password": "Mail Password",
|
||||
"username": "Mail Username",
|
||||
"mail_config": "Configurazione Mail",
|
||||
"from_name": "Nome mittente mail",
|
||||
"from_mail": "Indirizzo mittente mail",
|
||||
"encryption": "Tipo di cifratura Mail",
|
||||
"mail_config_desc": "Form per configurazione del 'driver mail' per inviare emails dall'App. Puoi anche configurare servizi di terze parti come Sendgrid, SES, ecc.."
|
||||
},
|
||||
"req": {
|
||||
"system_req": "Requisiti di Sistema",
|
||||
"php_req_version": "Php (versione {version} richiesta)",
|
||||
"check_req": "Controllo Requisiti",
|
||||
"system_req_desc": "Crater ha alcuni requisiti di sistema. Assicurati che il server ha la versione di php richiesta e tutte le estensioni necessarie."
|
||||
},
|
||||
"errors": {
|
||||
"migrate_failed": "Migrate Failed",
|
||||
"database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions",
|
||||
"mail_variables_save_error": "Email configuration failed.",
|
||||
"connection_failed": "Database connection failed",
|
||||
"database_should_be_empty": "Database should be empty"
|
||||
},
|
||||
"success": {
|
||||
"mail_variables_save_successfully": "Email configurata con successo",
|
||||
"database_variables_save_successfully": "Database configurato con successo."
|
||||
}
|
||||
},
|
||||
"layout_login": {
|
||||
"copyright_crater": "Copyright @ Crater - 2020",
|
||||
"super_simple_invoicing": "Fatturazione super semplice",
|
||||
"for_freelancer": "per Freelancers &",
|
||||
"small_businesses": "Medio Piccoli Business ",
|
||||
"crater_help": "Crater ti aiuta a tracciare le spese, registrare pagamenti e generare graziose",
|
||||
"invoices_and_estimates": "fatture & preventivi con possibilità di scegliere tra diversi modelli."
|
||||
},
|
||||
"validation": {
|
||||
"invalid_url": "URL non valido (es: http://www.crater.com)",
|
||||
"required": "Campo obbligatorio",
|
||||
"email_incorrect": "Email non corretta.",
|
||||
"email_already_taken": "Email già in uso.",
|
||||
"email_does_not_exist": "L'utente con questa email non esiste",
|
||||
"item_unit_already_taken": "Questo nome item è già utilizzato",
|
||||
"payment_mode_already_taken": "Questa modalità di pagamento è già stata inserita.",
|
||||
"send_reset_link": "Invia Link di Reset",
|
||||
"not_yet": "Non ancora? Invia di nuovo",
|
||||
"password_min_length": "La password deve contenere {count} caratteri",
|
||||
"name_min_length": "Il nome deve avere almeno {count} lettere.",
|
||||
"enter_valid_tax_rate": "Inserisci un tasso di imposta valido",
|
||||
"numbers_only": "Solo numeri.",
|
||||
"characters_only": "Solo caratteri.",
|
||||
"password_incorrect": "La Password deve essere identica",
|
||||
"password_length": "La password deve essere lunga {count} caratteri.",
|
||||
"qty_must_greater_than_zero": "La quantità deve essere maggiore di zero.",
|
||||
"price_greater_than_zero": "Il prezzo deve essere maggiore di zero.",
|
||||
"payment_greater_than_zero": "Il pagamento deve essere maggiore di zero.",
|
||||
"payment_greater_than_due_amount": "Il pagamento inserito è maggiore di quello indicato in fattura.",
|
||||
"quantity_maxlength": "La Quantità non può essere maggiore di 20 cifre.",
|
||||
"price_maxlength": "Il prezzo non può contenere più di 20 cifre.",
|
||||
"price_minvalue": "Il prezzo deve essere maggiore di 0.",
|
||||
"amount_maxlength": "La somma non deve contenere più di 20 cifre.",
|
||||
"amount_minvalue": "La somma deve essere maggiore di 0.",
|
||||
"description_maxlength": "La Descrizione non deve superare i 255 caratteri.",
|
||||
"subject_maxlength": "L'Oggetto non deve superare i 100 caratter.",
|
||||
"message_maxlength": "Il messaggio non può superare i 255 caratteri.",
|
||||
"maximum_options_error": "Massimo di {max} opzioni selezionate. Per selezionare un'altra opzione deseleziona prima una opzione.",
|
||||
"notes_maxlength": "Le note non possono superare i 255 caratteri.",
|
||||
"address_maxlength": "L'Indirizzo non può eccedere i 255 caratteri.",
|
||||
"ref_number_maxlength": "Il Numero di Riferimento non può superare i 255 caratteri.",
|
||||
"prefix_maxlength": "Il Prefisso non può superare i 5 caratteri.",
|
||||
"something_went_wrong": "Si è verificato un errore"
|
||||
}
|
||||
}
|
||||
912
resources/assets/js/plugins/nl.json
Normal file
912
resources/assets/js/plugins/nl.json
Normal file
@ -0,0 +1,912 @@
|
||||
{
|
||||
"navigation": {
|
||||
"dashboard": "Dashboard",
|
||||
"customers": "Klanten",
|
||||
"items": "Artikelen",
|
||||
"invoices": "Facturen",
|
||||
"expenses": "Uitgaven",
|
||||
"estimates": "Offertes",
|
||||
"payments": "Betalingen",
|
||||
"reports": "Rapporten",
|
||||
"settings": "Instellingen",
|
||||
"logout": "Uitloggen"
|
||||
},
|
||||
"general": {
|
||||
"view_pdf": "Bekijk PDF",
|
||||
"download_pdf": "Download PDF",
|
||||
"save": "Opslaan",
|
||||
"cancel": "Annuleer",
|
||||
"update": "Bewerk",
|
||||
"download": "Download",
|
||||
"from_date": "Van datum",
|
||||
"to_date": "tot datum",
|
||||
"from": "Van",
|
||||
"to": "Naar",
|
||||
"go_back": "Ga terug",
|
||||
"back_to_login": "Terug naar inloggen?",
|
||||
"home": "Home",
|
||||
"filter": "Filter",
|
||||
"delete": "Verwijder",
|
||||
"edit": "Bewerk",
|
||||
"view": "Bekijk",
|
||||
"add_new_item": "Nieuw product",
|
||||
"clear_all": "Alles wissen",
|
||||
"showing": "Tonen",
|
||||
"of": "van",
|
||||
"actions": "Acties",
|
||||
"subtotal": "SUBTOTAAL",
|
||||
"discount": "KORTING",
|
||||
"fixed": "Vast",
|
||||
"percentage": "Percentage",
|
||||
"tax": "BTW",
|
||||
"total_amount": "TOTAAL BEDRAG",
|
||||
"bill_to": "Factureren aan",
|
||||
"ship_to": "Verzenden naar",
|
||||
"due": "Verschuldigd",
|
||||
"draft": "Concept",
|
||||
"sent": "Verzonden",
|
||||
"all": "Alles",
|
||||
"select_all": "Selecteer Alles",
|
||||
"choose_file": "Klik hier om een bestand te kiezen",
|
||||
"choose_template": "Kies een template",
|
||||
"choose": "Kies",
|
||||
"remove": "Verwijder",
|
||||
"powered_by": "Powered by",
|
||||
"bytefury": "Bytefury",
|
||||
"select_a_status": "Selecteer een status",
|
||||
"select_a_tax": "Select een btw",
|
||||
"search": "Zoek",
|
||||
"are_you_sure": "Ben je zeker?",
|
||||
"list_is_empty": "Lijst is leeg.",
|
||||
"no_tax_found": "Geen btw gevonden!",
|
||||
"four_zero_four": "404",
|
||||
"you_got_lost": "Whoops! Je bent verloren!",
|
||||
"go_home": "Ga naar de homepagina",
|
||||
"setting_updated": "Instellingen zijn geüpdatet",
|
||||
"select_state": "Selecteer staat",
|
||||
"select_country": "Selecteer land",
|
||||
"select_city": "Selecteer stad",
|
||||
"street_1": "Straat 1",
|
||||
"street_2": "Straat 2",
|
||||
"action_failed": "Actie mislukt",
|
||||
"sort_by": "sorteer op",
|
||||
"ascending": "Oplopend",
|
||||
"descending": "Aflopend",
|
||||
"subject": "onderwerpen",
|
||||
"message": "Bericht",
|
||||
"test_mail_conf": "Test de e-mailconfiguratie",
|
||||
"send_mail_successfully": "Mail is succesvol verzonden",
|
||||
},
|
||||
"dashboard": {
|
||||
"select_year": "Selecteer jaar",
|
||||
"cards": {
|
||||
"due_amount": "Verschuldigd bedrag",
|
||||
"customers": "Klanten",
|
||||
"invoices": "Facturen",
|
||||
"estimates": "Offertes"
|
||||
},
|
||||
"chart_info": {
|
||||
"total_sales": "Verkopen",
|
||||
"total_receipts": "Ontvangen",
|
||||
"total_expense": "Uitgaven",
|
||||
"net_income": "Netto inkomen",
|
||||
"year": "Selecteer jaar"
|
||||
},
|
||||
"weekly_invoices": {
|
||||
"title": "Wekelijkse facturen"
|
||||
},
|
||||
"monthly_chart": {
|
||||
"title": "Verkopen & uitgaven"
|
||||
},
|
||||
"recent_invoices_card": {
|
||||
"title": "Te betalen facturen",
|
||||
"due_on": "Verschuldigd op",
|
||||
"customer": "Klant",
|
||||
"amount_due": "Verschuldigd bedrag",
|
||||
"actions": "Acties",
|
||||
"view_all": "Bekijk alle"
|
||||
},
|
||||
"recent_estimate_card": {
|
||||
"title": "Recente offertes",
|
||||
"date": "Datum",
|
||||
"customer": "Klant",
|
||||
"amount_due": "Verschuldigd Bedrag",
|
||||
"actions": "Acties",
|
||||
"view_all": "Bekijk alle"
|
||||
}
|
||||
},
|
||||
"tax_types": {
|
||||
"name": "Naam",
|
||||
"description": "Omschrijving",
|
||||
"percent": "Percentage",
|
||||
"compound_tax": "Samengestelde Btw"
|
||||
},
|
||||
"customers": {
|
||||
"title": "Klanten",
|
||||
"add_customer": "Klant toevoegen",
|
||||
"contacts_list": "Klanten lijst",
|
||||
"name": "Naam",
|
||||
"display_name": "Weergavenaam",
|
||||
"primary_contact_name": "Primaire contactpersoon",
|
||||
"contact_name": "Contact naam",
|
||||
"amount_due": "Verschuldigd Bedrag",
|
||||
"email": "E-mail",
|
||||
"address": "Adres",
|
||||
"phone": "Telefoon",
|
||||
"website": "Website",
|
||||
"country": "Land",
|
||||
"state": "Staat",
|
||||
"city": "Stad",
|
||||
"zip_code": "Postcode",
|
||||
"added_on": "Toegevoegd op",
|
||||
"action": "Actie",
|
||||
"password": "Wachtwoord",
|
||||
"street_number": "Straat nummer",
|
||||
"primary_currency": "Primaire valuta",
|
||||
"add_new_customer": "Nieuwe klant toevoegen",
|
||||
"save_customer": "Klant opslaan",
|
||||
"update_customer": "Klant bewerken",
|
||||
"customer": "Klant | Klanten",
|
||||
"new_customer": "Nieuwe Klant",
|
||||
"edit_customer": "Bewerk Klant",
|
||||
"basic_info": "Basis info",
|
||||
"billing_address": "Facturatieadres",
|
||||
"shipping_address": "Verzendadres",
|
||||
"copy_billing_address": "Kopieer van facturatie",
|
||||
"no_customers": "Nog geen klanten!",
|
||||
"no_customers_found": "Geen klanten gevonden!",
|
||||
"list_of_customers": "Dit gedeelte bevat de lijst van klanten.",
|
||||
"primary_display_name": "Primaire weergavenaam",
|
||||
"select_currency": "Selecteer valuta",
|
||||
"select_a_customer": "Selecteer een klant",
|
||||
"type_or_click": "Typ of klik om te selecteren",
|
||||
"confirm_delete": "Je zal niet in staat zijn om deze klant te herstellen | Je zal niet in staat zijn om deze klanten te herstellen",
|
||||
"created_message": "Klant succesvol aangemaakt",
|
||||
"updated_message": "Klant succesvol bijgewerkt",
|
||||
"deleted_message": "Klant succesvol verwijderd | Klanten succesvol verwijderd"
|
||||
},
|
||||
"items": {
|
||||
"title": "Artikelen",
|
||||
"items_list": "Artikelen lijst",
|
||||
"name": "Naam",
|
||||
"unit": "Eenheid",
|
||||
"description": "Beschrijving",
|
||||
"added_on": "Toegevoegd op",
|
||||
"price": "Prijs",
|
||||
"date_of_creation": "Datum van aanmaak",
|
||||
"action": "Actie",
|
||||
"add_item": "Artikel toevoegen",
|
||||
"save_item": "Artikel opslaan",
|
||||
"update_item": "Artikel bewerken",
|
||||
"item": "Artikel | Artikels",
|
||||
"add_new_item": "Nieuw artikel toevoegen",
|
||||
"new_item": "Nieuw artikel",
|
||||
"edit_item": "Bewerk artikel",
|
||||
"no_items": "Nog geen artikelen!",
|
||||
"list_of_items": "Dit gedeelte zal de lijst met artikels bevatten.",
|
||||
"select_a_unit": "kies een eenheid",
|
||||
"item_attached_message": "Kan een artikel dat al in gebruik is niet verwijderen",
|
||||
"confirm_delete": "U zult niet in staat zijn om dit artikel terug te krijgen. | U zult niet in staat zijn om deze artikels terug te krijgen.",
|
||||
"created_message": "Artikel succesvol aangemaakt",
|
||||
"updated_message": "Artikel succesvol bijgewerkt",
|
||||
"deleted_message": "Artikel succesvol verwijderd | Artikels succesvol verwijderd",
|
||||
"taxes": "Belastingen",
|
||||
},
|
||||
"estimates": {
|
||||
"title": "Offertes",
|
||||
"estimate": "Offerte | Offertes",
|
||||
"estimates_list": "Offerte lijst",
|
||||
"days": "{days} Dagen",
|
||||
"months": "{months} Maanden",
|
||||
"years": "{years} Jaren",
|
||||
"all": "Alles",
|
||||
"paid": "Betaald",
|
||||
"unpaid": "Onbetaald",
|
||||
"customer": "KLANT",
|
||||
"ref_no": "REF NR.",
|
||||
"number": "NUMMER",
|
||||
"amount_due": "VERSCHULDIGD BEDRAG",
|
||||
"partially_paid": "Gedeeltelijk betaald",
|
||||
"total": "Totaal",
|
||||
"discount": "Korting",
|
||||
"sub_total": "Subtotaal",
|
||||
"estimate_number": "Offerte Nummer",
|
||||
"ref_number": "Ref. Nummer",
|
||||
"contact": "Contact",
|
||||
"add_item": "Voeg een item toe",
|
||||
"date": "Datum",
|
||||
"due_date": "Vervaldatum",
|
||||
"expiry_date": "Vervaldatum",
|
||||
"status": "Status",
|
||||
"add_tax": "Btw toevoegen",
|
||||
"amount": "Bedrag",
|
||||
"action": "Actie",
|
||||
"notes": "Notitie's",
|
||||
"tax": "Btw",
|
||||
"estimate_template": "Sjabloon",
|
||||
"convert_to_invoice": "Omzetten naar factuur",
|
||||
"mark_as_sent": "Markeer als verzonden",
|
||||
"send_estimate": "Verzend offerte",
|
||||
"record_payment": "Record Payment",
|
||||
"add_estimate": "Offerte toevoegen",
|
||||
"save_estimate": "Offerte opslaan",
|
||||
"confirm_conversion": "Wil je deze offerte omzetten in een factuur?",
|
||||
"conversion_message": "Factuur succesvol aangemaakt",
|
||||
"confirm_send_estimate": "Deze offerte zal verzonden worden via email naar de klant",
|
||||
"confirm_mark_as_sent": "Deze offerte zal gemarkeerd worden als verzonden",
|
||||
"confirm_mark_as_accepted": "Deze offerte zal gemarkeerd worden als geaccepteerd",
|
||||
"confirm_mark_as_rejected": "Deze offerte zal gemarkeerd worden als afgewezen",
|
||||
"no_matching_estimates": "Er zijn geen overeenkomende offertes!",
|
||||
"mark_as_sent_successfully": "Offerte succesvol gemarkeerd als verzonden",
|
||||
"send_estimate_successfully": "Offerte succesvol verzonden",
|
||||
"errors": {
|
||||
"required": "Veld is verplicht"
|
||||
},
|
||||
"accepted": "Geaccepteerd",
|
||||
"sent": "Verzonden",
|
||||
"draft": "Concept",
|
||||
"declined": "Geweigerd",
|
||||
"new_estimate": "Nieuwe offerte",
|
||||
"add_new_estimate": "Nieuwe offerte toevoegen",
|
||||
"update_Estimate": "Offerte bijwerken",
|
||||
"edit_estimate": "Bewerk offerte",
|
||||
"items": "items",
|
||||
"Estimate": "Offerte | Offertes",
|
||||
"add_new_tax": "Nieuwe Btw toevoegen",
|
||||
"no_estimates": "Nog geen offertes!",
|
||||
"list_of_estimates": "Dit deel bevat de lijst met offertes.",
|
||||
"mark_as_rejected": "Markeer als afgewezen",
|
||||
"mark_as_accepted": "Markeer als geaccepteerd",
|
||||
"marked_as_accepted_message": "Offerte gemarkeerd als geaccepteerd",
|
||||
"marked_as_rejected_message": "Offerte gemarkeerd als afgewezen",
|
||||
"confirm_delete": "U zult niet in staat zijn om deze offerte te herstellen. | U zult niet in staat zijn om deze offertes te herstellen.",
|
||||
"created_message": "Offerte succesvol aangemaakt",
|
||||
"updated_message": "Offerte succesvol bijgewerkt",
|
||||
"deleted_message": "Offerte succesvol verwijderd | Offertes succesvol verwijderd",
|
||||
"user_email_does_not_exist": "E-mail van de gebruiker bestaat niet",
|
||||
"something_went_wrong": "er ging iets mis",
|
||||
"item": {
|
||||
"title": "Artikel titel",
|
||||
"description": "Omschrijving",
|
||||
"quantity": "Aantal",
|
||||
"price": "Prijs",
|
||||
"discount": "Korting",
|
||||
"total": "Totaal",
|
||||
"total_discount": "Totale korting",
|
||||
"sub_total": "Subtotaal",
|
||||
"tax": "Btw",
|
||||
"amount": "Bedrag",
|
||||
"select_an_item": "Typ of klik om te selecteren",
|
||||
"type_item_description": "Type Artikel Omschrijving (optioneel)"
|
||||
}
|
||||
},
|
||||
"invoices": {
|
||||
"title": "Facturen",
|
||||
"invoices_list": "Facturen Lijst",
|
||||
"days": "{days} Dagen",
|
||||
"months": "{months} Maanden",
|
||||
"years": "{years} Jaren",
|
||||
"all": "Alle",
|
||||
"paid": "Betaald",
|
||||
"unpaid": "Onbetaald",
|
||||
"customer": "KLANT",
|
||||
"paid_status": "BETAALD STATUS",
|
||||
"ref_no": "REF NR.",
|
||||
"number": "NUMMER",
|
||||
"amount_due": "BEDRAG VERSCHULDIGD",
|
||||
"partially_paid": "Gedeeltelijk betaald",
|
||||
"total": "Totaal",
|
||||
"discount": "Korting",
|
||||
"sub_total": "Subtotaal",
|
||||
"invoice": "Factuur | Facturen",
|
||||
"invoice_number": "Factuurnummer",
|
||||
"ref_number": "Ref. Nummer",
|
||||
"contact": "Contact",
|
||||
"add_item": "Artikel toevoegen",
|
||||
"date": "Datum",
|
||||
"due_date": "Vervaldatum",
|
||||
"status": "Status",
|
||||
"add_tax": "Add Btw",
|
||||
"amount": "Bedrag",
|
||||
"action": "Actie",
|
||||
"notes": "Notie's",
|
||||
"view": "Bekijk",
|
||||
"send_invoice": "Verstuur Factuur",
|
||||
"invoice_template": "Factuur Sjabloon",
|
||||
"template": "Sjabloon",
|
||||
"mark_as_sent": "Markeer als verzonden",
|
||||
"confirm_send_invoice": "Deze factuur wordt per e-mail naar de klant gestuurd",
|
||||
"invoice_mark_as_sent": "Deze factuur wordt gemarkeerd als verzonden",
|
||||
"confirm_send": "Deze factuur wordt per e-mail naar de klant gestuurd",
|
||||
"invoice_date": "Factuurdatum",
|
||||
"record_payment": "Record Payment",
|
||||
"add_new_invoice": "Nieuwe factuur toevoegen",
|
||||
"update_expense": "Bewerk Uitgaven",
|
||||
"edit_invoice": "Bewerk Factuur",
|
||||
"new_invoice": "Nieuw Factuur",
|
||||
"save_invoice": "Factuur opslaan",
|
||||
"update_invoice": "Bewerk Factuur",
|
||||
"add_new_tax": "Nieuwe Btw toevoegen",
|
||||
"no_invoices": "Nog geen facturen!",
|
||||
"list_of_invoices": "Dit gedeelte bevat de lijst met facturen.",
|
||||
"select_invoice": "Selecteer factuur",
|
||||
"no_matching_invoices": "Er zijn geen overeenkomstige facturen!",
|
||||
"mark_as_sent_successfully": "Factuur succesvol gemarkeerd als verzonden",
|
||||
"send_invoice_successfully": "Factuur succesvol verzonden",
|
||||
"item": {
|
||||
"title": "Artikel titel",
|
||||
"description": "Omschrijving",
|
||||
"quantity": "Aantal",
|
||||
"price": "Prijs",
|
||||
"discount": "Korting",
|
||||
"total": "Totaal",
|
||||
"total_discount": "Totale korting",
|
||||
"sub_total": "Subtotaal",
|
||||
"tax": "Btw",
|
||||
"amount": "Bedrag",
|
||||
"select_an_item": "Typ of klik om te selecteren",
|
||||
"type_item_description": "Type Artikel omschrijving (optioneel)"
|
||||
},
|
||||
"payment_attached_message": "Een van de geselecteerde facturen is al aan een betaling gekoppeld. Zorg ervoor dat u de bijgevoegde betalingen eerst verwijderd om door te kunnen gaan met de verwijdering.",
|
||||
"confirm_delete": "U zult deze factuur niet kunnen herstellen | U zult deze facturen niet kunnen herstellen",
|
||||
"created_message": "Factuur succesvol aangemaakt ",
|
||||
"updated_message": "Factuur succesvol bijgewerkt ",
|
||||
"deleted_message": "Factuur succesvol verwijderd | Facturen succesvol verwijderd",
|
||||
"marked_as_sent_message": "Factuur succesvol gemarkeerd als verzonden",
|
||||
"user_email_does_not_exist": "E-mail van de gebruiker bestaat niet",
|
||||
"something_went_wrong": "er ging iets mis",
|
||||
"invalid_due_amount_message": "Het totale factuurbedrag kan niet lager zijn dan het totale betaalde bedrag voor deze factuur. Gelieve de factuur bij te werken of de bijhorende betalingen te verwijderen om verder te kunnen gaan.",
|
||||
"cloned_successfully": "Factuur succesvol gekloond",
|
||||
"clone_invoice": "Factuur klonen",
|
||||
"confirm_clone": "Deze factuur wordt gekloond in een nieuwe factuur",
|
||||
},
|
||||
"credit_notes": {
|
||||
"title": "Creditnota's",
|
||||
"credit_notes_list": "Creditnota's lijst",
|
||||
"credit_notes": "Creditnota's",
|
||||
"contact": "Contact",
|
||||
"date": "Datum",
|
||||
"amount": "Bedrag",
|
||||
"action": "Actie",
|
||||
"credit_number": "Credit Nummer",
|
||||
"notes": "Notie's",
|
||||
"confirm_delete": "Wil je deze Creditnota verwijderen?",
|
||||
"item": {
|
||||
"title": "Artikel titel",
|
||||
"description": "Omschrijving",
|
||||
"quantity": "Aantal",
|
||||
"price": "Prijs",
|
||||
"discount": "Korting",
|
||||
"total": "Totaal",
|
||||
"total_discount": "Totale korting",
|
||||
"sub_total": "Subtotaal",
|
||||
"tax": "Btw"
|
||||
}
|
||||
},
|
||||
"payments": {
|
||||
"title": "Betalingen",
|
||||
"payments_list": "Betalingen lijst",
|
||||
"record_payment": "Record Betaling",
|
||||
"customer": "Klant",
|
||||
"date": "Datum",
|
||||
"amount": "Bedrag",
|
||||
"action": "Actie",
|
||||
"payment_number": "betaling Nummer",
|
||||
"payment_mode": "Betalingswijze",
|
||||
"invoice": "Factuur",
|
||||
"note": "Notitie",
|
||||
"add_payment": "Betaling toevoegen",
|
||||
"new_payment": "Nieuwe betaling",
|
||||
"edit_payment": "Betaling bewerken",
|
||||
"view_payment": "Betaling bekijken",
|
||||
"add_new_payment": "Nieuwe betaling toevoegen",
|
||||
"save_payment": "Betaling opslaan",
|
||||
"update_payment": "Betaling bewerken",
|
||||
"payment": "Betaling | Betalingen",
|
||||
"no_payments": "Nog geen betalingen!",
|
||||
"list_of_payments": "Dit gedeelte bevat de lijst met betalingen.",
|
||||
"select_payment_mode": "Selecteer betalingswijze",
|
||||
"confirm_delete": "U zult deze betaling niet kunnen herstellen | U zult deze betalingen niet kunnen herstellen",
|
||||
"created_message": "Betaling succesvol aangemaakt",
|
||||
"updated_message": "Betaling succesvol bijgewerkt",
|
||||
"deleted_message": "Betaling succesvol verwijderd | Betalingen succesvol verwijderd",
|
||||
"invalid_amount_message": "Betalingsbedrag is ongeldig",
|
||||
"send_payment_receipt": "Betaalbewijs verzenden",
|
||||
"confirm_send_payment": "Deze betaling wordt via e-mail naar de klant gestuurd",
|
||||
"send_payment_successfully": "Betaling succesvol verzonden",
|
||||
"user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet",
|
||||
"something_went_wrong": "Er is iets fout gegaan",
|
||||
},
|
||||
"expenses": {
|
||||
"title": "Uitgaven",
|
||||
"expenses_list": "Uitgaven lijst",
|
||||
"expense_title": "Titel",
|
||||
"contact": "Contact",
|
||||
"category": "Categorie",
|
||||
"from_date": "Van Datum",
|
||||
"to_date": "Tot Datum",
|
||||
"expense_date": "Datum",
|
||||
"description": "Omschrijving",
|
||||
"receipt": "Bewijs",
|
||||
"amount": "Bedrag",
|
||||
"action": "Actie",
|
||||
"note": "Notitie",
|
||||
"category_id": "Categorie Id",
|
||||
"date": "Uitgave datum",
|
||||
"add_expense": "Uitgave toevoegen",
|
||||
"add_new_expense": "Nieuwe uitgave toevoegen",
|
||||
"save_expense": "Uitgave opslaan",
|
||||
"update_expense": "Uitgave bewerken",
|
||||
"download_receipt": "Download Bewijs",
|
||||
"edit_expense": "Bewerk uitgave",
|
||||
"new_expense": "Nieuwe uitgave",
|
||||
"expense": "Uitgave | Uitgaven",
|
||||
"no_expenses": "Nog geen uitgaven!",
|
||||
"list_of_expenses": "Dit gedeelte bevat de lijst met uitgaven.",
|
||||
"confirm_delete": "U zult niet in staat zijn om deze uitgave te herstellen | U zult niet in staat zijn om deze uitgaven te herstellen",
|
||||
"created_message": "Uitgave succesvol aangemaakt",
|
||||
"updated_message": "Uitgave succesvol bijgewerkt",
|
||||
"deleted_message": "Uitgave succesvol verwijderd | Uitgaven succesvol verwijderd",
|
||||
"select_a_customer": "Selecteer een klant",
|
||||
"customer": "Klanten",
|
||||
"categories": {
|
||||
"categories_list": "Categories Lijst",
|
||||
"title": "Titel",
|
||||
"name": "Naam",
|
||||
"description": "Omschrijving",
|
||||
"amount": "Bedrag",
|
||||
"actions": "Acties",
|
||||
"add_category": "Categorie toevoegen",
|
||||
"new_category": "Nieuwe categorie",
|
||||
"category": "Categorie | Categorieën",
|
||||
"select_a_category": "Selecteer een categorie"
|
||||
}
|
||||
},
|
||||
"login": {
|
||||
"email": "E-mail",
|
||||
"password": "Wachtwoord",
|
||||
"forgot_password": "Wachtwoord vergeten?",
|
||||
"or_signIn_with": "of aanmelden met",
|
||||
"login": "Aanmelden",
|
||||
"register": "Registreer",
|
||||
"reset_password": "Wachtwoord resetten",
|
||||
"password_reset_successfully": "Wachtwoord succesvol gereset",
|
||||
"enter_email": "Voer e-mail in",
|
||||
"enter_password": "Voer wachtwoord in",
|
||||
"retype_password": "Herhaal wachtwoord",
|
||||
"login_placeholder": "mail@example.com"
|
||||
},
|
||||
"reports": {
|
||||
"title": "Rapport",
|
||||
"from_date": "Van Datum",
|
||||
"to_date": "Tot Datum",
|
||||
"status": "Status",
|
||||
"paid": "Betaald",
|
||||
"unpaid": "Onbetaald",
|
||||
"download_pdf": "Download PDF",
|
||||
"view_pdf": "Bekijk PDF",
|
||||
"update_report": "Bewerk Rapport",
|
||||
"report": "Rapport | Rapporten",
|
||||
"profit_loss": {
|
||||
"profit_loss": "Winst & Verlies",
|
||||
"to_date": "Tot Datum",
|
||||
"from_date": "Van Datum",
|
||||
"date_range": "Selecteer Datumbereik"
|
||||
},
|
||||
"sales": {
|
||||
"sales": "Verkopen",
|
||||
"date_range": "Selecteer Datumbereik",
|
||||
"to_date": "Tot Datum",
|
||||
"from_date": "Van Datum",
|
||||
"report_type": "Rapport Type"
|
||||
},
|
||||
"taxes": {
|
||||
"taxes": "BTW",
|
||||
"to_date": "Tot Datum",
|
||||
"from_date": "Van Datum",
|
||||
"date_range": "Selecteer Datumbereik"
|
||||
},
|
||||
"errors": {
|
||||
"required": "Veld is verplicht"
|
||||
},
|
||||
"invoices": {
|
||||
"invoice": "Factuur",
|
||||
"invoice_date": "Factuurdatum",
|
||||
"due_date": "Vervaldatum",
|
||||
"amount": "Bedrag",
|
||||
"contact_name": "Naam contactpersoon",
|
||||
"status": "Status"
|
||||
},
|
||||
"estimates": {
|
||||
"estimate": "Offerte",
|
||||
"estimate_date": "Offertedatum",
|
||||
"due_date": "Vervaldatum",
|
||||
"estimate_number": "Offerte nummer",
|
||||
"ref_number": "Ref. Nummer",
|
||||
"amount": "Bedrag",
|
||||
"contact_name": "Naam contactpersoon",
|
||||
"status": "Status"
|
||||
},
|
||||
"expenses": {
|
||||
"expenses": "Uitgaven",
|
||||
"category": "Categorie",
|
||||
"date": "Datum",
|
||||
"amount": "Bedrag",
|
||||
"to_date": "Tot Datum",
|
||||
"from_date": "Van Datum",
|
||||
"date_range": "Selecteer Datumbereik"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"items": {
|
||||
"title": "Artikelen",
|
||||
"units": "eenheden",
|
||||
"add_item_unit": "Itemeenheid toevoegen",
|
||||
"unit_name": "Naam eenheid",
|
||||
"item_unit_added": "Item Unit toegevoegd",
|
||||
"item_unit_updated": "Artikeleenheid geüpdatet",
|
||||
"item_unit_confirm_delete": "U kunt dit item niet terughalen",
|
||||
"already_in_use": "Item Unit is al in gebruik",
|
||||
"deleted_message": "Artikeleenheid succesvol verwijderd"
|
||||
},
|
||||
"menu_title": {
|
||||
"account_settings": "Account Instellingen",
|
||||
"company_information": "Bedrijfsinformatie",
|
||||
"customization": "Customizatie",
|
||||
"preferences": "Voorkeuren",
|
||||
"notifications": "Notificaties",
|
||||
"tax_types": "Btw Types",
|
||||
"expense_category": "Uitgave Categories",
|
||||
"update_app": "Bewerk App"
|
||||
},
|
||||
"title": "Instellingen",
|
||||
"setting": "Instellingen | Instellingen",
|
||||
"general": "Algemeen",
|
||||
"language": "Taal",
|
||||
"primary_currency": "Primaire valuta",
|
||||
"timezone": "Tijdszone",
|
||||
"date_format": "Datum formaat",
|
||||
"currencies": {
|
||||
"title": "Valuta's",
|
||||
"currency": "Valuta | Valuta's",
|
||||
"currencies_list": "Valuta's lijst",
|
||||
"select_currency": "Selecteer Valuta",
|
||||
"name": "Naam",
|
||||
"code": "Code",
|
||||
"symbol": "Symbool",
|
||||
"precision": "Precisie",
|
||||
"thousand_separator": "Thousand Separator",
|
||||
"decimal_separator": "Decimal Separator",
|
||||
"position": "Positie",
|
||||
"position_of_symbol": "Positie van symbool",
|
||||
"right": "Rechts",
|
||||
"left": "Links",
|
||||
"action": "Actie",
|
||||
"add_currency": "Valuta toevoegen"
|
||||
},
|
||||
"mail": {
|
||||
"host": "Mail Host",
|
||||
"port": "Mail Port",
|
||||
"driver": "Mail Driver",
|
||||
"secret": "Geheim",
|
||||
"mailgun_secret": "Mailgun Geheim",
|
||||
"mailgun_domain": "Domein",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Secret",
|
||||
"ses_key": "SES Key",
|
||||
"password": "Mail Wachtwoord",
|
||||
"username": "Mail Gebruikersnaam",
|
||||
"mail_config": "Mail configuratie",
|
||||
"from_name": "Van Mail Naam",
|
||||
"from_mail": "Van Mail Adres",
|
||||
"encryption": "Mail Encryptie",
|
||||
"mail_config_desc": "Hieronder vindt u het formulier voor het configureren van het e-mailstuurprogramma voor het verzenden van e-mails vanuit de app. U kunt ook externe leveranciers zoals Sendgrid, SES etc. configureren."
|
||||
},
|
||||
"pdf": {
|
||||
"title": "PDF Instellingen",
|
||||
"footer_text": "Voettekst",
|
||||
"pdf_layout": "PDF Layout"
|
||||
},
|
||||
"company_info": {
|
||||
"company_info": "Bedrijfsinformatie",
|
||||
"company_name": "Bedrijfsnaam",
|
||||
"company_logo": "bedrijfslogo",
|
||||
"section_description": "Informatie over uw bedrijf die zal worden weergegeven op facturen, offertes en andere documenten gemaakt door Crater.",
|
||||
"phone": "Telefoon",
|
||||
"country": "Land",
|
||||
"state": "Staat",
|
||||
"city": "Stad",
|
||||
"address": "Adres",
|
||||
"zip": "Postcode",
|
||||
"save": "Opslaan",
|
||||
"updated_message": "Bedrijfsinformatie succesvol bijgewerkt"
|
||||
},
|
||||
"customization": {
|
||||
"customization": "Customizatie",
|
||||
"save": "Opslaan",
|
||||
"addresses": {
|
||||
"title": "Adressen",
|
||||
"section_description": "U kan het formaat Klant Factuuradres en Klant Leveradres instellen (Alleen weergegeven in PDF). ",
|
||||
"customer_billing_address": "Factuuradres van de klant",
|
||||
"customer_shipping_address": "Verzendadres van de klant",
|
||||
"company_address": "Bedrijfsadres",
|
||||
"insert_fields": "Velden invoegen",
|
||||
"contact": "Contactpersoon",
|
||||
"address": "Adres",
|
||||
"display_name": "Weergavenaam",
|
||||
"primary_contact_name": "Primair contactpersoon naam",
|
||||
"email": "E-mail",
|
||||
"website": "Website",
|
||||
"name": "Naam",
|
||||
"country": "Land",
|
||||
"state": "Staat",
|
||||
"city": "Stad",
|
||||
"company_name": "Bedrijfsnaam",
|
||||
"address_street_1": "Adres straat 1",
|
||||
"address_street_2": "Adres straat 2",
|
||||
"phone": "Telefoon",
|
||||
"zip_code": "Postcode",
|
||||
"address_setting_updated": "Adres instellingen succesvol bijgewerkt"
|
||||
},
|
||||
"updated_message": "Adres informatie succesvol bijgewerkt",
|
||||
"invoices": {
|
||||
"title": "Facturen",
|
||||
"notes": "Notie's",
|
||||
"invoice_prefix": "Factuur Prefix",
|
||||
"invoice_settings": "Factuur instellingen",
|
||||
"autogenerate_invoice_number": "Autogenereer Factuurnummer",
|
||||
"invoice_setting_description": "Schakel dit uit, Als u niet elke keer dat u een nieuwe factuur aanmaakt automatisch factuurnummers wilt genereren.",
|
||||
"enter_invoice_prefix": "Voer factuur prefix in",
|
||||
"terms_and_conditions": "Algemene voorwaarden",
|
||||
"invoice_setting_updated": "Factuur instellingen succesvol bijgewerkt"
|
||||
},
|
||||
"estimates": {
|
||||
"title": "Offertes",
|
||||
"estimate_prefix": "Offerte Prefix",
|
||||
"estimate_settings": "Offerte instellingen",
|
||||
"autogenerate_estimate_number": "Autogenereer offertenummer",
|
||||
"estimate_setting_description": "Schakel dit uit, Als u niet elke keer dat u een nieuwe offerte aanmaakt automatisch offertenummers wilt genereren.",
|
||||
"enter_estimate_prefix": "Voer offerte prefix in",
|
||||
"estimate_setting_updated": "Offerte instellingen succesvol bijgewerkt"
|
||||
},
|
||||
"payments": {
|
||||
"title": "Betalingen",
|
||||
"payment_prefix": "Betaling Prefix",
|
||||
"payment_settings": "Betalingsinstellingen",
|
||||
"autogenerate_payment_number": "Autogenereer betalingsnummer",
|
||||
"payment_setting_description": "Schakel dit uit, Als u niet elke keer dat u een nieuwe betaling aanmaakt automatisch betalingsnummers wilt genereren.",
|
||||
"enter_payment_prefix": "Voer betaling prefix in",
|
||||
"payment_setting_updated": "Betaling instellingen succesvol bijgewerkt",
|
||||
"payment_mode": "Betalingsmiddel",
|
||||
"add_payment_mode": "Betaalmodus toevoegen",
|
||||
"mode_name": "Mode Name",
|
||||
"payment_mode_added": "Betaalmethode toegevoegd",
|
||||
"payment_mode_updated": "Betalingsmodus geüpdatet",
|
||||
"payment_mode_confirm_delete": "U kunt deze betalingsmodus niet herstellen",
|
||||
"already_in_use": "De betalingsmodus is al in gebruik",
|
||||
"deleted_message": "Betaalmethode succesvol verwijderd"
|
||||
}
|
||||
},
|
||||
"account_settings": {
|
||||
"profile_picture": "Profielfoto",
|
||||
"name": "Naam",
|
||||
"email": "E-mail",
|
||||
"password": "Wachtwoord",
|
||||
"confirm_password": "Bevestig wachtwoord",
|
||||
"account_settings": "Account Instellingen",
|
||||
"save": "Opslaan",
|
||||
"section_description": "U kunt uw naam, e-mail en wachtwoord updaten met behulp van het onderstaande formulier.",
|
||||
"updated_message": "Account instellingen succesvol bijgewerkt"
|
||||
},
|
||||
"user_profile": {
|
||||
"name": "Naam",
|
||||
"email": "E-mail",
|
||||
"password": "Wachtwoord",
|
||||
"confirm_password": "Bevestig wachtwoord"
|
||||
},
|
||||
"notification": {
|
||||
"title": "Notificatie",
|
||||
"email": "Zend notificatie naar",
|
||||
"description": "Welke e-mailmeldingen wilt u ontvangen als er iets verandert?",
|
||||
"invoice_viewed": "Factuur bekeken",
|
||||
"invoice_viewed_desc": "Wanneer uw klant de factuur bekijkt die via het Crater dashboard is verstuurd.",
|
||||
"estimate_viewed": "Offerte bekeken",
|
||||
"estimate_viewed_desc": "Wanneer uw klant de offerte bekijkt die via het Crater dashboard is verstuurd.",
|
||||
"save": "Opslaan",
|
||||
"email_save_message": "E-mail succesvol opgeslaan",
|
||||
"please_enter_email": "Vul a.u.b. e-mail in"
|
||||
},
|
||||
"tax_types": {
|
||||
"title": "Btw Types",
|
||||
"add_tax": "Add Btw",
|
||||
"description": "U kunt naar keuze btw toevoegen of verwijderen. Crater ondersteunt btw op individuele items en op de factuur.",
|
||||
"add_new_tax": "Nieuwe Btw toevoegen",
|
||||
"tax_settings": "Btw instellingen",
|
||||
"tax_per_item": "Btw per artikel",
|
||||
"tax_name": "Btw naam",
|
||||
"compound_tax": "Samengestelde btw",
|
||||
"percent": "Percentage",
|
||||
"action": "Actie",
|
||||
"tax_setting_description": "Schakel dit in als u btw wilt toevoegen aan individuele factuurposten. Standaard worden de belastingen direct aan de factuur toegevoegd.",
|
||||
"created_message": "btw type succesvol aangemaakt",
|
||||
"updated_message": "btw type succesvol bijgewerkt",
|
||||
"deleted_message": "btw type succesvol verwijderd",
|
||||
"confirm_delete": "U zult niet in staat zjin om dit btw type te herstellen",
|
||||
"already_in_use": "Btw al in gebruik"
|
||||
},
|
||||
"expense_category": {
|
||||
"title": "Uitgavencategorieën",
|
||||
"action": "Actie",
|
||||
"description": "Voor het toevoegen van uitgavenposten zijn categorieën vereist. U kunt deze categorieën naar keuze toevoegen of verwijderen.",
|
||||
"add_new_category": "Nieuwe categorie toevoegen",
|
||||
"category_name": "Categorienaam",
|
||||
"category_description": "Omschrijving",
|
||||
"created_message": "Uitgavencategorie succesvol aangemaakt",
|
||||
"deleted_message": "Uitgavencategorie succesvol verwijderd",
|
||||
"updated_message": "Uitgavencategorie succesvol bijgewerkt",
|
||||
"confirm_delete": "U zult niet in staat zijn om deze uitgavencategorie te herstellen",
|
||||
"already_in_use": "Categorie is al in gebruik"
|
||||
},
|
||||
"preferences": {
|
||||
"currency": "Valuta",
|
||||
"language": "Taal",
|
||||
"time_zone": "Tijdzone",
|
||||
"fiscal_year": "Boekjaar",
|
||||
"date_format": "Datum Formaat",
|
||||
"discount_setting": "Korting instelling",
|
||||
"discount_per_item": "Korting per Artikel ",
|
||||
"discount_setting_description": "Schakel dit in als u korting wilt toevoegen aan individuele factuurartikelen. Standaard wordt Korting direct aan de factuur toegevoegd.",
|
||||
"save": "Opslaan",
|
||||
"preference": "Voorkeur | Voorkeuren",
|
||||
"general_settings": "Standaard voorkeuren voor het systeem.",
|
||||
"updated_message": "Voorkeuren succesvol bijgewerkt",
|
||||
"select_language": "selecteer taal",
|
||||
"select_time_zone": "selecteer Tijdzone",
|
||||
"select_date_formate": "selecteer Datum formaat",
|
||||
"select_financial_year": "selecteer boekjaar"
|
||||
},
|
||||
"update_app": {
|
||||
"title": "App bijwerken",
|
||||
"description": "U kunt Crater eenvoudig updaten door te controleren of er een nieuwe update is door op onderstaande knop te klikken.",
|
||||
"check_update": "Controleer op updates",
|
||||
"avail_update": "Nieuwe update beschikbaar",
|
||||
"next_version": "Volgende versie",
|
||||
"update": "Update nu",
|
||||
"update_progress": "Update in behandeling...",
|
||||
"progress_text": "Het zal slechts een paar minuten duren. Gelieve het scherm niet te verversen of het venster te sluiten voordat de update is voltooid.",
|
||||
"update_success": "App is geüpdatet! Wacht even terwijl uw browser automatisch wordt herladen..",
|
||||
"latest_message": "Geen update beschikbaar! U zit op de laatste versie.",
|
||||
"current_version": "Huidige versie"
|
||||
}
|
||||
},
|
||||
"wizard": {
|
||||
"account_info": "Account Informatie",
|
||||
"account_info_desc": "Hieronder worden de gegevens gebruikt om de hoofdadministrator-account aan te maken. Ook kunt u de gegevens op elk moment na het inloggen wijzigen.",
|
||||
"name": "Naam",
|
||||
"email": "E-mail",
|
||||
"password": "Wachtwoord",
|
||||
"confirm_password": "Bevestig wachtwoord",
|
||||
"save_cont": "Opslaan & doorgaan",
|
||||
"company_info": "Bedrijfsinformatie",
|
||||
"company_info_desc": "Deze informatie wordt op de facturen weergegeven. Merk op dat u dit later op de instellingenpagina kunt bewerken.",
|
||||
"company_name": "Bedrijfsnaam",
|
||||
"company_logo": "Bedrijfslogo",
|
||||
"logo_preview": "Logo Voorbeeld",
|
||||
"preferences": "Voorkeuren",
|
||||
"preferences_desc": "Standaard voorkeuren voor het systeem.",
|
||||
"country": "Land",
|
||||
"state": "Staat",
|
||||
"city": "Stad",
|
||||
"address": "Adres",
|
||||
"street": "Straat1 | Straatt2",
|
||||
"phone": "Telefoon",
|
||||
"zip_code": "Postcode",
|
||||
"go_back": "Ga Terug",
|
||||
"currency": "Valuta",
|
||||
"language": "Taal",
|
||||
"time_zone": "Tijdzone",
|
||||
"fiscal_year": "Boekjaar",
|
||||
"date_format": "Datum Formaat",
|
||||
"from_address": "Van Adres",
|
||||
"username": "Gebruikersnaam",
|
||||
"next": "Volgende",
|
||||
"continue": "Doorgaan",
|
||||
"skip": "Sla over",
|
||||
"database": {
|
||||
"database": "Site URL & Database",
|
||||
"connection": "Database Connectie",
|
||||
"host": "Database Host",
|
||||
"port": "Database Port",
|
||||
"password": "Database Wachtwoord",
|
||||
"app_url": "App URL",
|
||||
"username": "Database Gebruikersnaam",
|
||||
"db_name": "Database Naam",
|
||||
"desc": "Maak een database aan op de server en vul de referenties in in het formulier."
|
||||
},
|
||||
"permissions": {
|
||||
"permissions": "Rechten",
|
||||
"permission_confirm_title": "Ben je zeker dat je wilt doorgaan?",
|
||||
"permission_confirm_desc": "Toestemmingscheck van de map is mislukt",
|
||||
"permission_desc": "Hieronder staat de lijst met mapmachtigingen die nodig zijn om de app te laten werken. Als de toestemmingscontrole mislukt, zorg er dan voor dat u uw mapmachtigingen bijwerkt."
|
||||
},
|
||||
"mail": {
|
||||
"host": "Mail Host",
|
||||
"port": "Mail Port",
|
||||
"driver": "Mail Driver",
|
||||
"secret": "Geheim",
|
||||
"mailgun_secret": "Mailgun Geheim",
|
||||
"mailgun_domain": "Domein",
|
||||
"mailgun_endpoint": "Mailgun Endpoint",
|
||||
"ses_secret": "SES Geheim",
|
||||
"ses_key": "SES Sleutel",
|
||||
"password": "Mail Wachtwoord",
|
||||
"username": "Mail Gebruikersnaam",
|
||||
"mail_config": "Mail Configuratie",
|
||||
"from_name": "Van Mail Naam",
|
||||
"from_mail": "Van Mail Adres",
|
||||
"encryption": "Mail Encryptie",
|
||||
"mail_config_desc": "Hieronder vindt u het formulier voor het configureren van het e-mailstuurprogramma voor het verzenden van e-mails vanuit de app. U kunt ook externe providers zoals Sendgrid, SES etc. configureren."
|
||||
},
|
||||
"req": {
|
||||
"system_req": "Systeemvereisten",
|
||||
"php_req_version": "Php (versie {version} verplicht)",
|
||||
"check_req": "Controleer vereisten",
|
||||
"system_req_desc": "Crater heeft een paar serververeisten. Zorg ervoor dat uw server de vereiste php-versie en alle hieronder vermelde extensies heeft."
|
||||
},
|
||||
"errors": {
|
||||
"migrate_failed": "Migratie Mislukt",
|
||||
"database_variables_save_error": "Niet in staat om verbinding te maken met de DB met de voorziene waarden.",
|
||||
"mail_variables_save_error": "E-mail configuratie mislukt.",
|
||||
"connection_failed": "Database connectie mislukt",
|
||||
"database_should_be_empty": "Database moet leeg zijn"
|
||||
},
|
||||
"success": {
|
||||
"mail_variables_save_successfully": "E-mail succesvol geconfigureerd",
|
||||
"database_variables_save_successfully": "Database succesvol geconfigureerd."
|
||||
}
|
||||
},
|
||||
"layout_login": {
|
||||
"copyright_crater": "Copyright @ Crater - 2019",
|
||||
"super_simple_invoicing": "Super eenvoudige facturatie",
|
||||
"for_freelancer": "voor Freelancers &",
|
||||
"small_businesses": "Kleine bedrijven ",
|
||||
"crater_help": "Crater helpt u bij het bijhouden van de uitgaven, het registreren van betalingen & het genereren van mooie",
|
||||
"invoices_and_estimates": "facturen & offertes met de mogelijkheid te kiezen uit meerdere sjablonen."
|
||||
},
|
||||
"validation": {
|
||||
"invalid_url": "Ongeldige url (ex: http://www.crater.com)",
|
||||
"required": "Veld is verplicht",
|
||||
"email_incorrect": "Onjuist E-mail.",
|
||||
"email_already_taken": "De e-mail is reeds ingenomen.",
|
||||
"email_does_not_exist": "Gebruiker met opgegeven e-mail bestaat niet",
|
||||
"send_reset_link": "Verstuur Reset Link",
|
||||
"not_yet": "Nog niet? Verstuur opnieuw.",
|
||||
"password_min_length": "Wachtwoord moet {count} karakters bevatten",
|
||||
"name_min_length": "Naam moet tenminste {count} letters bevatten.",
|
||||
"enter_valid_tax_rate": "Voer een geldig btw tarief in",
|
||||
"numbers_only": "Alleen nummers.",
|
||||
"characters_only": "Alleen karakters.",
|
||||
"password_incorrect": "Wachtwoorden moeten identiek zijn",
|
||||
"password_length": "Wachtwoord moet {count} karakters lang zijn.",
|
||||
"qty_must_greater_than_zero": "Hoeveelheid moet groter zijn dan nul.",
|
||||
"price_greater_than_zero": "Prijs moet groter zijn dan nul.",
|
||||
"payment_greater_than_zero": "Betaling moet groter zijn dan nul.",
|
||||
"payment_greater_than_due_amount": "Ingevoerde betaling is meer dan het verschuldigde bedrag van deze factuur.",
|
||||
"quantity_maxlength": "De hoeveelheid mag niet groter zijn dan 20 cijfers.",
|
||||
"price_maxlength": "De prijs mag niet hoger zijn dan 20 cijfers.",
|
||||
"price_minvalue": "De prijs moet groter zijn dan 0.",
|
||||
"amount_maxlength": "Het bedrag mag niet groter zijn dan 20 cijfers.",
|
||||
"amount_minvalue": "Bedrag moet groter zijn dan 0.",
|
||||
"description_maxlength": "De beschrijving mag niet groter zijn dan 255 tekens.",
|
||||
"maximum_options_error": "Maximum van {max} opties geselecteerd. Verwijder eerst een geselecteerde optie om een andere te selecteren.",
|
||||
"notes_maxlength": "Notities mogen niet groter zijn dan 255 tekens.",
|
||||
"address_maxlength": "Het adres mag niet groter zijn dan 255 tekens.",
|
||||
"ref_number_maxlength": "Ref. Nummer mag niet groter zijn dan 255 tekens.",
|
||||
"prefix_maxlength": "prefix mag niet groter zijn dan 5 karakters.",
|
||||
"item_unit_already_taken": "De naam van dit item is al in gebruik",
|
||||
"payment_mode_already_taken": "Deze naam voor de betalingsmodus is al in gebruik",
|
||||
"subject_maxlength": "Het onderwerp mag niet meer dan 100 tekens bevatten.",
|
||||
"message_maxlength": "Bericht mag niet groter zijn dan 255 tekens.",
|
||||
"something_went_wrong": "Er is iets fout gegaan"
|
||||
}
|
||||
}
|
||||
@ -414,6 +414,7 @@
|
||||
"expense_title": "Título",
|
||||
"contact": "Contato",
|
||||
"category": "Categoria",
|
||||
"customer": "Cliente",
|
||||
"from_date": "A partir da Data",
|
||||
"to_date": "Até a Data",
|
||||
"expense_date": "Data",
|
||||
|
||||
@ -21,13 +21,6 @@ export const login = ({ commit, dispatch, state }, data) => {
|
||||
window.toastr['success']('Login Successful')
|
||||
resolve(response)
|
||||
}).catch(err => {
|
||||
if (err.response.data.error === 'invalid_credentials') {
|
||||
window.toastr['error']('Invalid Credentials')
|
||||
} else {
|
||||
// Something happened in setting up the request that triggered an Error
|
||||
console.log('Error', err.message)
|
||||
}
|
||||
|
||||
commit(types.AUTH_ERROR, err.response)
|
||||
Ls.remove('auth.token')
|
||||
reject(err)
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<base-button type="submit" color="theme">{{ $t('login.login') }}</base-button>
|
||||
<base-button :loading="isLoading" type="submit" color="theme">{{ $t('login.login') }}</base-button>
|
||||
|
||||
<!-- <div class="social-links">
|
||||
|
||||
@ -87,7 +87,8 @@ export default {
|
||||
password: '',
|
||||
remember: ''
|
||||
},
|
||||
submitted: false
|
||||
submitted: false,
|
||||
isLoading: false
|
||||
}
|
||||
},
|
||||
validations: {
|
||||
@ -98,7 +99,7 @@ export default {
|
||||
},
|
||||
password: {
|
||||
required,
|
||||
minLength: minLength(5)
|
||||
minLength: minLength(8)
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -113,7 +114,6 @@ export default {
|
||||
}
|
||||
|
||||
this.isLoading = true
|
||||
|
||||
this.login(this.loginData).then((res) => {
|
||||
this.$router.push('/admin/dashboard')
|
||||
this.isLoading = false
|
||||
|
||||
@ -112,6 +112,7 @@ export default {
|
||||
]),
|
||||
async searchItems (search) {
|
||||
let data = {
|
||||
search,
|
||||
filter: {
|
||||
name: search,
|
||||
unit: '',
|
||||
|
||||
@ -102,6 +102,19 @@
|
||||
<span v-if="!$v.formData.amount.minValue" class="text-danger">{{ $t('validation.price_minvalue') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label class="form-label">{{ $t('expenses.customer') }}</label>
|
||||
<base-select
|
||||
ref="baseSelect"
|
||||
v-model="customer"
|
||||
:options="customerList"
|
||||
:searchable="true"
|
||||
:show-labels="false"
|
||||
:placeholder="$t('customers.select_a_customer')"
|
||||
label="name"
|
||||
track-by="id"
|
||||
/>
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="description">{{ $t('expenses.note') }}</label>
|
||||
<base-text-area
|
||||
@ -169,7 +182,8 @@ export default {
|
||||
expense_category_id: null,
|
||||
expense_date: new Date(),
|
||||
amount: null,
|
||||
notes: ''
|
||||
notes: '',
|
||||
user_id: null
|
||||
},
|
||||
money: {
|
||||
decimal: '.',
|
||||
@ -185,7 +199,9 @@ export default {
|
||||
passData: [],
|
||||
contacts: [],
|
||||
previewReceipt: null,
|
||||
fileSendUrl: '/api/expenses'
|
||||
fileSendUrl: '/api/expenses',
|
||||
customer: null,
|
||||
customerList: []
|
||||
}
|
||||
},
|
||||
validations: {
|
||||
@ -297,6 +313,8 @@ export default {
|
||||
},
|
||||
async fetchInitialData () {
|
||||
this.fetchCategories()
|
||||
let fetchData = await this.fetchCreateExpense()
|
||||
this.customerList = fetchData.data.customers
|
||||
if (this.isEdit) {
|
||||
let response = await this.fetchExpense(this.$route.params.id)
|
||||
this.category = response.data.expense.category
|
||||
@ -304,6 +322,9 @@ export default {
|
||||
this.formData.expense_date = moment(this.formData.expense_date).toString()
|
||||
this.formData.amount = (response.data.expense.amount)
|
||||
this.fileSendUrl = `/api/expenses/${this.$route.params.id}`
|
||||
if (response.data.expense.user_id) {
|
||||
this.customer = this.customerList.find(customer => customer.id === response.data.expense.user_id)
|
||||
}
|
||||
}
|
||||
},
|
||||
async sendData () {
|
||||
@ -319,9 +340,10 @@ export default {
|
||||
data.append('attachment_receipt', this.file)
|
||||
}
|
||||
data.append('expense_category_id', this.formData.expense_category_id)
|
||||
data.append('expense_date', moment(this.formData.expense_date).format('DD/MM/YYYY'))
|
||||
data.append('expense_date', moment(this.formData.expense_date).format('DD/MM/YYYY'))
|
||||
data.append('amount', (this.formData.amount))
|
||||
data.append('notes', this.formData.notes)
|
||||
data.append('notes', this.formData.notes ? this.formData.notes : '')
|
||||
data.append('user_id', this.customer ? this.customer.id : '')
|
||||
|
||||
if (this.isEdit) {
|
||||
this.isLoading = true
|
||||
|
||||
@ -43,7 +43,19 @@
|
||||
<transition name="fade">
|
||||
<div v-show="showFilters" class="filter-section">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-3">
|
||||
<label>{{ $t('expenses.customer') }}</label>
|
||||
<base-select
|
||||
v-model="filters.user"
|
||||
:options="customers"
|
||||
:searchable="true"
|
||||
:show-labels="false"
|
||||
:placeholder="$t('expenses.select_a_customer')"
|
||||
label="name"
|
||||
@click="filter = ! filter"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label>{{ $t('expenses.category') }}</label>
|
||||
<base-select
|
||||
v-model="filters.category"
|
||||
@ -55,7 +67,7 @@
|
||||
@click="filter = ! filter"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-3">
|
||||
<label>{{ $t('expenses.from_date') }}</label>
|
||||
<base-date-picker
|
||||
v-model="filters.from_date"
|
||||
@ -63,7 +75,7 @@
|
||||
calendar-button-icon="calendar"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="col-md-3">
|
||||
<label>{{ $t('expenses.to_date') }}</label>
|
||||
<base-date-picker
|
||||
v-model="filters.to_date"
|
||||
@ -161,6 +173,11 @@
|
||||
sort-as="name"
|
||||
show="category.name"
|
||||
/>
|
||||
<table-column
|
||||
:label="$t('expenses.customer')"
|
||||
sort-as="user_name"
|
||||
show="user_name"
|
||||
/>
|
||||
<table-column
|
||||
:label="$t('expenses.date')"
|
||||
sort-as="expense_date"
|
||||
@ -237,10 +254,12 @@ export default {
|
||||
showFilters: false,
|
||||
filtersApplied: false,
|
||||
isRequestOngoing: true,
|
||||
customers: [],
|
||||
filters: {
|
||||
category: null,
|
||||
from_date: '',
|
||||
to_date: ''
|
||||
to_date: '',
|
||||
user: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -308,6 +327,7 @@ export default {
|
||||
]),
|
||||
async fetchData ({ page, filter, sort }) {
|
||||
let data = {
|
||||
user_id: this.filters.user ? this.filters.user.id : null,
|
||||
expense_category_id: this.filters.category !== null ? this.filters.category.id : '',
|
||||
from_date: this.filters.from_date === '' ? this.filters.from_date : moment(this.filters.from_date).format('DD/MM/YYYY'),
|
||||
to_date: this.filters.to_date === '' ? this.filters.to_date : moment(this.filters.to_date).format('DD/MM/YYYY'),
|
||||
@ -318,6 +338,7 @@ export default {
|
||||
|
||||
this.isRequestOngoing = true
|
||||
let response = await this.fetchExpenses(data)
|
||||
this.customers = response.data.customers
|
||||
this.isRequestOngoing = false
|
||||
|
||||
return {
|
||||
@ -340,7 +361,8 @@ export default {
|
||||
this.filters = {
|
||||
category: null,
|
||||
from_date: '',
|
||||
to_date: ''
|
||||
to_date: '',
|
||||
user: null
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
|
||||
@ -101,6 +101,7 @@ export default {
|
||||
]),
|
||||
async searchItems (search) {
|
||||
let data = {
|
||||
search,
|
||||
filter: {
|
||||
name: search,
|
||||
unit: '',
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
@component('mail::message')
|
||||
# Introduction
|
||||
Customer viewed this Estimate.
|
||||
{{ $data['user']['name'] }} viewed this Estimate.
|
||||
|
||||
@component('mail::button', ['url' => url('/admin/estimates/'.$data['estimate']['id'].'/view')])
|
||||
Estimate
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
@component('mail::message')
|
||||
# Introduction
|
||||
Customer viewed this Invoice.
|
||||
{{ $data['user']['name'] }} viewed this Invoice.
|
||||
|
||||
@component('mail::button', ['url' => url('/admin/invoices/'.$data['invoice']['id'].'/view')])
|
||||
Invoice
|
||||
|
||||
Reference in New Issue
Block a user