Compare commits

...

109 Commits
4.0.2 ... 4.1.0

Author SHA1 Message Date
633cad9b89 add update migration 2021-05-05 12:10:14 +05:30
f5bbe68a4b new build 2021-05-05 12:00:12 +05:30
1fac9c9dde Merge branch 'master' of https://github.com/bytefury/crater 2021-05-05 11:58:36 +05:30
1208d3a924 new build 2021-05-05 11:58:14 +05:30
3257b18d58 update translations from crowdin 2021-05-05 11:25:30 +05:30
16a941f787 Bump axios from 0.19.2 to 0.21.1 (#337)
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-03 23:51:00 +05:30
4f5cd9fba1 Bump composer/composer from 2.0.11 to 2.0.13 (#447)
Bumps [composer/composer](https://github.com/composer/composer) from 2.0.11 to 2.0.13.
- [Release notes](https://github.com/composer/composer/releases)
- [Changelog](https://github.com/composer/composer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/composer/composer/compare/2.0.11...2.0.13)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-03 23:50:46 +05:30
80e6a3c757 Bump elliptic from 6.5.3 to 6.5.4 (#411)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-03 23:50:36 +05:30
d4e7420640 Bump laravel/framework from 8.33.1 to 8.40.0 (#448)
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.33.1 to 8.40.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.33.1...v8.40.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-03 23:48:51 +05:30
ac30ba599b Update Vietnamese, Initial Japanese and Korean language (#436)
* Update Vietnamese locate
* Add Japanese and Korean Language


Co-authored-by: Dung <dung.phan@mediabridge.vn>
2021-05-03 16:59:30 +05:30
6dd0ccce8b update translations from crowdin 2021-05-03 16:37:12 +05:30
2f32ff4d5b temporarily disable the user tests 2021-04-13 13:06:07 +05:30
54a5ca83f8 new build 2021-04-13 13:00:35 +05:30
eede2fc17f fix notification module issues 2021-04-13 05:42:28 +00:00
e586adde26 update default email description 2021-04-12 16:43:07 +05:30
1ffb1b2eec bug: notification issues solved 2021-04-12 16:02:44 +05:30
55d838371a new build 2021-04-12 14:42:40 +05:30
cdaa1ff103 refactor estimate & invoice templates 2021-04-12 14:40:59 +05:30
63f7cdec82 fix customer update notification not firing 2021-04-12 14:40:22 +05:30
fadba7fa3a fix send email tests 2021-04-12 14:40:10 +05:30
d0f6e207ee add App namespace to models 2021-04-12 12:09:54 +05:30
845f01f170 fix conflicts and issue with add_number_length migration 2021-04-12 11:53:03 +05:30
7f9938c80d Make SMTP username & password optional in mail configuration
Fixes #438
2021-04-10 07:46:32 +00:00
16e4212300 Fixes #439 2021-04-10 07:45:14 +00:00
109de237b1 update: SMTP username & password not mandatory in mail configuraiton 2021-04-10 12:56:09 +05:30
82cf63f200 fix: Custom optional Date field issue 2021-04-10 12:38:50 +05:30
03fc0fd659 Add New SweetAlert & Notification Components 2021-04-09 12:35:50 +00:00
c3d3e5e35f Add New SweetAlert & Notification Components 2021-04-09 12:35:50 +00:00
909e4f93e4 fix(attachments): Fixed language on pdf attachments (#434) 2021-03-27 18:33:54 +05:30
bfd9850bf6 Add invoice/estimate/payment number length setting (#425)
* Add invoice/estimate/payment number length setting
2021-03-26 13:01:43 +05:30
3f7db2793f add fallback language and generate public files 2021-03-24 17:01:38 +05:30
8693672b09 Slovak language (#428)
* Add Slovak Language

Co-authored-by: Mohit Panjwani <mohit.panjvani@gmail.com>
2021-03-24 16:59:12 +05:30
a9b0d62cd6 generate public files 2021-03-24 14:09:18 +05:30
9f57a4200f Merge branch 'master' of https://github.com/bytefury/crater 2021-03-24 14:07:17 +05:30
9e130b3db8 Add VietNamese Locale (#431)
Co-authored-by: Dung <dung.phan@mediabridge.vn>
2021-03-24 14:06:53 +05:30
7c9a846090 update spacewind version 2021-03-24 13:47:45 +05:30
b2e08dda7f fix php8 dompdf issue 2021-03-23 13:31:40 +05:30
a2026fbc8b Merge pull request #427 from TheZoker/add-ci
Add test ci
2021-03-23 13:31:00 +05:30
db1b0db461 update dompdf version 2021-03-23 13:14:34 +05:30
17c00c322d Add test ci 2021-03-22 16:52:01 +01:00
331b8ea44e Merge pull request #426 from TheZoker/fix-invoice-address-capitalize
Don't capitalize address on invoice
2021-03-22 19:20:05 +05:30
428be640c3 Don't capitalize address on invoice 2021-03-22 14:49:31 +01:00
51f79433b9 feat: Added MAD (Moroccan dirham) currency (#355)
Add MAD (Moroccan dirham) currency
2021-03-22 17:33:36 +05:30
8008ed0527 Merge pull request #423 from TheZoker/add-more-translation
Add more translation
2021-03-22 14:59:04 +05:30
57b302666a Address review comments 2021-03-22 10:17:01 +01:00
ee1d1ccff4 update readme and fix formatting on utilities 2021-03-22 13:05:02 +05:30
81e7109ad1 new build 2021-03-22 13:02:17 +05:30
784bf39df5 fix max-discount issue on estimates and generate new public files 2021-03-22 12:57:46 +05:30
f66755c4aa Merge pull request #365 from DjKhireddine/patch-1
Update Item.vue
2021-03-22 12:56:37 +05:30
b4e1e99d37 Merge pull request #354 from habibhaidari1/master
Fixed small typo that caused wrong breadcrumb
2021-03-22 12:42:33 +05:30
d8aa3dc8a6 Merge pull request #336 from romanobarassi/barassi-crater-fix1
Update composer.json
2021-03-22 12:32:45 +05:30
9af51660cb Merge pull request #405 from itsaboutcode/show_field_min_length
Showing length error for Payment, Note and ItemUnit Model Views
2021-03-22 12:26:41 +05:30
38d0da9618 Merge pull request #419 from TheZoker/translate-pdf-title
Translate PDF titles
2021-03-22 12:22:41 +05:30
761c0143ec Merge pull request #420 from TheZoker/adjust-money-format
Adjust money format to respect swap_currency_symbol
2021-03-22 12:12:13 +05:30
fdc4de5093 Merge pull request #407 from sebastiancretu/send_inv_est_pay_as_attachment
Send invoices, estimates and payments as attachments
2021-03-22 12:06:06 +05:30
f8591f96a9 Write € symbol after amount 2021-03-21 13:05:49 +01:00
e47cb01ce2 Translate badges 2021-03-21 00:45:43 +01:00
454ad3091a Add some missing translations 2021-03-21 00:45:37 +01:00
cc73a8a842 Adjust money format to respect swap_currency_symbol 2021-03-20 17:49:57 +01:00
cea8405ace Translate PDF titles 2021-03-20 14:35:22 +01:00
49a6e03e9d Merge pull request #408 from sebastiancretu/fix_unit_name_in_emails
fix(items): added unit name after quantity in the pdf templates
2021-03-15 16:18:54 +05:30
f9d6e8b0cc fix(items): added unit name after quantity in the pdf templates 2021-03-03 17:09:05 +01:00
2b78aacc83 feat(emails): implemented sending invoice, estimates and payments as attachements 2021-03-02 21:49:03 +01:00
1932c5a75e a 2021-03-02 21:19:16 +01:00
449968ae88 Showing length error for Payment, Note and ItemUnit Model Views 2021-03-02 10:50:27 +05:00
02a2db4417 Merge pull request #372 from makakken/master
Fixes #371
2021-02-24 15:40:34 +05:30
a53582f916 Merge pull request #398 from renzocastillo/master
added new currency: peruvian soles
2021-02-24 15:40:10 +05:30
340bf3be06 added new currency: peruvian soles 2021-02-22 11:34:25 -05:00
7f0da9dc36 fix conflict 2021-02-12 13:19:56 +05:30
c4ace76275 Merge branch 'master' of gitlab.com:mohit.panjvani/crater-web 2021-02-12 13:18:03 +05:30
553bcc053b Merge pull request #375 from sebastiancretu/fix_payment_receipt_currency
fix(payments): display the currency in receipts
2021-02-12 11:54:19 +05:30
375a59a504 fix(payments): display the currency in receipts 2021-02-08 20:42:10 +01:00
cfc0a1ef75 Regenerated assets 2021-02-05 20:53:34 +01:00
392f6f469b Send Invoices/Estimates/Payments as email attachments 2021-02-05 20:24:56 +01:00
6cb8d30915 Update invoice3.blade.php
Fix Exception: 'box_sizing' is not a recognized CSS property.
2021-02-04 11:02:59 +01:00
9b55e84724 Update invoice2.blade.php
Fix Exception: 'box_sizing' is not a recognized CSS property.
2021-02-04 11:02:32 +01:00
cf5da7684b Update invoice1.blade.php
fix box_sizing DOMPDF Bug
2021-02-04 11:01:57 +01:00
f47029ca78 fix payment invalid-number issue 2021-02-03 14:25:05 +05:30
761df2ffac Merge branch 'mail-name-issue' into 'master'
invoice mail name issue fix

See merge request mohit.panjvani/crater-web!669
2021-02-03 07:19:32 +00:00
8fbc257b23 payment from mail name 2021-02-03 12:24:28 +05:30
baebfedf37 invoice and estimate from mail name issue 2021-02-03 12:21:03 +05:30
9321eb9d86 Merge branch 'payment_issue' into 'master'
fix payment currency issue

See merge request mohit.panjvani/crater-web!668
2021-02-03 06:31:23 +00:00
70bed01e7b invoice mail name issue fix 2021-02-03 11:38:59 +05:30
739efcce79 Update Item.vue
There is an error in calculating maxDiscount. 
maxDiscount = item.price * item.quantity
2021-02-02 19:23:32 +01:00
3695e7d075 fix payment currency issue 2021-02-02 17:22:44 +05:30
8f2033f621 Fixed small type that caused wrong breadcrumb 2021-01-23 19:29:26 +01:00
7b95ccb5fc fix company logo issue 2021-01-22 19:00:37 +05:30
b7370ed85c update version on migration 2021-01-22 14:49:05 +05:30
818f2fbaf7 build 404 2021-01-22 14:27:30 +05:30
91a1dbf91c new build 2021-01-22 14:17:08 +05:30
a4d556f41e fix tax rounding issues 2021-01-22 14:15:44 +05:30
83de1c47ee fix tax rounding errors and styling issues 2021-01-22 13:44:59 +05:30
678ace744a fix purgecss issue and insert-note z-index 2021-01-22 12:00:10 +05:30
9e26fee1b0 upgrade tailwind 2021-01-21 18:31:11 +05:30
e455c3de50 Merge branch 'date-issue' into 'master'
solve date issue

See merge request mohit.panjvani/crater-web!665
2021-01-15 10:17:51 +00:00
c4db50d3f0 Merge branch 'logo-issue' into 'master'
fix logo display issue

See merge request mohit.panjvani/crater-web!664
2021-01-15 10:16:28 +00:00
411ee57946 solve date issue 2021-01-15 14:26:35 +05:30
9c5e9e56f5 fix logo display issue 2021-01-15 14:22:42 +05:30
8eeafd3fed fix tailwind-v2 issues 2021-01-06 21:12:22 +05:30
ed978d0174 upgrade tailwind version and laravel-mix 2021-01-06 14:18:41 +05:30
607b1795bb Merge branch 'discount-issue' into 'master'
fix total discount issue

See merge request mohit.panjvani/crater-web!655
2021-01-06 06:58:07 +00:00
a6c3c815b5 Update composer.json 2021-01-04 18:59:07 +01:00
ead0ebb012 fix note button z-index issue 2021-01-04 11:43:00 +05:30
d4550e62f8 add 403 migration 2020-12-31 15:39:01 +05:30
ff3846137e fix translations & build 403 2020-12-31 12:33:56 +05:30
b55f8e5391 fix floating errors 2020-12-31 12:16:04 +05:30
0f1d7627ea fix next number issue on estimate & invoice 2020-12-31 11:52:42 +05:30
1be462ef82 fix eslint and prettier config 2020-12-31 11:52:10 +05:30
8b04e94446 fix total discount issue 2020-12-24 13:43:29 +05:30
179 changed files with 16629 additions and 18920 deletions

View File

@ -1,21 +0,0 @@
{
"root": true,
"extends": [
"plugin:vue/recommended",
"eslint:recommended",
"prettier/vue",
"plugin:prettier/recommended"
],
"rules": {
"vue/max-attributes-per-line": [
"error",
{
"singleline": 20,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}
]
}
}

20
.eslintrc.js Normal file
View File

@ -0,0 +1,20 @@
module.exports = {
root: true,
env: {
node: true,
},
extends: [
'plugin:vue/recommended',
'eslint:recommended',
'prettier/vue',
'plugin:prettier/recommended',
],
parserOptions: {
parser: 'babel-eslint',
},
plugins: ['prettier'],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
},
}

34
.github/workflows/ci.yaml vendored Normal file
View File

@ -0,0 +1,34 @@
name: CI
on: [push, pull_request]
jobs:
build-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php: ['7.4', '8.0']
name: PHP ${{ matrix.php }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install dependencies
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: exif
- name: Install PHP 7 dependencies
run: composer update --no-interaction --no-progress
if: "matrix.php < 8"
- name: Install PHP 8 dependencies
run: composer update --ignore-platform-req=php --no-interaction --no-progress
if: "matrix.php >= 8"
- name: Unit Tests
run: php ./vendor/bin/pest

View File

@ -37,14 +37,6 @@ class MailEnvironmentRequest extends FormRequest
'mail_port' => [ 'mail_port' => [
'required' 'required'
], ],
'mail_username' => [
'required',
'string'
],
'mail_password' => [
'required',
'string'
],
'mail_encryption' => [ 'mail_encryption' => [
'required', 'required',
'string' 'string'

View File

@ -40,9 +40,16 @@ class SendEstimateMail extends Mailable
'mailable_id' => $this->data['estimate']['id'] 'mailable_id' => $this->data['estimate']['id']
]); ]);
return $this->from($this->data['from']) $mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject']) ->subject($this->data['subject'])
->markdown('emails.send.estimate', ['data', $this->data]); ->markdown('emails.send.estimate', ['data', $this->data]);
if ($this->data['attach']['data'])
$mailContent->attachData(
$this->data['attach']['data']->output(),
$this->data['estimate']['estimate_number'] . '.pdf'
);
return $mailContent;
} }
} }

View File

@ -1,6 +1,7 @@
<?php <?php
namespace Crater\Mail; namespace Crater\Mail;
use Config;
use Crater\Models\EmailLog; use Crater\Models\EmailLog;
use Crater\Models\Invoice; use Crater\Models\Invoice;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
@ -39,9 +40,17 @@ class SendInvoiceMail extends Mailable
'mailable_type' => Invoice::class, 'mailable_type' => Invoice::class,
'mailable_id' => $this->data['invoice']['id'] 'mailable_id' => $this->data['invoice']['id']
]); ]);
$mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject'])
->markdown('emails.send.invoice', ['data', $this->data]);
return $this->from($this->data['from']) if ($this->data['attach']['data'])
->subject($this->data['subject']) $mailContent->attachData(
->markdown('emails.send.invoice', ['data', $this->data]); $this->data['attach']['data']->output(),
$this->data['invoice']['invoice_number'] . '.pdf'
);
return $mailContent;
} }
} }

View File

@ -41,9 +41,16 @@ class SendPaymentMail extends Mailable
'mailable_id' => $this->data['payment']['id'] 'mailable_id' => $this->data['payment']['id']
]); ]);
return $this->from($this->data['from']) $mailContent = $this->from($this->data['from'], config('mail.from.name'))
->subject($this->data['subject']) ->subject($this->data['subject'])
->markdown('emails.send.payment', ['data', $this->data]); ->markdown('emails.send.payment', ['data', $this->data]);
if ($this->data['attach']['data'])
$mailContent->attachData(
$this->data['attach']['data']->output(),
$this->data['payment']['payment_number'] . '.pdf'
);
return $mailContent;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
namespace Crater\Models; namespace Crater\Models;
use Crater\Models\Address; use Crater\Models\Address;
@ -17,15 +18,34 @@ class Company extends Model implements HasMedia
protected $fillable = ['name', 'logo', 'unique_hash']; protected $fillable = ['name', 'logo', 'unique_hash'];
protected $appends=['logo']; protected $appends = ['logo', 'logo_path'];
public function getLogoPathAttribute()
{
$logo = $this->getMedia('logo')->first();
$isSystem = FileDisk::whereSetAsDefault(true)->first()->isSystem();
if ($logo) {
if ($isSystem) {
return $logo->getPath();
} else {
return $logo->getFullUrl();
}
}
return null;
}
public function getLogoAttribute() public function getLogoAttribute()
{ {
$logo = $this->getMedia('logo')->first(); $logo = $this->getMedia('logo')->first();
if ($logo) { if ($logo) {
return asset($logo->getUrl()); return $logo->getFullUrl();
} }
return ;
return null;
} }
public function user() public function user()

View File

@ -22,17 +22,26 @@ class CustomFieldValue extends Model
public function setDateAnswerAttribute($value) public function setDateAnswerAttribute($value)
{ {
$this->attributes['date_answer'] = Carbon::createFromFormat('Y-m-d', $value); if ($value && $value != null) {
$this->attributes['date_answer'] = Carbon::createFromFormat('Y-m-d', $value);
}
$this->attributes['date_answer'] = null;
} }
public function setTimeAnswerAttribute($value) public function setTimeAnswerAttribute($value)
{ {
$this->attributes['time_answer'] = date("H:i:s", strtotime($value)); if ($value && $value != null) {
$this->attributes['time_answer'] = date("H:i:s", strtotime($value));
}
$this->attributes['time_answer'] = null;
} }
public function setDateTimeAnswerAttribute($value) public function setDateTimeAnswerAttribute($value)
{ {
$this->attributes['date_time_answer'] = Carbon::createFromFormat('Y-m-d H:i', $value); if ($value && $value != null) {
$this->attributes['date_time_answer'] = Carbon::createFromFormat('Y-m-d H:i', $value);
}
$this->attributes['time_answer'] = null;
} }
public function getDefaultAnswerAttribute() public function getDefaultAnswerAttribute()

View File

@ -2,6 +2,7 @@
namespace Crater\Models; namespace Crater\Models;
use App;
use Crater\Models\EstimateTemplate; use Crater\Models\EstimateTemplate;
use Crater\Models\Company; use Crater\Models\Company;
use Crater\Models\Tax; use Crater\Models\Tax;
@ -33,9 +34,7 @@ class Estimate extends Model implements HasMedia
protected $dates = [ protected $dates = [
'created_at', 'created_at',
'updated_at', 'updated_at',
'deleted_at', 'deleted_at'
'estimate_date',
'expiry_date'
]; ];
protected $appends = [ protected $appends = [
@ -77,9 +76,13 @@ class Estimate extends Model implements HasMedia
{ {
// Get the last created order // Get the last created order
$lastOrder = Estimate::where('estimate_number', 'LIKE', $value . '-%') $lastOrder = Estimate::where('estimate_number', 'LIKE', $value . '-%')
->orderBy('created_at', 'desc') ->orderBy('estimate_number', 'desc')
->first(); ->first();
// Get number length config
$numberLength = CompanySetting::getSetting('estimate_number_length', request()->header('company'));
$numberLengthText = "%0{$numberLength}d";
if (!$lastOrder) { if (!$lastOrder) {
// We get here if there is no order at all // We get here if there is no order at all
// If there is no number set it to 0, which will be 1 at the end. // If there is no number set it to 0, which will be 1 at the end.
@ -96,7 +99,7 @@ class Estimate extends Model implements HasMedia
// the %05d part makes sure that there are always 6 numbers in the string. // the %05d part makes sure that there are always 6 numbers in the string.
// so it adds the missing zero's when needed. // so it adds the missing zero's when needed.
return sprintf('%06d', intval($number) + 1); return sprintf($numberLengthText, intval($number) + 1);
} }
public function emailLogs() public function emailLogs()
@ -381,6 +384,7 @@ class Estimate extends Model implements HasMedia
$data['user'] = $this->user->toArray(); $data['user'] = $this->user->toArray();
$data['company'] = $this->company->toArray(); $data['company'] = $this->company->toArray();
$data['body'] = $this->getEmailBody($data['body']); $data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
\Mail::to($data['to'])->send(new SendEstimateMail($data)); \Mail::to($data['to'])->send(new SendEstimateMail($data));
@ -428,16 +432,11 @@ class Estimate extends Model implements HasMedia
$estimateTemplate = EstimateTemplate::find($this->estimate_template_id); $estimateTemplate = EstimateTemplate::find($this->estimate_template_id);
$company = Company::find($this->company_id); $company = Company::find($this->company_id);
$logo = $company->getMedia('logo')->first(); $locale = CompanySetting::getSetting('language', $company->id);
$isSystem = FileDisk::whereSetAsDefault(true)->first()->isSystem(); App::setLocale($locale);
$isLocalhost = config('session.domain') === 'localhost';
if ($logo && $isLocalhost && $isSystem) { $logo = $company->logo_path;
$logo = $logo->getPath();
} else if($logo) {
$logo = $logo->getFullUrl();
}
view()->share([ view()->share([
'estimate' => $this, 'estimate' => $this,
@ -479,6 +478,17 @@ class Estimate extends Model implements HasMedia
return $this->getFormattedString($this->notes); return $this->getFormattedString($this->notes);
} }
public function getEmailAttachmentSetting()
{
$estimateAsAttachment = CompanySetting::getSetting('estimate_email_attachment', $this->company_id);
if ($estimateAsAttachment == 'NO') {
return false;
}
return true;
}
public function getEmailBody($body) public function getEmailBody($body)
{ {
$values = array_merge($this->getFieldsArray(), $this->getExtraFields()); $values = array_merge($this->getFieldsArray(), $this->getExtraFields());

View File

@ -22,7 +22,8 @@ class EstimateItem extends Model
'discount_val', 'discount_val',
'tax', 'tax',
'total', 'total',
'discount' 'discount',
'unit_name',
]; ];
protected $casts = [ protected $casts = [

View File

@ -2,6 +2,7 @@
namespace Crater\Models; namespace Crater\Models;
use App;
use Crater\Models\Company; use Crater\Models\Company;
use Crater\Models\CompanySetting; use Crater\Models\CompanySetting;
use Crater\Models\Currency; use Crater\Models\Currency;
@ -39,9 +40,7 @@ class Invoice extends Model implements HasMedia
protected $dates = [ protected $dates = [
'created_at', 'created_at',
'updated_at', 'updated_at',
'deleted_at', 'deleted_at'
'invoice_date',
'due_date'
]; ];
protected $casts = [ protected $casts = [
@ -81,9 +80,12 @@ class Invoice extends Model implements HasMedia
{ {
// Get the last created order // Get the last created order
$lastOrder = Invoice::where('invoice_number', 'LIKE', $value . '-%') $lastOrder = Invoice::where('invoice_number', 'LIKE', $value . '-%')
->orderBy('created_at', 'desc') ->orderBy('invoice_number', 'desc')
->first(); ->first();
// Get number length config
$numberLength = CompanySetting::getSetting('invoice_number_length', request()->header('company'));
$numberLengthText = "%0{$numberLength}d";
if (!$lastOrder) { if (!$lastOrder) {
// We get here if there is no order at all // We get here if there is no order at all
@ -100,7 +102,7 @@ class Invoice extends Model implements HasMedia
// the %06d part makes sure that there are always 6 numbers in the string. // the %06d part makes sure that there are always 6 numbers in the string.
// so it adds the missing zero's when needed. // so it adds the missing zero's when needed.
return sprintf('%06d', intval($number) + 1); return sprintf($numberLengthText, intval($number) + 1);
} }
public function emailLogs() public function emailLogs()
@ -363,11 +365,11 @@ class Invoice extends Model implements HasMedia
} }
$invoice = Invoice::with([ $invoice = Invoice::with([
'items', 'items',
'user', 'user',
'invoiceTemplate', 'invoiceTemplate',
'taxes' 'taxes'
]) ])
->find($invoice->id); ->find($invoice->id);
return $invoice; return $invoice;
@ -431,6 +433,7 @@ class Invoice extends Model implements HasMedia
$data['user'] = $this->user->toArray(); $data['user'] = $this->user->toArray();
$data['company'] = Company::find($this->company_id); $data['company'] = Company::find($this->company_id);
$data['body'] = $this->getEmailBody($data['body']); $data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
if ($this->status == Invoice::STATUS_DRAFT) { if ($this->status == Invoice::STATUS_DRAFT) {
$this->status = Invoice::STATUS_SENT; $this->status = Invoice::STATUS_SENT;
@ -511,17 +514,11 @@ class Invoice extends Model implements HasMedia
$invoiceTemplate = InvoiceTemplate::find($this->invoice_template_id); $invoiceTemplate = InvoiceTemplate::find($this->invoice_template_id);
$company = Company::find($this->company_id); $company = Company::find($this->company_id);
$locale = CompanySetting::getSetting('language', $company->id);
$logo = $company->getMedia('logo')->first(); App::setLocale($locale);
$isSystem = FileDisk::whereSetAsDefault(true)->first()->isSystem(); $logo = $company->logo_path;
$isLocalhost = config('session.domain') === 'localhost';
if ($logo && $isLocalhost && $isSystem) {
$logo = $logo->getPath();
} else if($logo) {
$logo = $logo->getFullUrl();
}
view()->share([ view()->share([
'invoice' => $this, 'invoice' => $this,
@ -537,6 +534,17 @@ class Invoice extends Model implements HasMedia
return PDF::loadView('app.pdf.invoice.' . $invoiceTemplate->view); return PDF::loadView('app.pdf.invoice.' . $invoiceTemplate->view);
} }
public function getEmailAttachmentSetting()
{
$invoiceAsAttachment = CompanySetting::getSetting('invoice_email_attachment', $this->company_id);
if ($invoiceAsAttachment == 'NO') {
return false;
}
return true;
}
public function getCompanyAddress() public function getCompanyAddress()
{ {
$format = CompanySetting::getSetting('invoice_company_address_format', $this->company_id); $format = CompanySetting::getSetting('invoice_company_address_format', $this->company_id);

View File

@ -25,7 +25,8 @@ class InvoiceItem extends Model
'discount_val', 'discount_val',
'total', 'total',
'tax', 'tax',
'discount' 'discount',
'unit_name',
]; ];
protected $casts = [ protected $casts = [

View File

@ -2,6 +2,7 @@
namespace Crater\Models; namespace Crater\Models;
use App;
use Crater\Models\CompanySetting; use Crater\Models\CompanySetting;
use Crater\Models\User; use Crater\Models\User;
use Crater\Models\Invoice; use Crater\Models\Invoice;
@ -31,7 +32,7 @@ class Payment extends Model implements HasMedia
const PAYMENT_MODE_CREDIT_CARD = 'CREDIT_CARD'; const PAYMENT_MODE_CREDIT_CARD = 'CREDIT_CARD';
const PAYMENT_MODE_BANK_TRANSFER = 'BANK_TRANSFER'; const PAYMENT_MODE_BANK_TRANSFER = 'BANK_TRANSFER';
protected $dates = ['created_at', 'updated_at', 'payment_date']; protected $dates = ['created_at', 'updated_at'];
protected $guarded = ['id']; protected $guarded = ['id'];
@ -124,6 +125,7 @@ class Payment extends Model implements HasMedia
$data['user'] = $this->user->toArray(); $data['user'] = $this->user->toArray();
$data['company'] = Company::find($this->company_id); $data['company'] = Company::find($this->company_id);
$data['body'] = $this->getEmailBody($data['body']); $data['body'] = $this->getEmailBody($data['body']);
$data['attach']['data'] = ($this->getEmailAttachmentSetting()) ? $this->getPDFData() : null;
\Mail::to($data['to'])->send(new SendPaymentMail($data)); \Mail::to($data['to'])->send(new SendPaymentMail($data));
@ -216,10 +218,10 @@ class Payment extends Model implements HasMedia
} }
$payment = Payment::with([ $payment = Payment::with([
'user', 'user',
'invoice', 'invoice',
'paymentMethod', 'paymentMethod',
]) ])
->find($this->id); ->find($this->id);
return $payment; return $payment;
@ -268,8 +270,13 @@ class Payment extends Model implements HasMedia
{ {
// Get the last created order // Get the last created order
$payment = Payment::where('payment_number', 'LIKE', $value . '-%') $payment = Payment::where('payment_number', 'LIKE', $value . '-%')
->orderBy('created_at', 'desc') ->orderBy('payment_number', 'desc')
->first(); ->first();
// Get number length config
$numberLength = CompanySetting::getSetting('payment_number_length', request()->header('company'));
$numberLengthText = "%0{$numberLength}d";
if (!$payment) { if (!$payment) {
// We get here if there is no order at all // We get here if there is no order at all
// If there is no number set it to 0, which will be 1 at the end. // If there is no number set it to 0, which will be 1 at the end.
@ -285,7 +292,7 @@ class Payment extends Model implements HasMedia
// the %05d part makes sure that there are always 6 numbers in the string. // the %05d part makes sure that there are always 6 numbers in the string.
// so it adds the missing zero's when needed. // so it adds the missing zero's when needed.
return sprintf('%06d', intval($number) + 1); return sprintf($numberLengthText, intval($number) + 1);
} }
public function scopeWhereSearch($query, $search) public function scopeWhereSearch($query, $search)
@ -372,17 +379,11 @@ class Payment extends Model implements HasMedia
public function getPDFData() public function getPDFData()
{ {
$company = Company::find($this->company_id); $company = Company::find($this->company_id);
$locale = CompanySetting::getSetting('language', $company->id);
$logo = $company->getMedia('logo')->first(); \App::setLocale($locale);
$isSystem = FileDisk::whereSetAsDefault(true)->first()->isSystem(); $logo = $company->logo_path;
$isLocalhost = config('session.domain') === 'localhost';
if ($logo && $isLocalhost && $isSystem) {
$logo = $logo->getPath();
} else if($logo) {
$logo = $logo->getFullUrl();
}
view()->share([ view()->share([
'payment' => $this, 'payment' => $this,
@ -409,6 +410,17 @@ class Payment extends Model implements HasMedia
return $this->getFormattedString($format); return $this->getFormattedString($format);
} }
public function getEmailAttachmentSetting()
{
$paymentAsAttachment = CompanySetting::getSetting('payment_email_attachment', $this->company_id);
if ($paymentAsAttachment == 'NO') {
return false;
}
return true;
}
public function getNotes() public function getNotes()
{ {
return $this->getFormattedString($this->notes); return $this->getFormattedString($this->notes);

View File

@ -8,9 +8,9 @@
"license": "MIT", "license": "MIT",
"type": "project", "type": "project",
"require": { "require": {
"php": "^7.3", "php": "^7.4 || ^8.0",
"aws/aws-sdk-php": "^3.142", "aws/aws-sdk-php": "^3.142",
"barryvdh/laravel-dompdf": "^0.8.1", "barryvdh/laravel-dompdf": "^0.9.0",
"doctrine/dbal": "^2.10", "doctrine/dbal": "^2.10",
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"fruitcake/laravel-cors": "^1.0", "fruitcake/laravel-cors": "^1.0",

1178
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -16,12 +16,16 @@ return [
["code"=>"en", "name" => "English"], ["code"=>"en", "name" => "English"],
["code"=>"fr", "name" => "French"], ["code"=>"fr", "name" => "French"],
["code"=>"de", "name" => "German"], ["code"=>"de", "name" => "German"],
["code"=>"ja", "name" => "Japanese"],
["code"=>"it", "name" => "Italian"], ["code"=>"it", "name" => "Italian"],
["code"=>"lv", "name" => "Latvian"], ["code"=>"lv", "name" => "Latvian"],
["code"=>"pt_BR", "name" => "Portuguese (Brazilian)"], ["code"=>"pt_BR", "name" => "Portuguese (Brazilian)"],
["code"=>"sr", "name" => "Serbian Latin"], ["code"=>"sr", "name" => "Serbian Latin"],
["code"=>"ko", "name" => "Korean"],
["code"=>"es", "name" => "Spanish"], ["code"=>"es", "name" => "Spanish"],
["code"=>"sv", "name"=> "Svenska"] ["code"=>"sv", "name"=> "Svenska"],
["code"=>"sk", "name"=> "Slovak"],
["code"=>"vi", "name"=> "Tiếng Việt"]
], ],
/* /*

View File

@ -80,16 +80,16 @@ class UpdateCraterVersion400 extends Migration
FileDisk::create([ FileDisk::create([
'credentials' => json_encode($publicDisk), 'credentials' => json_encode($publicDisk),
'name'=> 'local_public', 'name' => 'local_public',
'type'=> 'SYSTEM', 'type' => 'SYSTEM',
'driver' => 'local', 'driver' => 'local',
'set_as_default' => false, 'set_as_default' => false,
]); ]);
FileDisk::create([ FileDisk::create([
'credentials' => json_encode($privateDisk), 'credentials' => json_encode($privateDisk),
'name'=> 'local_private', 'name' => 'local_private',
'type'=> 'SYSTEM', 'type' => 'SYSTEM',
'driver' => 'local', 'driver' => 'local',
'set_as_default' => true, 'set_as_default' => true,
]); ]);
@ -107,9 +107,9 @@ class UpdateCraterVersion400 extends Migration
private function updateCompanySettings($user) private function updateCompanySettings($user)
{ {
$defaultInvoiceEmailBody = 'You have received a new invoice from <b>{COMPANY_NAME}</b>.</br>Please download using the button below:'; $defaultInvoiceEmailBody = 'You have received a new invoice from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:';
$defaultEstimateEmailBody = 'You have received a new estimate from <b>{COMPANY_NAME}</b>.</br>Please download using the button below:'; $defaultEstimateEmailBody = 'You have received a new estimate from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:';
$defaultPaymentEmailBody = 'Thank you for the payment.</b></br>Please download your payment receipt using the button below:'; $defaultPaymentEmailBody = 'Thank you for the payment.</b></br> Please download your payment receipt using the button below:';
$billingAddressFormat = '<h3>{BILLING_ADDRESS_NAME}</h3><p>{BILLING_ADDRESS_STREET_1}</p><p>{BILLING_ADDRESS_STREET_2}</p><p>{BILLING_CITY} {BILLING_STATE}</p><p>{BILLING_COUNTRY} {BILLING_ZIP_CODE}</p><p>{BILLING_PHONE}</p>'; $billingAddressFormat = '<h3>{BILLING_ADDRESS_NAME}</h3><p>{BILLING_ADDRESS_STREET_1}</p><p>{BILLING_ADDRESS_STREET_2}</p><p>{BILLING_CITY} {BILLING_STATE}</p><p>{BILLING_COUNTRY} {BILLING_ZIP_CODE}</p><p>{BILLING_PHONE}</p>';
$shippingAddressFormat = '<h3>{SHIPPING_ADDRESS_NAME}</h3><p>{SHIPPING_ADDRESS_STREET_1}</p><p>{SHIPPING_ADDRESS_STREET_2}</p><p>{SHIPPING_CITY} {SHIPPING_STATE}</p><p>{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}</p><p>{SHIPPING_PHONE}</p>'; $shippingAddressFormat = '<h3>{SHIPPING_ADDRESS_NAME}</h3><p>{SHIPPING_ADDRESS_STREET_1}</p><p>{SHIPPING_ADDRESS_STREET_2}</p><p>{SHIPPING_CITY} {SHIPPING_STATE}</p><p>{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}</p><p>{SHIPPING_PHONE}</p>';
$companyAddressFormat = '<h3><strong>{COMPANY_NAME}</strong></h3><p>{COMPANY_ADDRESS_STREET_1}</p><p>{COMPANY_ADDRESS_STREET_2}</p><p>{COMPANY_CITY} {COMPANY_STATE}</p><p>{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}</p><p>{COMPANY_PHONE}</p>'; $companyAddressFormat = '<h3><strong>{COMPANY_NAME}</strong></h3><p>{COMPANY_ADDRESS_STREET_1}</p><p>{COMPANY_ADDRESS_STREET_2}</p><p>{COMPANY_CITY} {COMPANY_STATE}</p><p>{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}</p><p>{COMPANY_PHONE}</p>';

View File

@ -0,0 +1,29 @@
<?php
use Crater\Models\Setting;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateCraterVersion403 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Setting::setSetting('version', '4.0.3');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -0,0 +1,29 @@
<?php
use Crater\Models\Setting;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateCraterVersion404 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Setting::setSetting('version', '4.0.4');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddUnitNameToPdf extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('invoice_items', function (Blueprint $table) {
$table->string('unit_name')->nullable()->after('quantity');
});
Schema::table('estimate_items', function (Blueprint $table) {
$table->string('unit_name')->nullable()->after('quantity');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('invoice_items', function (Blueprint $table) {
$table->dropColumn('unit_name');
});
Schema::table('estimate_items', function (Blueprint $table) {
$table->dropColumn('unit_name');
});
}
}

View File

@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Crater\Models\CompanySetting;
use Crater\Models\User;
class AddNumberLengthSetting extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$user = User::where('role', 'super admin')->first();
if ($user) {
$invoice_number_length = CompanySetting::getSetting('invoice_number_length', $user->company_id);
if (empty($invoice_number_length)) {
CompanySetting::setSettings(['invoice_number_length' => '6'], $user->company_id);
}
$estimate_number_length = CompanySetting::getSetting('estimate_number_length', $user->company_id);
if (empty($estimate_number_length)) {
CompanySetting::setSettings(['estimate_number_length' => '6'], $user->company_id);
}
$payment_number_length = CompanySetting::getSetting('payment_number_length', $user->company_id);
if (empty($payment_number_length)) {
CompanySetting::setSettings(['payment_number_length' => '6'], $user->company_id);
}
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -0,0 +1,29 @@
<?php
use Crater\Models\Setting;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdateCraterVersion410 extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Setting::setSetting('version', '4.1.0');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -37,7 +37,8 @@ class CurrenciesTableSeeder extends Seeder
'symbol' => '€', 'symbol' => '€',
'precision' => '2', 'precision' => '2',
'thousand_separator' => '.', 'thousand_separator' => '.',
'decimal_separator' => ',' 'decimal_separator' => ',',
'swap_currency_symbol' => true
], ],
[ [
'name' => 'South African Rand', 'name' => 'South African Rand',
@ -550,6 +551,22 @@ class CurrenciesTableSeeder extends Seeder
'thousand_separator' => ',', 'thousand_separator' => ',',
'decimal_separator' => '.' 'decimal_separator' => '.'
], ],
[
'name' => 'Peruvian Soles',
'code' => 'PEN',
'symbol' => 'S/',
'precision' => '2',
'thousand_separator' => ',',
'decimal_separator' => '.'
],
[
'name' => 'Moroccan Dirham',
'code' => 'MAD',
'symbol' => 'DH',
'precision' => '2',
'thousand_separator' => ',',
'decimal_separator' => '.'
],
]; ];
foreach ($currencies as $currency) { foreach ($currencies as $currency) {

View File

@ -18,9 +18,9 @@ class DefaultSettingsSeeder extends Seeder
{ {
$user = User::where('role', 'super admin')->first(); $user = User::where('role', 'super admin')->first();
$defaultInvoiceEmailBody = 'You have received a new invoice from <b>{COMPANY_NAME}</b>.</br>Please download using the button below:'; $defaultInvoiceEmailBody = 'You have received a new invoice from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:';
$defaultEstimateEmailBody = 'You have received a new estimate from <b>{COMPANY_NAME}</b>.</br>Please download using the button below:'; $defaultEstimateEmailBody = 'You have received a new estimate from <b>{COMPANY_NAME}</b>.</br> Please download using the button below:';
$defaultPaymentEmailBody = 'Thank you for the payment.</b></br>Please download your payment receipt using the button below:'; $defaultPaymentEmailBody = 'Thank you for the payment.</b></br> Please download your payment receipt using the button below:';
$billingAddressFormat = '<h3>{BILLING_ADDRESS_NAME}</h3><p>{BILLING_ADDRESS_STREET_1}</p><p>{BILLING_ADDRESS_STREET_2}</p><p>{BILLING_CITY} {BILLING_STATE}</p><p>{BILLING_COUNTRY} {BILLING_ZIP_CODE}</p><p>{BILLING_PHONE}</p>'; $billingAddressFormat = '<h3>{BILLING_ADDRESS_NAME}</h3><p>{BILLING_ADDRESS_STREET_1}</p><p>{BILLING_ADDRESS_STREET_2}</p><p>{BILLING_CITY} {BILLING_STATE}</p><p>{BILLING_COUNTRY} {BILLING_ZIP_CODE}</p><p>{BILLING_PHONE}</p>';
$shippingAddressFormat = '<h3>{SHIPPING_ADDRESS_NAME}</h3><p>{SHIPPING_ADDRESS_STREET_1}</p><p>{SHIPPING_ADDRESS_STREET_2}</p><p>{SHIPPING_CITY} {SHIPPING_STATE}</p><p>{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}</p><p>{SHIPPING_PHONE}</p>'; $shippingAddressFormat = '<h3>{SHIPPING_ADDRESS_NAME}</h3><p>{SHIPPING_ADDRESS_STREET_1}</p><p>{SHIPPING_ADDRESS_STREET_2}</p><p>{SHIPPING_CITY} {SHIPPING_STATE}</p><p>{SHIPPING_COUNTRY} {SHIPPING_ZIP_CODE}</p><p>{SHIPPING_PHONE}</p>';
$companyAddressFormat = '<h3><strong>{COMPANY_NAME}</strong></h3><p>{COMPANY_ADDRESS_STREET_1}</p><p>{COMPANY_ADDRESS_STREET_2}</p><p>{COMPANY_CITY} {COMPANY_STATE}</p><p>{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}</p><p>{COMPANY_PHONE}</p>'; $companyAddressFormat = '<h3><strong>{COMPANY_NAME}</strong></h3><p>{COMPANY_ADDRESS_STREET_1}</p><p>{COMPANY_ADDRESS_STREET_2}</p><p>{COMPANY_CITY} {COMPANY_STATE}</p><p>{COMPANY_COUNTRY} {COMPANY_ZIP_CODE}</p><p>{COMPANY_PHONE}</p>';
@ -53,12 +53,18 @@ class DefaultSettingsSeeder extends Seeder
'notify_estimate_viewed' => 'NO', 'notify_estimate_viewed' => 'NO',
'tax_per_item' => 'NO', 'tax_per_item' => 'NO',
'discount_per_item' => 'NO', 'discount_per_item' => 'NO',
'invoice_auto_generate' => 'YES',
'invoice_prefix' => 'INV', 'invoice_prefix' => 'INV',
'invoice_auto_generate' => 'YES',
'invoice_number_length' => 6,
'invoice_email_attachment' => 'NO',
'estimate_prefix' => 'EST', 'estimate_prefix' => 'EST',
'estimate_auto_generate' => 'YES', 'estimate_auto_generate' => 'YES',
'estimate_number_length' => 6,
'estimate_email_attachment' => 'NO',
'payment_prefix' => 'PAY', 'payment_prefix' => 'PAY',
'payment_auto_generate' => 'YES', 'payment_auto_generate' => 'YES',
'payment_number_length' => 6,
'payment_email_attachment' => 'NO',
'save_pdf_to_disk' => 'NO', 'save_pdf_to_disk' => 'NO',
]; ];

13060
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +1,49 @@
{ {
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "dev": "mix",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "mix watch",
"watch-poll": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "hot": "mix watch --hot",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" "production": "mix --production"
}, },
"devDependencies": { "devDependencies": {
"babel-eslint": "^8.2.6", "babel-eslint": "^8.2.6",
"cross-env": "^5.1", "cross-env": "^5.1",
"eslint": "^4.19.1", "eslint": "^4.19.1",
"eslint-config-prettier": "^6.10.1", "eslint-config-prettier": "^6.15.0",
"eslint-loader": "^3.0.3", "eslint-loader": "^3.0.4",
"eslint-plugin-prettier": "^3.1.2", "eslint-plugin-prettier": "^3.3.0",
"eslint-plugin-vue": "^4.7.1", "eslint-plugin-vue": "^4.7.1",
"laravel-mix": "^5.0.7", "laravel-mix": "^6.0.6",
"prettier": "^2.0.2", "postcss": "^8.1",
"resolve-url-loader": "3.1.0", "prettier": "^2.2.1",
"sass": "^1.29.0", "resolve-url-loader": "3.1.0",
"sass-loader": "^8.0.2", "sass": "^1.29.0",
"tailwindcss-plugins": "^0.3.0", "sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.10" "tailwindcss-plugins": "^0.3.0",
}, "vue-template-compiler": "^2.6.10"
"dependencies": { },
"@bytefury/spacewind": "^0.3.3", "dependencies": {
"@vue-hero-icons/outline": "^1.6.3", "@bytefury/spacewind": "^0.5.3",
"@vue-hero-icons/solid": "^1.6.3", "@vue-hero-icons/outline": "^1.6.3",
"axios": "^0.19", "@vue-hero-icons/solid": "^1.6.3",
"chart.js": "^2.7.3", "axios": "^0.21",
"guid": "0.0.12", "chart.js": "^2.7.3",
"lodash": "^4.17.13", "guid": "0.0.12",
"moment": "^2.29.1", "lodash": "^4.17.13",
"sweet-modal-vue": "^2.0.0", "moment": "^2.29.1",
"sweetalert": "^2.1.2", "sweet-modal-vue": "^2.0.0",
"tailwindcss": "^1.9.1", "tailwindcss": "^2.0.1",
"toastr": "^2.1.4", "v-tooltip": "^2.0.2",
"v-tooltip": "^2.0.2", "vue": "^2.6.10",
"vue": "^2.6.10", "vue-i18n": "^8.22.0",
"vue-i18n": "^8.22.0", "vue-loader": "^15.9.3",
"vue-loader": "^15.9.3", "vue-router": "2.7.0",
"vue-router": "2.7.0", "vue-sweetalert2": "^4.2.1",
"vue2-transitions": "^0.3.0", "vue2-transitions": "^0.3.0",
"vuedraggable": "^2.24.2", "vuedraggable": "^2.24.2",
"vuelidate": "^0.6.2", "vuelidate": "^0.6.2",
"vuex": "^3.0.1" "vuex": "^3.0.1"
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,3 @@
/* flatpickr v4.6.6, @license MIT */
/*! /*!
* tiptap v1.29.6 * tiptap v1.29.6
* (c) 2020 überdosis GbR (limited liability) * (c) 2020 überdosis GbR (limited liability)
@ -24,33 +22,6 @@
* @license MIT * @license MIT
*/ */
/*!
*
* Copyright 2009-2017 Kris Kowal under the terms of the MIT
* license found at https://github.com/kriskowal/q/blob/v1/LICENSE
*
* With parts by Tyler Close
* Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
* at http://www.opensource.org/licenses/mit-license.html
* Forked at ref_send.js version: 2009-05-11
*
* With parts by Mark Miller
* Copyright (C) 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*! /*!
* Chart.js v2.9.4 * Chart.js v2.9.4
* https://www.chartjs.org * https://www.chartjs.org
@ -58,44 +29,12 @@
* Released under the MIT License * Released under the MIT License
*/ */
/*!
* Sizzle CSS Selector Engine v2.3.5
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2020-03-14
*/
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/*! /*!
* Vue.js v2.6.12 * Vue.js v2.6.12
* (c) 2014-2020 Evan You * (c) 2014-2020 Evan You
* Released under the MIT License. * Released under the MIT License.
*/ */
/*!
* jQuery JavaScript Library v3.5.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2020-05-04T22:49Z
*/
/*! /*!
* vue2-transitions v0.3.0 * vue2-transitions v0.3.0
* (c) 2019-present cristij <joracristi@gmail.com> * (c) 2019-present cristij <joracristi@gmail.com>
@ -103,40 +42,13 @@
*/ */
/*! /*!
* vuex v3.5.1 * vuex v3.6.0
* (c) 2020 Evan You * (c) 2020 Evan You
* @license MIT * @license MIT
*/ */
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/*! For license information please see index.js.LICENSE.txt */ /*! For license information please see index.js.LICENSE.txt */
/*! https://mths.be/punycode v1.4.1 by @mathias */
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
/**
* vue-router v2.7.0
* (c) 2017 Evan You
* @license MIT
*/
/** /**
* @license * @license
* Lodash <https://lodash.com/> * Lodash <https://lodash.com/>

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{ {
"/assets/js/app.js": "/assets/js/app.js?id=1d9cf52055fe7be22fd1", "/assets/js/app.js": "/assets/js/app.js?id=ccf2d83d1f924a997810",
"/assets/css/crater.css": "/assets/css/crater.css?id=912348e74f68a41a1b35" "/assets/css/crater.css": "/assets/css/crater.css?id=6ba60df7635dc2f5fbc5"
} }

View File

@ -70,6 +70,8 @@ Crater is a product of [Bytefury](https://bytefury.com)
- [Birkhoff Lee](https://github.com/BirkhoffLee) - [Birkhoff Lee](https://github.com/BirkhoffLee)
- [Akaunting](https://github.com/akaunting/akaunting) - [Akaunting](https://github.com/akaunting/akaunting)
- [MakerLab](https://github.com/MakerLab-Dev) - [MakerLab](https://github.com/MakerLab-Dev)
- [Sebastian Cretu](https://github.com/sebastiancretu)
- [Florian Gareis](https://github.com/TheZoker)
## Translate ## Translate

View File

@ -3,15 +3,15 @@
* include Vue and Vue Resource. This gives a great starting point for * include Vue and Vue Resource. This gives a great starting point for
* building robust, powerful web applications using Vue and Laravel. * building robust, powerful web applications using Vue and Laravel.
*/ */
import Vue from 'vue'
import router from './router.js' import router from './router.js'
import store from './store/index' import store from './store/index'
import utils from './helpers/utilities' import utils from './helpers/utilities'
import i18n from './plugins/i18n' import i18n from './plugins/i18n'
import swal from 'sweetalert'
require('./bootstrap') require('./bootstrap')
window.Vue.prototype.$utils = utils Vue.prototype.$utils = utils
/** /**
* Next, we will create a fresh Vue application instance and attach it to * Next, we will create a fresh Vue application instance and attach it to
@ -26,5 +26,4 @@ new Vue({
router, router,
store, store,
i18n, i18n,
swal,
}).$mount('#app') }).$mount('#app')

View File

@ -8,6 +8,8 @@ import money from 'v-money'
import VTooltip from 'v-tooltip' import VTooltip from 'v-tooltip'
import Transitions from 'vue2-transitions' import Transitions from 'vue2-transitions'
import SpaceWind from '@bytefury/spacewind' import SpaceWind from '@bytefury/spacewind'
import swal from 'vue-sweetalert2'
import 'sweetalert2/dist/sweetalert2.min.css'
/** /**
* Theme * Theme
@ -22,16 +24,36 @@ Vue.use(SpaceWind, { theme })
Vue.use(Vuelidate) Vue.use(Vuelidate)
Vue.use(swal, {
customClass: {
container:
'fixed z-50 inset-0 overflow-y-auto bg-black bg-opacity-25 flex justify-center min-h-screen items-center sm:p-0 swal2-container',
popup:
'flex items-center flex-col justify-center align-bottom bg-white rounded-lg px-4 pt-5 pb-4 text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full sm:p-6',
header: 'swal2-header',
title: 'swal2-title',
closeButton: '',
icon: 'swal2-icon',
image: '',
content: 'swal2-content',
input: '',
inputLabel: '',
validationMessage: '',
actions: 'swal2-actions',
confirmButton:
'w-full inline-flex py-2 px-4 text-sm leading-5 rounded items-center justify-center text-white font-normal transition duration-150 ease-in-out border border-transparent focus:outline-none bg-primary-500 hover:bg-opacity-75 whitespace-nowrap',
denyButton: '',
cancelButton:
'w-full inline-flex py-2 px-4 text-sm leading-5 rounded justify-center items-center focus:outline-none font-normal transition ease-in-out duration-150 border border-transparent border border-solid border-primary-500 text-primary-500 hover:bg-primary-200 shadow-inner whitespace-nowrap',
loader: '',
footer: '',
},
buttonsStyling: false,
})
Vue.use(Transitions) Vue.use(Transitions)
window._ = require('lodash') window._ = require('lodash')
/**
* Vue is a modern JavaScript library for building interactive web interfaces
* using reactive data binding and reusable components. Vue's API is clean
* and simple, leaving you to focus on building your next great project.
*/
window.Vue = require('vue')
/** /**
* Custom Directives * Custom Directives
@ -96,9 +118,11 @@ global.axios.interceptors.response.use(undefined, function (err) {
return true return true
} }
if (!err.response) { if (!err.response) {
window.toastr['error']( store.dispatch('notification/showNotification', {
'Please check your internet connection or wait until servers are back online', 'Network Error' type: 'error',
) message:
'Please check your internet connection or wait until servers are back online.',
})
} else { } else {
if ( if (
err.response.data && err.response.data &&
@ -106,23 +130,30 @@ global.axios.interceptors.response.use(undefined, function (err) {
err.response.data === ' Unauthorized.') err.response.data === ' Unauthorized.')
) { ) {
// Unauthorized and log out // Unauthorized and log out
window.toastr['error']( store.dispatch('notification/showNotification', {
err.response.data.message ? err.response.data.message : 'Unauthorized' type: 'error',
) message: err.response.data.message
? err.response.data.message
: 'Unauthorized',
})
store.dispatch('auth/logout', true) store.dispatch('auth/logout', true)
} else if (err.response.data.errors) { } else if (err.response.data.errors) {
// Show a notification per error // Show a notification per error
const errors = JSON.parse(JSON.stringify(err.response.data.errors)) const errors = JSON.parse(JSON.stringify(err.response.data.errors))
for (const i in errors) { for (const i in errors) {
window.toastr['error'](errors[i]) store.dispatch('notification/showNotification', {
type: 'error',
message: errors[i],
})
} }
} else { } else {
// Unknown error // Unknown error
window.toastr['error']( store.dispatch('notification/showNotification', {
err.response.data.message type: 'error',
message: err.response.data.message
? err.response.data.message ? err.response.data.message
: err.response.data || 'Unknown error occurred', 'Error' : err.response.data || 'Unknown error occurred',
) })
} }
} }
return Promise.reject(err) return Promise.reject(err)
@ -131,8 +162,6 @@ global.axios.interceptors.response.use(undefined, function (err) {
/** /**
* Global plugins * Global plugins
*/ */
window.toastr = require('toastr')
Vue.use(VueRouter) Vue.use(VueRouter)
Vue.use(Vuex) Vue.use(Vuex)
Vue.use(VTooltip) Vue.use(VTooltip)

View File

@ -0,0 +1,147 @@
<template>
<transition
enter-class="translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2 "
enter-active-class="transition duration-300 ease-out transform"
enter-to-class="duration-300 translate-y-0 opacity-100 sm:translate-x-0"
leave-active-class="transition duration-100 ease-in"
leave-class="duration-200 opacity-100"
leave-to-class="duration-200 opacity-0"
>
<div
v-if="notificationActive"
class="fixed inset-0 z-50 flex items-end justify-center px-4 py-6 pointer-events-none sm:p-6 sm:items-start sm:justify-end"
>
<div
:class="success || info ? 'bg-white' : 'bg-red-50'"
class="w-full max-w-sm rounded-lg shadow-lg cursor-pointer pointer-events-auto"
@click="hideNotification"
>
<div class="overflow-hidden rounded-lg shadow-xs">
<div class="p-4">
<div class="flex items-start">
<div class="flex-shrink-0">
<svg
v-if="success"
class="w-6 h-6 text-green-400"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
/>
</svg>
<exclamation-circle-icon
v-if="info"
class="w-6 h-6 text-blue-400"
/>
<svg
v-if="error"
class="w-6 h-6 text-red-400"
fill="currentColor"
viewBox="0 0 24 24"
>
<path
fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
clip-rule="evenodd"
/>
</svg>
</div>
<div class="flex-1 w-0 ml-3">
<p
:class="`text-sm leading-5 font-medium ${
success || info ? 'text-gray-900' : 'text-red-800'
}`"
>
{{
notificationTitle ? notificationTitle : success ? 'Success!' : 'Error'
}}
</p>
<p
:class="`mt-1 text-sm leading-5 ${
success || info ? 'text-gray-500' : 'text-red-700'
}`"
>
{{
notificationMessage
? notificationMessage
: success
? 'Successful'
: 'Somthing went wrong'
}}
</p>
</div>
<div class="flex flex-shrink-0">
<button
:class="
success || info
? ' text-gray-400 focus:text-gray-500'
: 'text-red-400 focus:text-red-500'
"
class="inline-flex w-5 h-5 transition duration-150 ease-in-out focus:outline-none"
@click="hideNotification"
>
<x-icon />
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</transition>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
import { XIcon } from '@vue-hero-icons/outline'
import { ExclamationCircleIcon } from '@vue-hero-icons/solid'
export default {
components: {
XIcon,
ExclamationCircleIcon,
},
data() {
return {
hasFocus: false,
}
},
computed: {
...mapGetters('notification', [
'notificationActive',
'notificationTitle',
'notificationType',
'notificationAutoHide',
'notificationMessage',
]),
success() {
return this.notificationType.toLowerCase() === 'success'
},
error() {
return this.notificationType.toLowerCase() === 'error'
},
info() {
return this.notificationType.toLowerCase() === 'info'
},
},
watch: {
notificationActive(val) {
if (val && this.notificationAutoHide) {
window.setTimeout(this.hideNotification, 5000)
}
},
},
mounted() {
if (this.notificationActive && this.notificationAutoHide) {
window.setTimeout(this.hideNotification, 5000)
}
},
methods: {
...mapActions('notification', ['showNotification', 'hideNotification']),
},
}
</script>

View File

@ -1,3 +1,5 @@
import Vue from 'vue'
import BaseModal from './modal/BaseModal.vue' import BaseModal from './modal/BaseModal.vue'
import BaseLoader from './BaseLoader.vue' import BaseLoader from './BaseLoader.vue'
import BaseCustomerSelect from './BaseCustomerSelect.vue' import BaseCustomerSelect from './BaseCustomerSelect.vue'
@ -11,6 +13,7 @@ import NoteSelectPopup from './popup/NoteSelectPopup.vue'
import BaseDatePicker from '../base/BaseDatePicker.vue' import BaseDatePicker from '../base/BaseDatePicker.vue'
import BaseTimePicker from './BaseTimePicker.vue' import BaseTimePicker from './BaseTimePicker.vue'
import BasePage from './BasePage.vue' import BasePage from './BasePage.vue'
import BaseNotification from './BaseNotification.vue'
import GlobalSearch from '../GlobalSearch.vue' import GlobalSearch from '../GlobalSearch.vue'
@ -37,6 +40,7 @@ Vue.component('tax-select-popup', TaxSelectPopup)
Vue.component('note-select-popup', NoteSelectPopup) Vue.component('note-select-popup', NoteSelectPopup)
Vue.component('base-time-picker', BaseTimePicker) Vue.component('base-time-picker', BaseTimePicker)
Vue.component('base-notification', BaseNotification)
Vue.component('dot-icon', DotIcon) Vue.component('dot-icon', DotIcon)
Vue.component('save-icon', SaveIcon) Vue.component('save-icon', SaveIcon)

View File

@ -2,8 +2,8 @@
<div class="relative customer-modal"> <div class="relative customer-modal">
<base-loader <base-loader
v-if="isRequestOngoing" v-if="isRequestOngoing"
class="h-130"
:show-bg-overlay="true" :show-bg-overlay="true"
class="h-130"
/> />
<form @submit.prevent="createNewBackup"> <form @submit.prevent="createNewBackup">
<div class="p-6"> <div class="p-6">
@ -21,7 +21,7 @@
:show-labels="false" :show-labels="false"
:placeholder="$t('settings.backup.select_backup_type')" :placeholder="$t('settings.backup.select_backup_type')"
:allow-empty="false" :allow-empty="false"
:maxHeight="100" :max-height="100"
/> />
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
@ -38,11 +38,11 @@
:show-labels="false" :show-labels="false"
:placeholder="$t('settings.disk.select_disk')" :placeholder="$t('settings.disk.select_disk')"
:allow-empty="false" :allow-empty="false"
track-by="id"
:preselect-first="true" :preselect-first="true"
:custom-label="getCustomLabel" :custom-label="getCustomLabel"
:maxHeight="100" :max-height="100"
:loading="isLoading" :loading="isLoading"
track-by="id"
/> />
</sw-input-group> </sw-input-group>
</div> </div>
@ -59,9 +59,9 @@
</sw-button> </sw-button>
<sw-button <sw-button
:loading="isCreateLoading" :loading="isCreateLoading"
:disabled="isCreateLoading"
variant="primary" variant="primary"
type="submit" type="submit"
:disabled="isCreateLoading"
> >
<save-icon v-if="!isCreateLoading" class="mr-2" /> <save-icon v-if="!isCreateLoading" class="mr-2" />
{{ $t('general.create') }} {{ $t('general.create') }}
@ -140,6 +140,8 @@ export default {
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('notification', ['showNotification']),
getCustomLabel({ driver, name }) { getCustomLabel({ driver, name }) {
return `${name} — [${driver}]` return `${name} — [${driver}]`
}, },
@ -154,12 +156,18 @@ export default {
this.isCreateLoading = true this.isCreateLoading = true
await this.createBackup(data) await this.createBackup(data)
this.isCreateLoading = false this.isCreateLoading = false
window.toastr['success'](this.$t('settings.backup.created_message')) this.showNotification({
type: 'success',
message: this.$t('settings.backup.created_message'),
})
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
this.cancelBackup() this.cancelBackup()
} catch (e) { } catch (e) {
this.isCreateLoading = false this.isCreateLoading = false
window.toastr['error'](e.response.data.message) this.showNotification({
type: 'error',
message: e.response.data.message,
})
} }
}, },

View File

@ -41,7 +41,7 @@
> >
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button variant="primary" type="submit" :loading="isLoading"> <sw-button :loading="isLoading" variant="primary" type="submit">
<save-icon v-if="!isLoading" class="mr-2" /> <save-icon v-if="!isLoading" class="mr-2" />
{{ !isEdit ? $t('general.save') : $t('general.update') }} {{ !isEdit ? $t('general.save') : $t('general.update') }}
</sw-button> </sw-button>
@ -135,6 +135,8 @@ export default {
methods: { methods: {
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('category', ['addCategory', 'updateCategory']), ...mapActions('category', ['addCategory', 'updateCategory']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
id: null, id: null,
@ -159,13 +161,15 @@ export default {
if (response.data) { if (response.data) {
if (!this.isEdit) { if (!this.isEdit) {
window.toastr['success']( this.showNotification({
this.$t('settings.expense_category.created_message') type: 'success',
) message: this.$t('settings.expense_category.created_message'),
})
} else { } else {
window.toastr['success']( this.showNotification({
this.$t('settings.expense_category.updated_message') type: 'success',
) message: this.$t('settings.expense_category.updated_message'),
})
} }
window.hub.$emit('newCategory', response.data.category) window.hub.$emit('newCategory', response.data.category)
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
@ -173,7 +177,10 @@ export default {
this.isLoading = false this.isLoading = false
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
}, },
async setData() { async setData() {
this.formData = { this.formData = {

View File

@ -78,9 +78,9 @@
/> />
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
v-if="isDropdownSelected"
:label="$t('settings.custom_fields.options')" :label="$t('settings.custom_fields.options')"
class="mt-5" class="mt-5"
v-if="isDropdownSelected"
horizontal horizontal
> >
<option-create @onAdd="addNewOptions" /> <option-create @onAdd="addNewOptions" />
@ -92,28 +92,28 @@
> >
<sw-input v-model="option.name" type="text" style="width: 90%" /> <sw-input v-model="option.name" type="text" style="width: 90%" />
<minus-circle-icon <minus-circle-icon
@click="removeOption(index)"
class="ml-1 cursor-pointer icon text-danger" class="ml-1 cursor-pointer icon text-danger"
@click="removeOption(index)"
/> />
</div> </div>
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
v-if="formData.type"
:label="$t('settings.custom_fields.default_value')" :label="$t('settings.custom_fields.default_value')"
horizontal horizontal
class="relative mt-5" class="relative mt-5"
v-if="formData.type"
> >
<component <component
:value="formData.default_answer" :value="formData.default_answer"
:is="formData.type + 'Type'" :is="formData.type + 'Type'"
:options="formData.options" :options="formData.options"
:defaultDateTime="formData.dateTimeValue" :default-date-time="formData.dateTimeValue"
v-model="formData.default_answer" v-model="formData.default_answer"
/> />
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
:label="$t('settings.custom_fields.placeholder')"
v-if="!isSwitchTypeSelected" v-if="!isSwitchTypeSelected"
:label="$t('settings.custom_fields.placeholder')"
class="mt-5" class="mt-5"
horizontal horizontal
> >
@ -376,6 +376,7 @@ export default {
'fetchCustomField', 'fetchCustomField',
]), ]),
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
label: null, label: null,
@ -433,9 +434,10 @@ export default {
if (this.isEdit) { if (this.isEdit) {
this.isLoading = true this.isLoading = true
response = await this.updateCustomField(data) response = await this.updateCustomField(data)
window.toastr['success']( this.showNotification({
this.$tc('settings.custom_fields.updated_message') type: 'success',
) message: this.$tc('settings.custom_fields.updated_message'),
})
this.refreshData() this.refreshData()
this.closeCategoryModal() this.closeCategoryModal()
return true return true
@ -444,7 +446,10 @@ export default {
this.isLoading = true this.isLoading = true
response = await this.addCustomField(data) response = await this.addCustomField(data)
window.toastr['success'](this.$tc('settings.custom_fields.added_message')) this.showNotification({
type: 'success',
message: this.$tc('settings.custom_fields.added_message'),
})
this.refreshData() this.refreshData()
this.closeCategoryModal() this.closeCategoryModal()
return true return true

View File

@ -62,7 +62,7 @@
:allow-empty="false" :allow-empty="false"
:show-labels="false" :show-labels="false"
:placeholder="$t('customers.select_currency')" :placeholder="$t('customers.select_currency')"
:maxHeight="200" :max-height="200"
label="name" label="name"
class="mt-1 md:mt-0" class="mt-1 md:mt-0"
track-by="id" track-by="id"
@ -343,7 +343,7 @@
> >
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button variant="primary" type="submit" :loading="isLoading"> <sw-button :loading="isLoading" variant="primary" type="submit">
<save-icon v-if="!isLoading" class="mr-2" /> <save-icon v-if="!isLoading" class="mr-2" />
{{ $t('general.save') }} {{ $t('general.save') }}
</sw-button> </sw-button>
@ -444,6 +444,7 @@ export default {
...mapGetters(['currencies', 'countries']), ...mapGetters(['currencies', 'countries']),
...mapGetters('company', ['defaultCurrency']), ...mapGetters('company', ['defaultCurrency']),
...mapGetters('modal', ['modalDataID', 'modalData', 'modalActive']), ...mapGetters('modal', ['modalDataID', 'modalData', 'modalActive']),
nameError() { nameError() {
if (!this.$v.formData.name.$error) { if (!this.$v.formData.name.$error) {
return '' return ''
@ -586,6 +587,7 @@ export default {
'updateCustomer', 'updateCustomer',
]), ]),
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('notification', ['showNotification']),
resetData() { resetData() {
this.formData = { this.formData = {
name: null, name: null,
@ -700,9 +702,15 @@ export default {
} }
if (response.data) { if (response.data) {
if (this.modalDataID) { if (this.modalDataID) {
window.toastr['success'](this.$tc('customers.updated_message')) this.showNotification({
type: 'success',
message: this.$tc('customers.updated_message'),
})
} else { } else {
window.toastr['success'](this.$tc('customers.created_message')) this.showNotification({
type: 'success',
message: this.$tc('customers.created_message'),
})
} }
this.isLoading = false this.isLoading = false

View File

@ -5,9 +5,9 @@
:is="selected_disk" :is="selected_disk"
:loading="isLoading" :loading="isLoading"
:disks="getDiskDrivers" :disks="getDiskDrivers"
:is-edit="isEdit"
@on-change-disk="(disk) => (selected_disk = disk.value)" @on-change-disk="(disk) => (selected_disk = disk.value)"
@submit="createNewDisk" @submit="createNewDisk"
:is-edit="isEdit"
> >
<template v-slot="slotProps"> <template v-slot="slotProps">
<div <div
@ -16,15 +16,15 @@
<sw-button <sw-button
class="mr-3 text-sm" class="mr-3 text-sm"
variant="primary-outline" variant="primary-outline"
@click="closeDisk"
type="button" type="button"
@click="closeDisk"
> >
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button <sw-button
:loading="isRequestFire(slotProps)" :loading="isRequestFire(slotProps)"
variant="primary"
:disabled="isRequestFire(slotProps)" :disabled="isRequestFire(slotProps)"
variant="primary"
type="submit" type="submit"
> >
<save-icon v-if="!isRequestFire(slotProps)" class="mr-2" /> <save-icon v-if="!isRequestFire(slotProps)" class="mr-2" />
@ -96,6 +96,8 @@ export default {
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('notification', ['showNotification']),
isRequestFire(slotProps) { isRequestFire(slotProps) {
return slotProps && (slotProps.diskData.isLoading || this.isLoading) return slotProps && (slotProps.diskData.isLoading || this.isLoading)
}, },
@ -131,14 +133,21 @@ export default {
this.refreshData() this.refreshData()
this.closeDisk() this.closeDisk()
if (this.isEdit) { if (this.isEdit) {
window.toastr['success'](this.$t('settings.disk.success_update')) this.showNotification({
type: 'success',
message: this.$t('settings.disk.success_update'),
})
} else { } else {
window.toastr['success'](this.$t('settings.disk.success_create')) this.showNotification({
type: 'success',
message: this.$t('settings.disk.success_create'),
})
} }
} else { } else {
window.toastr['error']( this.showNotification({
this.$t('settings.disk.invalid_disk_credentials') type: 'error',
) message: this.$t('settings.disk.invalid_disk_credentials'),
})
} }
this.isLoading = false this.isLoading = false
}, },

View File

@ -43,7 +43,7 @@
:options="itemUnits" :options="itemUnits"
:searchable="true" :searchable="true"
:show-labels="false" :show-labels="false"
:maxHeight="200" :max-height="200"
label="name" label="name"
> >
</sw-select> </sw-select>
@ -160,7 +160,7 @@ export default {
return this.formData.price / 100 return this.formData.price / 100
}, },
set: function (newValue) { set: function (newValue) {
this.formData.price = newValue * 100 this.formData.price = Math.round(newValue * 100)
}, },
}, },
@ -251,6 +251,7 @@ export default {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('item', ['addItem', 'updateItem', 'fetchItemUnits']), ...mapActions('item', ['addItem', 'updateItem', 'fetchItemUnits']),
...mapActions('invoice', ['setItem']), ...mapActions('invoice', ['setItem']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
@ -304,7 +305,10 @@ export default {
response = await this.addItem(data) response = await this.addItem(data)
} }
if (response.data) { if (response.data) {
window.toastr['success'](this.$tc('items.created_message')) this.showNotification({
type: 'success',
message: this.$tc('items.created_message'),
})
this.setItem(response.data.item) this.setItem(response.data.item)
window.hub.$emit('newItem', response.data.item) window.hub.$emit('newItem', response.data.item)
@ -314,7 +318,10 @@ export default {
this.closeModal() this.closeModal()
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
}, },
closeItemModal() { closeItemModal() {

View File

@ -68,6 +68,14 @@ export default {
if (!this.$v.formData.name.required) { if (!this.$v.formData.name.required) {
return this.$tc('validation.required') return this.$tc('validation.required')
} }
if (!this.$v.formData.name.minLength) {
return this.$tc(
'validation.name_min_length',
this.$v.formData.name.$params.minLength.min,
{ count: this.$v.formData.name.$params.minLength.min }
)
}
}, },
}, },
validations: { validations: {
@ -89,6 +97,7 @@ export default {
methods: { methods: {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('item', ['addItemUnit', 'updateItemUnit', 'fatchItemUnit']), ...mapActions('item', ['addItemUnit', 'updateItemUnit', 'fatchItemUnit']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
id: null, id: null,
@ -115,13 +124,17 @@ export default {
if (response.data) { if (response.data) {
this.isLoading = false this.isLoading = false
if (!this.isEdit) { if (!this.isEdit) {
window.toastr['success']( this.showNotification({
this.$t('settings.customization.items.item_unit_added') type: 'success',
) message: this.$t('settings.customization.items.item_unit_added'),
})
} else { } else {
window.toastr['success']( this.showNotification({
this.$t('settings.customization.items.item_unit_updated') type: 'success',
) message: this.$t(
'settings.customization.items.item_unit_updated'
),
})
} }
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
this.closeItemUnitModal() this.closeItemUnitModal()
@ -129,7 +142,10 @@ export default {
} }
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
} }
}, },
async setData() { async setData() {

View File

@ -4,8 +4,8 @@
<div class="p-4 md:p-8"> <div class="p-4 md:p-8">
<sw-input-group <sw-input-group
:label="$t('general.to')" :label="$t('general.to')"
class="mt-3"
:error="emailError" :error="emailError"
class="mt-3"
variant="horizontal" variant="horizontal"
required required
> >
@ -19,8 +19,8 @@
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
:label="$t('general.subject')" :label="$t('general.subject')"
class="mt-3"
:error="subjectError" :error="subjectError"
class="mt-3"
variant="horizontal" variant="horizontal"
required required
> >
@ -33,8 +33,8 @@
</sw-input-group> </sw-input-group>
<sw-input-group <sw-input-group
:label="$t('general.message')" :label="$t('general.message')"
class="mt-3"
:error="messageError" :error="messageError"
class="mt-3"
variant="horizontal" variant="horizontal"
required required
> >
@ -57,7 +57,7 @@
> >
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button variant="primary" type="submit" :loading="isLoading"> <sw-button :loading="isLoading" variant="primary" type="submit">
<paper-airplane-icon v-if="!isLoading" class="mr-2" /> <paper-airplane-icon v-if="!isLoading" class="mr-2" />
{{ !isEdit ? $t('general.send') : $t('general.update') }} {{ !isEdit ? $t('general.send') : $t('general.update') }}
</sw-button> </sw-button>
@ -149,6 +149,7 @@ export default {
methods: { methods: {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('company', ['sendTestMail']), ...mapActions('company', ['sendTestMail']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
to: null, to: null,
@ -169,18 +170,26 @@ export default {
if (response.data) { if (response.data) {
if (response.data.success) { if (response.data.success) {
window.toastr['success'](this.$tc('general.send_mail_successfully')) this.showNotification({
type: 'success',
message: this.$tc('general.send_mail_successfully'),
})
this.closeTaxModal() this.closeTaxModal()
this.isLoading = false this.isLoading = false
return true return true
} }
this.showNotification({
window.toastr['error'](this.$tc('validation.something_went_wrong')) type: 'error',
message: this.$tc('validation.something_went_wrong'),
})
this.closeTaxModal() this.closeTaxModal()
this.isLoading = false this.isLoading = false
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
}, },
closeTaxModal() { closeTaxModal() {
this.resetModalData() this.resetModalData()

43
resources/assets/js/components/base/modal/NoteModal.vue Normal file → Executable file
View File

@ -105,6 +105,14 @@ export default {
if (!this.$v.formData.name.required) { if (!this.$v.formData.name.required) {
return this.$tc('validation.required') return this.$tc('validation.required')
} }
if (!this.$v.formData.name.minLength) {
return this.$tc(
'validation.name_min_length',
this.$v.formData.name.$params.minLength.min,
{ count: this.$v.formData.name.$params.minLength.min }
)
}
}, },
noteError() { noteError() {
if (!this.$v.formData.notes.$error) { if (!this.$v.formData.notes.$error) {
@ -139,6 +147,11 @@ export default {
required, required,
}, },
}, },
watch: {
noteType() {
this.setFields()
},
},
async mounted() { async mounted() {
this.setFields() this.setFields()
if (this.modalDataID) { if (this.modalDataID) {
@ -150,14 +163,10 @@ export default {
: (this.noteType = 'Invoice') : (this.noteType = 'Invoice')
} }
}, },
watch: {
noteType() {
this.setFields()
},
},
methods: { methods: {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('notes', ['addNote', 'updateNote']), ...mapActions('notes', ['addNote', 'updateNote']),
...mapActions('notification', ['showNotification']),
...mapActions('invoice', { ...mapActions('invoice', {
setInvoiceNote: 'selectNote', setInvoiceNote: 'selectNote',
}), }),
@ -214,15 +223,19 @@ export default {
let res = await this.updateNote(data) let res = await this.updateNote(data)
if (res.data) { if (res.data) {
window.toastr['success']( this.showNotification({
this.$t('settings.customization.notes.note_updated') type: 'success',
) message: this.$t('settings.customization.notes.note_updated'),
})
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
this.closeNoteModal() this.closeNoteModal()
return true return true
} }
window.toastr['error'](res.data.error) this.showNotification({
type: 'error',
message: res.data.error,
})
} else { } else {
try { try {
let data = { let data = {
@ -235,9 +248,10 @@ export default {
if (response.data && response.data.note) { if (response.data && response.data.note) {
this.isLoading = false this.isLoading = false
window.toastr['success']( this.showNotification({
this.$t('settings.customization.notes.note_added') type: 'success',
) message: this.$t('settings.customization.notes.note_added'),
})
if ( if (
(this.$route.name === 'invoices.create' && (this.$route.name === 'invoices.create' &&
response.data.note.type === 'Invoice') || response.data.note.type === 'Invoice') ||
@ -269,7 +283,10 @@ export default {
this.closeNoteModal() this.closeNoteModal()
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
} catch (err) { } catch (err) {
if (err.response.data.errors.name) { if (err.response.data.errors.name) {
this.isLoading = true this.isLoading = true

View File

@ -26,7 +26,7 @@
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button :loading="isLoading" variant="primary" type="submit"> <sw-button :loading="isLoading" variant="primary" type="submit">
<save-icon class="mr-2" v-if="!isLoading" /> <save-icon v-if="!isLoading" class="mr-2" />
{{ !isEdit ? $t('general.save') : $t('general.update') }} {{ !isEdit ? $t('general.save') : $t('general.update') }}
</sw-button> </sw-button>
</div> </div>
@ -62,6 +62,14 @@ export default {
if (!this.$v.formData.name.required) { if (!this.$v.formData.name.required) {
return this.$tc('validation.required') return this.$tc('validation.required')
} }
if (!this.$v.formData.name.minLength) {
return this.$tc(
'validation.name_min_length',
this.$v.formData.name.$params.minLength.min,
{ count: this.$v.formData.name.$params.minLength.min }
)
}
}, },
}, },
validations: { validations: {
@ -82,6 +90,7 @@ export default {
methods: { methods: {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('payment', ['addPaymentMode', 'updatePaymentMode']), ...mapActions('payment', ['addPaymentMode', 'updatePaymentMode']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
id: null, id: null,
@ -100,27 +109,39 @@ export default {
if (this.isEdit) { if (this.isEdit) {
response = await this.updatePaymentMode(this.formData) response = await this.updatePaymentMode(this.formData)
if (response.data) { if (response.data) {
window.toastr['success']( this.showNotification({
this.$t('settings.customization.payments.payment_mode_updated') type: 'success',
) message: this.$t(
'settings.customization.payments.payment_mode_updated'
),
})
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
this.closePaymentModeModal() this.closePaymentModeModal()
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
} else { } else {
try { try {
response = await this.addPaymentMode(this.formData) response = await this.addPaymentMode(this.formData)
if (response.data) { if (response.data) {
this.isLoading = false this.isLoading = false
window.toastr['success']( this.showNotification({
this.$t('settings.customization.payments.payment_mode_added') type: 'success',
) message: this.$t(
'settings.customization.payments.payment_mode_added'
),
})
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
this.closePaymentModeModal() this.closePaymentModeModal()
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
} catch (err) { } catch (err) {
this.isLoading = false this.isLoading = false
} }

View File

@ -61,8 +61,8 @@
v-model="formData.body" v-model="formData.body"
:fields="estimateMailFields" :fields="estimateMailFields"
:invalid="$v.formData.body.$error" :invalid="$v.formData.body.$error"
@input="$v.formData.body.$touch()"
class="mt-2" class="mt-2"
@input="$v.formData.body.$touch()"
/> />
</sw-input-group> </sw-input-group>
</div> </div>
@ -140,6 +140,7 @@ export default {
computed: { computed: {
...mapGetters('modal', ['modalDataID', 'modalData', 'modalActive']), ...mapGetters('modal', ['modalDataID', 'modalData', 'modalActive']),
...mapGetters('user', ['currentUser']), ...mapGetters('user', ['currentUser']),
...mapActions('notification', ['showNotification']),
getEmailUrl() { getEmailUrl() {
return this.url return this.url
}, },
@ -224,15 +225,31 @@ export default {
if (this.$v.$invalid) { if (this.$v.$invalid) {
return true return true
} }
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$t('estimates.confirm_send_estimate'), text: this.$t('estimates.confirm_send_estimate'),
icon: '/assets/icon/check-circle-solid.svg', icon: 'question',
buttons: true, iconHtml: `<svg
dangerMode: true, aria-hidden="true"
}).then(async (value) => { class="w-6 h-6"
focusable="false"
data-prefix="fas"
data-icon="check-circle"
class="svg-inline--fa fa-check-circle fa-w-16"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="#55547A"
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
></path>
</svg>`,
showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
try { try {
if (value) { if (result.value) {
let data = { let data = {
...this.formData, ...this.formData,
id: this.modalDataID, id: this.modalDataID,
@ -244,21 +261,26 @@ export default {
this.closeModal() this.closeModal()
if (res.data.success) { if (res.data.success) {
this.isLoading = false this.isLoading = false
window.toastr['success']( this.showNotification({
this.$tc('estimates.send_estimate_successfully') type: 'success',
) message: this.$tc('estimates.send_estimate_successfully'),
})
return true return true
} }
if (res.data.error === 'estimates.user_email_does_not_exist') { if (res.data.error === 'estimates.user_email_does_not_exist') {
window.toastr['error']( this.showNotification({
this.$tc('estimates.user_email_does_not_exist') type: 'error',
) message: this.$tc('estimates.user_email_does_not_exist'),
})
return false return false
} }
} }
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false
window.toastr['error'](this.$tc('estimates.something_went_wrong')) this.showNotification({
type: 'error',
message: this.$tc('estimates.something_went_wrong'),
})
} }
}) })
}, },

View File

@ -55,8 +55,8 @@
v-model="formData.body" v-model="formData.body"
:fields="InvoiceMailFields" :fields="InvoiceMailFields"
:invalid="$v.formData.body.$error" :invalid="$v.formData.body.$error"
@input="$v.formData.body.$touch()"
class="mt-2" class="mt-2"
@input="$v.formData.body.$touch()"
/> />
</sw-input-group> </sw-input-group>
</div> </div>
@ -194,6 +194,8 @@ export default {
...mapActions('company', ['fetchCompanySettings', 'fetchMailConfig']), ...mapActions('company', ['fetchCompanySettings', 'fetchMailConfig']),
...mapActions('notification', ['showNotification']),
async setInitialData() { async setInitialData() {
let admin = await this.fetchMailConfig() let admin = await this.fetchMailConfig()
@ -220,15 +222,31 @@ export default {
if (this.$v.$invalid) { if (this.$v.$invalid) {
return true return true
} }
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$t('invoices.confirm_send_invoice'), text: this.$t('invoices.confirm_send_invoice'),
icon: '/assets/icon/check-circle-solid.svg', icon: 'question',
buttons: true, iconHtml: `<svg
dangerMode: true, aria-hidden="true"
}).then(async (value) => { class="w-6 h-6"
focusable="false"
data-prefix="fas"
data-icon="check-circle"
class="svg-inline--fa fa-check-circle fa-w-16"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="#55547A"
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
></path>
</svg>`,
showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
try { try {
if (value) { if (result.value) {
let data = { let data = {
...this.formData, ...this.formData,
id: this.modalDataID, id: this.modalDataID,
@ -239,21 +257,26 @@ export default {
this.closeModal() this.closeModal()
if (res.data.success) { if (res.data.success) {
this.isLoading = false this.isLoading = false
window.toastr['success']( this.showNotification({
this.$tc('invoices.send_invoice_successfully') type: 'success',
) message: this.$tc('invoices.send_invoice_successfully'),
})
return true return true
} }
if (res.data.error === 'invoices.user_email_does_not_exist') { if (res.data.error === 'invoices.user_email_does_not_exist') {
window.toastr['error']( this.showNotification({
this.$tc('invoices.user_email_does_not_exist') type: 'error',
) message: this.$tc('invoices.user_email_does_not_exist'),
})
return false return false
} }
} }
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false
window.toastr['error'](this.$tc('invoices.something_went_wrong')) this.showNotification({
type: 'error',
message: this.$tc('invoices.something_went_wrong'),
})
} }
}) })
}, },

View File

@ -4,9 +4,9 @@
<div class="px-8 py-8 sm:p-6"> <div class="px-8 py-8 sm:p-6">
<sw-input-group <sw-input-group
:label="$t('general.from')" :label="$t('general.from')"
:error="fromError"
class="mb-4" class="mb-4"
variant="vertical" variant="vertical"
:error="fromError"
required required
> >
<sw-input <sw-input
@ -25,8 +25,8 @@
> >
<sw-input <sw-input
v-model="formData.to" v-model="formData.to"
type="text"
:invalid="$v.formData.to.$error" :invalid="$v.formData.to.$error"
type="text"
@input="$v.formData.to.$touch()" @input="$v.formData.to.$touch()"
/> />
</sw-input-group> </sw-input-group>
@ -188,6 +188,8 @@ export default {
...mapActions('company', ['fetchCompanySettings', 'fetchMailConfig']), ...mapActions('company', ['fetchCompanySettings', 'fetchMailConfig']),
...mapActions('notification', ['showNotification']),
async setInitialData() { async setInitialData() {
let admin = await this.fetchMailConfig() let admin = await this.fetchMailConfig()
@ -216,15 +218,31 @@ export default {
if (this.$v.$invalid) { if (this.$v.$invalid) {
return true return true
} }
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$t('payments.confirm_send_payment'), text: this.$t('payments.confirm_send_payment'),
icon: '/assets/icon/check-circle-solid.svg', icon: 'question',
buttons: true, iconHtml: `<svg
dangerMode: true, aria-hidden="true"
}).then(async (value) => { class="w-6 h-6"
focusable="false"
data-prefix="fas"
data-icon="check-circle"
class="svg-inline--fa fa-check-circle fa-w-16"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512"
>
<path
fill="#55547A"
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
></path>
</svg>`,
showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
try { try {
if (value) { if (result.value) {
let data = { let data = {
...this.formData, ...this.formData,
id: this.modalDataID, id: this.modalDataID,
@ -236,21 +254,26 @@ export default {
this.closeModal() this.closeModal()
if (res.data.success) { if (res.data.success) {
this.isLoading = false this.isLoading = false
window.toastr['success']( this.showNotification({
this.$tc('payments.send_payment_successfully') type: 'success',
) message: this.$tc('payments.send_payment_successfully'),
})
return true return true
} }
if (res.data.error === 'payments.user_email_does_not_exist') { if (res.data.error === 'payments.user_email_does_not_exist') {
window.toastr['error']( this.showNotification({
this.$tc('payments.user_email_does_not_exist') type: 'error',
) message: this.$tc('payments.user_email_does_not_exist'),
})
return false return false
} }
} }
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false
window.toastr['error'](this.$tc('payments.something_went_wrong')) this.showNotification({
type: 'error',
message: this.$tc('payments.something_went_wrong'),
})
} }
}) })
}, },

View File

@ -9,9 +9,9 @@
:searchable="true" :searchable="true"
:allow-empty="false" :allow-empty="false"
:show-labels="false" :show-labels="false"
:custom-label="getCustomLabel"
class="mt-2" class="mt-2"
track-by="id" track-by="id"
:custom-label="getCustomLabel"
/> />
</sw-input-group> </sw-input-group>
</div> </div>
@ -90,6 +90,8 @@ export default {
...mapActions('modal', ['closeModal']), ...mapActions('modal', ['closeModal']),
...mapActions('notification', ['showNotification']),
async loadData() { async loadData() {
this.loading = true this.loading = true
@ -107,7 +109,10 @@ export default {
if (response.data.success) { if (response.data.success) {
this.refreshData() this.refreshData()
this.closeDisk() this.closeDisk()
window.toastr['success'](this.$t('settings.disk.success')) this.showNotification({
type: 'success',
message: this.$t('settings.disk.success'),
})
} }
this.isLoading = true this.isLoading = true
}, },

View File

@ -69,7 +69,7 @@
{{ $t('general.cancel') }} {{ $t('general.cancel') }}
</sw-button> </sw-button>
<sw-button :loading="isLoading" variant="primary" type="submit"> <sw-button :loading="isLoading" variant="primary" type="submit">
<save-icon class="mr-2" v-if="!isLoading" /> <save-icon v-if="!isLoading" class="mr-2" />
{{ !isEdit ? $t('general.save') : $t('general.update') }} {{ !isEdit ? $t('general.save') : $t('general.update') }}
</sw-button> </sw-button>
</div> </div>
@ -174,6 +174,7 @@ export default {
methods: { methods: {
...mapActions('modal', ['closeModal', 'resetModalData']), ...mapActions('modal', ['closeModal', 'resetModalData']),
...mapActions('taxType', ['addTaxType', 'updateTaxType', 'fetchTaxType']), ...mapActions('taxType', ['addTaxType', 'updateTaxType', 'fetchTaxType']),
...mapActions('notification', ['showNotification']),
resetFormData() { resetFormData() {
this.formData = { this.formData = {
id: null, id: null,
@ -198,13 +199,15 @@ export default {
} }
if (response.data) { if (response.data) {
if (!this.isEdit) { if (!this.isEdit) {
window.toastr['success']( this.showNotification({
this.$t('settings.tax_types.created_message') type: 'success',
) message: this.$t('settings.tax_types.created_message'),
})
} else { } else {
window.toastr['success']( this.showNotification({
this.$t('settings.tax_types.updated_message') type: 'success',
) message: this.$t('settings.tax_types.updated_message'),
})
} }
window.hub.$emit('newTax', response.data.taxType) window.hub.$emit('newTax', response.data.taxType)
this.refreshData ? this.refreshData() : '' this.refreshData ? this.refreshData() : ''
@ -212,7 +215,10 @@ export default {
this.isLoading = false this.isLoading = false
return true return true
} }
window.toastr['error'](response.data.error) this.showNotification({
type: 'error',
message: response.data.error,
})
}, },
async setData() { async setData() {
this.formData = { this.formData = {

View File

@ -12,7 +12,7 @@ export default {
disabledMultiSelectTags: 'bg-gray-200 text-gray-400', disabledMultiSelectTags: 'bg-gray-200 text-gray-400',
multiselectTagsWrap: 'multiselect__tags-wrap inline', multiselectTagsWrap: 'multiselect__tags-wrap inline',
multiselectTag: multiselectTag:
'multiselect__tag relative inline-block pt-1 pr-6 pb-1 pl-2 rounded mr-2 text-white leading-none mb-1 whitespace-no-wrap overflow-hidden max-w-full', 'multiselect__tag relative inline-block pt-1 pr-6 pb-1 pl-2 rounded mr-2 text-white leading-none mb-1 whitespace-nowrap overflow-hidden max-w-full',
multiselectTagIcon: multiselectTagIcon:
'multiselect__tag-icon cursor-pointer ml-2 absolute right-0 top-0 bottom-0 font-bold w-5 text-center leading-5 delay-200 transition-all ease-linear rounded', 'multiselect__tag-icon cursor-pointer ml-2 absolute right-0 top-0 bottom-0 font-bold w-5 text-center leading-5 delay-200 transition-all ease-linear rounded',
multiselectStrong: 'mb-2 leading-5 inline-block align-top', multiselectStrong: 'mb-2 leading-5 inline-block align-top',
@ -26,6 +26,6 @@ export default {
multiselectContent: multiselectContent:
'multiselect__content list-none inline-block p-0 m-0 min-w-full align-top', 'multiselect__content list-none inline-block p-0 m-0 min-w-full align-top',
multiselectOption: multiselectOption:
'multiselect__option block p-3 no-underline leading-4 normal-case align-middle relative cursor-pointer whitespace-no-wrap text-sm', 'multiselect__option block p-3 no-underline leading-4 normal-case align-middle relative cursor-pointer whitespace-nowrap text-sm',
multiselectElement: 'multiselect__element block', multiselectElement: 'multiselect__element block',
} }

View File

@ -73,7 +73,7 @@ export default {
callbacks: { callbacks: {
label: function (tooltipItem, data) { label: function (tooltipItem, data) {
return self.FormatGraphMoney( return self.FormatGraphMoney(
tooltipItem.value * 100, Math.round(tooltipItem.value * 100),
self.defaultCurrency self.defaultCurrency
) )
}, },

View File

@ -72,11 +72,9 @@ export default {
deep: true, deep: true,
}, },
}, },
mounted() { created() {
this.date = this.date =
this.field && this.field.defaultAnswer this.field && this.field.defaultAnswer && this.field.defaultAnswer
? this.field.defaultAnswer
: new Date()
this.placeholder = this.placeholder =
this.field && this.field.placeholder ? this.field.placeholder : '' this.field && this.field.placeholder ? this.field.placeholder : ''
}, },

View File

@ -13,4 +13,10 @@ export default {
'inline-flex items-center justify-center text-black transition px-2 duration-150 ease-in-out border border-gray-300 border-solid focus:outline-none bg-white', 'inline-flex items-center justify-center text-black transition px-2 duration-150 ease-in-out border border-gray-300 border-solid focus:outline-none bg-white',
}, },
}, },
sizes: {
discount: {
button: 'py-2 px-2 text-sm leading-5 rounded',
loadingIcon: 'w-4 h-4 -ml-2',
},
},
} }

View File

@ -6,7 +6,7 @@ export default {
itemContainer: itemContainer:
'z-10 p-2 max-h-60 text-base text-left list-none rounded border-0 shadow bg-white text-black overflow-auto sw-scroll', 'z-10 p-2 max-h-60 text-base text-left list-none rounded border-0 shadow bg-white text-black overflow-auto sw-scroll',
item: item:
'flex p-2 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-no-wrap', 'flex p-2 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-nowrap',
itemIcon: 'w-5 h-5 mr-3 text-secondary', itemIcon: 'w-5 h-5 mr-3 text-secondary',
}, },
variants: { variants: {
@ -16,7 +16,7 @@ export default {
divider: divider:
'border-t border-solid border-gray-200 my-2 mx-0 overflow-hidden', 'border-t border-solid border-gray-200 my-2 mx-0 overflow-hidden',
item: item:
'flex p-0 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-no-wrap', 'flex p-0 text-sm font-light text-left text-black bg-transparent rounded cursor-pointer none hover:bg-gray-200 whitespace-nowrap',
itemContainer: itemContainer:
'z-10 p-2 text-base text-left list-none rounded border-0 shadow bg-white text-black', 'z-10 p-2 text-base text-left list-none rounded border-0 shadow bg-white text-black',
itemIcon: 'w-5 h-5 mr-3 text-secondary', itemIcon: 'w-5 h-5 mr-3 text-secondary',

View File

@ -1,3 +1,5 @@
import Vue from 'vue'
Vue.directive('click-outside', { Vue.directive('click-outside', {
bind: function (el, binding, vnode) { bind: function (el, binding, vnode) {
el.event = function (event) { el.event = function (event) {
@ -17,7 +19,9 @@ Vue.directive('click-outside', {
Vue.directive('autoresize', { Vue.directive('autoresize', {
inserted: function (el) { inserted: function (el) {
el.style.height = el.scrollHeight + 'px' el.style.height = el.scrollHeight + 'px'
el.style.overflow.y = 'hidden' if (el.style.overflow && el.style.overflow.y) {
el.style.overflow.y = 'hidden'
}
el.style.resize = 'none' el.style.resize = 'none'
function OnInput() { function OnInput() {
this.style.height = 'auto' this.style.height = 'auto'

View File

@ -1,3 +1,5 @@
import i18n from '../plugins/i18n';
export default { export default {
addClass(el, className) { addClass(el, className) {
if (el.classList) el.classList.add(className) if (el.classList) el.classList.add(className)
@ -23,7 +25,13 @@ export default {
amount = amount / 100 amount = amount / 100
let { precision, decimal_separator, thousand_separator, symbol } = currency let {
precision,
decimal_separator,
thousand_separator,
symbol,
swap_currency_symbol,
} = currency
try { try {
precision = Math.abs(precision) precision = Math.abs(precision)
@ -37,20 +45,22 @@ export default {
let j = i.length > 3 ? i.length % 3 : 0 let j = i.length > 3 ? i.length % 3 : 0
let moneySymbol = `<span style="font-family: sans-serif">${symbol}</span>` let moneySymbol = `<span style="font-family: sans-serif">${symbol}</span>`
let thousandText = j ? i.substr(0, j) + thousand_separator : ''
let amountText = i
.substr(j)
.replace(/(\d{3})(?=\d)/g, '$1' + thousand_separator)
let precisionText = precision
? decimal_separator +
Math.abs(amount - i)
.toFixed(precision)
.slice(2)
: ''
let combinedAmountText =
negativeSign + thousandText + amountText + precisionText
return ( return swap_currency_symbol
moneySymbol + ? combinedAmountText + ' ' + moneySymbol
' ' + : moneySymbol + ' ' + combinedAmountText
negativeSign +
(j ? i.substr(0, j) + thousand_separator : '') +
i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + thousand_separator) +
(precision
? decimal_separator +
Math.abs(amount - i)
.toFixed(precision)
.slice(2)
: '')
)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
@ -68,7 +78,13 @@ export default {
amount = amount / 100 amount = amount / 100
let { precision, decimal_separator, thousand_separator, symbol } = currency let {
precision,
decimal_separator,
thousand_separator,
symbol,
swap_currency_symbol,
} = currency
try { try {
precision = Math.abs(precision) precision = Math.abs(precision)
@ -82,20 +98,22 @@ export default {
let j = i.length > 3 ? i.length % 3 : 0 let j = i.length > 3 ? i.length % 3 : 0
let moneySymbol = `${symbol}` let moneySymbol = `${symbol}`
let thousandText = j ? i.substr(0, j) + thousand_separator : ''
let amountText = i
.substr(j)
.replace(/(\d{3})(?=\d)/g, '$1' + thousand_separator)
let precisionText = precision
? decimal_separator +
Math.abs(amount - i)
.toFixed(precision)
.slice(2)
: ''
let combinedAmountText =
negativeSign + thousandText + amountText + precisionText
return ( return swap_currency_symbol
moneySymbol + ? combinedAmountText + ' ' + moneySymbol
' ' + : moneySymbol + ' ' + combinedAmountText
negativeSign +
(j ? i.substr(0, j) + thousand_separator : '') +
i.substr(j).replace(/(\d{3})(?=\d)/g, '$1' + thousand_separator) +
(precision
? decimal_separator +
Math.abs(amount - i)
.toFixed(precision)
.slice(2)
: '')
)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
@ -245,6 +263,36 @@ export default {
} }
} }
}, },
getStatusTranslation(status) {
switch (status) {
case 'DRAFT':
return i18n.t('general.draft')
case 'PAID':
return i18n.t('invoices.paid')
case 'UNPAID':
return i18n.t('invoices.unpaid')
case 'SENT':
return i18n.t('general.sent')
case 'REJECTED':
return i18n.t('estimates.rejected')
case 'ACCEPTED':
return i18n.t('estimates.accepted')
case 'VIEWED':
return i18n.t('invoices.viewed')
case 'EXPIRED':
return i18n.t('estimates.expired')
case 'PARTIALLY PAID':
return i18n.t('estimates.partially_paid')
case 'OVERDUE':
return i18n.t('invoices.overdue')
case 'COMPLETED':
return i18n.t('invoices.completed')
case 'DUE':
return i18n.t('general.due')
default:
return status
}
},
compareVersion(v1, v2, options) { compareVersion(v1, v2, options) {
const lexicographical = options && options.lexicographical const lexicographical = options && options.lexicographical
const zeroExtend = options && options.zeroExtend const zeroExtend = options && options.zeroExtend
@ -280,5 +328,5 @@ export default {
return -1 return -1
} }
return 0 return 0
} },
} }

View File

@ -1,28 +1,28 @@
{ {
"navigation": { "navigation": {
"dashboard": "الرئيسية", "dashboard": "لوحة القيادة",
"customers": "العملاء", "customers": "العملاء",
"items": "الأصناف", "items": "بضائع/خدمات",
"invoices": "الفواتير", "invoices": "الفواتير",
"expenses": "النفقات", "expenses": "النفقات",
"estimates": "التقديرات", "estimates": "التقديرات",
"payments": "المدفوعات", "payments": "الدفوعات",
"reports": "التقارير", "reports": "التقارير",
"settings": "الإعدادات", "settings": "الإعدادات",
"logout": "خروج", "logout": "تسجيل الخروج",
"users": "المستخدمون" "users": "المستخدمون"
}, },
"general": { "general": {
"add_company": "أضف شركة", "add_company": "أضف شركة",
"view_pdf": "عرض PDF", "view_pdf": "عرض PDF",
"copy_pdf_url": "Copy PDF Url", "copy_pdf_url": "نسخ رابط PDF",
"download_pdf": "تنزيل PDF", "download_pdf": "تنزيل PDF",
"save": "حفظ", "save": "حفظ",
"create": "خلق", "create": "إنشاء",
"cancel": "إلغاء الأمر", "cancel": "تراجع",
"update": "تحديث", "update": "تحديث",
"deselect": "Deselect", "deselect": "إلغاء الإختيار",
"download": نزيل", "download": حميل",
"from_date": "من تاريخ", "from_date": "من تاريخ",
"to_date": "إلى تاريخ", "to_date": "إلى تاريخ",
"from": "من", "from": "من",
@ -50,43 +50,44 @@
"discount": "خصم", "discount": "خصم",
"fixed": "ثابت", "fixed": "ثابت",
"percentage": "نسبة", "percentage": "نسبة",
"tax": "ضريبة", "tax": "اداء",
"total_amount": "المبلغ الإجمالي", "total_amount": "المبلغ الإجمالي",
"bill_to": "مطلوب من", "bill_to": "الفاتورة لـ",
"ship_to": "يشحن إلى", "ship_to": "يشحن إلى",
"due": "واجبة السداد", "due": "المتبقي",
"draft": "مسودة", "draft": "مسودة",
"sent": "مرسلة", "sent": "ارسلت",
"all": "الكل", "all": "الكل",
"select_all": "تحديد الل", "select_all": "تحديد الكل",
"choose_file": "اضغط هنا لاختيار ملف", "choose_file": "اضغط هنا لاختيار ملف",
"choose_template": "اختيار القالب", "choose_template": "اختيار القالب",
"choose": "اختر", "choose": "اختر",
"remove": "إزالة", "remove": "حذف",
"powered_by": "تصميم", "powered_by": "بدعم من",
"bytefury": "باترفوري", "bytefury": "Bytefury",
"select_a_status": "اختر الحالة", "select_a_status": "اختر الحالة",
"select_a_tax": "اختر الضريبة", "select_a_tax": "اختر الاداء",
"search": "بحث", "search": "بحث",
"are_you_sure": "هل أنت متأكد?", "are_you_sure": "هل أنت متأكد؟",
"list_is_empty": "القائمة فارغة.", "list_is_empty": "القائمة فارغة.",
"no_tax_found": "لا يوجد ضريبة!", "no_tax_found": "لا يوجد ضريبة!",
"four_zero_four": "404", "four_zero_four": "404",
"you_got_lost": "عفواً! يبدو أنك قد تهت!", "you_got_lost": "عفواً! يبدو أنك قد تهت!",
"go_home": "عودة إلى الرئيسية", "go_home": "الذهاب الى الصفحة الرئيسية",
"test_mail_conf": "اختبار تكوين البريد", "test_mail_conf": "اختبار اعدادات البريد",
"send_mail_successfully": "تم إرسال البريد بنجاح", "send_mail_successfully": "تم إرسال البريد بنجاح",
"setting_updated": "تم تحديث الإعدادات بنجاح", "setting_updated": "تم تحديث الإعدادات بنجاح",
"select_state": "اختر الولاية/المنطقة", "select_state": "اختر الولاية/المنطقة",
"select_country": "اختر الدولة", "select_country": "اختر الدولة",
"select_city": "اختر المدينة", "select_city": "اختر المدينة",
"street_1": "عنوان الشارع 1", "street_1": "عنوان الشارع 1",
"street_2": "عنوان الشارع 2", "street_2": "الشارع 2",
"action_failed": "فشلت العملية", "action_failed": "فشلت العملية",
"retry": "أعد المحاولة", "retry": "أعد المحاولة",
"choose_note": "اختر ملاحظة", "choose_note": "اختر ملاحظة",
"no_note_found": "لم يتم العثور على الملاحظة", "no_note_found": "لم يتم العثور على الملاحظة",
"insert_note": "أدخل ملاحظة" "insert_note": "أدخل ملاحظة",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "اختر السنة", "select_year": "اختر السنة",
@ -154,7 +155,7 @@
"phone": "الهاتف", "phone": "الهاتف",
"website": "موقع الإنترنت", "website": "موقع الإنترنت",
"overview": "استعراض", "overview": "استعراض",
"enable_portal": "Enable Portal", "enable_portal": "تفعيل البوابة",
"country": "الدولة", "country": "الدولة",
"state": "الولاية/المنطقة", "state": "الولاية/المنطقة",
"city": "المدينة", "city": "المدينة",
@ -177,6 +178,8 @@
"copy_billing_address": "نسخ من عنوان الفوترة", "copy_billing_address": "نسخ من عنوان الفوترة",
"no_customers": "لا يوجد عملاء حتى الآن!", "no_customers": "لا يوجد عملاء حتى الآن!",
"no_customers_found": "لم يتم الحصول على عملاء!", "no_customers_found": "لم يتم الحصول على عملاء!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "سوف يحتوي هذا القسم على قائمة العملاء.", "list_of_customers": "سوف يحتوي هذا القسم على قائمة العملاء.",
"primary_display_name": "اسم العرض الرئيسي", "primary_display_name": "اسم العرض الرئيسي",
"select_currency": "اختر العملة", "select_currency": "اختر العملة",
@ -200,6 +203,7 @@
"added_on": "أضيف في", "added_on": "أضيف في",
"price": "السعر", "price": "السعر",
"date_of_creation": "تاريخ الإنشاء", "date_of_creation": "تاريخ الإنشاء",
"not_selected": "No item selected",
"action": "إجراء", "action": "إجراء",
"add_item": "إضافة صنف", "add_item": "إضافة صنف",
"save_item": "حفظ الصنف", "save_item": "حفظ الصنف",
@ -270,6 +274,7 @@
"required": "حقل مطلوب" "required": "حقل مطلوب"
}, },
"accepted": "مقبول", "accepted": "مقبول",
"rejected": "Rejected",
"sent": "مرسل", "sent": "مرسل",
"draft": "مسودة", "draft": "مسودة",
"declined": "مرفوض", "declined": "مرفوض",
@ -316,6 +321,9 @@
"all": "الكل", "all": "الكل",
"paid": "مدفوع", "paid": "مدفوع",
"unpaid": "غير مدفوع", "unpaid": "غير مدفوع",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "العميل", "customer": "العميل",
"paid_status": "حالة الدفع", "paid_status": "حالة الدفع",
"ref_no": "رقم المرجع.", "ref_no": "رقم المرجع.",
@ -428,18 +436,20 @@
"edit_payment": "تعديل الدفعة", "edit_payment": "تعديل الدفعة",
"view_payment": "عرض الدفعة", "view_payment": "عرض الدفعة",
"add_new_payment": "إضافة دفعة جديدة", "add_new_payment": "إضافة دفعة جديدة",
"send_payment_receipt": "Send Payment Receipt", "send_payment_receipt": "إرسال إيصال الدفع",
"send_payment": "إرسال الدفعة", "send_payment": "إرسال الدفعة",
"save_payment": "حفظ الدفعة", "save_payment": "حفظ الدفعة",
"update_payment": "تحديث الدفعة", "update_payment": "تحديث الدفعة",
"payment": "دفعة | مدفوعات", "payment": "دفعة | مدفوعات",
"no_payments": "لا يوجد مدفوعات حتى الآن!", "no_payments": "لا يوجد مدفوعات حتى الآن!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "لا توجد مدفوعات مطابقة!", "no_matching_payments": "لا توجد مدفوعات مطابقة!",
"list_of_payments": "سوف تحتوي هذه القائمة على مدفوعات الفواتير.", "list_of_payments": "سوف تحتوي هذه القائمة على مدفوعات الفواتير.",
"select_payment_mode": "اختر طريقة الدفع", "select_payment_mode": "اختر طريقة الدفع",
"confirm_mark_as_sent": "سيتم التحديد كمرسل على هذا التقدير", "confirm_mark_as_sent": "سيتم التحديد كمرسل على هذا التقدير",
"confirm_send_payment": "This payment will be sent via email to the customer", "confirm_send_payment": "سيتم إرسال هذه الدفعة عبر البريد الإلكتروني إلى العميل",
"send_payment_successfully": "Payment sent successfully", "send_payment_successfully": "تم إرسال الدفعة بنجاح",
"user_email_does_not_exist": "البريد الإلكتروني للمستخدم غير موجود!", "user_email_does_not_exist": "البريد الإلكتروني للمستخدم غير موجود!",
"something_went_wrong": "خطأ غير معروف!", "something_went_wrong": "خطأ غير معروف!",
"confirm_delete": "لن تكون قادر على استرجاع هذه الدفعة | لن تكون قادراً على استرجاع هذه المدفوعات", "confirm_delete": "لن تكون قادر على استرجاع هذه الدفعة | لن تكون قادراً على استرجاع هذه المدفوعات",
@ -463,6 +473,7 @@
"receipt": "سند القبض", "receipt": "سند القبض",
"amount": "المبلغ المطلوب", "amount": "المبلغ المطلوب",
"action": "إجراء", "action": "إجراء",
"not_selected": "Not selected",
"note": "ملاحظة", "note": "ملاحظة",
"category_id": "رمز الفئة", "category_id": "رمز الفئة",
"date": "تاريخ النفقات", "date": "تاريخ النفقات",
@ -505,7 +516,7 @@
"enter_email": "أدخل البريد الالكتروني", "enter_email": "أدخل البريد الالكتروني",
"enter_password": "أكتب كلمة المرور", "enter_password": "أكتب كلمة المرور",
"retype_password": "أعد كتابة كلمة المرور", "retype_password": "أعد كتابة كلمة المرور",
"login_placeholder": "mail@example.com" "login_placeholder": "name@example.com"
}, },
"users": { "users": {
"title": "المستخدمون", "title": "المستخدمون",
@ -740,10 +751,13 @@
"title": "الفواتير", "title": "الفواتير",
"notes": "ملاحظات", "notes": "ملاحظات",
"invoice_prefix": "بادئة رقم الفاتورة", "invoice_prefix": "بادئة رقم الفاتورة",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "نص الفاتورة الافتراضي للبريد الإلكتروني", "default_invoice_email_body": "نص الفاتورة الافتراضي للبريد الإلكتروني",
"invoice_settings": "إعدادات الفاتورة", "invoice_settings": "إعدادات الفاتورة",
"autogenerate_invoice_number": "ترقيم آلي للفاتورة", "autogenerate_invoice_number": "ترقيم آلي للفاتورة",
"invoice_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الفاتورة تلقائيًا في كل مرة تقوم فيها بإنشاء فاتورة جديدة.", "invoice_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الفاتورة تلقائيًا في كل مرة تقوم فيها بإنشاء فاتورة جديدة.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "أدخل بادئة رقم الفاتورة", "enter_invoice_prefix": "أدخل بادئة رقم الفاتورة",
"terms_and_conditions": "الأحكام والشروط", "terms_and_conditions": "الأحكام والشروط",
"company_address_format": "تنسيق عنوان الشركة", "company_address_format": "تنسيق عنوان الشركة",
@ -754,10 +768,13 @@
"estimates": { "estimates": {
"title": "التقديرات", "title": "التقديرات",
"estimate_prefix": "بادئة رقم التقدير", "estimate_prefix": "بادئة رقم التقدير",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "تقدير نص البريد الإلكتروني الافتراضي", "default_estimate_email_body": "تقدير نص البريد الإلكتروني الافتراضي",
"estimate_settings": "إعدادت التقدير", "estimate_settings": "إعدادت التقدير",
"autogenerate_estimate_number": "ترقيم آلي للتقدير", "autogenerate_estimate_number": "ترقيم آلي للتقدير",
"estimate_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام التقديرات تلقائيًا في كل مرة تقوم فيها بإنشاء تقدير جديد.", "estimate_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام التقديرات تلقائيًا في كل مرة تقوم فيها بإنشاء تقدير جديد.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "أدخل بادئة رقم التقدير", "enter_estimate_prefix": "أدخل بادئة رقم التقدير",
"estimate_setting_updated": "تم تحديث إعدادات التقدير بنجاح", "estimate_setting_updated": "تم تحديث إعدادات التقدير بنجاح",
"company_address_format": "تنسيق عنوان الشركة", "company_address_format": "تنسيق عنوان الشركة",
@ -766,12 +783,15 @@
}, },
"payments": { "payments": {
"title": "المدفوعات", "title": "المدفوعات",
"description": "Modes of transaction for payments", "description": "أساليب المعاملات المتعلقة بالمدفوعات",
"payment_prefix": "بادئة رقم الدفعة", "payment_prefix": "بادئة رقم الدفعة",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "نص البريد الإلكتروني للدفع الافتراضي", "default_payment_email_body": "نص البريد الإلكتروني للدفع الافتراضي",
"payment_settings": "إعدادات الدفعة", "payment_settings": "إعدادات الدفعة",
"autogenerate_payment_number": "ترقيم آلي للمدفوعات", "autogenerate_payment_number": "ترقيم آلي للمدفوعات",
"payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.", "payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "أدخل بادئة رقم الدفعة", "enter_payment_prefix": "أدخل بادئة رقم الدفعة",
"payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح", "payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح",
"payment_modes": "طرق الدفع", "payment_modes": "طرق الدفع",
@ -800,7 +820,7 @@
}, },
"notes": { "notes": {
"title": "ملاحظات", "title": "ملاحظات",
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "description": "توفير الوقت عن طريق إنشاء الملاحظات وإعادة استخدامها على الفواتير والتقديرات والمدفوعات.",
"notes": "ملاحظات", "notes": "ملاحظات",
"type": "نوع", "type": "نوع",
"add_note": "اضف ملاحظة", "add_note": "اضف ملاحظة",
@ -892,7 +912,7 @@
"updated_message": "تم تحديث التفضيلات بنجاح", "updated_message": "تم تحديث التفضيلات بنجاح",
"select_language": "اختر اللغة", "select_language": "اختر اللغة",
"select_time_zone": "اختر المنطة الزمنية", "select_time_zone": "اختر المنطة الزمنية",
"select_date_format": "Select Date Format", "select_date_format": "اختر صيغة التاريخ",
"select_financial_year": "اختر السنة المالية" "select_financial_year": "اختر السنة المالية"
}, },
"update_app": { "update_app": {
@ -901,7 +921,7 @@
"check_update": "تحقق من التحديثات", "check_update": "تحقق من التحديثات",
"avail_update": "تحديث جديد متوفر", "avail_update": "تحديث جديد متوفر",
"next_version": "النسخة الجديدة", "next_version": "النسخة الجديدة",
"requirements": "Requirements", "requirements": "المتطلبات",
"update": "حدث الآن", "update": "حدث الآن",
"update_progress": "قيد التحديث...", "update_progress": "قيد التحديث...",
"progress_text": "سوف يستغرق التحديث بضع دقائق. يرجى عدم تحديث الشاشة أو إغلاق النافذة قبل انتهاء التحديث", "progress_text": "سوف يستغرق التحديث بضع دقائق. يرجى عدم تحديث الشاشة أو إغلاق النافذة قبل انتهاء التحديث",
@ -911,6 +931,7 @@
"download_zip_file": "تنزيل ملف ZIP", "download_zip_file": "تنزيل ملف ZIP",
"unzipping_package": "حزمة فك الضغط", "unzipping_package": "حزمة فك الضغط",
"copying_files": "نسخ الملفات", "copying_files": "نسخ الملفات",
"deleting_files": "Deleting Unused files",
"running_migrations": "إدارة عمليات الترحيل", "running_migrations": "إدارة عمليات الترحيل",
"finishing_update": "تحديث التشطيب", "finishing_update": "تحديث التشطيب",
"update_failed": "فشل التحديث", "update_failed": "فشل التحديث",
@ -926,7 +947,7 @@
"path": "مسار", "path": "مسار",
"new_disk": "قرص جديد", "new_disk": "قرص جديد",
"created_at": "أنشئت في", "created_at": "أنشئت في",
"size": "size", "size": "حجم الملف",
"dropbox": "بصندوق الإسقاط", "dropbox": "بصندوق الإسقاط",
"local": "محلي", "local": "محلي",
"healthy": "صحي", "healthy": "صحي",
@ -936,7 +957,7 @@
"select_disk": "حدد القرص", "select_disk": "حدد القرص",
"action": "عمل", "action": "عمل",
"deleted_message": "تم حذف النسخة الاحتياطية بنجاح", "deleted_message": "تم حذف النسخة الاحتياطية بنجاح",
"created_message": "Backup created successfully", "created_message": "تم إنشاء النسخة الاحتياطية بنجاح",
"invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد" "invalid_disk_credentials": "بيانات اعتماد غير صالحة للقرص المحدد"
}, },
"disk": { "disk": {
@ -980,6 +1001,7 @@
"default_driver": "برنامج التشغيل الافتراضي", "default_driver": "برنامج التشغيل الافتراضي",
"is_default": "أمر افتراضي", "is_default": "أمر افتراضي",
"set_default_disk": "تعيين القرص الافتراضي", "set_default_disk": "تعيين القرص الافتراضي",
"set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"success_set_default_disk": "Disk set as default successfully", "success_set_default_disk": "Disk set as default successfully",
"save_pdf_to_disk": "حفظ ملفات PDF على القرص", "save_pdf_to_disk": "حفظ ملفات PDF على القرص",
"disk_setting_description": "قم بتمكين هذا ، إذا كنت ترغب في حفظ نسخة من كل فاتورة ، تقدير وإيصال دفع PDF على القرص الافتراضي الخاص بك تلقائيًا. سيؤدي تشغيل هذا الخيار إلى تقليل وقت التحميل عند عرض ملفات PDF.", "disk_setting_description": "قم بتمكين هذا ، إذا كنت ترغب في حفظ نسخة من كل فاتورة ، تقدير وإيصال دفع PDF على القرص الافتراضي الخاص بك تلقائيًا. سيؤدي تشغيل هذا الخيار إلى تقليل وقت التحميل عند عرض ملفات PDF.",
@ -1037,10 +1059,10 @@
"port": "منفذ قاعدة البيانات", "port": "منفذ قاعدة البيانات",
"password": "كلمة مرور قاعدة البيانات", "password": "كلمة مرور قاعدة البيانات",
"app_url": "عنوان الإنترنت للنظام", "app_url": "عنوان الإنترنت للنظام",
"app_domain": "App Domain", "app_domain": "رابط التطبيق",
"username": "اسم المستخدم لقاعدة البيانات", "username": "اسم المستخدم لقاعدة البيانات",
"db_name": "سم قاعدة البيانات", "db_name": "سم قاعدة البيانات",
"db_path": "Database Path", "db_path": "مسار قاعدة البيانات",
"desc": "قم بإنشاء قاعدة بيانات على الخادم الخاص بك وتعيين بيانات الاعتماد باستخدام النموذج أدناه." "desc": "قم بإنشاء قاعدة بيانات على الخادم الخاص بك وتعيين بيانات الاعتماد باستخدام النموذج أدناه."
}, },
"permissions": { "permissions": {
@ -1122,49 +1144,54 @@
"amount_maxlength": "يجب ألا يزيد المبلغ عن 20 رقماً.", "amount_maxlength": "يجب ألا يزيد المبلغ عن 20 رقماً.",
"amount_minvalue": "يجب أن يكون المبلغ أكبر من صفر.", "amount_minvalue": "يجب أن يكون المبلغ أكبر من صفر.",
"description_maxlength": "يجب ألا يزيد الوصف عن 255 حرفاً.", "description_maxlength": "يجب ألا يزيد الوصف عن 255 حرفاً.",
"subject_maxlength": "Subject should not be greater than 100 characters.", "subject_maxlength": "يجب الا يزيد العنوان عن 100 حرف.",
"message_maxlength": "Message should not be greater than 255 characters.", "message_maxlength": "يجب ألا يزيد حجم النص عن 255 حرف.",
"maximum_options_error": "الحد الأعلى هو {max} خيارات. قم بإزالة أحد الخيارات لتحديد خيار آخر.", "maximum_options_error": "الحد الأعلى هو {max} خيارات. قم بإزالة أحد الخيارات لتحديد خيار آخر.",
"notes_maxlength": "يجب ألا يزيد حجم الملاحظات عن 255 حرفاً.", "notes_maxlength": "يجب ألا يزيد حجم الملاحظات عن 255 حرفاً.",
"address_maxlength": "يجب ألا يزيد العنوان عن 255 حرفاً.", "address_maxlength": "يجب ألا يزيد العنوان عن 255 حرفاً.",
"ref_number_maxlength": "يجب ألا يزيد الرقم المرجعي عن 255 حرفاً.", "ref_number_maxlength": "يجب ألا يزيد الرقم المرجعي عن 255 حرفاً.",
"prefix_maxlength": "يجب ألا تزيد البادئة عن 5 أحرف.", "prefix_maxlength": "يجب ألا تزيد البادئة عن 5 أحرف.",
"something_went_wrong": "خطأ غير معروف!" "something_went_wrong": "خطأ غير معروف!",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "تقدير", "pdf_estimate_label": "تقدير",
"pdf_estimate_number": "رقم تقدير", "pdf_estimate_number": "رقم تقدير",
"pdf_estimate_date": "تاريخ التقدير", "pdf_estimate_date": "تاريخ التقدير",
"pdf_estimate_expire_date": "Expiry date", "pdf_estimate_expire_date": "تاريخ انتهاء الصلاحية",
"pdf_invoice_label": "الفاتورة", "pdf_invoice_label": "الفاتورة",
"pdf_invoice_number": "رقم الفاتورة", "pdf_invoice_number": "رقم الفاتورة",
"pdf_invoice_date": "تاريخ الفاتورة", "pdf_invoice_date": "تاريخ الفاتورة",
"pdf_invoice_due_date": "Due date", "pdf_invoice_due_date": "تاريخ الاستحقاق",
"pdf_notes": "ملاحظات", "pdf_notes": "ملاحظات",
"pdf_items_label": "الأصناف", "pdf_items_label": "الأصناف",
"pdf_quantity_label": "الكمية", "pdf_quantity_label": "الكمية",
"pdf_price_label": "السعر", "pdf_price_label": "السعر",
"pdf_discount_label": "الخصم", "pdf_discount_label": "الخصم",
"pdf_amount_label": "المبلغ المطلوب", "pdf_amount_label": "المبلغ المطلوب",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "المجموع الفرعي",
"pdf_total": "الإجمالي", "pdf_total": "الإجمالي",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_label": "Payment",
"pdf_payment_date": "Payment Date", "pdf_payment_receipt_label": "ايصال الدفع",
"pdf_payment_date": "تاريخ الدفع",
"pdf_payment_number": "رقم الدفعة", "pdf_payment_number": "رقم الدفعة",
"pdf_payment_mode": "نوع الدفعة", "pdf_payment_mode": "نوع الدفعة",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "المبلغ المستلم",
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "تقرير المصاريف",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "مجموع المصاريف",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "تقرير الارباح و الخسائر",
"pdf_income_label": "INCOME", "pdf_sales_customers_label": "Sales Customer Report",
"pdf_net_profit_label": "NET PROFIT", "pdf_sales_items_label": "Sales Item Report",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_tax_summery_label": "Tax Summary Report",
"pdf_total_sales_label": "TOTAL SALES", "pdf_income_label": "الايرادات",
"pdf_item_sales_label": "Sales Report: By Item", "pdf_net_profit_label": "صافي الأرباح",
"pdf_tax_report_label": "TAX REPORT", "pdf_customer_sales_report": "تقرير المبيعات: حسب العميل",
"pdf_total_tax_label": "TOTAL TAX", "pdf_total_sales_label": "مجموع المبيعات",
"pdf_item_sales_label": "تقرير المبيعات: حسب البضاعة او الخدمة",
"pdf_tax_report_label": "تقرير الاداءات",
"pdf_total_tax_label": "اجمالي الاداءات",
"pdf_tax_types_label": "أنواع الضرائب", "pdf_tax_types_label": "أنواع الضرائب",
"pdf_expenses_label": "النفقات", "pdf_expenses_label": "النفقات",
"pdf_bill_to": "مطلوب من,", "pdf_bill_to": "مطلوب من,",
"pdf_ship_to": "يشحن إلى,", "pdf_ship_to": "يشحن إلى,",
"pdf_received_from": "Received from:" "pdf_received_from": "تم الاستلام من:"
} }

View File

@ -4,7 +4,7 @@
"customers": "Kunden", "customers": "Kunden",
"items": "Artikel", "items": "Artikel",
"invoices": "Rechnungen", "invoices": "Rechnungen",
"expenses": "Kosten", "expenses": "Ausgaben",
"estimates": "Kostenvoranschläge", "estimates": "Kostenvoranschläge",
"payments": "Zahlungen", "payments": "Zahlungen",
"reports": "Berichte", "reports": "Berichte",
@ -15,18 +15,18 @@
"general": { "general": {
"add_company": "Unternehmen hinzufügen", "add_company": "Unternehmen hinzufügen",
"view_pdf": "PDF anzeigen", "view_pdf": "PDF anzeigen",
"copy_pdf_url": "PDF Url kopieren", "copy_pdf_url": "PDF-Link kopieren",
"download_pdf": "PDF herunterladen", "download_pdf": "PDF herunterladen",
"save": "Speichern", "save": "Speichern",
"create": "Erstellen", "create": "Erstellen",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"update": "Aktualisieren", "update": "Aktualisieren",
"deselect": "Entfernen", "deselect": "Abwählen",
"download": "Herunterladen", "download": "Herunterladen",
"from_date": "Von Datum", "from_date": "Von Datum",
"to_date": "bis Datum", "to_date": "bis Datum",
"from": "Von", "from": "Von",
"to": "bis", "to": "An",
"sort_by": "Sortieren nach", "sort_by": "Sortieren nach",
"ascending": "Aufsteigend", "ascending": "Aufsteigend",
"descending": "Absteigend", "descending": "Absteigend",
@ -53,7 +53,7 @@
"tax": "Steuer", "tax": "Steuer",
"total_amount": "GESAMTSUMME", "total_amount": "GESAMTSUMME",
"bill_to": "Rechnungsempfänger", "bill_to": "Rechnungsempfänger",
"ship_to": "Versand ein", "ship_to": "Versand an",
"due": "Fällig", "due": "Fällig",
"draft": "Entwurf", "draft": "Entwurf",
"sent": "Gesendet", "sent": "Gesendet",
@ -63,7 +63,7 @@
"choose_template": "Wählen Sie eine Vorlage", "choose_template": "Wählen Sie eine Vorlage",
"choose": "Wählen", "choose": "Wählen",
"remove": "Entfernen", "remove": "Entfernen",
"powered_by": "Powered by", "powered_by": "Betrieben durch",
"bytefury": "Bytefury", "bytefury": "Bytefury",
"select_a_status": "Status wählen", "select_a_status": "Status wählen",
"select_a_tax": "Steuersatz wählen", "select_a_tax": "Steuersatz wählen",
@ -75,18 +75,19 @@
"you_got_lost": "Hoppla! Du hast dich verirrt!", "you_got_lost": "Hoppla! Du hast dich verirrt!",
"go_home": "Geh zurück", "go_home": "Geh zurück",
"test_mail_conf": "E-Mail Konfiguration testen", "test_mail_conf": "E-Mail Konfiguration testen",
"send_mail_successfully": "E-Mail versendet erfolgreich", "send_mail_successfully": "E-Mail erfolgreich versendet",
"setting_updated": "Einstellungen erfolgreich aktualisiert", "setting_updated": "Einstellungen erfolgreich aktualisiert",
"select_state": "Bundesland wählen", "select_state": "Bundesland wählen",
"select_country": "Land wählen", "select_country": "Land wählen",
"select_city": "Stadt wählen", "select_city": "Stadt wählen",
"street_1": "Straße", "street_1": "Straße und Hausnummer",
"street_2": "Zusatz Strasse", "street_2": "Adresszusatz",
"action_failed": "Aktion fehlgeschlagen", "action_failed": "Aktion fehlgeschlagen",
"retry": "Wiederholen", "retry": "Wiederholen",
"choose_note": "Notiz auswählen", "choose_note": "Notiz auswählen",
"no_note_found": "Keine Notizen gefunden", "no_note_found": "Keine Notizen gefunden",
"insert_note": "Notiz einfügen" "insert_note": "Notiz einfügen",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Jahr wählen", "select_year": "Jahr wählen",
@ -94,12 +95,12 @@
"due_amount": "Offene Beträge", "due_amount": "Offene Beträge",
"customers": "Kunden", "customers": "Kunden",
"invoices": "Rechnungen", "invoices": "Rechnungen",
"estimates": "Kostenvoranschläge" "estimates": "Angebote"
}, },
"chart_info": { "chart_info": {
"total_sales": "Aufträge gesamt", "total_sales": "Aufträge gesamt",
"total_receipts": "Zahlungen gesamt", "total_receipts": "Zahlungen gesamt",
"total_expense": "Kosten gesamt", "total_expense": "Ausgaben",
"net_income": "Einnahmen Netto", "net_income": "Einnahmen Netto",
"year": "Jahr" "year": "Jahr"
}, },
@ -107,7 +108,7 @@
"title": "Wöchentliche Rechnungen" "title": "Wöchentliche Rechnungen"
}, },
"monthly_chart": { "monthly_chart": {
"title": "Umsatz & Kosten" "title": "Umsatz & Ausgaben"
}, },
"recent_invoices_card": { "recent_invoices_card": {
"title": "Fällige Rechnungen", "title": "Fällige Rechnungen",
@ -118,7 +119,7 @@
"view_all": "Alle Anzeigen" "view_all": "Alle Anzeigen"
}, },
"recent_estimate_card": { "recent_estimate_card": {
"title": "Aktuelle Kostenvoranschläge", "title": "Aktuelle Angebote",
"date": "Datum", "date": "Datum",
"customer": "Kunden", "customer": "Kunden",
"amount_due": "Betrag", "amount_due": "Betrag",
@ -144,7 +145,7 @@
"contacts_list": "Kunden-Liste", "contacts_list": "Kunden-Liste",
"name": "Name", "name": "Name",
"mail": "E-Mail| E-Mails", "mail": "E-Mail| E-Mails",
"statement": "Statement", "statement": "Stellungnahme",
"display_name": "Anzeige Name", "display_name": "Anzeige Name",
"primary_contact_name": "Ansprechpartner", "primary_contact_name": "Ansprechpartner",
"contact_name": "Kontakt Name", "contact_name": "Kontakt Name",
@ -177,7 +178,9 @@
"copy_billing_address": "Rechnungsadresse kopieren", "copy_billing_address": "Rechnungsadresse kopieren",
"no_customers": "Noch keine Kunden!", "no_customers": "Noch keine Kunden!",
"no_customers_found": "Keine Kunden gefunden!", "no_customers_found": "Keine Kunden gefunden!",
"list_of_customers": "Dieser Abschnitt enthält die Liste der Kunden.", "no_contact": "Kein Kontakt",
"no_contact_name": "Kein Kontaktname",
"list_of_customers": "Dieser Bereich zeigt alle Kunden.",
"primary_display_name": "Primärer Anzeige Name", "primary_display_name": "Primärer Anzeige Name",
"select_currency": "Währung wählen", "select_currency": "Währung wählen",
"select_a_customer": "Wählen Sie einen Kunden", "select_a_customer": "Wählen Sie einen Kunden",
@ -200,6 +203,7 @@
"added_on": "Hinzugefügt am", "added_on": "Hinzugefügt am",
"price": "Preis", "price": "Preis",
"date_of_creation": "Erstellt am", "date_of_creation": "Erstellt am",
"not_selected": "Keine ausgewählt",
"action": "Aktion", "action": "Aktion",
"add_item": "Artikel hinzufügen", "add_item": "Artikel hinzufügen",
"save_item": "Artikel speichern", "save_item": "Artikel speichern",
@ -209,8 +213,8 @@
"new_item": "Neuer Artikel", "new_item": "Neuer Artikel",
"edit_item": "Artikel bearbeiten", "edit_item": "Artikel bearbeiten",
"no_items": "Keine Artikel vorhanden!", "no_items": "Keine Artikel vorhanden!",
"list_of_items": "Dieser Abschnitt enthält die Liste der Artikel.", "list_of_items": "Dieser Bereich zeigt alle Artikel.",
"select_a_unit": "wählen Sie die Einheit", "select_a_unit": "Einheit auswählen",
"taxes": "Steuern", "taxes": "Steuern",
"item_attached_message": "Ein Artikel der bereits verwendet wird kann nicht gelöscht werden", "item_attached_message": "Ein Artikel der bereits verwendet wird kann nicht gelöscht werden",
"confirm_delete": "Sie können diesen Artikel nicht wiederherstellen | Sie können diese Artikel nicht wiederherstellen", "confirm_delete": "Sie können diesen Artikel nicht wiederherstellen | Sie können diese Artikel nicht wiederherstellen",
@ -219,24 +223,24 @@
"deleted_message": "Artikel erfolgreich gelöscht | Artikel erfolgreich gelöscht" "deleted_message": "Artikel erfolgreich gelöscht | Artikel erfolgreich gelöscht"
}, },
"estimates": { "estimates": {
"title": "Kostenvoranschläge", "title": "Angebote",
"estimate": "Kostenvoranschlag | Kostenvoranschläge", "estimate": "Angebot | Angebote",
"estimates_list": "Liste Kostenvoranschläge", "estimates_list": "Angebotsübersicht",
"days": "{days} Tage", "days": "{days} Tage",
"months": "{months} Monat", "months": "{months} Monat",
"years": "{years} Jahre", "years": "{years} Jahre",
"all": "Alle", "all": "Alle",
"paid": "Bezahlt", "paid": "Bezahlt",
"unpaid": "Unbezahlte", "unpaid": "Unbezahlt",
"customer": "KUNDEN", "customer": "KUNDEN",
"ref_no": "REF. - NR.", "ref_no": "REF. - NR.",
"number": "ANZAHL", "number": "NUMMER",
"amount_due": "OFFENER BETRAG", "amount_due": "OFFENER BETRAG",
"partially_paid": "Teilweise bezahlt", "partially_paid": "Teilweise bezahlt",
"total": "Gesamt", "total": "Gesamt",
"discount": "Rabatt", "discount": "Rabatt",
"sub_total": "Zwischensumme", "sub_total": "Zwischensumme",
"estimate_number": "Kostenvoran. Nummer", "estimate_number": "Angebotsnummer",
"ref_number": "Ref-Nummer", "ref_number": "Ref-Nummer",
"contact": "Kontakt", "contact": "Kontakt",
"add_item": "Fügen Sie ein Artikel hinzu", "add_item": "Fügen Sie ein Artikel hinzu",
@ -247,49 +251,50 @@
"add_tax": "Steuer hinzufügen", "add_tax": "Steuer hinzufügen",
"amount": "Summe", "amount": "Summe",
"action": "Aktion", "action": "Aktion",
"notes": "Hinweise", "notes": "Notizen",
"tax": "Steuer", "tax": "Steuer",
"estimate_template": "Vorlage", "estimate_template": "Vorlage",
"convert_to_invoice": "Konvertieren in Rechnung", "convert_to_invoice": "Konvertieren in Rechnung",
"mark_as_sent": "Als gesendet markieren", "mark_as_sent": "Als gesendet markieren",
"send_estimate": "Kostenvoranschlag senden", "send_estimate": "Angebot senden",
"resend_estimate": "Kostenvoranschlag erneut senden", "resend_estimate": "Angebot erneut senden",
"record_payment": "Zahlung erfassen", "record_payment": "Zahlung erfassen",
"add_estimate": "Kostenvoranschlag hinzufügen", "add_estimate": "Angebote hinzufügen",
"save_estimate": "Kostenvoranschlag speichern", "save_estimate": "Angebot speichern",
"confirm_conversion": "Sie möchten, konvertieren Sie diese Schätzung in die Rechnung?", "confirm_conversion": "Sie möchten, konvertieren Sie diese Schätzung in die Rechnung?",
"conversion_message": "Rechnung erfolgreich erstellt", "conversion_message": "Rechnung erfolgreich erstellt",
"confirm_send_estimate": "Der Kostenvoranschlag wird per E-Mail an den Kunden gesendet", "confirm_send_estimate": "Das Angebot wird per E-Mail an den Kunden gesendet",
"confirm_mark_as_sent": "Dieser Kostenvoranschlag wird als gesendet markiert", "confirm_mark_as_sent": "Dieses Angebot wird als gesendet markiert",
"confirm_mark_as_accepted": "Dieser Kostenvoranschlag wird als angenommen markiert", "confirm_mark_as_accepted": "Dieses Angebot wird als angenommen markiert",
"confirm_mark_as_rejected": "Dieser Kostenvoranschlag wird als abgelehnt markiert", "confirm_mark_as_rejected": "Dieses Angebot wird als abgelehnt markiert",
"no_matching_estimates": "Es gibt keine übereinstimmenden Kostenvoranschläge!", "no_matching_estimates": "Es gibt keine übereinstimmenden Angebote!",
"mark_as_sent_successfully": "Kostenvoranschlag als gesendet markiert.", "mark_as_sent_successfully": "Angebot als gesendet markiert",
"send_estimate_successfully": "Kostenvoranschlag erfolgreich gesendet", "send_estimate_successfully": "Angebot erfolgreich gesendet",
"errors": { "errors": {
"required": "Feld ist erforderlich" "required": "Feld ist erforderlich"
}, },
"accepted": "Angenommen", "accepted": "Angenommen",
"rejected": "Abgelehnt",
"sent": "Gesendet", "sent": "Gesendet",
"draft": "Entwurf", "draft": "Entwurf",
"declined": "Abgelehnt", "declined": "Abgelehnt",
"new_estimate": "Neuer Kostenvoranschlag", "new_estimate": "Neues Angebot",
"add_new_estimate": "Neuen Kostenvoranschlag hinzufügen", "add_new_estimate": "Neues Angebot hinzufügen",
"update_Estimate": "Kostenvoranschlag aktualisieren", "update_Estimate": "Angebot aktualisieren",
"edit_estimate": "Kostenvoranschlag ändern", "edit_estimate": "Angebot ändern",
"items": "Artikel", "items": "Artikel",
"Estimate": "Kostenvoranschlag | Kostenvoranschläge", "Estimate": "Angebot | Angebote",
"add_new_tax": "neuen Steuersatz hinzufügen", "add_new_tax": "neuen Steuersatz hinzufügen",
"no_estimates": "Keine Kostenvoranschläge vorhanden!", "no_estimates": "Keine Angebote vorhanden!",
"list_of_estimates": "Dieser Abschnitt enthält die Liste der Kostenvoranschläge.", "list_of_estimates": "Dieser Bereich zeigt alle Angebote.",
"mark_as_rejected": "Markiert als abgelehnt", "mark_as_rejected": "Markiert als abgelehnt",
"mark_as_accepted": "Markiert als angenommen", "mark_as_accepted": "Markiert als angenommen",
"marked_as_accepted_message": "Kostenvoranschlag als angenommen markiert", "marked_as_accepted_message": "Angebot als angenommen markiert",
"marked_as_rejected_message": "Kostenvoranschlag als abgelehnt markiert", "marked_as_rejected_message": "Angebot als abgelehnt markiert",
"confirm_delete": "Der Kostenvoranschlag kann nicht wiederhergestellt werden | Die Kostenvoranschläge können nicht wiederhergestellt werden", "confirm_delete": "Das Angebot kann nicht wiederhergestellt werden | Die Angebote können nicht wiederhergestellt werden",
"created_message": "Kostenvoranschlag erfolgreich erstellt", "created_message": "Angebot erfolgreich erstellt",
"updated_message": "Kostenvoranschlag erfolgreich aktualisiert", "updated_message": "Angebot erfolgreich aktualisiert",
"deleted_message": "Kostenvoranschlag erfolgreich gelöscht | Kostenvoranschläge erfolgreich gelöscht", "deleted_message": "Angebot(e) erfolgreich gelöscht",
"user_email_does_not_exist": "Benutzer-E-Mail nicht vorhanden", "user_email_does_not_exist": "Benutzer-E-Mail nicht vorhanden",
"something_went_wrong": "Da ging etwas schief", "something_went_wrong": "Da ging etwas schief",
"item": { "item": {
@ -315,11 +320,14 @@
"years": "{years} Jahre", "years": "{years} Jahre",
"all": "Alle", "all": "Alle",
"paid": "Bezahlt", "paid": "Bezahlt",
"unpaid": "Unbezahlte", "unpaid": "Unbezahlt",
"viewed": "Gesehen",
"overdue": "Überfällig",
"completed": "Abgeschlossen",
"customer": "KUNDEN", "customer": "KUNDEN",
"paid_status": "BEZAHLT-STATUS", "paid_status": "ZAHLUNGSSTATUS",
"ref_no": "REF. - NR.", "ref_no": "REF. - NR.",
"number": "ANZAHL", "number": "NUMMER",
"amount_due": "OFFENER BETRAG", "amount_due": "OFFENER BETRAG",
"partially_paid": "Teilzahlung", "partially_paid": "Teilzahlung",
"total": "Gesamt", "total": "Gesamt",
@ -336,7 +344,7 @@
"add_tax": "Steuersatz hinzufügen", "add_tax": "Steuersatz hinzufügen",
"amount": "Summe", "amount": "Summe",
"action": "Aktion", "action": "Aktion",
"notes": "Hinweise", "notes": "Notizen",
"view": "Anzeigen", "view": "Anzeigen",
"send_invoice": "Rechnung senden", "send_invoice": "Rechnung senden",
"resend_invoice": "Rechnung erneut senden", "resend_invoice": "Rechnung erneut senden",
@ -356,7 +364,7 @@
"update_invoice": "Rechnung ändern", "update_invoice": "Rechnung ändern",
"add_new_tax": "Neuen Steuersatz hinzufügen", "add_new_tax": "Neuen Steuersatz hinzufügen",
"no_invoices": "Keine Rechnungen vorhanden!", "no_invoices": "Keine Rechnungen vorhanden!",
"list_of_invoices": "Dieser Abschnitt enthält die Liste der Rechnungen.", "list_of_invoices": "Dieser Bereich zeigt alle Rechnungen.",
"select_invoice": "Wählen Sie eine Rechnung", "select_invoice": "Wählen Sie eine Rechnung",
"no_matching_invoices": "Es gibt keine entsprechenden Rechnungen!", "no_matching_invoices": "Es gibt keine entsprechenden Rechnungen!",
"mark_as_sent_successfully": "Rechnung gekennzeichnet als erfolgreich gesendet", "mark_as_sent_successfully": "Rechnung gekennzeichnet als erfolgreich gesendet",
@ -397,7 +405,7 @@
"amount": "Summe", "amount": "Summe",
"action": "Aktion", "action": "Aktion",
"credit_number": "Kreditkarten-Nummer", "credit_number": "Kreditkarten-Nummer",
"notes": "Hinweise", "notes": "Notizen",
"confirm_delete": "Wollen Sie diese Gutschrift löschen?", "confirm_delete": "Wollen Sie diese Gutschrift löschen?",
"item": { "item": {
"title": "Titel", "title": "Titel",
@ -434,10 +442,12 @@
"update_payment": "Zahlung ändern", "update_payment": "Zahlung ändern",
"payment": "Zahlung | Zahlungen", "payment": "Zahlung | Zahlungen",
"no_payments": "Keine Zahlungen vorhanden!", "no_payments": "Keine Zahlungen vorhanden!",
"not_selected": "Nicht ausgewählt",
"no_invoice": "Keine Rechnung",
"no_matching_payments": "Es gibt keine passenden Zahlungen!", "no_matching_payments": "Es gibt keine passenden Zahlungen!",
"list_of_payments": "Dieser Abschnitt enthält die Liste der Zahlungen.", "list_of_payments": "Dieser Bereich zeigt alle Zahlungen.",
"select_payment_mode": "Wählen Sie den Zahlungsmodus", "select_payment_mode": "Wählen Sie den Zahlungsmodus",
"confirm_mark_as_sent": "Dieser Kostenvoranschlag wird als gesendet markiert", "confirm_mark_as_sent": "Dieses Angebot wird als gesendet markiert",
"confirm_send_payment": "Diese Zahlung wird per E-Mail an den Kunden gesendet", "confirm_send_payment": "Diese Zahlung wird per E-Mail an den Kunden gesendet",
"send_payment_successfully": "Zahlung erfolgreich gesendet", "send_payment_successfully": "Zahlung erfolgreich gesendet",
"user_email_does_not_exist": "Benutzer-E-Mail existiert nicht", "user_email_does_not_exist": "Benutzer-E-Mail existiert nicht",
@ -449,37 +459,38 @@
"invalid_amount_message": "Zahlungsbetrag ist ungültig" "invalid_amount_message": "Zahlungsbetrag ist ungültig"
}, },
"expenses": { "expenses": {
"title": "Aufwendungen/Ausgaben", "title": "Ausgaben",
"expenses_list": "Liste der Ausgaben", "expenses_list": "Ausgabenübersicht",
"select_a_customer": "Wählen Sie einen Kunden", "select_a_customer": "Wählen Sie einen Kunden",
"expense_title": "Titel", "expense_title": "Titel",
"customer": "Kundin", "customer": "Kunde",
"contact": "Kontakt", "contact": "Kontakt",
"category": "Kategorie", "category": "Kategorie",
"from_date": "Von Datum", "from_date": "Von Datum",
"to_date": "bis Datum", "to_date": "bis Datum",
"expense_date": "Datum", "expense_date": "Datum",
"description": "Beschreibung", "description": "Beschreibung",
"receipt": "Eingang", "receipt": "Rechnung",
"amount": "Summe", "amount": "Summe",
"action": "Aktion", "action": "Aktion",
"not_selected": "Nicht ausgewählt",
"note": "Hinweis", "note": "Hinweis",
"category_id": "Kategorie-Id", "category_id": "Kategorie-Id",
"date": "Aufwandsdatum", "date": "Ausgabedatum",
"add_expense": "Aufwendung hinzufügen", "add_expense": "Ausgabe hinzufügen",
"add_new_expense": "Neue Aufwendung hinzufügen", "add_new_expense": "Neue Ausgabe hinzufügen",
"save_expense": "Aufwendung speichern", "save_expense": "Ausgabe speichern",
"update_expense": "Aufwendung aktualisieren", "update_expense": "Ausgabe aktualisieren",
"download_receipt": "Quittung herunterladen", "download_receipt": "Quittung herunterladen",
"edit_expense": "Aufwendung ändern", "edit_expense": "Ausgabe bearbeiten",
"new_expense": "Neue Aufwendung", "new_expense": "Neue Ausgabe",
"expense": "Aufwendung | Aufwendungen", "expense": "Ausgabe | Ausgaben",
"no_expenses": "Noch keine Ausgaben!", "no_expenses": "Noch keine Ausgaben!",
"list_of_expenses": "Dieser Abschnitt enthält die Liste der Ausgaben.", "list_of_expenses": "Dieser Bereich enthält alle Ausgaben.",
"confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.", "confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.",
"created_message": "Aufwand erfolgreich erstellt", "created_message": "Ausgabe erfolgreich erstellt",
"updated_message": "Aufwand erfolgreich aktualisiert", "updated_message": "Ausgabe erfolgreich aktualisiert",
"deleted_message": "Aufwand erfolgreich gelöscht | Aufwand erfolgreich gelöscht", "deleted_message": "Ausgabe erfolgreich gelöscht | Ausgaben erfolgreich gelöscht",
"categories": { "categories": {
"categories_list": "Liste der Kategorien", "categories_list": "Liste der Kategorien",
"title": "Titel", "title": "Titel",
@ -523,7 +534,7 @@
"new_user": "Neuer Benutzer", "new_user": "Neuer Benutzer",
"edit_user": "Benutzer bearbeiten", "edit_user": "Benutzer bearbeiten",
"no_users": "Noch keine Benutzer!", "no_users": "Noch keine Benutzer!",
"list_of_users": "Dieser Abschnitt enthält die Liste der Benutzer.", "list_of_users": "Dieser Bereich zeigt alle Benutzer.",
"email": "E-Mail", "email": "E-Mail",
"phone": "Telefon", "phone": "Telefon",
"password": "Passwort", "password": "Passwort",
@ -575,17 +586,17 @@
"status": "Status" "status": "Status"
}, },
"estimates": { "estimates": {
"estimate": "Kostenvoranschlag", "estimate": "Angebot",
"estimate_date": "Datum Kostenvoranschlag", "estimate_date": "Angebotsdatum",
"due_date": "Fälligkeit", "due_date": "Fälligkeit",
"estimate_number": "Kostenvoranschlag-Nr.", "estimate_number": "Angebotsnummer",
"ref_number": "Ref-Nummer", "ref_number": "Ref-Nummer",
"amount": "Summe", "amount": "Summe",
"contact_name": "Ansprechpartner", "contact_name": "Ansprechpartner",
"status": "Status" "status": "Status"
}, },
"expenses": { "expenses": {
"expenses": "Aufwendungen", "expenses": "Ausgaben",
"category": "Kategorie", "category": "Kategorie",
"date": "Datum", "date": "Datum",
"amount": "Summe", "amount": "Summe",
@ -598,7 +609,7 @@
"menu_title": { "menu_title": {
"account_settings": "Konto-Einstellungen", "account_settings": "Konto-Einstellungen",
"company_information": "Informationen zum Unternehmen", "company_information": "Informationen zum Unternehmen",
"customization": "Anpassung", "customization": "Personalisierung",
"preferences": "Einstellungen", "preferences": "Einstellungen",
"notifications": "Benachrichtigungen", "notifications": "Benachrichtigungen",
"tax_types": "Steuersätze", "tax_types": "Steuersätze",
@ -608,7 +619,7 @@
"file_disk": "Dateispeicher", "file_disk": "Dateispeicher",
"custom_fields": "Benutzerdefinierte Felder", "custom_fields": "Benutzerdefinierte Felder",
"payment_modes": "Zahlungsarten", "payment_modes": "Zahlungsarten",
"notes": "Hinweise" "notes": "Notizen"
}, },
"title": "Einstellungen", "title": "Einstellungen",
"setting": "Einstellung | Einstellungen", "setting": "Einstellung | Einstellungen",
@ -662,7 +673,7 @@
"company_info": "Firmeninfo", "company_info": "Firmeninfo",
"company_name": "Name des Unternehmens", "company_name": "Name des Unternehmens",
"company_logo": "Firmenlogo", "company_logo": "Firmenlogo",
"section_description": "Informationen zu Ihrem Unternehmen, die auf Rechnungen, Kostenvoranschlägen und anderen von Crater erstellten Dokumenten angezeigt werden.", "section_description": "Informationen zu Ihrem Unternehmen, die auf Rechnungen, Angeboten und anderen von Crater erstellten Dokumenten angezeigt werden.",
"phone": "Telefon", "phone": "Telefon",
"country": "Land", "country": "Land",
"state": "Bundesland", "state": "Bundesland",
@ -678,7 +689,7 @@
"add_custom_field": "Benutzerdefiniertes Feld hinzufügen", "add_custom_field": "Benutzerdefiniertes Feld hinzufügen",
"edit_custom_field": "Benutzerdefiniertes Feld bearbeiten", "edit_custom_field": "Benutzerdefiniertes Feld bearbeiten",
"field_name": "Feldname", "field_name": "Feldname",
"label": "Etikette", "label": "Bezeichnung",
"type": "Art", "type": "Art",
"name": "Name", "name": "Name",
"required": "Erforderlich", "required": "Erforderlich",
@ -692,7 +703,7 @@
"suffix": "Vorzeichen", "suffix": "Vorzeichen",
"yes": "Ja", "yes": "Ja",
"no": "Nein", "no": "Nein",
"order": "Auftrag", "order": "Reihenfolge",
"custom_field_confirm_delete": "Sie können dieses benutzerdefinierte Feld nicht wiederherstellen", "custom_field_confirm_delete": "Sie können dieses benutzerdefinierte Feld nicht wiederherstellen",
"already_in_use": "Benutzerdefiniertes Feld wird bereits verwendet", "already_in_use": "Benutzerdefiniertes Feld wird bereits verwendet",
"deleted_message": "Benutzerdefiniertes Feld erfolgreich gelöscht", "deleted_message": "Benutzerdefiniertes Feld erfolgreich gelöscht",
@ -709,7 +720,7 @@
"added_message": "Benutzerdefiniertes Feld erfolgreich hinzugefügt" "added_message": "Benutzerdefiniertes Feld erfolgreich hinzugefügt"
}, },
"customization": { "customization": {
"customization": "Anpassung", "customization": "Personalisierung",
"save": "Speichern", "save": "Speichern",
"addresses": { "addresses": {
"title": "Adressen", "title": "Adressen",
@ -729,8 +740,8 @@
"state": "Bundesland", "state": "Bundesland",
"city": "Stadt", "city": "Stadt",
"company_name": "Name des Unternehmens", "company_name": "Name des Unternehmens",
"address_street_1": "Strasse", "address_street_1": "Straße und Hausnummer",
"address_street_2": "Zusatz Strasse", "address_street_2": "Adresszusatz",
"phone": "Telefon", "phone": "Telefon",
"zip_code": "PLZ", "zip_code": "PLZ",
"address_setting_updated": "Adresse-Einstellung erfolgreich aktualisiert" "address_setting_updated": "Adresse-Einstellung erfolgreich aktualisiert"
@ -738,12 +749,15 @@
"updated_message": "Unternehmensinformationen wurden erfolgreich aktualisiert", "updated_message": "Unternehmensinformationen wurden erfolgreich aktualisiert",
"invoices": { "invoices": {
"title": "Rechnungen", "title": "Rechnungen",
"notes": "Hinweise", "notes": "Notizen",
"invoice_prefix": "Rechnung Präfix", "invoice_prefix": "Rechnung Präfix",
"invoice_number_length": "Rechnungsnummerlänge",
"default_invoice_email_body": "Standard Rechnung E-Mail Inhalt", "default_invoice_email_body": "Standard Rechnung E-Mail Inhalt",
"invoice_settings": "Rechnungseinstellungen", "invoice_settings": "Rechnungseinstellungen",
"autogenerate_invoice_number": "Rechnungsnummer automatisch generieren", "autogenerate_invoice_number": "Rechnungsnummer automatisch generieren",
"invoice_setting_description": "Deaktivieren Sie diese Option, wenn Sie Rechnungsnummern nicht jedes Mal automatisch generieren möchten, wenn Sie eine neue Rechnung erstellen.", "invoice_setting_description": "Deaktivieren Sie diese Option, wenn Sie Rechnungsnummern nicht jedes Mal automatisch generieren möchten, wenn Sie eine neue Rechnung erstellen.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Rechnungspräfix eingeben", "enter_invoice_prefix": "Rechnungspräfix eingeben",
"terms_and_conditions": "Allgemeine Geschäftsbedingungen", "terms_and_conditions": "Allgemeine Geschäftsbedingungen",
"company_address_format": "Firmenadressformat", "company_address_format": "Firmenadressformat",
@ -752,26 +766,32 @@
"invoice_setting_updated": "Rechnungseinstellung erfolgreich aktualisiert" "invoice_setting_updated": "Rechnungseinstellung erfolgreich aktualisiert"
}, },
"estimates": { "estimates": {
"title": "Kostenvoranschläge", "title": "Angebote",
"estimate_prefix": "Kostenvoranschlag Präfix", "estimate_prefix": "Angebotspräfix",
"estimate_number_length": "Angebotsnummerlänge",
"default_estimate_email_body": "Rechnung - E-Mail Text", "default_estimate_email_body": "Rechnung - E-Mail Text",
"estimate_settings": "Einstellungen Kostenvoranschlag", "estimate_settings": "Einstellungen Angebot",
"autogenerate_estimate_number": "Kostenvoranschlagsnummer automatisch generieren", "autogenerate_estimate_number": "Angebotsnummer automatisch generieren",
"estimate_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie einen neue Kostenvoranschlag erstellen, automatisch eine Schätzung generieren möchten.", "estimate_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie ein neues Angebot erstellen, automatisch eine Angebotsnummer generieren möchten.",
"enter_estimate_prefix": "Geben Sie das Kostenvoranschlag Präfix ein", "estimate_email_attachment": "Send estimates as attachments",
"estimate_setting_updated": "Einstellungen Kostenvoranschläge erfolgreich aktualisiert", "estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Geben Sie das Angebotspräfix ein",
"estimate_setting_updated": "Angebotseinstellungen erfolgreich aktualisiert",
"company_address_format": "Firmenadresse Format", "company_address_format": "Firmenadresse Format",
"billing_address_format": "Rechnungsadressen Format", "billing_address_format": "Rechnungsadressen Format",
"shipping_address_format": "Versandadressen Format" "shipping_address_format": "Versandadressen Format"
}, },
"payments": { "payments": {
"title": "Zahlungen", "title": "Zahlungen",
"description": "Modes of transaction for payments", "description": "Transaktionsmodi für Zahlungen",
"payment_prefix": "Zahlung Präfix", "payment_prefix": "Zahlung Präfix",
"payment_number_length": "Zahlungsnummerlänge",
"default_payment_email_body": "Zahlung - E-Mail Text", "default_payment_email_body": "Zahlung - E-Mail Text",
"payment_settings": "Zahlung Einstellungen", "payment_settings": "Zahlung Einstellungen",
"autogenerate_payment_number": "Zahlungsnummer automatisch generieren", "autogenerate_payment_number": "Zahlungsnummer automatisch generieren",
"payment_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie eine neue Zahlung erstellen, automatisch Zahlungsnummern generieren möchten.", "payment_setting_description": "Deaktivieren Sie diese Option, wenn Sie nicht jedes Mal, wenn Sie eine neue Zahlung erstellen, automatisch Zahlungsnummern generieren möchten.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Zahlungspräfix eingeben", "enter_payment_prefix": "Zahlungspräfix eingeben",
"payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert", "payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert",
"payment_modes": "Zahlungsarten", "payment_modes": "Zahlungsarten",
@ -799,8 +819,8 @@
"deleted_message": "Artikeleinheit erfolgreich gelöscht" "deleted_message": "Artikeleinheit erfolgreich gelöscht"
}, },
"notes": { "notes": {
"title": "Hinweise", "title": "Notizen",
"description": "Sparen Sie Zeit, indem Sie Notizen erstellen und diese auf Ihren Rechnungen, Kostenvoranschlägen und Zahlungen wiederverwenden.", "description": "Sparen Sie Zeit, indem Sie Notizen erstellen und diese auf Ihren Rechnungen, Angeboten und Zahlungen wiederverwenden.",
"notes": "Hinweise", "notes": "Hinweise",
"type": "Art", "type": "Art",
"add_note": "Notiz hinzufügen", "add_note": "Notiz hinzufügen",
@ -837,8 +857,8 @@
"description": "Welche E-Mail-Benachrichtigungen möchten Sie erhalten wenn sich etwas ändert?", "description": "Welche E-Mail-Benachrichtigungen möchten Sie erhalten wenn sich etwas ändert?",
"invoice_viewed": "Rechnung angezeigt", "invoice_viewed": "Rechnung angezeigt",
"invoice_viewed_desc": "Wenn Ihr Kunde die gesendete Rechnung anzeigt bekommt.", "invoice_viewed_desc": "Wenn Ihr Kunde die gesendete Rechnung anzeigt bekommt.",
"estimate_viewed": "Kostenvoranschlag angesehen", "estimate_viewed": "Angebot angesehen",
"estimate_viewed_desc": "Wenn Ihr Kunde den gesendeten Kostenvoranschlag anzeigt bekommt.", "estimate_viewed_desc": "Wenn Ihr Kunde das gesendete Angebot anzeigt bekommt.",
"save": "Speichern", "save": "Speichern",
"email_save_message": "Email erfolgreich gespeichert", "email_save_message": "Email erfolgreich gespeichert",
"please_enter_email": "Bitte E-Mail eingeben" "please_enter_email": "Bitte E-Mail eingeben"
@ -863,7 +883,7 @@
"already_in_use": "Steuersatz wird bereits verwendet" "already_in_use": "Steuersatz wird bereits verwendet"
}, },
"expense_category": { "expense_category": {
"title": "Kategorien Kosten", "title": "Ausgabenkategorien",
"action": "Aktion", "action": "Aktion",
"description": "Für das Hinzufügen von Ausgabeneinträgen sind Kategorien erforderlich. Sie können diese Kategorien nach Ihren Wünschen hinzufügen oder entfernen.", "description": "Für das Hinzufügen von Ausgabeneinträgen sind Kategorien erforderlich. Sie können diese Kategorien nach Ihren Wünschen hinzufügen oder entfernen.",
"add_new_category": "Neue Kategorie hinzufügen", "add_new_category": "Neue Kategorie hinzufügen",
@ -911,6 +931,7 @@
"download_zip_file": "Laden Sie die ZIP-Datei herunter", "download_zip_file": "Laden Sie die ZIP-Datei herunter",
"unzipping_package": "Paket entpacken", "unzipping_package": "Paket entpacken",
"copying_files": "Dateien kopieren", "copying_files": "Dateien kopieren",
"deleting_files": "Deleting Unused files",
"running_migrations": "Ausführen von Migrationen", "running_migrations": "Ausführen von Migrationen",
"finishing_update": "Update beenden", "finishing_update": "Update beenden",
"update_failed": "Update fehlgeschlagen", "update_failed": "Update fehlgeschlagen",
@ -918,7 +939,7 @@
}, },
"backup": { "backup": {
"title": "Sicherung | Sicherungen", "title": "Sicherung | Sicherungen",
"description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", "description": "Die Sicherung ist eine ZIP-Datei, die alle Dateien der ausgewählten Pfade und eine Kopie der Datenbank enthält",
"new_backup": "Neues Backup", "new_backup": "Neues Backup",
"create_backup": "Datensicherung erstellen", "create_backup": "Datensicherung erstellen",
"select_backup_type": "Wählen Sie den Sicherungs-Typ", "select_backup_type": "Wählen Sie den Sicherungs-Typ",
@ -950,44 +971,45 @@
"disk_name": "Speicher Bezeichnung", "disk_name": "Speicher Bezeichnung",
"new_disk": "Speicher hinzufügen", "new_disk": "Speicher hinzufügen",
"filesystem_driver": "Dateisystem-Treiber", "filesystem_driver": "Dateisystem-Treiber",
"local_driver": "local Driver", "local_driver": "Lokaler Treiber",
"local_root": "local Root", "local_root": "lokaler Pfad",
"public_driver": "Public Driver", "public_driver": "Öffentlicher Treiber",
"public_root": "Public Root", "public_root": "Öffentlicher Pfad",
"public_url": "Public URL", "public_url": "Öffentliche URL",
"public_visibility": "Public Visibility", "public_visibility": "Öffentliche Sichtbarkeit",
"media_driver": "Media Driver", "media_driver": "Medientreiber",
"media_root": "Media Root", "media_root": "Medienpfad",
"aws_driver": "AWS Driver", "aws_driver": "AWS-Treiber",
"aws_key": "AWS Key", "aws_key": "AWS-Schlüssel",
"aws_secret": "AWS Secret", "aws_secret": "AWS-Geheimnis",
"aws_region": "AWS Region", "aws_region": "AWS-Region",
"aws_bucket": "AWS Bucket", "aws_bucket": "AWS Bucket",
"aws_root": "AWS Root", "aws_root": "AWS-Pfad",
"do_spaces_type": "Do Spaces type", "do_spaces_type": "Do Spaces-Typ",
"do_spaces_key": "Do Spaces key", "do_spaces_key": "Do Spaces-Schlüssel",
"do_spaces_secret": "Do Spaces Secret", "do_spaces_secret": "Do Spaces-Geheimnis",
"do_spaces_region": "Do Spaces Region", "do_spaces_region": "Do Spaces Region",
"do_spaces_bucket": "Do Spaces Bucket", "do_spaces_bucket": "Do Spaces Bucket",
"do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_endpoint": "Do Spaces Endpoint",
"do_spaces_root": "Do Spaces Root", "do_spaces_root": "Do Spaces Root",
"dropbox_type": "Dropbox Type", "dropbox_type": "Dropbox Typ",
"dropbox_token": "Dropbox Token", "dropbox_token": "Dropbox Token",
"dropbox_key": "Dropbox Key", "dropbox_key": "Dropbox Schlüssel",
"dropbox_secret": "Dropbox Secret", "dropbox_secret": "Dropbox Secret",
"dropbox_app": "Dropbox App", "dropbox_app": "Dropbox App",
"dropbox_root": "Dropbox Root", "dropbox_root": "Dropbox Root",
"default_driver": "Standard-Treiber", "default_driver": "Standard-Treiber",
"is_default": "Standard", "is_default": "Standard",
"set_default_disk": "Als Standard festlegen", "set_default_disk": "Als Standard festlegen",
"set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"success_set_default_disk": "Speicher wurde als Standard festgelegt", "success_set_default_disk": "Speicher wurde als Standard festgelegt",
"save_pdf_to_disk": "PDFs auf Festplatte speichern", "save_pdf_to_disk": "PDFs auf Festplatte speichern",
"disk_setting_description": " Aktivieren Sie dies, um eine Kopie von jeder Rechnung, jedem Kostenvoranschlag & jedem Zahlungsbelegung als PDF automatisch auf ihrem Standard-Speicher abzulegen. Wenn Sie diese Option aktivieren, verringert sich die Ladezeit beim Betrachten der PDFs.", "disk_setting_description": " Aktivieren Sie dies, um eine Kopie von jeder Rechnung, jedem Angebot & jeder Zahlung als PDF automatisch auf ihrem Standard-Speicher abzulegen. Wenn Sie diese Option aktivieren, verringert sich die Ladezeit beim Betrachten der PDFs.",
"select_disk": "Speicherort auswählen", "select_disk": "Speicherort auswählen",
"disk_settings": "Disk Settings", "disk_settings": "Speichermedienkonfiguration",
"confirm_delete": "Ihre existierenden Dateien und Ordner auf der angegebenen Festplatte werden nicht beeinflusst, aber Dieser Speicherort wird aus Crater gelöscht", "confirm_delete": "Ihre existierenden Dateien und Ordner auf der angegebenen Festplatte werden nicht beeinflusst, aber Dieser Speicherort wird aus Crater gelöscht",
"action": "Aktion", "action": "Aktion",
"edit_file_disk": "Edit File Disk", "edit_file_disk": "Speicherort editieren",
"success_create": "Speicher erfolgreich hinzugefügt", "success_create": "Speicher erfolgreich hinzugefügt",
"success_update": "Speicher erfolgreich bearbeitet", "success_update": "Speicher erfolgreich bearbeitet",
"error": "Hinzufügen des Speichers gescheitert", "error": "Hinzufügen des Speichers gescheitert",
@ -1037,10 +1059,10 @@
"port": "Datenbank Port", "port": "Datenbank Port",
"password": "Datenbank Passwort", "password": "Datenbank Passwort",
"app_url": "App-URL", "app_url": "App-URL",
"app_domain": "App Domain", "app_domain": "Domain der App",
"username": "Datenbank Benutzername", "username": "Datenbank Benutzername",
"db_name": "Datenbank Name", "db_name": "Datenbank Name",
"db_path": "Database Path", "db_path": "Datenbankpfad",
"desc": "Erstellen Sie eine Datenbank auf Ihrem Server und legen Sie die Anmeldeinformationen mithilfe des folgenden Formulars fest." "desc": "Erstellen Sie eine Datenbank auf Ihrem Server und legen Sie die Anmeldeinformationen mithilfe des folgenden Formulars fest."
}, },
"permissions": { "permissions": {
@ -1129,11 +1151,12 @@
"address_maxlength": "Die Adresse sollte nicht länger als 255 Zeichen sein.", "address_maxlength": "Die Adresse sollte nicht länger als 255 Zeichen sein.",
"ref_number_maxlength": "Ref Number sollte nicht länger als 255 Zeichen sein.", "ref_number_maxlength": "Ref Number sollte nicht länger als 255 Zeichen sein.",
"prefix_maxlength": "Das Präfix sollte nicht länger als 5 Zeichen sein.", "prefix_maxlength": "Das Präfix sollte nicht länger als 5 Zeichen sein.",
"something_went_wrong": "Da ist etwas schief gelaufen" "something_went_wrong": "Da ist etwas schief gelaufen",
"number_length_minvalue": "Nummernlänge sollte größer als 0 sein"
}, },
"pdf_estimate_label": "Kostenvoranschlag", "pdf_estimate_label": "Angebot",
"pdf_estimate_number": "Kostenvoran. Nummer", "pdf_estimate_number": "Angebotsnummer",
"pdf_estimate_date": "Datum Kostenvoranschlag", "pdf_estimate_date": "Angebotsdatum",
"pdf_estimate_expire_date": "Ablaufdatum", "pdf_estimate_expire_date": "Ablaufdatum",
"pdf_invoice_label": "Rechnung", "pdf_invoice_label": "Rechnung",
"pdf_invoice_number": "Rechnungsnummer", "pdf_invoice_number": "Rechnungsnummer",
@ -1147,14 +1170,18 @@
"pdf_amount_label": "Summe", "pdf_amount_label": "Summe",
"pdf_subtotal": "Zwischensumme", "pdf_subtotal": "Zwischensumme",
"pdf_total": "Gesamt", "pdf_total": "Gesamt",
"pdf_payment_label": "Zahlung",
"pdf_payment_receipt_label": "Zahlungsbeleg", "pdf_payment_receipt_label": "Zahlungsbeleg",
"pdf_payment_date": "Zahlungsdatum", "pdf_payment_date": "Zahlungsdatum",
"pdf_payment_number": "Zahlungsnummer", "pdf_payment_number": "Zahlungsnummer",
"pdf_payment_mode": "Zahlungsart", "pdf_payment_mode": "Zahlungsart",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "Betrag erhalten",
"pdf_expense_report_label": "Ausgaben Bericht", "pdf_expense_report_label": "Ausgaben Bericht",
"pdf_total_expenses_label": "Gesamtausgaben", "pdf_total_expenses_label": "Gesamtausgaben",
"pdf_profit_loss_label": "Gewinn & Verlust Bericht", "pdf_profit_loss_label": "Gewinn & Verlust Bericht",
"pdf_sales_customers_label": "Kundenverkaufs Bericht",
"pdf_sales_items_label": "Artikelverkaufs Bericht",
"pdf_tax_summery_label": "Steuer Bericht",
"pdf_income_label": "Einkommen", "pdf_income_label": "Einkommen",
"pdf_net_profit_label": "Nettogewinn", "pdf_net_profit_label": "Nettogewinn",
"pdf_customer_sales_report": "Umsatzbericht: Nach Kunde", "pdf_customer_sales_report": "Umsatzbericht: Nach Kunde",
@ -1163,8 +1190,8 @@
"pdf_tax_report_label": "Umsatzsteuer BERICHT", "pdf_tax_report_label": "Umsatzsteuer BERICHT",
"pdf_total_tax_label": "Gesamte Umsatzsteuer", "pdf_total_tax_label": "Gesamte Umsatzsteuer",
"pdf_tax_types_label": "Steuersätze", "pdf_tax_types_label": "Steuersätze",
"pdf_expenses_label": "Gesamtausgaben", "pdf_expenses_label": "Ausgaben",
"pdf_bill_to": "Rechnungsempfänger,", "pdf_bill_to": "Rechnungsempfänger:",
"pdf_ship_to": "Versand an,", "pdf_ship_to": "Versand an:",
"pdf_received_from": "Erhalten von:" "pdf_received_from": "Erhalten von:"
} }

View File

@ -178,6 +178,8 @@
"copy_billing_address": "Copy from Billing", "copy_billing_address": "Copy from Billing",
"no_customers": "No customers yet!", "no_customers": "No customers yet!",
"no_customers_found": "No customers found!", "no_customers_found": "No customers found!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "This section will contain the list of customers.", "list_of_customers": "This section will contain the list of customers.",
"primary_display_name": "Primary Display Name", "primary_display_name": "Primary Display Name",
"select_currency": "Select currency", "select_currency": "Select currency",
@ -201,6 +203,7 @@
"added_on": "Added On", "added_on": "Added On",
"price": "Price", "price": "Price",
"date_of_creation": "Date Of Creation", "date_of_creation": "Date Of Creation",
"not_selected": "No item selected",
"action": "Action", "action": "Action",
"add_item": "Add Item", "add_item": "Add Item",
"save_item": "Save Item", "save_item": "Save Item",
@ -271,6 +274,7 @@
"required": "Field is required" "required": "Field is required"
}, },
"accepted": "Accepted", "accepted": "Accepted",
"rejected": "Rejected",
"sent": "Sent", "sent": "Sent",
"draft": "Draft", "draft": "Draft",
"declined": "Declined", "declined": "Declined",
@ -317,6 +321,9 @@
"all": "All", "all": "All",
"paid": "Paid", "paid": "Paid",
"unpaid": "Unpaid", "unpaid": "Unpaid",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CUSTOMER", "customer": "CUSTOMER",
"paid_status": "PAID STATUS", "paid_status": "PAID STATUS",
"ref_no": "REF NO.", "ref_no": "REF NO.",
@ -435,6 +442,8 @@
"update_payment": "Update Payment", "update_payment": "Update Payment",
"payment": "Payment | Payments", "payment": "Payment | Payments",
"no_payments": "No payments yet!", "no_payments": "No payments yet!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "There are no matching payments!", "no_matching_payments": "There are no matching payments!",
"list_of_payments": "This section will contain the list of payments.", "list_of_payments": "This section will contain the list of payments.",
"select_payment_mode": "Select payment mode", "select_payment_mode": "Select payment mode",
@ -464,6 +473,7 @@
"receipt": "Receipt", "receipt": "Receipt",
"amount": "Amount", "amount": "Amount",
"action": "Action", "action": "Action",
"not_selected": "Not selected",
"note": "Note", "note": "Note",
"category_id": "Category Id", "category_id": "Category Id",
"date": "Date", "date": "Date",
@ -741,10 +751,13 @@
"title": "Invoices", "title": "Invoices",
"notes": "Notes", "notes": "Notes",
"invoice_prefix": "Invoice Prefix", "invoice_prefix": "Invoice Prefix",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Default Invoice Email Body", "default_invoice_email_body": "Default Invoice Email Body",
"invoice_settings": "Invoice Settings", "invoice_settings": "Invoice Settings",
"autogenerate_invoice_number": "Auto-generate Invoice Number", "autogenerate_invoice_number": "Auto-generate Invoice Number",
"invoice_setting_description": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.", "invoice_setting_description": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Enter invoice prefix", "enter_invoice_prefix": "Enter invoice prefix",
"terms_and_conditions": "Terms and Conditions", "terms_and_conditions": "Terms and Conditions",
"company_address_format": "Company Address Format", "company_address_format": "Company Address Format",
@ -755,10 +768,13 @@
"estimates": { "estimates": {
"title": "Estimates", "title": "Estimates",
"estimate_prefix": "Estimate Prefix", "estimate_prefix": "Estimate Prefix",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Default Estimate Email Body", "default_estimate_email_body": "Default Estimate Email Body",
"estimate_settings": "Estimate Settings", "estimate_settings": "Estimate Settings",
"autogenerate_estimate_number": "Auto-generate Estimate Number", "autogenerate_estimate_number": "Auto-generate Estimate Number",
"estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.", "estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Enter estmiate prefix", "enter_estimate_prefix": "Enter estmiate prefix",
"estimate_setting_updated": "Estimate Setting updated successfully", "estimate_setting_updated": "Estimate Setting updated successfully",
"company_address_format": "Company Address Format", "company_address_format": "Company Address Format",
@ -769,10 +785,13 @@
"title": "Payments", "title": "Payments",
"description": "Modes of transaction for payments", "description": "Modes of transaction for payments",
"payment_prefix": "Payment Prefix", "payment_prefix": "Payment Prefix",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "Default Payment Email Body", "default_payment_email_body": "Default Payment Email Body",
"payment_settings": "Payment Settings", "payment_settings": "Payment Settings",
"autogenerate_payment_number": "Auto-generate Payment Number", "autogenerate_payment_number": "Auto-generate Payment Number",
"payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.", "payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Enter Payment Prefix", "enter_payment_prefix": "Enter Payment Prefix",
"payment_setting_updated": "Payment Setting updated successfully", "payment_setting_updated": "Payment Setting updated successfully",
"payment_modes": "Payment Modes", "payment_modes": "Payment Modes",
@ -1132,7 +1151,8 @@
"address_maxlength": "Address should not be greater than 255 characters.", "address_maxlength": "Address should not be greater than 255 characters.",
"ref_number_maxlength": "Ref Number should not be greater than 255 characters.", "ref_number_maxlength": "Ref Number should not be greater than 255 characters.",
"prefix_maxlength": "Prefix should not be greater than 5 characters.", "prefix_maxlength": "Prefix should not be greater than 5 characters.",
"something_went_wrong": "something went wrong" "something_went_wrong": "something went wrong",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Estimate", "pdf_estimate_label": "Estimate",
"pdf_estimate_number": "Estimate Number", "pdf_estimate_number": "Estimate Number",
@ -1150,6 +1170,7 @@
"pdf_amount_label": "Amount", "pdf_amount_label": "Amount",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Subtotal",
"pdf_total": "Total", "pdf_total": "Total",
"pdf_payment_label": "Payment",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_receipt_label": "PAYMENT RECEIPT",
"pdf_payment_date": "Payment Date", "pdf_payment_date": "Payment Date",
"pdf_payment_number": "Payment Number", "pdf_payment_number": "Payment Number",
@ -1158,6 +1179,9 @@
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "EXPENSES REPORT",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "TOTAL EXPENSE",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "PROFIT & LOSS REPORT",
"pdf_sales_customers_label": "Sales Customer Report",
"pdf_sales_items_label": "Sales Item Report",
"pdf_tax_summery_label": "Tax Summary Report",
"pdf_income_label": "INCOME", "pdf_income_label": "INCOME",
"pdf_net_profit_label": "NET PROFIT", "pdf_net_profit_label": "NET PROFIT",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_customer_sales_report": "Sales Report: By Customer",

View File

@ -5,23 +5,23 @@
"items": "Artículos", "items": "Artículos",
"invoices": "Facturas", "invoices": "Facturas",
"expenses": "Gastos", "expenses": "Gastos",
"estimates": "Presupuestos", "estimates": "Presupuesto",
"payments": "Pagos", "payments": "Pagos",
"reports": "Informes", "reports": "Informes",
"settings": "Configuraciones", "settings": "Configuraciones",
"logout": "Cerrar sesión", "logout": "Cerrar sesión",
"users": "Users" "users": "Usuarios"
}, },
"general": { "general": {
"add_company": "Add Company", "add_company": "Añadir empresa",
"view_pdf": "Ver PDF", "view_pdf": "Ver PDF",
"copy_pdf_url": "Copy PDF Url", "copy_pdf_url": "Copiar dirección URL del archivo PDF",
"download_pdf": "Descargar PDF", "download_pdf": "Descargar PDF",
"save": "Guardar", "save": "Guardar",
"create": "Create", "create": "Crear",
"cancel": "Cancelar", "cancel": "Cancelar",
"update": "Actualizar", "update": "Actualizar",
"deselect": "Deselect", "deselect": "Deseleccionar",
"download": "Descargar", "download": "Descargar",
"from_date": "Desde la fecha", "from_date": "Desde la fecha",
"to_date": "Hasta la fecha", "to_date": "Hasta la fecha",
@ -30,10 +30,10 @@
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"ascending": "Ascendente", "ascending": "Ascendente",
"descending": "Descendente", "descending": "Descendente",
"subject": "Sujeta", "subject": "Asunto",
"body": "Cuerpo", "body": "Cuerpo",
"message": "Mensaje", "message": "Mensaje",
"send": "Send", "send": "Enviar",
"go_back": "Volver", "go_back": "Volver",
"back_to_login": "¿Volver al inicio de sesión?", "back_to_login": "¿Volver al inicio de sesión?",
"home": "Inicio", "home": "Inicio",
@ -84,9 +84,10 @@
"street_2": "Calle 2", "street_2": "Calle 2",
"action_failed": "Accion Fallida", "action_failed": "Accion Fallida",
"retry": "Procesar de nuevo", "retry": "Procesar de nuevo",
"choose_note": "Choose Note", "choose_note": "Elegir nota",
"no_note_found": "No Note Found", "no_note_found": "No se encontró ninguna nota",
"insert_note": "Insert Note" "insert_note": "Insertar una nota",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Seleccionar año", "select_year": "Seleccionar año",
@ -133,28 +134,28 @@
"compound_tax": "Impuesto compuesto" "compound_tax": "Impuesto compuesto"
}, },
"global_search": { "global_search": {
"search": "Search...", "search": "Buscar...",
"customers": "Clientes", "customers": "Clientes",
"users": "Users", "users": "Usuarios",
"no_results_found": "No Results Found" "no_results_found": "No se encontraron resultados"
}, },
"customers": { "customers": {
"title": "Clientes", "title": "Clientes",
"add_customer": "Agregar cliente", "add_customer": "Agregar cliente",
"contacts_list": "Lista de clientes", "contacts_list": "Lista de clientes",
"name": "Nombre", "name": "Nombre",
"mail": "Mail | Mails", "mail": "Correo | Correos",
"statement": "Statement", "statement": "Declaración",
"display_name": "Nombre para mostrar", "display_name": "Nombre para mostrar",
"primary_contact_name": "Nombre de contacto primario", "primary_contact_name": "Nombre de contacto primario",
"contact_name": "Nombre de contacto", "contact_name": "Nombre de contacto",
"amount_due": "Cantidad Debida", "amount_due": "Cantidad Debida",
"email": "Email", "email": "Correo electrónico",
"address": "Dirección", "address": "Dirección",
"phone": "Teléfono", "phone": "Teléfono",
"website": "Sitio web", "website": "Sitio web",
"overview": "Overview", "overview": "Descripción general",
"enable_portal": "Enable Portal", "enable_portal": "Habilitar Portal",
"country": "País", "country": "País",
"state": "Estado", "state": "Estado",
"city": "Ciudad", "city": "Ciudad",
@ -177,6 +178,8 @@
"copy_billing_address": "Copia de facturación", "copy_billing_address": "Copia de facturación",
"no_customers": "¡Aún no hay clientes!", "no_customers": "¡Aún no hay clientes!",
"no_customers_found": "¡No se encontraron clientes!", "no_customers_found": "¡No se encontraron clientes!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Esta sección contendrá la lista de clientes.", "list_of_customers": "Esta sección contendrá la lista de clientes.",
"primary_display_name": "Nombre de visualización principal", "primary_display_name": "Nombre de visualización principal",
"select_currency": "Seleccione el tipo de moneda", "select_currency": "Seleccione el tipo de moneda",
@ -200,6 +203,7 @@
"added_on": "Añadido", "added_on": "Añadido",
"price": "Precio", "price": "Precio",
"date_of_creation": "Fecha de creación", "date_of_creation": "Fecha de creación",
"not_selected": "No item selected",
"action": "Acción", "action": "Acción",
"add_item": "Añadir artículo", "add_item": "Añadir artículo",
"save_item": "Guardar artículo", "save_item": "Guardar artículo",
@ -253,7 +257,7 @@
"convert_to_invoice": "Convertir a factura", "convert_to_invoice": "Convertir a factura",
"mark_as_sent": "Marcar como enviado", "mark_as_sent": "Marcar como enviado",
"send_estimate": "Enviar presupuesto", "send_estimate": "Enviar presupuesto",
"resend_estimate": "Resend Estimate", "resend_estimate": "Reenviar estimado",
"record_payment": "Registro de pago", "record_payment": "Registro de pago",
"add_estimate": "Agregar presupuesto", "add_estimate": "Agregar presupuesto",
"save_estimate": "Guardar presupuesto", "save_estimate": "Guardar presupuesto",
@ -270,6 +274,7 @@
"required": "Se requiere campo" "required": "Se requiere campo"
}, },
"accepted": "Aceptado", "accepted": "Aceptado",
"rejected": "Rejected",
"sent": "Enviado", "sent": "Enviado",
"draft": "Borrador", "draft": "Borrador",
"declined": "Rechazado", "declined": "Rechazado",
@ -316,6 +321,9 @@
"all": "Todas", "all": "Todas",
"paid": "Pagada", "paid": "Pagada",
"unpaid": "No pagado", "unpaid": "No pagado",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CLIENTE", "customer": "CLIENTE",
"paid_status": "ESTADO PAGADO", "paid_status": "ESTADO PAGADO",
"ref_no": "NÚMERO DE REFERENCIA.", "ref_no": "NÚMERO DE REFERENCIA.",
@ -339,7 +347,7 @@
"notes": "Notas", "notes": "Notas",
"view": "Ver", "view": "Ver",
"send_invoice": "Enviar la factura", "send_invoice": "Enviar la factura",
"resend_invoice": "Resend Invoice", "resend_invoice": "Reenviar factura",
"invoice_template": "Plantilla de factura", "invoice_template": "Plantilla de factura",
"template": "Modelo", "template": "Modelo",
"mark_as_sent": "Marcar como enviada", "mark_as_sent": "Marcar como enviada",
@ -434,12 +442,14 @@
"update_payment": "Actualizar pago", "update_payment": "Actualizar pago",
"payment": "Pago | Pagos", "payment": "Pago | Pagos",
"no_payments": "¡Aún no hay pagos!", "no_payments": "¡Aún no hay pagos!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "¡No hay pagos equivalentes!", "no_matching_payments": "¡No hay pagos equivalentes!",
"list_of_payments": "Esta sección contendrá la lista de pagos.", "list_of_payments": "Esta sección contendrá la lista de pagos.",
"select_payment_mode": "Seleccionar modo de pago", "select_payment_mode": "Seleccionar modo de pago",
"confirm_mark_as_sent": "Este presupuesto se marcará como enviado", "confirm_mark_as_sent": "Este presupuesto se marcará como enviado",
"confirm_send_payment": "This payment will be sent via email to the customer", "confirm_send_payment": "Este pago se enviará por correo electrónico al cliente",
"send_payment_successfully": "Payment sent successfully", "send_payment_successfully": "Pago enviado correctamente",
"user_email_does_not_exist": "El email del usuario no existe", "user_email_does_not_exist": "El email del usuario no existe",
"something_went_wrong": "Algo fue mal", "something_went_wrong": "Algo fue mal",
"confirm_delete": "No podrá recuperar este pago | No podrá recuperar estos pagos", "confirm_delete": "No podrá recuperar este pago | No podrá recuperar estos pagos",
@ -463,6 +473,7 @@
"receipt": "Recibo", "receipt": "Recibo",
"amount": "Cantidad", "amount": "Cantidad",
"action": "Acción", "action": "Acción",
"not_selected": "Not selected",
"note": "Nota", "note": "Nota",
"category_id": "Categoria ID", "category_id": "Categoria ID",
"date": "Fecha de gastos", "date": "Fecha de gastos",
@ -494,7 +505,7 @@
} }
}, },
"login": { "login": {
"email": "Email", "email": "Correo electrónico",
"password": "Contraseña", "password": "Contraseña",
"forgot_password": "¿Olvidaste tu contraseña?", "forgot_password": "¿Olvidaste tu contraseña?",
"or_signIn_with": "o Inicia sesión con", "or_signIn_with": "o Inicia sesión con",
@ -505,33 +516,33 @@
"enter_email": "Escriba el correo electrónico", "enter_email": "Escriba el correo electrónico",
"enter_password": "Escriba la contraseña", "enter_password": "Escriba la contraseña",
"retype_password": "Reescriba la contraseña", "retype_password": "Reescriba la contraseña",
"login_placeholder": "mail@example.com" "login_placeholder": "correo@ejemplo.com"
}, },
"users": { "users": {
"title": "Users", "title": "Usuarios",
"users_list": "Users List", "users_list": "Lista de usuarios",
"name": "Nombre", "name": "Nombre",
"description": "Descripción", "description": "Descripción",
"added_on": "Añadido", "added_on": "Añadido",
"date_of_creation": "Fecha de creación", "date_of_creation": "Fecha de creación",
"action": "Acción", "action": "Acción",
"add_user": "Add User", "add_user": "Agregar usuario",
"save_user": "Save User", "save_user": "Guardar usuario",
"update_user": "Update User", "update_user": "Actualizar usuario",
"user": "User | Users", "user": "Usuario | Usuarios",
"add_new_user": "Add New User", "add_new_user": "Agregar Nuevo Usuario",
"new_user": "New User", "new_user": "Nuevo usuario",
"edit_user": "Edit User", "edit_user": "Editar usuario",
"no_users": "No users yet!", "no_users": "¡Aún no hay usuarios!",
"list_of_users": "This section will contain the list of users.", "list_of_users": "Esta sección contendrá la lista de usuarios.",
"email": "Email", "email": "Correo",
"phone": "Teléfono", "phone": "Teléfono",
"password": "Contraseña", "password": "Contraseña",
"user_attached_message": "No se puede eliminar un elemento que ya está en uso.", "user_attached_message": "No se puede eliminar un elemento que ya está en uso.",
"confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", "confirm_delete": "No podrá recuperar este Usuario | No podrá recuperar estos Usuarios",
"created_message": "User created successfully", "created_message": "Usuario creado satisfactoriamente",
"updated_message": "User updated successfully", "updated_message": "Usuario actualizado satisfactoriamente",
"deleted_message": "User deleted successfully | User deleted successfully" "deleted_message": "Usuario eliminado exitosamente | Usuario eliminado correctamente"
}, },
"reports": { "reports": {
"title": "Informe", "title": "Informe",
@ -604,10 +615,10 @@
"tax_types": "Tipos de impuestos", "tax_types": "Tipos de impuestos",
"expense_category": "Categorías de gastos", "expense_category": "Categorías de gastos",
"update_app": "Actualizar aplicación", "update_app": "Actualizar aplicación",
"backup": "Backup", "backup": "Copias de seguridad",
"file_disk": "File Disk", "file_disk": "Disco de archivo",
"custom_fields": "Campos Personalizados", "custom_fields": "Campos Personalizados",
"payment_modes": "Payment Modes", "payment_modes": "Modos de pago",
"notes": "Notas" "notes": "Notas"
}, },
"title": "Configuraciones", "title": "Configuraciones",
@ -674,7 +685,7 @@
}, },
"custom_fields": { "custom_fields": {
"title": "Campos Personalizados", "title": "Campos Personalizados",
"section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", "section_description": "Personalice sus facturas, estimaciones y recibos de pago en sus propios campos. Asegúrese de usar los siguientes campos añadidos en los formatos de dirección de la página de configuración de personalización.",
"add_custom_field": "Agregar campo personalizado", "add_custom_field": "Agregar campo personalizado",
"edit_custom_field": "Editar campo personalizado", "edit_custom_field": "Editar campo personalizado",
"field_name": "Nombre del campo", "field_name": "Nombre del campo",
@ -722,7 +733,7 @@
"address": "Dirección", "address": "Dirección",
"display_name": "Nombre para mostrar", "display_name": "Nombre para mostrar",
"primary_contact_name": "Nombre de contacto principal", "primary_contact_name": "Nombre de contacto principal",
"email": "Email", "email": "Correo electrónico",
"website": "Sitio web", "website": "Sitio web",
"name": "Nombre", "name": "Nombre",
"country": "País", "country": "País",
@ -740,41 +751,50 @@
"title": "Facturas", "title": "Facturas",
"notes": "Notas", "notes": "Notas",
"invoice_prefix": "Prefijo de las facturas", "invoice_prefix": "Prefijo de las facturas",
"default_invoice_email_body": "Default Invoice Email Body", "invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Cuerpo predeterminado del correo electrónico de la factura",
"invoice_settings": "Ajustes de facturas", "invoice_settings": "Ajustes de facturas",
"autogenerate_invoice_number": "Autogenerar número de factura", "autogenerate_invoice_number": "Autogenerar número de factura",
"invoice_setting_description": "Desactive esto, si no desea generar automáticamente números de factura cada vez que cree una nueva factura.", "invoice_setting_description": "Desactive esto, si no desea generar automáticamente números de factura cada vez que cree una nueva factura.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Introduzca el prefijo de factura", "enter_invoice_prefix": "Introduzca el prefijo de factura",
"terms_and_conditions": "Términos y Condiciones", "terms_and_conditions": "Términos y Condiciones",
"company_address_format": "Company Address Format", "company_address_format": "Formato de dirección de la empresa",
"shipping_address_format": "Shipping Address Format", "shipping_address_format": "Formato de la dirección de envío",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato de dirección de facturación",
"invoice_setting_updated": "Configuración de factura actualizada correctamente" "invoice_setting_updated": "Configuración de factura actualizada correctamente"
}, },
"estimates": { "estimates": {
"title": "Estimaciones", "title": "Estimaciones",
"estimate_prefix": "Prefijo de los presupuestos", "estimate_prefix": "Prefijo de los presupuestos",
"default_estimate_email_body": "Default Estimate Email Body", "estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Cuerpo predeterminado estimado del correo electrónico",
"estimate_settings": "Ajustes de presupuestos", "estimate_settings": "Ajustes de presupuestos",
"autogenerate_estimate_number": "Autogenerar número de presupuesto", "autogenerate_estimate_number": "Autogenerar número de presupuesto",
"estimate_setting_description": "Desactive esto, si no desea generar automáticamente números de presupuesto cada vez que cree un nuevo presupuesto.", "estimate_setting_description": "Desactive esto, si no desea generar automáticamente números de presupuesto cada vez que cree un nuevo presupuesto.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Introduzca el prefijo de presupuesto", "enter_estimate_prefix": "Introduzca el prefijo de presupuesto",
"estimate_setting_updated": "Configuración de presupuestos actualizada correctamente", "estimate_setting_updated": "Configuración de presupuestos actualizada correctamente",
"company_address_format": "Company Address Format", "company_address_format": "Formato de dirección de la empresa",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato de la dirección de facturación",
"shipping_address_format": "Shipping Address Format" "shipping_address_format": "Formato de dirección de envío"
}, },
"payments": { "payments": {
"title": "Pagos", "title": "Pagos",
"description": "Modes of transaction for payments", "description": "Modos de transacción de pagos",
"payment_prefix": "Prefijo de los pagos", "payment_prefix": "Prefijo de los pagos",
"default_payment_email_body": "Default Payment Email Body", "payment_number_length": "Payment number lenght",
"default_payment_email_body": "Cuerpo predeterminado del correo electrónico del pago",
"payment_settings": "Ajustes de pagos", "payment_settings": "Ajustes de pagos",
"autogenerate_payment_number": "Autogenerar número de pago", "autogenerate_payment_number": "Autogenerar número de pago",
"payment_setting_description": "Desactive esto, si no desea generar automáticamente números de pago cada vez que cree un nuevo pago.", "payment_setting_description": "Desactive esto, si no desea generar automáticamente números de pago cada vez que cree un nuevo pago.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Introduzca el prefijo de pago", "enter_payment_prefix": "Introduzca el prefijo de pago",
"payment_setting_updated": "Configuración de pagos actualizada correctamente", "payment_setting_updated": "Configuración de pagos actualizada correctamente",
"payment_modes": "Payment Modes", "payment_modes": "Modos de pago",
"add_payment_mode": "Agregar modo de pago", "add_payment_mode": "Agregar modo de pago",
"edit_payment_mode": "Editar modo de pago", "edit_payment_mode": "Editar modo de pago",
"mode_name": "Nombre del modo", "mode_name": "Nombre del modo",
@ -783,8 +803,8 @@
"payment_mode_confirm_delete": "No podrá recuperar este modo de pago", "payment_mode_confirm_delete": "No podrá recuperar este modo de pago",
"already_in_use": "El modo de pago ya está en uso", "already_in_use": "El modo de pago ya está en uso",
"deleted_message": "Modo de pago eliminado correctamente", "deleted_message": "Modo de pago eliminado correctamente",
"company_address_format": "Company Address Format", "company_address_format": "Formato de dirección de la empresa",
"from_customer_address_format": "From Customer Address Format" "from_customer_address_format": "Desde el formato de dirección del cliente"
}, },
"items": { "items": {
"title": "Artículos", "title": "Artículos",
@ -800,24 +820,24 @@
}, },
"notes": { "notes": {
"title": "Notas", "title": "Notas",
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "description": "Ahorre tiempo creando notas y reutilizándolas en sus facturas, cálculos y pagos.",
"notes": "Notas", "notes": "Notas",
"type": "Tipo", "type": "Tipo",
"add_note": "Add Note", "add_note": "Agregar nota",
"add_new_note": "Add New Note", "add_new_note": "Agregar nueva nota",
"name": "Nombre", "name": "Nombre",
"edit_note": "Edit Note", "edit_note": "Editar nota",
"note_added": "Note added successfully", "note_added": "Nota agregada correctamente",
"note_updated": "Note Updated successfully", "note_updated": "Nota actualizada correctamente",
"note_confirm_delete": "You will not be able to recover this Note", "note_confirm_delete": "No podrá recuperar esta nota",
"already_in_use": "Note is already in use", "already_in_use": "Nota ya está en uso",
"deleted_message": "Note deleted successfully" "deleted_message": "Nota eliminada correctamente"
} }
}, },
"account_settings": { "account_settings": {
"profile_picture": "Foto de perfil", "profile_picture": "Foto de perfil",
"name": "Nombre", "name": "Nombre",
"email": "Email", "email": "Correo electrónico",
"password": "Contraseña", "password": "Contraseña",
"confirm_password": "Confirmar contraseña", "confirm_password": "Confirmar contraseña",
"account_settings": "Configuraciones de la cuenta", "account_settings": "Configuraciones de la cuenta",
@ -827,7 +847,7 @@
}, },
"user_profile": { "user_profile": {
"name": "Nombre", "name": "Nombre",
"email": "Email", "email": "Correo electrónico",
"password": "Contraseña", "password": "Contraseña",
"confirm_password": "Confirmar contraseña" "confirm_password": "Confirmar contraseña"
}, },
@ -879,7 +899,7 @@
}, },
"preferences": { "preferences": {
"currency": "Moneda", "currency": "Moneda",
"default_language": "Default Language", "default_language": "Idioma predeterminado",
"time_zone": "Zona horaria", "time_zone": "Zona horaria",
"fiscal_year": "Año financiero", "fiscal_year": "Año financiero",
"date_format": "Formato de fecha", "date_format": "Formato de fecha",
@ -892,7 +912,7 @@
"updated_message": "Preferencias actualizadas exitosamente", "updated_message": "Preferencias actualizadas exitosamente",
"select_language": "seleccione el idioma", "select_language": "seleccione el idioma",
"select_time_zone": "selecciona la zona horaria", "select_time_zone": "selecciona la zona horaria",
"select_date_format": "Select Date Format", "select_date_format": "Seleccionar formato de fecha",
"select_financial_year": "seleccione año financiero" "select_financial_year": "seleccione año financiero"
}, },
"update_app": { "update_app": {
@ -901,7 +921,7 @@
"check_update": "Buscar actualizaciones", "check_update": "Buscar actualizaciones",
"avail_update": "Nueva actualización disponible", "avail_update": "Nueva actualización disponible",
"next_version": "Próxima versión", "next_version": "Próxima versión",
"requirements": "Requirements", "requirements": "Requisitos",
"update": "Actualizar", "update": "Actualizar",
"update_progress": "Actualización en progreso...", "update_progress": "Actualización en progreso...",
"progress_text": "Solo tomará unos minutos. No actualice la pantalla ni cierre la ventana antes de que finalice la actualización.", "progress_text": "Solo tomará unos minutos. No actualice la pantalla ni cierre la ventana antes de que finalice la actualización.",
@ -911,97 +931,99 @@
"download_zip_file": "Descargar archivo ZIP", "download_zip_file": "Descargar archivo ZIP",
"unzipping_package": "Descomprimir paquete", "unzipping_package": "Descomprimir paquete",
"copying_files": "Copiando documentos", "copying_files": "Copiando documentos",
"deleting_files": "Deleting Unused files",
"running_migrations": "Ejecutar migraciones", "running_migrations": "Ejecutar migraciones",
"finishing_update": "Actualización final", "finishing_update": "Actualización final",
"update_failed": "Actualización fallida", "update_failed": "Actualización fallida",
"update_failed_text": "¡Lo siento! Su actualización falló el: {step} paso" "update_failed_text": "¡Lo siento! Su actualización falló el: {step} paso"
}, },
"backup": { "backup": {
"title": "Backup | Backups", "title": "Copia de seguridad | Copias de seguridad",
"description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", "description": "La copia de seguridad es un archivo comprimido zip que contiene todos los archivos en los directorios que especifiques junto con tu base de datos",
"new_backup": "Add New Backup", "new_backup": "Agregar nueva copia de seguridad",
"create_backup": "Create Backup", "create_backup": "Crear copia de seguridad",
"select_backup_type": "Select Backup Type", "select_backup_type": "Seleccione Tipo de Copia de Seguridad",
"backup_confirm_delete": "You will not be able to recover this Backup", "backup_confirm_delete": "No podrá recuperar esta copia de seguridad",
"path": "path", "path": "ruta",
"new_disk": "New Disk", "new_disk": "Nuevo Disco",
"created_at": "created at", "created_at": "creado el",
"size": "size", "size": "tamaño",
"dropbox": "dropbox", "dropbox": "dropbox",
"local": "local", "local": "local",
"healthy": "healthy", "healthy": "saludable",
"amount_of_backups": "amount of backups", "amount_of_backups": "cantidad de copias de seguridad",
"newest_backups": "newest backups", "newest_backups": "copias de seguridad más recientes",
"used_storage": "used storage", "used_storage": "almacenamiento utilizado",
"select_disk": "Select Disk", "select_disk": "Seleccionar Disco",
"action": "Acción", "action": "Acción",
"deleted_message": "Backup deleted successfully", "deleted_message": "Copia de seguridad eliminada exitosamente",
"created_message": "Backup created successfully", "created_message": "Copia de seguridad creada satisfactoriamente",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credencial no válida del disco seleccionado"
}, },
"disk": { "disk": {
"title": "File Disk | File Disks", "title": "Disco de archivos | Discos de archivos",
"description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", "description": "Por defecto, Crater utilizará su disco local para guardar copias de seguridad, avatar y otros archivos de imagen. Puede configurar varios controladores de disco como DigitalOcean, S3 y Dropbox según sus preferencias.",
"created_at": "created at", "created_at": "creado el",
"dropbox": "dropbox", "dropbox": "dropbox",
"name": "Nombre", "name": "Nombre",
"driver": "Driver", "driver": "Controlador",
"disk_type": "Tipo", "disk_type": "Tipo",
"disk_name": "Disk Name", "disk_name": "Nombre del disco",
"new_disk": "Add New Disk", "new_disk": "Agregar nuevo disco",
"filesystem_driver": "Filesystem Driver", "filesystem_driver": "Controlador del sistema de archivos",
"local_driver": "local Driver", "local_driver": "controlador local",
"local_root": "local Root", "local_root": "raíz local",
"public_driver": "Public Driver", "public_driver": "Controlador público",
"public_root": "Public Root", "public_root": "Raíz pública",
"public_url": "Public URL", "public_url": "URL pública",
"public_visibility": "Public Visibility", "public_visibility": "Visibilidad pública",
"media_driver": "Media Driver", "media_driver": "Controlador multimedia",
"media_root": "Media Root", "media_root": "Raíz multimedia",
"aws_driver": "AWS Driver", "aws_driver": "Controlador AWS",
"aws_key": "AWS Key", "aws_key": "Clave AWS",
"aws_secret": "AWS Secret", "aws_secret": "Secreto AWS",
"aws_region": "AWS Region", "aws_region": "Región de AWS",
"aws_bucket": "AWS Bucket", "aws_bucket": "Cubo AWS",
"aws_root": "AWS Root", "aws_root": "Raíz AWS",
"do_spaces_type": "Do Spaces type", "do_spaces_type": "Hacer Espacios tipo",
"do_spaces_key": "Do Spaces key", "do_spaces_key": "Disponer espacios",
"do_spaces_secret": "Do Spaces Secret", "do_spaces_secret": "Disponer espacios secretos",
"do_spaces_region": "Do Spaces Region", "do_spaces_region": "Disponer región de espacios",
"do_spaces_bucket": "Do Spaces Bucket", "do_spaces_bucket": "Disponer espacios",
"do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_endpoint": "Disponer espacios extremos",
"do_spaces_root": "Do Spaces Root", "do_spaces_root": "Disponer espacios en la raíz",
"dropbox_type": "Dropbox Type", "dropbox_type": "Tipo de Dropbox",
"dropbox_token": "Dropbox Token", "dropbox_token": "Token de DropBox",
"dropbox_key": "Dropbox Key", "dropbox_key": "Clave Dropbox",
"dropbox_secret": "Dropbox Secret", "dropbox_secret": "Dropbox Secret",
"dropbox_app": "Dropbox App", "dropbox_app": "Aplicación Dropbox",
"dropbox_root": "Dropbox Root", "dropbox_root": "Raíz Dropbox",
"default_driver": "Default Driver", "default_driver": "Controlador por defecto",
"is_default": "IS DEFAULT", "is_default": "ES PREDETERMINADO",
"set_default_disk": "Set Default Disk", "set_default_disk": "Establecer disco predeterminado",
"success_set_default_disk": "Disk set as default successfully", "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"save_pdf_to_disk": "Save PDFs to Disk", "success_set_default_disk": "Disco establecido correctamente como predeterminado",
"disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", "save_pdf_to_disk": "Guardar PDFs a disco",
"select_disk": "Select Disk", "disk_setting_description": " Habilite esto, si desea guardar automáticamente una copia en formato pdf de cada factura, cálculo y recibo de pago en su disco predeterminado. Al activar esta opción, se reducirá el tiempo de carga al visualizar los archivos PDFs.",
"disk_settings": "Disk Settings", "select_disk": "Seleccionar Disco",
"confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", "disk_settings": "Configuración del disco",
"confirm_delete": "Los archivos y carpetas existentes en el disco especificado no se verán afectados, pero su configuración de disco será eliminada de Crater",
"action": "Acción", "action": "Acción",
"edit_file_disk": "Edit File Disk", "edit_file_disk": "Editar disco de ficheros",
"success_create": "Disk added successfully", "success_create": "Disco añadido satisfactoriamente",
"success_update": "Disk updated successfully", "success_update": "Disco actualizado satisfactoriamente",
"error": "Disk addition failed", "error": "Error al añadir disco",
"deleted_message": "File Disk deleted successfully", "deleted_message": "Disco de archivo borrado correctamente",
"disk_variables_save_successfully": "Disk Configured Successfully", "disk_variables_save_successfully": "Disco configurado correctamente",
"disk_variables_save_error": "Disk configuration failed.", "disk_variables_save_error": "La configuración del disco ha fallado.",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credencial no válida del disco seleccionado"
} }
}, },
"wizard": { "wizard": {
"account_info": "Información de la cuenta", "account_info": "Información de la cuenta",
"account_info_desc": "Los detalles a continuación se utilizarán para crear la cuenta principal de administrador. También puede cambiar los detalles en cualquier momento después de iniciar sesión.", "account_info_desc": "Los detalles a continuación se utilizarán para crear la cuenta principal de administrador. También puede cambiar los detalles en cualquier momento después de iniciar sesión.",
"name": "Nombre", "name": "Nombre",
"email": "Email", "email": "Correo",
"password": "Contraseña", "password": "Contraseña",
"confirm_password": "Confirmar contraseña", "confirm_password": "Confirmar contraseña",
"save_cont": "Guardar y continuar", "save_cont": "Guardar y continuar",
@ -1037,10 +1059,10 @@
"port": "Puerto de la base de datos", "port": "Puerto de la base de datos",
"password": "Contraseña de la base de datos", "password": "Contraseña de la base de datos",
"app_url": "URL de la aplicación", "app_url": "URL de la aplicación",
"app_domain": "App Domain", "app_domain": "Dominio",
"username": "Nombre de usuario de la base de datos", "username": "Nombre de usuario de la base de datos",
"db_name": "Nombre de la base de datos", "db_name": "Nombre de la base de datos",
"db_path": "Database Path", "db_path": "Ruta de la base de datos",
"desc": "Cree una base de datos en su servidor y establezca las credenciales utilizando el siguiente formulario." "desc": "Cree una base de datos en su servidor y establezca las credenciales utilizando el siguiente formulario."
}, },
"permissions": { "permissions": {
@ -1101,7 +1123,7 @@
"email_incorrect": "Email incorrecto.", "email_incorrect": "Email incorrecto.",
"email_already_taken": "Este email ya está en uso", "email_already_taken": "Este email ya está en uso",
"email_does_not_exist": "El usuario con el correo electrónico dado no existe", "email_does_not_exist": "El usuario con el correo electrónico dado no existe",
"item_unit_already_taken": "This item unit name has already been taken", "item_unit_already_taken": "El nombre de la unidad ya está en uso",
"payment_mode_already_taken": "El modo de pago ya ha sido tomado", "payment_mode_already_taken": "El modo de pago ya ha sido tomado",
"send_reset_link": "Enviar enlace de restablecimiento", "send_reset_link": "Enviar enlace de restablecimiento",
"not_yet": "¿Aún no? Envíalo de nuevo", "not_yet": "¿Aún no? Envíalo de nuevo",
@ -1122,23 +1144,24 @@
"amount_maxlength": "La cantidad no debe ser mayor de 20 dígitos.", "amount_maxlength": "La cantidad no debe ser mayor de 20 dígitos.",
"amount_minvalue": "La cantidad debe ser mayor que 0 dígitos", "amount_minvalue": "La cantidad debe ser mayor que 0 dígitos",
"description_maxlength": "La descripción no debe tener más de 255 caracteres.", "description_maxlength": "La descripción no debe tener más de 255 caracteres.",
"subject_maxlength": "Subject should not be greater than 100 characters.", "subject_maxlength": "El asunto no debe tener más de 100 caracteres.",
"message_maxlength": "Message should not be greater than 255 characters.", "message_maxlength": "El mensaje no debe tener más de 255 caracteres.",
"maximum_options_error": "Máximo de {max} opciones seleccionadas. Primero elimine una opción seleccionada para seleccionar otra.", "maximum_options_error": "Máximo de {max} opciones seleccionadas. Primero elimine una opción seleccionada para seleccionar otra.",
"notes_maxlength": "Las notas no deben tener más de 255 caracteres.", "notes_maxlength": "Las notas no deben tener más de 255 caracteres.",
"address_maxlength": "La dirección no debe tener más de 255 caracteres.", "address_maxlength": "La dirección no debe tener más de 255 caracteres.",
"ref_number_maxlength": "El número de referencia no debe tener más de 255 caracteres.", "ref_number_maxlength": "El número de referencia no debe tener más de 255 caracteres.",
"prefix_maxlength": "El prefijo no debe tener más de 5 caracteres.", "prefix_maxlength": "El prefijo no debe tener más de 5 caracteres.",
"something_went_wrong": "Algo fue mal" "something_went_wrong": "Algo fue mal",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Presupuestar", "pdf_estimate_label": "Presupuestar",
"pdf_estimate_number": "Número de Presupuesto", "pdf_estimate_number": "Número de Presupuesto",
"pdf_estimate_date": "Fecha presupuesto", "pdf_estimate_date": "Fecha presupuesto",
"pdf_estimate_expire_date": "Expiry date", "pdf_estimate_expire_date": "Fecha de caducidad",
"pdf_invoice_label": "Factura", "pdf_invoice_label": "Factura",
"pdf_invoice_number": "Numero de factura", "pdf_invoice_number": "Numero de factura",
"pdf_invoice_date": "Fecha de la factura", "pdf_invoice_date": "Fecha de la factura",
"pdf_invoice_due_date": "Due date", "pdf_invoice_due_date": "Fecha final",
"pdf_notes": "Notas", "pdf_notes": "Notas",
"pdf_items_label": "Artículos", "pdf_items_label": "Artículos",
"pdf_quantity_label": "Cantidad", "pdf_quantity_label": "Cantidad",
@ -1147,24 +1170,28 @@
"pdf_amount_label": "Cantidad", "pdf_amount_label": "Cantidad",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Subtotal",
"pdf_total": "Total", "pdf_total": "Total",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_label": "Payment",
"pdf_payment_date": "Payment Date", "pdf_payment_receipt_label": "RECIBO DE PAGO",
"pdf_payment_date": "Fecha de pago",
"pdf_payment_number": "Numero de pago", "pdf_payment_number": "Numero de pago",
"pdf_payment_mode": "Modo de pago", "pdf_payment_mode": "Modo de pago",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "Monto Recibido",
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "INFORME DE GASTOS",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "GASTO TOTAL",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "INFORME PERDIDAS & GANANCIAS",
"pdf_income_label": "INCOME", "pdf_sales_customers_label": "Sales Customer Report",
"pdf_net_profit_label": "NET PROFIT", "pdf_sales_items_label": "Sales Item Report",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_tax_summery_label": "Tax Summary Report",
"pdf_total_sales_label": "TOTAL SALES", "pdf_income_label": "INGRESO",
"pdf_item_sales_label": "Sales Report: By Item", "pdf_net_profit_label": "GANANCIA NETA",
"pdf_tax_report_label": "TAX REPORT", "pdf_customer_sales_report": "Informe de ventas: Por cliente",
"pdf_total_tax_label": "TOTAL TAX", "pdf_total_sales_label": "VENTAS TOTALES",
"pdf_item_sales_label": "Informe de ventas: por artículo",
"pdf_tax_report_label": "INFORME DE IMPUESTOS",
"pdf_total_tax_label": "TOTAL IMPUESTOS",
"pdf_tax_types_label": "Tipos de impuestos", "pdf_tax_types_label": "Tipos de impuestos",
"pdf_expenses_label": "Gastos", "pdf_expenses_label": "Gastos",
"pdf_bill_to": "Cobrar a,", "pdf_bill_to": "Cobrar a,",
"pdf_ship_to": "Enviar a,", "pdf_ship_to": "Enviar a,",
"pdf_received_from": "Received from:" "pdf_received_from": "Recibido desde:"
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,8 @@
"retry": "Retry", "retry": "Retry",
"choose_note": "Choose Note", "choose_note": "Choose Note",
"no_note_found": "No Note Found", "no_note_found": "No Note Found",
"insert_note": "Insert Note" "insert_note": "Insert Note",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Select year", "select_year": "Select year",
@ -177,6 +178,8 @@
"copy_billing_address": "Copy from Billing", "copy_billing_address": "Copy from Billing",
"no_customers": "No customers yet!", "no_customers": "No customers yet!",
"no_customers_found": "No customers found!", "no_customers_found": "No customers found!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "This section will contain the list of customers.", "list_of_customers": "This section will contain the list of customers.",
"primary_display_name": "Primary Display Name", "primary_display_name": "Primary Display Name",
"select_currency": "Select currency", "select_currency": "Select currency",
@ -200,6 +203,7 @@
"added_on": "Added On", "added_on": "Added On",
"price": "Price", "price": "Price",
"date_of_creation": "Date Of Creation", "date_of_creation": "Date Of Creation",
"not_selected": "No item selected",
"action": "Action", "action": "Action",
"add_item": "Add Item", "add_item": "Add Item",
"save_item": "Save Item", "save_item": "Save Item",
@ -270,6 +274,7 @@
"required": "Field is required" "required": "Field is required"
}, },
"accepted": "Accepted", "accepted": "Accepted",
"rejected": "Rejected",
"sent": "Sent", "sent": "Sent",
"draft": "Draft", "draft": "Draft",
"declined": "Declined", "declined": "Declined",
@ -316,6 +321,9 @@
"all": "All", "all": "All",
"paid": "Paid", "paid": "Paid",
"unpaid": "Unpaid", "unpaid": "Unpaid",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CUSTOMER", "customer": "CUSTOMER",
"paid_status": "PAID STATUS", "paid_status": "PAID STATUS",
"ref_no": "REF NO.", "ref_no": "REF NO.",
@ -434,6 +442,8 @@
"update_payment": "Update Payment", "update_payment": "Update Payment",
"payment": "Payment | Payments", "payment": "Payment | Payments",
"no_payments": "No payments yet!", "no_payments": "No payments yet!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "There are no matching payments!", "no_matching_payments": "There are no matching payments!",
"list_of_payments": "This section will contain the list of payments.", "list_of_payments": "This section will contain the list of payments.",
"select_payment_mode": "Select payment mode", "select_payment_mode": "Select payment mode",
@ -463,6 +473,7 @@
"receipt": "Receipt", "receipt": "Receipt",
"amount": "Amount", "amount": "Amount",
"action": "Action", "action": "Action",
"not_selected": "Not selected",
"note": "Note", "note": "Note",
"category_id": "Category Id", "category_id": "Category Id",
"date": "Date", "date": "Date",
@ -740,10 +751,13 @@
"title": "Invoices", "title": "Invoices",
"notes": "Notes", "notes": "Notes",
"invoice_prefix": "Invoice Prefix", "invoice_prefix": "Invoice Prefix",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Default Invoice Email Body", "default_invoice_email_body": "Default Invoice Email Body",
"invoice_settings": "Invoice Settings", "invoice_settings": "Invoice Settings",
"autogenerate_invoice_number": "Auto-generate Invoice Number", "autogenerate_invoice_number": "Auto-generate Invoice Number",
"invoice_setting_description": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.", "invoice_setting_description": "Disable this, If you don't wish to auto-generate invoice numbers each time you create a new invoice.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Enter invoice prefix", "enter_invoice_prefix": "Enter invoice prefix",
"terms_and_conditions": "Terms and Conditions", "terms_and_conditions": "Terms and Conditions",
"company_address_format": "Company Address Format", "company_address_format": "Company Address Format",
@ -754,10 +768,13 @@
"estimates": { "estimates": {
"title": "Estimates", "title": "Estimates",
"estimate_prefix": "Estimate Prefix", "estimate_prefix": "Estimate Prefix",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Default Estimate Email Body", "default_estimate_email_body": "Default Estimate Email Body",
"estimate_settings": "Estimate Settings", "estimate_settings": "Estimate Settings",
"autogenerate_estimate_number": "Auto-generate Estimate Number", "autogenerate_estimate_number": "Auto-generate Estimate Number",
"estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.", "estimate_setting_description": "Disable this, If you don't wish to auto-generate estimate numbers each time you create a new estimate.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Enter estmiate prefix", "enter_estimate_prefix": "Enter estmiate prefix",
"estimate_setting_updated": "Estimate Setting updated successfully", "estimate_setting_updated": "Estimate Setting updated successfully",
"company_address_format": "Company Address Format", "company_address_format": "Company Address Format",
@ -768,10 +785,13 @@
"title": "Payments", "title": "Payments",
"description": "Modes of transaction for payments", "description": "Modes of transaction for payments",
"payment_prefix": "Payment Prefix", "payment_prefix": "Payment Prefix",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "Default Payment Email Body", "default_payment_email_body": "Default Payment Email Body",
"payment_settings": "Payment Settings", "payment_settings": "Payment Settings",
"autogenerate_payment_number": "Auto-generate Payment Number", "autogenerate_payment_number": "Auto-generate Payment Number",
"payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.", "payment_setting_description": "Disable this, If you don't wish to auto-generate payment numbers each time you create a new payment.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Enter Payment Prefix", "enter_payment_prefix": "Enter Payment Prefix",
"payment_setting_updated": "Payment Setting updated successfully", "payment_setting_updated": "Payment Setting updated successfully",
"payment_modes": "Payment Modes", "payment_modes": "Payment Modes",
@ -911,6 +931,7 @@
"download_zip_file": "Download ZIP file", "download_zip_file": "Download ZIP file",
"unzipping_package": "Unzipping Package", "unzipping_package": "Unzipping Package",
"copying_files": "Copying Files", "copying_files": "Copying Files",
"deleting_files": "Deleting Unused files",
"running_migrations": "Running Migrations", "running_migrations": "Running Migrations",
"finishing_update": "Finishing Update", "finishing_update": "Finishing Update",
"update_failed": "Update Failed", "update_failed": "Update Failed",
@ -1130,7 +1151,8 @@
"address_maxlength": "Address should not be greater than 255 characters.", "address_maxlength": "Address should not be greater than 255 characters.",
"ref_number_maxlength": "Ref Number should not be greater than 255 characters.", "ref_number_maxlength": "Ref Number should not be greater than 255 characters.",
"prefix_maxlength": "Prefix should not be greater than 5 characters.", "prefix_maxlength": "Prefix should not be greater than 5 characters.",
"something_went_wrong": "something went wrong" "something_went_wrong": "something went wrong",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Estimate", "pdf_estimate_label": "Estimate",
"pdf_estimate_number": "Estimate Number", "pdf_estimate_number": "Estimate Number",
@ -1148,6 +1170,7 @@
"pdf_amount_label": "Amount", "pdf_amount_label": "Amount",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Subtotal",
"pdf_total": "Total", "pdf_total": "Total",
"pdf_payment_label": "Payment",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_receipt_label": "PAYMENT RECEIPT",
"pdf_payment_date": "Payment Date", "pdf_payment_date": "Payment Date",
"pdf_payment_number": "Payment Number", "pdf_payment_number": "Payment Number",
@ -1156,6 +1179,9 @@
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "EXPENSES REPORT",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "TOTAL EXPENSE",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "PROFIT & LOSS REPORT",
"pdf_sales_customers_label": "Sales Customer Report",
"pdf_sales_items_label": "Sales Item Report",
"pdf_tax_summery_label": "Tax Summary Report",
"pdf_income_label": "INCOME", "pdf_income_label": "INCOME",
"pdf_net_profit_label": "NET PROFIT", "pdf_net_profit_label": "NET PROFIT",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_customer_sales_report": "Sales Report: By Customer",

View File

@ -5,29 +5,38 @@ import fr from './fr.json'
import es from './es.json' import es from './es.json'
import ar from './ar.json' import ar from './ar.json'
import de from './de.json' import de from './de.json'
import ja from './ja.json'
import pt_BR from './pt-br.json' import pt_BR from './pt-br.json'
import it from './it.json' import it from './it.json'
import sr from './sr.json' import sr from './sr.json'
import nl from './nl.json' import nl from './nl.json'
import ko from './ko.json'
import lv from './lv.json' import lv from './lv.json'
import sv from './sv.json' import sv from './sv.json'
import sk from './sk.json'
import vi from './vi.json'
Vue.use(VueI18n) Vue.use(VueI18n)
const i18n = new VueI18n({ const i18n = new VueI18n({
locale: 'en', locale: 'en',
fallbackLocale: 'en',
messages: { messages: {
en, en,
fr, fr,
es, es,
ar, ar,
de, de,
ja,
pt_BR, pt_BR,
it, it,
sr, sr,
nl, nl,
ko,
lv, lv,
sv, sv,
sk,
vi,
}, },
}) })

View File

@ -1,28 +1,28 @@
{ {
"navigation": { "navigation": {
"dashboard": "Dashboard", "dashboard": "Pannello di controllo",
"customers": "Clienti", "customers": "Clienti",
"items": "Commesse", "items": "Commesse",
"invoices": "Fatture", "invoices": "Fatture",
"expenses": "Spese", "expenses": "Spese",
"estimates": "Preventivi", "estimates": "Preventivi",
"payments": "Pagamenti", "payments": "Pagamenti",
"reports": "Reports", "reports": "Rapporti",
"settings": "Configurazione", "settings": "Configurazione",
"logout": "Logout", "logout": "Disconnessione",
"users": "Users" "users": "Utenti"
}, },
"general": { "general": {
"add_company": "Add Company", "add_company": "Aggiungi azienda",
"view_pdf": "Vedi PDF", "view_pdf": "Vedi PDF",
"copy_pdf_url": "Copy PDF Url", "copy_pdf_url": "Copia URL PDF",
"download_pdf": "Scarica PDF", "download_pdf": "Scarica PDF",
"save": "Salva", "save": "Salva",
"create": "Create", "create": "Crea",
"cancel": "Elimina", "cancel": "Elimina",
"update": "Aggiorna", "update": "Aggiorna",
"deselect": "Deseleziona", "deselect": "Deseleziona",
"download": "Download", "download": "Scarica",
"from_date": "Dalla Data", "from_date": "Dalla Data",
"to_date": "Alla Data", "to_date": "Alla Data",
"from": "Da", "from": "Da",
@ -33,7 +33,7 @@
"subject": "Oggetto", "subject": "Oggetto",
"body": "Corpo", "body": "Corpo",
"message": "Messaggio", "message": "Messaggio",
"send": "Send", "send": "Invia",
"go_back": "Torna indietro", "go_back": "Torna indietro",
"back_to_login": "Torna al Login?", "back_to_login": "Torna al Login?",
"home": "Home", "home": "Home",
@ -43,7 +43,7 @@
"view": "Visualizza", "view": "Visualizza",
"add_new_item": "Aggiungi nuova Commessa", "add_new_item": "Aggiungi nuova Commessa",
"clear_all": "Pulisci tutto", "clear_all": "Pulisci tutto",
"showing": "Showing", "showing": "Visualizzo",
"of": "di", "of": "di",
"actions": "Azioni", "actions": "Azioni",
"subtotal": "SUBTOTALE", "subtotal": "SUBTOTALE",
@ -66,11 +66,11 @@
"powered_by": "Prodotto da", "powered_by": "Prodotto da",
"bytefury": "Bytefury", "bytefury": "Bytefury",
"select_a_status": "Seleziona uno Stato", "select_a_status": "Seleziona uno Stato",
"select_a_tax": "Seleziona una Tassa", "select_a_tax": "Seleziona imposta",
"search": "Cerca", "search": "Cerca",
"are_you_sure": "Sei sicuro/a?", "are_you_sure": "Sei sicuro/a?",
"list_is_empty": "La lista è vuota.", "list_is_empty": "La lista è vuota.",
"no_tax_found": "Nessuna Tassa trovata!", "no_tax_found": "Nessuna imposta trovata!",
"four_zero_four": "404", "four_zero_four": "404",
"you_got_lost": "Hoops! Ti sei perso", "you_got_lost": "Hoops! Ti sei perso",
"go_home": "Vai alla Home", "go_home": "Vai alla Home",
@ -83,10 +83,11 @@
"street_1": "Indirizzo 1", "street_1": "Indirizzo 1",
"street_2": "Indirizzo 2", "street_2": "Indirizzo 2",
"action_failed": "Errore", "action_failed": "Errore",
"retry": "Retry", "retry": "Riprova",
"choose_note": "Choose Note", "choose_note": "Scegli Nota",
"no_note_found": "No Note Found", "no_note_found": "Nessuna Nota Trovata",
"insert_note": "Insert Note" "insert_note": "Inserisci Nota",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Seleziona anno", "select_year": "Seleziona anno",
@ -130,13 +131,13 @@
"name": "Nome", "name": "Nome",
"description": "Descrizione", "description": "Descrizione",
"percent": "Percento", "percent": "Percento",
"compound_tax": "Tassa composta" "compound_tax": "Imposta composta"
}, },
"global_search": { "global_search": {
"search": "Search...", "search": "Cerca...",
"customers": "Clienti", "customers": "Clienti",
"users": "Users", "users": "Utenti",
"no_results_found": "No Results Found" "no_results_found": "Nessun Risultato Trovato"
}, },
"customers": { "customers": {
"title": "Clienti", "title": "Clienti",
@ -144,8 +145,8 @@
"contacts_list": "Lista clienti", "contacts_list": "Lista clienti",
"name": "Nome", "name": "Nome",
"mail": "Mail | Mails", "mail": "Mail | Mails",
"statement": "Statement", "statement": "Dichiarazione",
"display_name": "Mostra nome", "display_name": "Nome Visibile",
"primary_contact_name": "Riferimento", "primary_contact_name": "Riferimento",
"contact_name": "Nome Contatto", "contact_name": "Nome Contatto",
"amount_due": "Ammontare dovuto", "amount_due": "Ammontare dovuto",
@ -153,10 +154,10 @@
"address": "Indirizzo", "address": "Indirizzo",
"phone": "Telefono", "phone": "Telefono",
"website": "Sito web", "website": "Sito web",
"overview": "Overview", "overview": "Panoramica",
"enable_portal": "Enable Portal", "enable_portal": "Abilita Portale",
"country": "Paese", "country": "Paese",
"state": "Stato", "state": "Provincia",
"city": "Città", "city": "Città",
"zip_code": "Codice Postale", "zip_code": "Codice Postale",
"added_on": "Aggiunto il", "added_on": "Aggiunto il",
@ -177,6 +178,8 @@
"copy_billing_address": "Copia da Fatturazione", "copy_billing_address": "Copia da Fatturazione",
"no_customers": "Ancora nessun Cliente!", "no_customers": "Ancora nessun Cliente!",
"no_customers_found": "Nessun cliente trovato!", "no_customers_found": "Nessun cliente trovato!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Qui ci sarà la lista dei tuoi clienti", "list_of_customers": "Qui ci sarà la lista dei tuoi clienti",
"primary_display_name": "Mostra il Nome Principale", "primary_display_name": "Mostra il Nome Principale",
"select_currency": "Selezione Valùta", "select_currency": "Selezione Valùta",
@ -200,6 +203,7 @@
"added_on": "Aggiunto il", "added_on": "Aggiunto il",
"price": "Prezzo", "price": "Prezzo",
"date_of_creation": "Data di creazione", "date_of_creation": "Data di creazione",
"not_selected": "No item selected",
"action": "Azione", "action": "Azione",
"add_item": "Aggiungi Commessa", "add_item": "Aggiungi Commessa",
"save_item": "Salva", "save_item": "Salva",
@ -253,7 +257,7 @@
"convert_to_invoice": "Converti in Fattura", "convert_to_invoice": "Converti in Fattura",
"mark_as_sent": "Segna come Inviata", "mark_as_sent": "Segna come Inviata",
"send_estimate": "Invia preventivo", "send_estimate": "Invia preventivo",
"resend_estimate": "Resend Estimate", "resend_estimate": "Reinvia Preventivo",
"record_payment": "Registra Pagamento", "record_payment": "Registra Pagamento",
"add_estimate": "Aggiungi Preventivo", "add_estimate": "Aggiungi Preventivo",
"save_estimate": "Salva Preventivo", "save_estimate": "Salva Preventivo",
@ -270,6 +274,7 @@
"required": "Campo obbligatorio" "required": "Campo obbligatorio"
}, },
"accepted": "Accettato", "accepted": "Accettato",
"rejected": "Rejected",
"sent": "Inviato", "sent": "Inviato",
"draft": "Bozza", "draft": "Bozza",
"declined": "Rifiutato", "declined": "Rifiutato",
@ -315,7 +320,10 @@
"years": "{years} Anno", "years": "{years} Anno",
"all": "Tutti", "all": "Tutti",
"paid": "Pagato", "paid": "Pagato",
"unpaid": "Insoluto", "unpaid": "Insoluta",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CLIENTE", "customer": "CLIENTE",
"paid_status": "STATO DI PAGAMENTO", "paid_status": "STATO DI PAGAMENTO",
"ref_no": "RIF N.", "ref_no": "RIF N.",
@ -339,7 +347,7 @@
"notes": "Note", "notes": "Note",
"view": "Vedi", "view": "Vedi",
"send_invoice": "Invia Fattura", "send_invoice": "Invia Fattura",
"resend_invoice": "Resend Invoice", "resend_invoice": "Reinvia Fattura",
"invoice_template": "Modello Fattura", "invoice_template": "Modello Fattura",
"template": "Modello", "template": "Modello",
"mark_as_sent": "Segna come inviata", "mark_as_sent": "Segna come inviata",
@ -434,6 +442,8 @@
"update_payment": "Aggiorna pagamento", "update_payment": "Aggiorna pagamento",
"payment": "Pagamento | Pagamenti", "payment": "Pagamento | Pagamenti",
"no_payments": "Ancora nessun pagamento!", "no_payments": "Ancora nessun pagamento!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Non ci sono pagamenti!", "no_matching_payments": "Non ci sono pagamenti!",
"list_of_payments": "Questa sezione conterrà la lista dei pagamenti.", "list_of_payments": "Questa sezione conterrà la lista dei pagamenti.",
"select_payment_mode": "Seleziona modalità di pagamento", "select_payment_mode": "Seleziona modalità di pagamento",
@ -463,6 +473,7 @@
"receipt": "Ricevuta", "receipt": "Ricevuta",
"amount": "Ammontare", "amount": "Ammontare",
"action": "Azione", "action": "Azione",
"not_selected": "Not selected",
"note": "Nota", "note": "Nota",
"category_id": "Id categoria", "category_id": "Id categoria",
"date": "Data Spesa", "date": "Data Spesa",
@ -498,43 +509,43 @@
"password": "Password", "password": "Password",
"forgot_password": "Password dimenticata?", "forgot_password": "Password dimenticata?",
"or_signIn_with": "o fai login con", "or_signIn_with": "o fai login con",
"login": "Login", "login": "Accedi",
"register": "Registrati", "register": "Registrati",
"reset_password": "Resetta Password", "reset_password": "Resetta Password",
"password_reset_successfully": "Password Resettata con successo", "password_reset_successfully": "Password Resettata con successo",
"enter_email": "Inserisci email", "enter_email": "Inserisci email",
"enter_password": "Inserisci Password", "enter_password": "Inserisci Password",
"retype_password": "Ridigita Password", "retype_password": "Ridigita Password",
"login_placeholder": "mail@example.com" "login_placeholder": "mail@esempio.com"
}, },
"users": { "users": {
"title": "Users", "title": "Utenti",
"users_list": "Users List", "users_list": "Lista Utenti",
"name": "Nome", "name": "Nome",
"description": "Descrizione", "description": "Descrizione",
"added_on": "Aggiunto il", "added_on": "Aggiunto il",
"date_of_creation": "Data di creazione", "date_of_creation": "Data di creazione",
"action": "Azione", "action": "Azione",
"add_user": "Add User", "add_user": "Aggiungi Utente",
"save_user": "Save User", "save_user": "Salva Utente",
"update_user": "Update User", "update_user": "Aggiorna Utente",
"user": "User | Users", "user": "Utente | Utenti",
"add_new_user": "Add New User", "add_new_user": "Aggiungi Nuovo Utente",
"new_user": "New User", "new_user": "Nuovo Utente",
"edit_user": "Edit User", "edit_user": "Modifica Utente",
"no_users": "No users yet!", "no_users": "Ancora nessun utente!",
"list_of_users": "This section will contain the list of users.", "list_of_users": "Questa sezione conterrà l'elenco degli utenti.",
"email": "Email", "email": "Email",
"phone": "Telefono", "phone": "Telefono",
"password": "Password", "password": "Password",
"user_attached_message": "Non puoi eliminare una Commessa che è già attiva", "user_attached_message": "Non puoi eliminare una Commessa che è già attiva",
"confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", "confirm_delete": "Non sarai in grado di recuperare questo utente | Non sarai in grado di recuperare questi utenti",
"created_message": "User created successfully", "created_message": "Utente creato correttamente",
"updated_message": "User updated successfully", "updated_message": "Utente aggiornato correttamente",
"deleted_message": "User deleted successfully | User deleted successfully" "deleted_message": "Utente eliminato con successo | Utenti eliminati con successo"
}, },
"reports": { "reports": {
"title": "Report", "title": "Segnala",
"from_date": "Da", "from_date": "Da",
"to_date": "A", "to_date": "A",
"status": "Stato", "status": "Stato",
@ -543,7 +554,7 @@
"download_pdf": "Scarica PDF", "download_pdf": "Scarica PDF",
"view_pdf": "Vedi PDF", "view_pdf": "Vedi PDF",
"update_report": "Aggiorna Report", "update_report": "Aggiorna Report",
"report": "Report | Reports", "report": "Segnalazione | Segnalazioni",
"profit_loss": { "profit_loss": {
"profit_loss": "Guadagni & Perdite", "profit_loss": "Guadagni & Perdite",
"to_date": "A", "to_date": "A",
@ -601,13 +612,13 @@
"customization": "Personalizzazione", "customization": "Personalizzazione",
"preferences": "Opzioni", "preferences": "Opzioni",
"notifications": "Notifiche", "notifications": "Notifiche",
"tax_types": "Tupi di Tasse", "tax_types": "Tipi di Imposte",
"expense_category": "Categorie di spesa", "expense_category": "Categorie di spesa",
"update_app": "Aggiorna App", "update_app": "Aggiorna App",
"backup": "Backup", "backup": "Backup",
"file_disk": "File Disk", "file_disk": "Disco File",
"custom_fields": "Campi personalizzati", "custom_fields": "Campi personalizzati",
"payment_modes": "Payment Modes", "payment_modes": "Modalità di Pagamento",
"notes": "Note" "notes": "Note"
}, },
"title": "Impostazioni", "title": "Impostazioni",
@ -615,7 +626,7 @@
"general": "Generale", "general": "Generale",
"language": "Lingua", "language": "Lingua",
"primary_currency": "Valuta Principale", "primary_currency": "Valuta Principale",
"timezone": "Time Zone", "timezone": "Fuso Orario",
"date_format": "Formato data", "date_format": "Formato data",
"currencies": { "currencies": {
"title": "Valute", "title": "Valute",
@ -636,17 +647,17 @@
"add_currency": "Aggiungi Valùta" "add_currency": "Aggiungi Valùta"
}, },
"mail": { "mail": {
"host": "Mail Host", "host": "Host Mail",
"port": "Mail - Porta", "port": "Mail - Porta",
"driver": "Mail Driver", "driver": "Driver Mail",
"secret": "Secret", "secret": "Segreto",
"mailgun_secret": "Mailgun Secret", "mailgun_secret": "Segreto Mailgun",
"mailgun_domain": "Domain", "mailgun_domain": "Dominio",
"mailgun_endpoint": "Mailgun Endpoint", "mailgun_endpoint": "Endpoint Mailgun",
"ses_secret": "SES Secret", "ses_secret": "Segreto SES",
"ses_key": "SES Key", "ses_key": "Chiave SES",
"password": "Mail Password", "password": "Password Email",
"username": "Mail Username", "username": "Nome Utente Email",
"mail_config": "Configurazione Mail", "mail_config": "Configurazione Mail",
"from_name": "Nome Mittente Mail", "from_name": "Nome Mittente Mail",
"from_mail": "Indirizzo Mittente Mail", "from_mail": "Indirizzo Mittente Mail",
@ -665,7 +676,7 @@
"section_description": "Informazioni sulla tua azienda che saranno mostrate in fattura, preventivi ed altri documenti creati dell'applicazione.", "section_description": "Informazioni sulla tua azienda che saranno mostrate in fattura, preventivi ed altri documenti creati dell'applicazione.",
"phone": "Telefono", "phone": "Telefono",
"country": "Paese", "country": "Paese",
"state": "Stato", "state": "Provincia",
"city": "Città", "city": "Città",
"address": "Indirizzo", "address": "Indirizzo",
"zip": "CAP", "zip": "CAP",
@ -674,7 +685,7 @@
}, },
"custom_fields": { "custom_fields": {
"title": "Campi personalizzati", "title": "Campi personalizzati",
"section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", "section_description": "Personalizza le tue fatture, preventivi e ricevute di pagamento con i tuoi campi. Assicurati di utilizzare i campi aggiunti qui sotto nei campi della pagina Personalizzazione delle impostazioni.",
"add_custom_field": "Aggiungi campo personalizzato", "add_custom_field": "Aggiungi campo personalizzato",
"edit_custom_field": "Modifica campo personalizzato", "edit_custom_field": "Modifica campo personalizzato",
"field_name": "Nome campo", "field_name": "Nome campo",
@ -726,7 +737,7 @@
"website": "Sito web", "website": "Sito web",
"name": "Nome", "name": "Nome",
"country": "Paese", "country": "Paese",
"state": "Stato", "state": "Provincia",
"city": "Città", "city": "Città",
"company_name": "Nome Azienda", "company_name": "Nome Azienda",
"address_street_1": "Indirizzo 1", "address_street_1": "Indirizzo 1",
@ -740,41 +751,50 @@
"title": "Fatture", "title": "Fatture",
"notes": "Note", "notes": "Note",
"invoice_prefix": "Prefisso Fattura", "invoice_prefix": "Prefisso Fattura",
"default_invoice_email_body": "Default Invoice Email Body", "invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Corpo Email Fattura Predefinito",
"invoice_settings": "Impostazioni fattura", "invoice_settings": "Impostazioni fattura",
"autogenerate_invoice_number": "Auto genera numero di 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.", "invoice_setting_description": "Disabilita, se non vuoi auto-generare i numeri delle fatture ogni volta che crei una nuova fattura.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Inserisci prefisso fattura", "enter_invoice_prefix": "Inserisci prefisso fattura",
"terms_and_conditions": "Termini e Condizioni", "terms_and_conditions": "Termini e Condizioni",
"company_address_format": "Company Address Format", "company_address_format": "Formato Indirizzo Azienda",
"shipping_address_format": "Shipping Address Format", "shipping_address_format": "Formato Indirizzo Di Spedizione",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato Indirizzo Fatturazione",
"invoice_setting_updated": "Impostazioni fatture aggiornate con successo" "invoice_setting_updated": "Impostazioni fatture aggiornate con successo"
}, },
"estimates": { "estimates": {
"title": "Preventivi", "title": "Preventivi",
"estimate_prefix": "Prefisso Preventivi", "estimate_prefix": "Prefisso Preventivi",
"default_estimate_email_body": "Default Estimate Email Body", "estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Corpo Email Preventivo Predefinito",
"estimate_settings": "Impostazioni Preventivi", "estimate_settings": "Impostazioni Preventivi",
"autogenerate_estimate_number": "Auto-genera Numero di preventivo", "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.", "estimate_setting_description": "Disabilita, se non vuoi autogenerare il numero di preventivo ogni volta che ne viene creato uno nuovo.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Inserisci prefisso preventivo", "enter_estimate_prefix": "Inserisci prefisso preventivo",
"estimate_setting_updated": "Impostazioni preventivi aggiornate con successo", "estimate_setting_updated": "Impostazioni preventivi aggiornate con successo",
"company_address_format": "Company Address Format", "company_address_format": "Formato Indirizzo Azienda",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato Indirizzo Fatturazione",
"shipping_address_format": "Shipping Address Format" "shipping_address_format": "Formato Indirizzo Spedizione"
}, },
"payments": { "payments": {
"title": "Pagamenti", "title": "Pagamenti",
"description": "Modes of transaction for payments", "description": "Modalità di pagamento",
"payment_prefix": "Prefisso Pagamento", "payment_prefix": "Prefisso Pagamento",
"default_payment_email_body": "Default Payment Email Body", "payment_number_length": "Payment number lenght",
"default_payment_email_body": "Corpo Email Pagamento Predefinito",
"payment_settings": "Impostazioni Pagamento", "payment_settings": "Impostazioni Pagamento",
"autogenerate_payment_number": "Auto genera il numero di 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.", "payment_setting_description": "Disabilita, se non vuoi autogenerare il numero di pagamento ogni volta che ne viene creato uno nuovo.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Inserisci prefisso di pagamento", "enter_payment_prefix": "Inserisci prefisso di pagamento",
"payment_setting_updated": "Impostazioni di pagamento aggiornate con successo", "payment_setting_updated": "Impostazioni di pagamento aggiornate con successo",
"payment_modes": "Payment Modes", "payment_modes": "Modalità di pagamento",
"add_payment_mode": "Aggiungi modalità di pagamento", "add_payment_mode": "Aggiungi modalità di pagamento",
"edit_payment_mode": "Modifica modalità di pagamento", "edit_payment_mode": "Modifica modalità di pagamento",
"mode_name": "Nome modalità", "mode_name": "Nome modalità",
@ -782,9 +802,9 @@
"payment_mode_updated": "Modalità di pagamento aggiornata", "payment_mode_updated": "Modalità di pagamento aggiornata",
"payment_mode_confirm_delete": "Non potrai ripristinare la modalità di pagamento", "payment_mode_confirm_delete": "Non potrai ripristinare la modalità di pagamento",
"already_in_use": "Modalità di pagamento già in uso", "already_in_use": "Modalità di pagamento già in uso",
"deleted_message": "Payment Mode deleted successfully", "deleted_message": "Modalità di pagamento eliminata con successo",
"company_address_format": "Company Address Format", "company_address_format": "Formato Indirizzo Azienda",
"from_customer_address_format": "From Customer Address Format" "from_customer_address_format": "Dal Formato Indirizzo Cliente"
}, },
"items": { "items": {
"title": "Commesse", "title": "Commesse",
@ -800,18 +820,18 @@
}, },
"notes": { "notes": {
"title": "Note", "title": "Note",
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "description": "Risparmia tempo creando note e riutilizzandole sulle tue fatture, preventivi e pagamenti.",
"notes": "Note", "notes": "Note",
"type": "genere", "type": "genere",
"add_note": "Add Note", "add_note": "Aggiungi Nota",
"add_new_note": "Add New Note", "add_new_note": "Aggiungi nuova nota",
"name": "Nome", "name": "Nome",
"edit_note": "Edit Note", "edit_note": "Modifica nota",
"note_added": "Note added successfully", "note_added": "Nota aggiunta correttamente",
"note_updated": "Note Updated successfully", "note_updated": "Nota aggiornata correttamente",
"note_confirm_delete": "You will not be able to recover this Note", "note_confirm_delete": "Non sarà possibile recuperare questa nota",
"already_in_use": "Note is already in use", "already_in_use": "Nota già in uso",
"deleted_message": "Note deleted successfully" "deleted_message": "Nota eliminata con successo"
} }
}, },
"account_settings": { "account_settings": {
@ -844,7 +864,7 @@
"please_enter_email": "Inserisci Email" "please_enter_email": "Inserisci Email"
}, },
"tax_types": { "tax_types": {
"title": "Tipi di Imposta", "title": "Tipi di Imposte",
"add_tax": "Aggiungi Imposta", "add_tax": "Aggiungi Imposta",
"edit_tax": "Modifica imposta", "edit_tax": "Modifica imposta",
"description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.", "description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.",
@ -879,8 +899,8 @@
}, },
"preferences": { "preferences": {
"currency": "Valùta", "currency": "Valùta",
"default_language": "Default Language", "default_language": "Lingua predefinita",
"time_zone": "Time Zone", "time_zone": "Fuso Orario",
"fiscal_year": "Anno finanziario", "fiscal_year": "Anno finanziario",
"date_format": "Formato Data", "date_format": "Formato Data",
"discount_setting": "Impostazione Sconto", "discount_setting": "Impostazione Sconto",
@ -892,7 +912,7 @@
"updated_message": "Preferenze aggiornate con successo", "updated_message": "Preferenze aggiornate con successo",
"select_language": "seleziona lingua", "select_language": "seleziona lingua",
"select_time_zone": "Seleziona Time Zone", "select_time_zone": "Seleziona Time Zone",
"select_date_format": "Select Date Format", "select_date_format": "Seleziona Formato Data",
"select_financial_year": "Seleziona anno finanziario" "select_financial_year": "Seleziona anno finanziario"
}, },
"update_app": { "update_app": {
@ -901,7 +921,7 @@
"check_update": "Controllo aggiornamenti", "check_update": "Controllo aggiornamenti",
"avail_update": "Aggiornamento disponibile", "avail_update": "Aggiornamento disponibile",
"next_version": "Versione successiva", "next_version": "Versione successiva",
"requirements": "Requirements", "requirements": "Requisiti",
"update": "Aggiorna ora", "update": "Aggiorna ora",
"update_progress": "Aggiornamento in corso...", "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", "progress_text": "Sarà necessario qualche minuto. Per favore non aggiornare la pagina e non chiudere la finestra prima che l'aggiornamento sia completato",
@ -911,6 +931,7 @@
"download_zip_file": "Scarica il file ZIP", "download_zip_file": "Scarica il file ZIP",
"unzipping_package": "Pacchetto di decompressione", "unzipping_package": "Pacchetto di decompressione",
"copying_files": "Copia dei file", "copying_files": "Copia dei file",
"deleting_files": "Deleting Unused files",
"running_migrations": "Esecuzione delle migrazioni", "running_migrations": "Esecuzione delle migrazioni",
"finishing_update": "Aggiornamento di finitura", "finishing_update": "Aggiornamento di finitura",
"update_failed": "Aggiornamento non riuscito", "update_failed": "Aggiornamento non riuscito",
@ -918,83 +939,84 @@
}, },
"backup": { "backup": {
"title": "Backup | Backups", "title": "Backup | Backups",
"description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", "description": "Il backup è un file zip che contiene tutti i file nelle cartelle specificate con un dump del vostro database",
"new_backup": "Add New Backup", "new_backup": "Nuovo Backup",
"create_backup": "Create Backup", "create_backup": "Crea Backup",
"select_backup_type": "Select Backup Type", "select_backup_type": "Scegli tipo di backup",
"backup_confirm_delete": "You will not be able to recover this Backup", "backup_confirm_delete": "Non sarà possibile recuperare questo backup",
"path": "path", "path": "percorso",
"new_disk": "New Disk", "new_disk": "Nuovo Disco",
"created_at": "created at", "created_at": "creato il",
"size": "size", "size": "dimensioni",
"dropbox": "dropbox", "dropbox": "dropbox",
"local": "local", "local": "locale",
"healthy": "healthy", "healthy": "sano",
"amount_of_backups": "amount of backups", "amount_of_backups": "quantità di backup",
"newest_backups": "newest backups", "newest_backups": "backup più recenti",
"used_storage": "used storage", "used_storage": "spazio utilizzato",
"select_disk": "Select Disk", "select_disk": "Seleziona Disco",
"action": "Azione", "action": "Azione",
"deleted_message": "Backup deleted successfully", "deleted_message": "Backup eliminato con successo",
"created_message": "Backup created successfully", "created_message": "Backup creato con successo",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credenziali del disco selezionato non valide"
}, },
"disk": { "disk": {
"title": "File Disk | File Disks", "title": "Disco File | Dischi File",
"description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", "description": "Per impostazione predefinita, Crater utilizzerà il disco locale per salvare backup, avatar e altri file di immagine. Puoi configurare più di un driver disco come DigitalOcean, S3 e Dropbox in base alle tue preferenze.",
"created_at": "created at", "created_at": "creato il",
"dropbox": "dropbox", "dropbox": "dropbox",
"name": "Nome", "name": "Nome",
"driver": "Driver", "driver": "Driver",
"disk_type": "genere", "disk_type": "genere",
"disk_name": "Disk Name", "disk_name": "Nome Disco",
"new_disk": "Add New Disk", "new_disk": "Aggiungi Nuovo Disco",
"filesystem_driver": "Filesystem Driver", "filesystem_driver": "Driver Filesystem",
"local_driver": "local Driver", "local_driver": "driver locale",
"local_root": "local Root", "local_root": "radice locale",
"public_driver": "Public Driver", "public_driver": "Driver Pubblico",
"public_root": "Public Root", "public_root": "Root Pubblica",
"public_url": "Public URL", "public_url": "Url Pubblico",
"public_visibility": "Public Visibility", "public_visibility": "Visibilità Pubblica",
"media_driver": "Media Driver", "media_driver": "Driver Media",
"media_root": "Media Root", "media_root": "Media Root",
"aws_driver": "AWS Driver", "aws_driver": "Driver AWS",
"aws_key": "AWS Key", "aws_key": "Chiave AWS",
"aws_secret": "AWS Secret", "aws_secret": "Segreto AWS",
"aws_region": "AWS Region", "aws_region": "Regione AWS",
"aws_bucket": "AWS Bucket", "aws_bucket": "Bucket AWS",
"aws_root": "AWS Root", "aws_root": "Root AWS",
"do_spaces_type": "Do Spaces type", "do_spaces_type": "tipo Do Spaces",
"do_spaces_key": "Do Spaces key", "do_spaces_key": "chiave Do Spaces",
"do_spaces_secret": "Do Spaces Secret", "do_spaces_secret": "segreto Do Spaces",
"do_spaces_region": "Do Spaces Region", "do_spaces_region": "regione Do Spaces",
"do_spaces_bucket": "Do Spaces Bucket", "do_spaces_bucket": "bucket Do Spaces",
"do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_endpoint": "endpoint Do Spaces",
"do_spaces_root": "Do Spaces Root", "do_spaces_root": "root Do Spaces",
"dropbox_type": "Dropbox Type", "dropbox_type": "Tipo Dropbox",
"dropbox_token": "Dropbox Token", "dropbox_token": "Token Dropbox",
"dropbox_key": "Dropbox Key", "dropbox_key": "Chiave Dropbox",
"dropbox_secret": "Dropbox Secret", "dropbox_secret": "Segreto Dropbox",
"dropbox_app": "Dropbox App", "dropbox_app": "App Dropbox",
"dropbox_root": "Dropbox Root", "dropbox_root": "Root Dropbox",
"default_driver": "Default Driver", "default_driver": "Driver Predefinito",
"is_default": "IS DEFAULT", "is_default": "È DEFAULT",
"set_default_disk": "Set Default Disk", "set_default_disk": "Imposta Disco Predefinito",
"success_set_default_disk": "Disk set as default successfully", "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"save_pdf_to_disk": "Save PDFs to Disk", "success_set_default_disk": "Disco impostato come predefinito correttamente",
"disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", "save_pdf_to_disk": "Salva i PDF su disco",
"select_disk": "Select Disk", "disk_setting_description": " Abilita questa opzione, se vuoi salvare automaticamente una copia di ogni PDF Fattura, Preventivo e Ricevuta di Pagamento sul tuo disco predefinito. Attivare questa opzione diminuirà il tempo di caricamento durante la visualizzazione dei PDF.",
"disk_settings": "Disk Settings", "select_disk": "Seleziona Disco",
"confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", "disk_settings": "Impostazioni Disco",
"confirm_delete": "I file e le cartelle esistenti nel disco specificato non saranno toccati, ma la configurazione del disco sarà eliminata dal Crater",
"action": "Azione", "action": "Azione",
"edit_file_disk": "Edit File Disk", "edit_file_disk": "Modifica Disco File",
"success_create": "Disk added successfully", "success_create": "Disco aggiunto correttamente",
"success_update": "Disk updated successfully", "success_update": "Disco aggiornato correttamente",
"error": "Disk addition failed", "error": "Aggiunta del disco fallita",
"deleted_message": "File Disk deleted successfully", "deleted_message": "Disco file eliminato con successo",
"disk_variables_save_successfully": "Disk Configured Successfully", "disk_variables_save_successfully": "Disco Configurato Con successo",
"disk_variables_save_error": "Disk configuration failed.", "disk_variables_save_error": "Configurazione disco fallita.",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credenziali del disco selezionato non valide"
} }
}, },
"wizard": { "wizard": {
@ -1013,7 +1035,7 @@
"preferences": "Impostazioni", "preferences": "Impostazioni",
"preferences_desc": "Impostazioni di default del sistema.", "preferences_desc": "Impostazioni di default del sistema.",
"country": "Paese", "country": "Paese",
"state": "Stato", "state": "Provincia",
"city": "Città", "city": "Città",
"address": "Indirizzo", "address": "Indirizzo",
"street": "Indirizzo1 | Indirizzo2", "street": "Indirizzo1 | Indirizzo2",
@ -1022,25 +1044,25 @@
"go_back": "Torna indietro", "go_back": "Torna indietro",
"currency": "Valùta", "currency": "Valùta",
"language": "Lingua", "language": "Lingua",
"time_zone": "Time Zone", "time_zone": "Fuso Orario",
"fiscal_year": "Anno Finanziario", "fiscal_year": "Anno Finanziario",
"date_format": "Formato Date", "date_format": "Formato Date",
"from_address": "Indirizzo - Da", "from_address": "Indirizzo - Da",
"username": "Username", "username": "Nome utente",
"next": "Successivo", "next": "Successivo",
"continue": "Continua", "continue": "Continua",
"skip": "Salta", "skip": "Salta",
"database": { "database": {
"database": "URL del sito & database", "database": "URL del sito & database",
"connection": "Connessione Database", "connection": "Connessione Database",
"host": "Database Host", "host": "Host Database",
"port": "Database - Porta", "port": "Database - Porta",
"password": "Database Password", "password": "Password Database",
"app_url": "App URL", "app_url": "URL dell'App",
"app_domain": "App Domain", "app_domain": "Dominio App",
"username": "Database Username", "username": "Nome Utente del Database",
"db_name": "Database Nome", "db_name": "Database Nome",
"db_path": "Database Path", "db_path": "Percorso del database",
"desc": "Crea un database sul tuo server e setta le credenziali usando il form qui sotto." "desc": "Crea un database sul tuo server e setta le credenziali usando il form qui sotto."
}, },
"permissions": { "permissions": {
@ -1050,17 +1072,17 @@
"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." "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": { "mail": {
"host": "Mail Host", "host": "Host Mail",
"port": "Mail - Porta", "port": "Mail - Porta",
"driver": "Mail Driver", "driver": "Driver Mail",
"secret": "Secret", "secret": "Segreto",
"mailgun_secret": "Mailgun Secret", "mailgun_secret": "Segreto Mailgun",
"mailgun_domain": "Domain", "mailgun_domain": "Dominio",
"mailgun_endpoint": "Mailgun Endpoint", "mailgun_endpoint": "Endpoint Mailgun",
"ses_secret": "SES Secret", "ses_secret": "Segreto SES",
"ses_key": "SES Key", "ses_key": "Chiave SES",
"password": "Mail Password", "password": "Password Email",
"username": "Mail Username", "username": "Nome Utente Email",
"mail_config": "Configurazione Mail", "mail_config": "Configurazione Mail",
"from_name": "Nome mittente mail", "from_name": "Nome mittente mail",
"from_mail": "Indirizzo mittente mail", "from_mail": "Indirizzo mittente mail",
@ -1074,11 +1096,11 @@
"system_req_desc": "Crater ha alcuni requisiti di sistema. Assicurati che il server ha la versione di php richiesta e tutte le estensioni necessarie." "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": { "errors": {
"migrate_failed": "Migrate Failed", "migrate_failed": "Migrazione Fallita",
"database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions", "database_variables_save_error": "Impossibile scrivere la configurazione nel file .env. Si prega di controllare i permessi dei file",
"mail_variables_save_error": "Email configuration failed.", "mail_variables_save_error": "Configurazione email fallita.",
"connection_failed": "Database connection failed", "connection_failed": "Connessione al Database fallita",
"database_should_be_empty": "Database should be empty" "database_should_be_empty": "Il database dovrebbe essere vuoto"
}, },
"success": { "success": {
"mail_variables_save_successfully": "Email configurata con successo", "mail_variables_save_successfully": "Email configurata con successo",
@ -1129,42 +1151,47 @@
"address_maxlength": "L'Indirizzo non può eccedere 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.", "ref_number_maxlength": "Il Numero di Riferimento non può superare i 255 caratteri.",
"prefix_maxlength": "Il Prefisso non può superare i 5 caratteri.", "prefix_maxlength": "Il Prefisso non può superare i 5 caratteri.",
"something_went_wrong": "Si è verificato un errore" "something_went_wrong": "Si è verificato un errore",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Preventivo", "pdf_estimate_label": "Preventivo",
"pdf_estimate_number": "Preventivo Numero", "pdf_estimate_number": "Preventivo Numero",
"pdf_estimate_date": "Data preventivo", "pdf_estimate_date": "Data preventivo",
"pdf_estimate_expire_date": "Expiry date", "pdf_estimate_expire_date": "Data di scadenza",
"pdf_invoice_label": "Fattura", "pdf_invoice_label": "Fattura",
"pdf_invoice_number": "Numero Fattura", "pdf_invoice_number": "Numero Fattura",
"pdf_invoice_date": "Data fattura", "pdf_invoice_date": "Data fattura",
"pdf_invoice_due_date": "Due date", "pdf_invoice_due_date": "Data di pagamento",
"pdf_notes": "Note", "pdf_notes": "Note",
"pdf_items_label": "Commesse", "pdf_items_label": "Commesse",
"pdf_quantity_label": "Quantità", "pdf_quantity_label": "Quantità",
"pdf_price_label": "Prezzo", "pdf_price_label": "Prezzo",
"pdf_discount_label": "Sconto", "pdf_discount_label": "Sconto",
"pdf_amount_label": "Ammontare", "pdf_amount_label": "Ammontare",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Parziale",
"pdf_total": "Totale", "pdf_total": "Totale",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_label": "Payment",
"pdf_payment_date": "Payment Date", "pdf_payment_receipt_label": "RICEVUTA DI PAGAMENTO",
"pdf_payment_date": "Data di pagamento",
"pdf_payment_number": "Numero di pagamento", "pdf_payment_number": "Numero di pagamento",
"pdf_payment_mode": "Modalità di Pagamento", "pdf_payment_mode": "Modalità di Pagamento",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "Importo Ricevuto",
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "RELAZIONE SPESE",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "TOTALE SPESE",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "RELAZIONE PROFITTO E PERDITE",
"pdf_income_label": "INCOME", "pdf_sales_customers_label": "Sales Customer Report",
"pdf_net_profit_label": "NET PROFIT", "pdf_sales_items_label": "Sales Item Report",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_tax_summery_label": "Tax Summary Report",
"pdf_total_sales_label": "TOTAL SALES", "pdf_income_label": "REDDITO",
"pdf_item_sales_label": "Sales Report: By Item", "pdf_net_profit_label": "PROFITTO NETTO",
"pdf_tax_report_label": "TAX REPORT", "pdf_customer_sales_report": "Relazione Vendite: Per Cliente",
"pdf_total_tax_label": "TOTAL TAX", "pdf_total_sales_label": "TOTALE VENDITE",
"pdf_item_sales_label": "Relazione Vendite: Per Articolo",
"pdf_tax_report_label": "RELAZIONE FISCALE",
"pdf_total_tax_label": "TOTALE IMPOSTA",
"pdf_tax_types_label": "Tipi di Imposta", "pdf_tax_types_label": "Tipi di Imposta",
"pdf_expenses_label": "Uscite", "pdf_expenses_label": "Uscite",
"pdf_bill_to": "Fattura a,", "pdf_bill_to": "Fattura a,",
"pdf_ship_to": "Invia a,", "pdf_ship_to": "Invia a,",
"pdf_received_from": "Received from:" "pdf_received_from": "Ricevuto da:"
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,8 @@
"retry": "Atkārtot", "retry": "Atkārtot",
"choose_note": "Izvēlieties piezīmi", "choose_note": "Izvēlieties piezīmi",
"no_note_found": "Piezīmes nav atrastas", "no_note_found": "Piezīmes nav atrastas",
"insert_note": "Ievietot piezīmi" "insert_note": "Ievietot piezīmi",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Izvēlieties gadu", "select_year": "Izvēlieties gadu",
@ -177,6 +178,8 @@
"copy_billing_address": "Kopēt no juridiskās adreses", "copy_billing_address": "Kopēt no juridiskās adreses",
"no_customers": "Pagaidām nav klientu!", "no_customers": "Pagaidām nav klientu!",
"no_customers_found": "Klienti netika atrasti!", "no_customers_found": "Klienti netika atrasti!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Šajā sadaļā būs klientu saraksts.", "list_of_customers": "Šajā sadaļā būs klientu saraksts.",
"primary_display_name": "Klienta nosaukums", "primary_display_name": "Klienta nosaukums",
"select_currency": "Izvēlieties valūtu", "select_currency": "Izvēlieties valūtu",
@ -200,6 +203,7 @@
"added_on": "Pievienots", "added_on": "Pievienots",
"price": "Cena", "price": "Cena",
"date_of_creation": "Izveidošanas datums", "date_of_creation": "Izveidošanas datums",
"not_selected": "No item selected",
"action": "Darbība", "action": "Darbība",
"add_item": "Pievienot", "add_item": "Pievienot",
"save_item": "Saglabāt", "save_item": "Saglabāt",
@ -270,6 +274,7 @@
"required": "Šis lauks ir obligāts" "required": "Šis lauks ir obligāts"
}, },
"accepted": "Apstiprināts", "accepted": "Apstiprināts",
"rejected": "Rejected",
"sent": "Nosūtīts", "sent": "Nosūtīts",
"draft": "Melnraksts", "draft": "Melnraksts",
"declined": "Noraidīts", "declined": "Noraidīts",
@ -316,6 +321,9 @@
"all": "Visi", "all": "Visi",
"paid": "Apmaksāts", "paid": "Apmaksāts",
"unpaid": "Neapmaksāts", "unpaid": "Neapmaksāts",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "KLIENTS", "customer": "KLIENTS",
"paid_status": "APMAKSAS STATUS", "paid_status": "APMAKSAS STATUS",
"ref_no": "REF NR.", "ref_no": "REF NR.",
@ -434,6 +442,8 @@
"update_payment": "Labot maksājumu", "update_payment": "Labot maksājumu",
"payment": "Maksājums | Maksājumi", "payment": "Maksājums | Maksājumi",
"no_payments": "Nav pievienotu maksājumu!", "no_payments": "Nav pievienotu maksājumu!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Netika atrasts neviens maksājums!", "no_matching_payments": "Netika atrasts neviens maksājums!",
"list_of_payments": "Šajā sadaļā būs maksājumu saraksts.", "list_of_payments": "Šajā sadaļā būs maksājumu saraksts.",
"select_payment_mode": "Izvēlēties maksājuma veidu", "select_payment_mode": "Izvēlēties maksājuma veidu",
@ -463,6 +473,7 @@
"receipt": "Čeks", "receipt": "Čeks",
"amount": "Summa", "amount": "Summa",
"action": "Darbība", "action": "Darbība",
"not_selected": "Not selected",
"note": "Piezīme", "note": "Piezīme",
"category_id": "Kategorijas Id", "category_id": "Kategorijas Id",
"date": "Datums", "date": "Datums",
@ -740,10 +751,13 @@
"title": "Rēķini", "title": "Rēķini",
"notes": "Piezīmes", "notes": "Piezīmes",
"invoice_prefix": "Rēķina prefikss", "invoice_prefix": "Rēķina prefikss",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Default Invoice Email Body", "default_invoice_email_body": "Default Invoice Email Body",
"invoice_settings": "Invoice Settings", "invoice_settings": "Invoice Settings",
"autogenerate_invoice_number": "Automātiski ģenerēt rēķina numuru", "autogenerate_invoice_number": "Automātiski ģenerēt rēķina numuru",
"invoice_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt rēķinu numurus katru reizi, kad izveidojat jaunu rēķinu.", "invoice_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt rēķinu numurus katru reizi, kad izveidojat jaunu rēķinu.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Ievadiet rēķina prefiksu", "enter_invoice_prefix": "Ievadiet rēķina prefiksu",
"terms_and_conditions": "Lietošanas noteikumi", "terms_and_conditions": "Lietošanas noteikumi",
"company_address_format": "Uzņēmuma adreses formāts", "company_address_format": "Uzņēmuma adreses formāts",
@ -754,10 +768,13 @@
"estimates": { "estimates": {
"title": "Aprēķini", "title": "Aprēķini",
"estimate_prefix": "Aprēķinu prefikss", "estimate_prefix": "Aprēķinu prefikss",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Noklusējamais Aprēķina e-pasta saturs", "default_estimate_email_body": "Noklusējamais Aprēķina e-pasta saturs",
"estimate_settings": "Aprēķinu iestatījumi", "estimate_settings": "Aprēķinu iestatījumi",
"autogenerate_estimate_number": "Automātiski ģenerēt Aprēķina numuru", "autogenerate_estimate_number": "Automātiski ģenerēt Aprēķina numuru",
"estimate_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Aprēķinu numurus katru reizi, kad izveidojat jaunu Aprēķinu.", "estimate_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Aprēķinu numurus katru reizi, kad izveidojat jaunu Aprēķinu.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Ievadiet Aprēķina prefiksu", "enter_estimate_prefix": "Ievadiet Aprēķina prefiksu",
"estimate_setting_updated": "Aprēķina iestatījumi ir veiksmīgi atjaunināti", "estimate_setting_updated": "Aprēķina iestatījumi ir veiksmīgi atjaunināti",
"company_address_format": "Uzņēmuma adreses formāts", "company_address_format": "Uzņēmuma adreses formāts",
@ -768,10 +785,13 @@
"title": "Maksājumi", "title": "Maksājumi",
"description": "Pārskaitījumu veidi, maksājumiem", "description": "Pārskaitījumu veidi, maksājumiem",
"payment_prefix": "Maksājuma prefikss", "payment_prefix": "Maksājuma prefikss",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "Noklusējamais Maksājuma e-pasta saturs", "default_payment_email_body": "Noklusējamais Maksājuma e-pasta saturs",
"payment_settings": "Maksājumu iestatījumi", "payment_settings": "Maksājumu iestatījumi",
"autogenerate_payment_number": "Automātiski ģenerēt Maksājuma numuru", "autogenerate_payment_number": "Automātiski ģenerēt Maksājuma numuru",
"payment_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Maksājuma numurus katru reizi, kad izveidojat jaunu Maksājumu.", "payment_setting_description": "Atspējojiet, ja nevēlaties automātiski ģenerēt Maksājuma numurus katru reizi, kad izveidojat jaunu Maksājumu.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Ievadiet Maksājuma prefiksu", "enter_payment_prefix": "Ievadiet Maksājuma prefiksu",
"payment_setting_updated": "Maksājumu iestatījumi ir veiksmīgi atjaunināti", "payment_setting_updated": "Maksājumu iestatījumi ir veiksmīgi atjaunināti",
"payment_modes": "Apmaksas veidi", "payment_modes": "Apmaksas veidi",
@ -911,6 +931,7 @@
"download_zip_file": "Lejupielādēt ZIP failu", "download_zip_file": "Lejupielādēt ZIP failu",
"unzipping_package": "Atarhivē Zip failu", "unzipping_package": "Atarhivē Zip failu",
"copying_files": "Notiek failu kopēšana", "copying_files": "Notiek failu kopēšana",
"deleting_files": "Deleting Unused files",
"running_migrations": "Notiek migrācijas", "running_migrations": "Notiek migrācijas",
"finishing_update": "Pabeidz atjauninājumu", "finishing_update": "Pabeidz atjauninājumu",
"update_failed": "Atjaunināšana neizdevās", "update_failed": "Atjaunināšana neizdevās",
@ -980,6 +1001,7 @@
"default_driver": "Default Driver", "default_driver": "Default Driver",
"is_default": "IR NOKLUSĒJAMS", "is_default": "IR NOKLUSĒJAMS",
"set_default_disk": "Iestatiet noklusējuma disku", "set_default_disk": "Iestatiet noklusējuma disku",
"set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"success_set_default_disk": "Disks ir veiksmīgi iestatīts kā noklusējums", "success_set_default_disk": "Disks ir veiksmīgi iestatīts kā noklusējums",
"save_pdf_to_disk": "Saglabāt PDF uz diska", "save_pdf_to_disk": "Saglabāt PDF uz diska",
"disk_setting_description": " Iespējot šo, ja vēlaties lai katru rēķina, aprēķina un maksājuma izdrukas PDF kopiju saglabātu diskā. Šī opcija samazinās ielādēšanas laiku, kad apskatīsiet PDF.", "disk_setting_description": " Iespējot šo, ja vēlaties lai katru rēķina, aprēķina un maksājuma izdrukas PDF kopiju saglabātu diskā. Šī opcija samazinās ielādēšanas laiku, kad apskatīsiet PDF.",
@ -1129,7 +1151,8 @@
"address_maxlength": "Address should not be greater than 255 characters.", "address_maxlength": "Address should not be greater than 255 characters.",
"ref_number_maxlength": "Ref Number should not be greater than 255 characters.", "ref_number_maxlength": "Ref Number should not be greater than 255 characters.",
"prefix_maxlength": "Prefix should not be greater than 5 characters.", "prefix_maxlength": "Prefix should not be greater than 5 characters.",
"something_went_wrong": "something went wrong" "something_went_wrong": "something went wrong",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Aprēķins", "pdf_estimate_label": "Aprēķins",
"pdf_estimate_number": "Aprēķina numurs", "pdf_estimate_number": "Aprēķina numurs",
@ -1147,6 +1170,7 @@
"pdf_amount_label": "Summa", "pdf_amount_label": "Summa",
"pdf_subtotal": "Starpsumma", "pdf_subtotal": "Starpsumma",
"pdf_total": "Kopā", "pdf_total": "Kopā",
"pdf_payment_label": "Payment",
"pdf_payment_receipt_label": "MAKSĀJUMA IZDRUKA", "pdf_payment_receipt_label": "MAKSĀJUMA IZDRUKA",
"pdf_payment_date": "Maksājuma datums", "pdf_payment_date": "Maksājuma datums",
"pdf_payment_number": "Maksājuma numurs", "pdf_payment_number": "Maksājuma numurs",
@ -1155,6 +1179,9 @@
"pdf_expense_report_label": "IZDEVUMU ATSKAITE", "pdf_expense_report_label": "IZDEVUMU ATSKAITE",
"pdf_total_expenses_label": "KOPĀ IZDEVUMI", "pdf_total_expenses_label": "KOPĀ IZDEVUMI",
"pdf_profit_loss_label": "PEĻŅAS & IZDEVUMU ATSKAITE", "pdf_profit_loss_label": "PEĻŅAS & IZDEVUMU ATSKAITE",
"pdf_sales_customers_label": "Sales Customer Report",
"pdf_sales_items_label": "Sales Item Report",
"pdf_tax_summery_label": "Tax Summary Report",
"pdf_income_label": "IENĀKUMI", "pdf_income_label": "IENĀKUMI",
"pdf_net_profit_label": "PEĻŅA", "pdf_net_profit_label": "PEĻŅA",
"pdf_customer_sales_report": "Atskaite par pārdoto: Pēc lietotāja", "pdf_customer_sales_report": "Atskaite par pārdoto: Pēc lietotāja",

View File

@ -30,7 +30,7 @@
"sort_by": "Sorteer op", "sort_by": "Sorteer op",
"ascending": "Oplopend", "ascending": "Oplopend",
"descending": "Aflopend", "descending": "Aflopend",
"subject": "Onderwerpen", "subject": "Onderwerp",
"body": "Inhoud", "body": "Inhoud",
"message": "Bericht", "message": "Bericht",
"send": "Verstuur", "send": "Verstuur",
@ -86,7 +86,8 @@
"retry": "Retr", "retry": "Retr",
"choose_note": "Kies notitie", "choose_note": "Kies notitie",
"no_note_found": "Geen notitie gevonden", "no_note_found": "Geen notitie gevonden",
"insert_note": "Notitie invoegen" "insert_note": "Notitie invoegen",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Selecteer jaar", "select_year": "Selecteer jaar",
@ -94,7 +95,7 @@
"due_amount": "Openstaand bedrag", "due_amount": "Openstaand bedrag",
"customers": "Klanten", "customers": "Klanten",
"invoices": "Facturen", "invoices": "Facturen",
"estimates": "Offerte" "estimates": "Offertes"
}, },
"chart_info": { "chart_info": {
"total_sales": "Verkoop", "total_sales": "Verkoop",
@ -166,7 +167,7 @@
"primary_currency": "Primaire valuta", "primary_currency": "Primaire valuta",
"description": "Omschrijving", "description": "Omschrijving",
"add_new_customer": "Nieuwe klant toevoegen", "add_new_customer": "Nieuwe klant toevoegen",
"save_customer": "Klant redden", "save_customer": "Klant opslaan",
"update_customer": "Klant bijwerken", "update_customer": "Klant bijwerken",
"customer": "Klant | Klanten", "customer": "Klant | Klanten",
"new_customer": "Nieuwe klant", "new_customer": "Nieuwe klant",
@ -177,6 +178,8 @@
"copy_billing_address": "Kopiëren van facturering", "copy_billing_address": "Kopiëren van facturering",
"no_customers": "Nog geen klanten!", "no_customers": "Nog geen klanten!",
"no_customers_found": "Geen klanten gevonden!", "no_customers_found": "Geen klanten gevonden!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Hier vind je jouw klanten terug.", "list_of_customers": "Hier vind je jouw klanten terug.",
"primary_display_name": "Primaire weergavenaam", "primary_display_name": "Primaire weergavenaam",
"select_currency": "Selecteer valuta", "select_currency": "Selecteer valuta",
@ -186,7 +189,7 @@
"no_matching_customers": "Er zijn geen overeenkomende klanten!", "no_matching_customers": "Er zijn geen overeenkomende klanten!",
"phone_number": "Telefoonnummer", "phone_number": "Telefoonnummer",
"create_date": "Aangemaakt op", "create_date": "Aangemaakt op",
"confirm_delete": "U kunt deze klant en alle gerelateerde facturen, offertes en betalingen niet terugkrijgen. | U zult deze klanten en alle gerelateerde facturen, offertes en betalingen niet kunnen terugkrijgen.", "confirm_delete": "Deze klant en alle gerelateerde facturen, offertes en betalingen worden permanent verwijderd. | Deze klanten en alle gerelateerde facturen, offertes en betalingen worden permanent verwijderd.",
"created_message": "Klant succesvol aangemaakt", "created_message": "Klant succesvol aangemaakt",
"updated_message": "Klant succesvol geüpdatet", "updated_message": "Klant succesvol geüpdatet",
"deleted_message": "Klant succesvol verwijderd | Klanten zijn succesvol verwijderd" "deleted_message": "Klant succesvol verwijderd | Klanten zijn succesvol verwijderd"
@ -200,6 +203,7 @@
"added_on": "Toegevoegd", "added_on": "Toegevoegd",
"price": "Prijs", "price": "Prijs",
"date_of_creation": "Datum van creatie", "date_of_creation": "Datum van creatie",
"not_selected": "No item selected",
"action": "Actie", "action": "Actie",
"add_item": "Voeg item toe", "add_item": "Voeg item toe",
"save_item": "Item opslaan", "save_item": "Item opslaan",
@ -236,14 +240,14 @@
"total": "Totaal", "total": "Totaal",
"discount": "Korting", "discount": "Korting",
"sub_total": "Subtotaal", "sub_total": "Subtotaal",
"estimate_number": "Geschat aantal", "estimate_number": "Offerte nummer",
"ref_number": "Referentie nummer", "ref_number": "Referentie nummer",
"contact": "Contact", "contact": "Contact",
"add_item": "Voeg een item toe", "add_item": "Voeg een item toe",
"date": "Datum", "date": "Datum",
"due_date": "Opleveringsdatum", "due_date": "Opleveringsdatum",
"expiry_date": "Vervaldatum", "expiry_date": "Vervaldatum",
"status": "Statu", "status": "Status",
"add_tax": "Belasting toevoegen", "add_tax": "Belasting toevoegen",
"amount": "Bedrag", "amount": "Bedrag",
"action": "Actie", "action": "Actie",
@ -254,7 +258,7 @@
"mark_as_sent": "Markeren als verzonden", "mark_as_sent": "Markeren als verzonden",
"send_estimate": "Verzend offerte", "send_estimate": "Verzend offerte",
"resend_estimate": "Offerte opnieuw verzenden", "resend_estimate": "Offerte opnieuw verzenden",
"record_payment": "Bestaling registreren", "record_payment": "Betaling registreren",
"add_estimate": "Offerte toevoegen", "add_estimate": "Offerte toevoegen",
"save_estimate": "Bewaar offerte", "save_estimate": "Bewaar offerte",
"confirm_conversion": "Deze offerte wordt gebruikt om een nieuwe factuur te maken.", "confirm_conversion": "Deze offerte wordt gebruikt om een nieuwe factuur te maken.",
@ -270,6 +274,7 @@
"required": "Veld is vereist" "required": "Veld is vereist"
}, },
"accepted": "Geaccepteerd", "accepted": "Geaccepteerd",
"rejected": "Rejected",
"sent": "Verzonden", "sent": "Verzonden",
"draft": "Concept", "draft": "Concept",
"declined": "Geweigerd", "declined": "Geweigerd",
@ -316,6 +321,9 @@
"all": "Allemaal", "all": "Allemaal",
"paid": "Betaald", "paid": "Betaald",
"unpaid": "Onbetaald", "unpaid": "Onbetaald",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "Klant", "customer": "Klant",
"paid_status": "Betaling", "paid_status": "Betaling",
"ref_no": "REF NR.", "ref_no": "REF NR.",
@ -332,7 +340,7 @@
"add_item": "Voeg een item toe", "add_item": "Voeg een item toe",
"date": "Datum", "date": "Datum",
"due_date": "Opleveringsdatum", "due_date": "Opleveringsdatum",
"status": "Statu", "status": "Status",
"add_tax": "Belasting toevoegen", "add_tax": "Belasting toevoegen",
"amount": "Bedrag", "amount": "Bedrag",
"action": "Actie", "action": "Actie",
@ -347,7 +355,7 @@
"invoice_mark_as_sent": "Deze factuur wordt gemarkeerd als verzonden", "invoice_mark_as_sent": "Deze factuur wordt gemarkeerd als verzonden",
"confirm_send": "Deze factuur wordt via e-mail naar de klant gestuurd", "confirm_send": "Deze factuur wordt via e-mail naar de klant gestuurd",
"invoice_date": "Factuur datum", "invoice_date": "Factuur datum",
"record_payment": "Bestaling registreren", "record_payment": "Betaling registreren",
"add_new_invoice": "Nieuwe factuur toevoegen", "add_new_invoice": "Nieuwe factuur toevoegen",
"update_expense": "Onkosten bijwerken", "update_expense": "Onkosten bijwerken",
"edit_invoice": "Factuur bewerken", "edit_invoice": "Factuur bewerken",
@ -379,7 +387,7 @@
"type_item_description": "Type Item Beschrijving (optioneel)" "type_item_description": "Type Item Beschrijving (optioneel)"
}, },
"payment_attached_message": "Aan een van de geselecteerde facturen is al een betaling gekoppeld. Zorg ervoor dat u eerst de bijgevoegde betalingen verwijdert om door te gaan met de verwijdering", "payment_attached_message": "Aan een van de geselecteerde facturen is al een betaling gekoppeld. Zorg ervoor dat u eerst de bijgevoegde betalingen verwijdert om door te gaan met de verwijdering",
"confirm_delete": "U kunt deze factuur | niet terugvorderen U kunt deze facturen niet terugkrijgen", "confirm_delete": "Deze factuur wordt permanent verwijderd | Deze facturen worden permanent verwijderd",
"created_message": "Factuur succesvol aangemaakt", "created_message": "Factuur succesvol aangemaakt",
"updated_message": "Factuur succesvol bijgewerkt", "updated_message": "Factuur succesvol bijgewerkt",
"deleted_message": "Factuur succesvol verwijderd | Facturen succesvol verwijderd", "deleted_message": "Factuur succesvol verwijderd | Facturen succesvol verwijderd",
@ -434,6 +442,8 @@
"update_payment": "Betaling bijwerken", "update_payment": "Betaling bijwerken",
"payment": "Betaling | Betalingen", "payment": "Betaling | Betalingen",
"no_payments": "Nog geen betalingen!", "no_payments": "Nog geen betalingen!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Er zijn geen overeenkomende betalingen!", "no_matching_payments": "Er zijn geen overeenkomende betalingen!",
"list_of_payments": "Hier vind je jouw betalingen terug.", "list_of_payments": "Hier vind je jouw betalingen terug.",
"select_payment_mode": "Selecteer betalingswijze", "select_payment_mode": "Selecteer betalingswijze",
@ -442,7 +452,7 @@
"send_payment_successfully": "Betaling succesvol verzonden", "send_payment_successfully": "Betaling succesvol verzonden",
"user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet", "user_email_does_not_exist": "E-mailadres van gebruiker bestaat niet",
"something_went_wrong": "Er is iets fout gegaan", "something_went_wrong": "Er is iets fout gegaan",
"confirm_delete": "U kunt deze betaling niet herstellen U kunt deze betalingen niet terugkrijgen", "confirm_delete": "Deze betaling wordt permanent verwijderd | Deze betalingen worden permanent verwijderd",
"created_message": "De betaling is succesvol aangemaakt", "created_message": "De betaling is succesvol aangemaakt",
"updated_message": "Betaling succesvol bijgewerkt", "updated_message": "Betaling succesvol bijgewerkt",
"deleted_message": "Betaling succesvol verwijderd | Betalingen zijn verwijderd", "deleted_message": "Betaling succesvol verwijderd | Betalingen zijn verwijderd",
@ -463,6 +473,7 @@
"receipt": "Bon", "receipt": "Bon",
"amount": "Bedrag", "amount": "Bedrag",
"action": "Actie", "action": "Actie",
"not_selected": "Not selected",
"note": "Notitie", "note": "Notitie",
"category_id": "Categorie ID", "category_id": "Categorie ID",
"date": "Uitgavendatum", "date": "Uitgavendatum",
@ -476,7 +487,7 @@
"expense": "Uitgaven | Uitgaven", "expense": "Uitgaven | Uitgaven",
"no_expenses": "Nog geen kosten!", "no_expenses": "Nog geen kosten!",
"list_of_expenses": "Hier vind je jouw uitgaven terug.", "list_of_expenses": "Hier vind je jouw uitgaven terug.",
"confirm_delete": "U kunt deze kosten | niet terugkrijgen U kunt deze kosten niet terugvorderen", "confirm_delete": "Deze uitgave wordt permanent verwijderd | Deze kosten worden permanent verwijderd",
"created_message": "Kosten succesvol gemaakt", "created_message": "Kosten succesvol gemaakt",
"updated_message": "Kosten succesvol bijgewerkt", "updated_message": "Kosten succesvol bijgewerkt",
"deleted_message": "Kosten succesvol verwijderd | Uitgaven zijn verwijderd", "deleted_message": "Kosten succesvol verwijderd | Uitgaven zijn verwijderd",
@ -537,7 +548,7 @@
"title": "Verslag doen van", "title": "Verslag doen van",
"from_date": "Van datum", "from_date": "Van datum",
"to_date": "Tot datum", "to_date": "Tot datum",
"status": "Statu", "status": "Status",
"paid": "Betaald", "paid": "Betaald",
"unpaid": "Onbetaald", "unpaid": "Onbetaald",
"download_pdf": "Download PDF", "download_pdf": "Download PDF",
@ -572,17 +583,17 @@
"due_date": "Opleveringsdatum", "due_date": "Opleveringsdatum",
"amount": "Bedrag", "amount": "Bedrag",
"contact_name": "Contactnaam", "contact_name": "Contactnaam",
"status": "Statu" "status": "Status"
}, },
"estimates": { "estimates": {
"estimate": "Offerte", "estimate": "Offerte",
"estimate_date": "Geschatte datum", "estimate_date": "Offerte Datum",
"due_date": "Opleveringsdatum", "due_date": "Opleveringsdatum",
"estimate_number": "Geschat aantal", "estimate_number": "Offerte nummer",
"ref_number": "Referentie nummer", "ref_number": "Referentie nummer",
"amount": "Bedrag", "amount": "Bedrag",
"contact_name": "Contactnaam", "contact_name": "Contactnaam",
"status": "Statu" "status": "Status"
}, },
"expenses": { "expenses": {
"expenses": "Uitgaven", "expenses": "Uitgaven",
@ -606,7 +617,7 @@
"update_app": "App bijwerken", "update_app": "App bijwerken",
"backup": "Back-up", "backup": "Back-up",
"file_disk": "Bestandsopslag", "file_disk": "Bestandsopslag",
"custom_fields": "Custom Fields", "custom_fields": "Aangepaste velden",
"payment_modes": "Betaalmethodes", "payment_modes": "Betaalmethodes",
"notes": "Opmerkingen" "notes": "Opmerkingen"
}, },
@ -740,10 +751,13 @@
"title": "Facturen", "title": "Facturen",
"notes": "Opmerkingen", "notes": "Opmerkingen",
"invoice_prefix": "Factuurvoorvoegsel", "invoice_prefix": "Factuurvoorvoegsel",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Standaard factuur email text", "default_invoice_email_body": "Standaard factuur email text",
"invoice_settings": "Factuurinstellingen", "invoice_settings": "Factuurinstellingen",
"autogenerate_invoice_number": "Factuurnummer automatisch genereren", "autogenerate_invoice_number": "Factuurnummer automatisch genereren",
"invoice_setting_description": "Schakel dit uit als u niet automatisch factuurnummers wilt genereren telkens wanneer u een nieuwe factuur maakt.", "invoice_setting_description": "Schakel dit uit als u niet automatisch factuurnummers wilt genereren telkens wanneer u een nieuwe factuur maakt.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Voer het factuurvoorvoegsel in", "enter_invoice_prefix": "Voer het factuurvoorvoegsel in",
"terms_and_conditions": "Voorwaarden", "terms_and_conditions": "Voorwaarden",
"company_address_format": "Bedrijfsadres format", "company_address_format": "Bedrijfsadres format",
@ -754,27 +768,33 @@
"estimates": { "estimates": {
"title": "Offertes", "title": "Offertes",
"estimate_prefix": "Voorvoegsel schatten", "estimate_prefix": "Voorvoegsel schatten",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Standaard offerte email text", "default_estimate_email_body": "Standaard offerte email text",
"estimate_settings": "Instellingen schatten", "estimate_settings": "Instellingen schatten",
"autogenerate_estimate_number": "Automatisch geschat nummer genereren", "autogenerate_estimate_number": "Automatisch geschat nummer genereren",
"estimate_setting_description": "Schakel dit uit als u niet automatisch offertesaantallen wilt genereren telkens wanneer u een nieuwe offerte maakt.", "estimate_setting_description": "Schakel dit uit als u niet automatisch offertesaantallen wilt genereren telkens wanneer u een nieuwe offerte maakt.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Voer het prefixnummer in", "enter_estimate_prefix": "Voer het prefixnummer in",
"estimate_setting_updated": "Instelling Offerte succesvol bijgewerkt", "estimate_setting_updated": "Instelling Offerte succesvol bijgewerkt",
"company_address_format": "Bedrijfsadres format", "company_address_format": "Bedrijfsadres format",
"billing_address_format": "Factuuradres Format", "billing_address_format": "Factuuradres Format",
"shipping_address_format": "Shipping Address Format" "shipping_address_format": "Verzendadres format"
}, },
"payments": { "payments": {
"title": "Betalingen", "title": "Betalingen",
"description": "Modes of transaction for payments", "description": "Manieren om te betalen",
"payment_prefix": "Betalingsvoorvoegsel", "payment_prefix": "Betalingsvoorvoegsel",
"default_payment_email_body": "Default Payment Email Body", "payment_number_length": "Payment number lenght",
"default_payment_email_body": "Standaard format betalingsmail",
"payment_settings": "Betalingsinstellingen", "payment_settings": "Betalingsinstellingen",
"autogenerate_payment_number": "Betalingsnummer automatisch genereren", "autogenerate_payment_number": "Betalingsnummer automatisch genereren",
"payment_setting_description": "Schakel dit uit als u niet elke keer dat u een nieuwe betaling aanmaakt, automatisch betalingsnummers wilt genereren.", "payment_setting_description": "Schakel dit uit als u niet elke keer dat u een nieuwe betaling aanmaakt, automatisch betalingsnummers wilt genereren.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Voer het betalingsvoorvoegsel in", "enter_payment_prefix": "Voer het betalingsvoorvoegsel in",
"payment_setting_updated": "Betalingsinstelling geüpdatet", "payment_setting_updated": "Betalingsinstelling geüpdatet",
"payment_modes": "Payment Modes", "payment_modes": "Betaalmethodes",
"add_payment_mode": "Betaalmodus toevoegen", "add_payment_mode": "Betaalmodus toevoegen",
"edit_payment_mode": "Betaalmodus bewerken", "edit_payment_mode": "Betaalmodus bewerken",
"mode_name": "Mode naam", "mode_name": "Mode naam",
@ -783,8 +803,8 @@
"payment_mode_confirm_delete": "U kunt deze betalingsmodus niet herstellen", "payment_mode_confirm_delete": "U kunt deze betalingsmodus niet herstellen",
"already_in_use": "De betalingsmodus is al in gebruik", "already_in_use": "De betalingsmodus is al in gebruik",
"deleted_message": "Betaalwijze succesvol verwijderd", "deleted_message": "Betaalwijze succesvol verwijderd",
"company_address_format": "Company Address Format", "company_address_format": "Bedrijfsadres format",
"from_customer_address_format": "From Customer Address Format" "from_customer_address_format": "Van klant adres formaat"
}, },
"items": { "items": {
"title": "Artikelen", "title": "Artikelen",
@ -800,18 +820,18 @@
}, },
"notes": { "notes": {
"title": "Opmerkingen", "title": "Opmerkingen",
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "description": "Bespaar tijd door notities te maken en ze opnieuw te gebruiken op uw facturen, ramingen en betalingen.",
"notes": "Opmerkingen", "notes": "Opmerkingen",
"type": "Type", "type": "Type",
"add_note": "Add Note", "add_note": "Notitie toevoegen",
"add_new_note": "Add New Note", "add_new_note": "Voeg een nieuwe notitie toe",
"name": "Naam", "name": "Naam",
"edit_note": "Edit Note", "edit_note": "Notitie bewerken",
"note_added": "Note added successfully", "note_added": "Notitie toegevoegd",
"note_updated": "Note Updated successfully", "note_updated": "Notitie bijgewerkt",
"note_confirm_delete": "You will not be able to recover this Note", "note_confirm_delete": "U kunt deze notitie niet terughalen",
"already_in_use": "Note is already in use", "already_in_use": "Notitie is reeds in gebruik",
"deleted_message": "Note deleted successfully" "deleted_message": "Notitie verwijderd"
} }
}, },
"account_settings": { "account_settings": {
@ -859,7 +879,7 @@
"created_message": "Belastingtype is gemaakt", "created_message": "Belastingtype is gemaakt",
"updated_message": "Belastingtype succesvol bijgewerkt", "updated_message": "Belastingtype succesvol bijgewerkt",
"deleted_message": "Belastingtype succesvol verwijderd", "deleted_message": "Belastingtype succesvol verwijderd",
"confirm_delete": "U kunt dit belastingtype niet terugkrijgen", "confirm_delete": "Dit belastingtype wordt permanent verwijderd",
"already_in_use": "Belasting al in gebruik" "already_in_use": "Belasting al in gebruik"
}, },
"expense_category": { "expense_category": {
@ -879,7 +899,7 @@
}, },
"preferences": { "preferences": {
"currency": "Valuta", "currency": "Valuta",
"default_language": "Default Language", "default_language": "Standaard taal",
"time_zone": "Tijdzone", "time_zone": "Tijdzone",
"fiscal_year": "Financieel jaar", "fiscal_year": "Financieel jaar",
"date_format": "Datumnotatie", "date_format": "Datumnotatie",
@ -892,7 +912,7 @@
"updated_message": "Voorkeuren succesvol bijgewerkt", "updated_message": "Voorkeuren succesvol bijgewerkt",
"select_language": "Selecteer taal", "select_language": "Selecteer taal",
"select_time_zone": "Selecteer Tijdzone", "select_time_zone": "Selecteer Tijdzone",
"select_date_format": "Select Date Format", "select_date_format": "Selecteer datum/tijdindeling",
"select_financial_year": "Selecteer financieel ja" "select_financial_year": "Selecteer financieel ja"
}, },
"update_app": { "update_app": {
@ -901,7 +921,7 @@
"check_update": "Controleer op updates", "check_update": "Controleer op updates",
"avail_update": "Nieuwe update beschikbaar", "avail_update": "Nieuwe update beschikbaar",
"next_version": "Volgende versie", "next_version": "Volgende versie",
"requirements": "Requirements", "requirements": "Vereisten",
"update": "Nu updaten", "update": "Nu updaten",
"update_progress": "Update wordt uitgevoerd...", "update_progress": "Update wordt uitgevoerd...",
"progress_text": "Het duurt maar een paar minuten. Vernieuw het scherm niet en sluit het venster niet voordat de update is voltooid", "progress_text": "Het duurt maar een paar minuten. Vernieuw het scherm niet en sluit het venster niet voordat de update is voltooid",
@ -911,6 +931,7 @@
"download_zip_file": "Download ZIP-bestand", "download_zip_file": "Download ZIP-bestand",
"unzipping_package": "Pakket uitpakken", "unzipping_package": "Pakket uitpakken",
"copying_files": "Bestanden kopiëren", "copying_files": "Bestanden kopiëren",
"deleting_files": "Deleting Unused files",
"running_migrations": "Migraties uitvoeren", "running_migrations": "Migraties uitvoeren",
"finishing_update": "Afwerking Update", "finishing_update": "Afwerking Update",
"update_failed": "Update mislukt", "update_failed": "Update mislukt",
@ -918,11 +939,11 @@
}, },
"backup": { "backup": {
"title": "Backup | Backups", "title": "Backup | Backups",
"description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", "description": "De back-up is een zipfile met alle bestanden in de mappen die je opgeeft samen met een dump van je database",
"new_backup": "Add New Backup", "new_backup": "Nieuwe back-up",
"create_backup": "Create Backup", "create_backup": "Backup maken",
"select_backup_type": "Select Backup Type", "select_backup_type": "Backup-type selecteren",
"backup_confirm_delete": "You will not be able to recover this Backup", "backup_confirm_delete": "U kunt deze back-up niet terughalen",
"path": "pad", "path": "pad",
"new_disk": "Nieuwe schijf", "new_disk": "Nieuwe schijf",
"created_at": "aangemaakt op", "created_at": "aangemaakt op",
@ -935,39 +956,39 @@
"used_storage": "gebruikte opslag", "used_storage": "gebruikte opslag",
"select_disk": "Selecteer Disk", "select_disk": "Selecteer Disk",
"action": "Actie", "action": "Actie",
"deleted_message": "Backup deleted successfully", "deleted_message": "Back-up is succesvol verwijderd",
"created_message": "Backup created successfully", "created_message": "Back-up successvol gemaakt",
"invalid_disk_credentials": "Ongeldige inloggegevens voor geselecteerde schijf" "invalid_disk_credentials": "Ongeldige inloggegevens voor geselecteerde schijf"
}, },
"disk": { "disk": {
"title": "File Disk | File Disks", "title": "Bestandsschijf | Bestandsschijven",
"description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", "description": "Standaard gebruikt Crater uw lokale schijf om back-ups, avatars en andere afbeeldingen op te slaan. U kunt indien gewenst meer dan één opslaglocatie configureren zoals DigitalOcean, S3 en Dropbox.",
"created_at": "aangemaakt op", "created_at": "aangemaakt op",
"dropbox": "dropbox", "dropbox": "dropbox",
"name": "Naam", "name": "Naam",
"driver": "Stuurprogramma", "driver": "Stuurprogramma",
"disk_type": "Type", "disk_type": "Type",
"disk_name": "Disk Name", "disk_name": "Naam van de schijf",
"new_disk": "Add New Disk", "new_disk": "Nieuwe schijf toevoegen",
"filesystem_driver": "Filesystem Driver", "filesystem_driver": "Bestandssysteem locatie",
"local_driver": "local Driver", "local_driver": "lokaal besturingsprogramma",
"local_root": "local Root", "local_root": "local Root",
"public_driver": "Public Driver", "public_driver": "Publiek besturingsprogramma",
"public_root": "Public Root", "public_root": "Public Root",
"public_url": "Public URL", "public_url": "Publieke URL",
"public_visibility": "Public Visibility", "public_visibility": "Publieke zichtbaarheid",
"media_driver": "Media Driver", "media_driver": "Media stuurprogramma",
"media_root": "Media Root", "media_root": "Media Root",
"aws_driver": "AWS Driver", "aws_driver": "AWS Stuurprogramma",
"aws_key": "AWS Key", "aws_key": "AWS Sleutel",
"aws_secret": "AWS Secret", "aws_secret": "AWS Secret",
"aws_region": "AWS Region", "aws_region": "AWS Regio",
"aws_bucket": "AWS Bucket", "aws_bucket": "AWS Bucket",
"aws_root": "AWS Root", "aws_root": "AWS Root",
"do_spaces_type": "Do Spaces type", "do_spaces_type": "Do Spaces type",
"do_spaces_key": "Do Spaces key", "do_spaces_key": "Do Spaces Key",
"do_spaces_secret": "Do Spaces Secret", "do_spaces_secret": "Do Spaces Secret",
"do_spaces_region": "Do Spaces Region", "do_spaces_region": "Do Spaces Regio",
"do_spaces_bucket": "Do Spaces Bucket", "do_spaces_bucket": "Do Spaces Bucket",
"do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_endpoint": "Do Spaces Endpoint",
"do_spaces_root": "Do Spaces Root", "do_spaces_root": "Do Spaces Root",
@ -977,24 +998,25 @@
"dropbox_secret": "Dropbox Secret", "dropbox_secret": "Dropbox Secret",
"dropbox_app": "Dropbox App", "dropbox_app": "Dropbox App",
"dropbox_root": "Dropbox Root", "dropbox_root": "Dropbox Root",
"default_driver": "Default Driver", "default_driver": "Standaard stuurprogramma",
"is_default": "IS DEFAULT", "is_default": "IS STANDAARD",
"set_default_disk": "Set Default Disk", "set_default_disk": "Standaardschijf instellen",
"success_set_default_disk": "Disk set as default successfully", "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"save_pdf_to_disk": "Save PDFs to Disk", "success_set_default_disk": "Standaardschijf ingesteld",
"disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", "save_pdf_to_disk": "PDF's opslaan op schijf",
"select_disk": "Select Disk", "disk_setting_description": " Schakel dit in als je een kopie van elke factuur, raming en betalingsbewijs automatisch op je standaard schijf wilt opslaan. Het inschakelen van deze optie zal de laadtijd verminderen wanneer de PDF's worden bekeken.",
"disk_settings": "Disk Settings", "select_disk": "Selecteer Schijf",
"confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", "disk_settings": "Schijfinstellingen",
"confirm_delete": "Uw bestaande bestanden en mappen in de opgegeven schijf worden niet beïnvloed, maar uw schijfconfiguratie wordt uit Crater verwijderd",
"action": "Actie", "action": "Actie",
"edit_file_disk": "Edit File Disk", "edit_file_disk": "Bestandsschijf bewerken",
"success_create": "Disk added successfully", "success_create": "Schijf toegevoegd",
"success_update": "Disk updated successfully", "success_update": "Schijf bijgewerkt",
"error": "Disk addition failed", "error": "Schijf niet toegevoegd",
"deleted_message": "File Disk deleted successfully", "deleted_message": "Bestandsschijf verwijderd",
"disk_variables_save_successfully": "Disk Configured Successfully", "disk_variables_save_successfully": "Schijf geconfigureerd",
"disk_variables_save_error": "Disk configuration failed.", "disk_variables_save_error": "Schijfconfiguratie mislukt.",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Ongeldige inloggegevens voor geselecteerde schijf"
} }
}, },
"wizard": { "wizard": {
@ -1033,14 +1055,14 @@
"database": { "database": {
"database": "Site-URL en database", "database": "Site-URL en database",
"connection": "Database verbinding", "connection": "Database verbinding",
"host": "Database Host", "host": "Database host",
"port": "Databasepoort", "port": "Databasepoort",
"password": "Database wachtwoord", "password": "Database wachtwoord",
"app_url": "App-URL", "app_url": "App-URL",
"app_domain": "App Domain", "app_domain": "App Domein",
"username": "Database gebruikersnaam", "username": "Database gebruikersnaam",
"db_name": "Database naam", "db_name": "Database naam",
"db_path": "Database Path", "db_path": "Databankpad",
"desc": "Maak een database op uw server en stel de referenties in via het onderstaande formulier." "desc": "Maak een database op uw server en stel de referenties in via het onderstaande formulier."
}, },
"permissions": { "permissions": {
@ -1050,8 +1072,8 @@
"permission_desc": "Hieronder vindt u de lijst met mapmachtigingen die vereist zijn om de app te laten werken. Als de machtigingscontrole mislukt, moet u de mapmachtigingen bijwerken." "permission_desc": "Hieronder vindt u de lijst met mapmachtigingen die vereist zijn om de app te laten werken. Als de machtigingscontrole mislukt, moet u de mapmachtigingen bijwerken."
}, },
"mail": { "mail": {
"host": "Mail Host", "host": "E-mail server",
"port": "Mail Port", "port": "E-mail Poort",
"driver": "Mail-stuurprogramma", "driver": "Mail-stuurprogramma",
"secret": "Geheim", "secret": "Geheim",
"mailgun_secret": "Mailgun Secret", "mailgun_secret": "Mailgun Secret",
@ -1094,7 +1116,7 @@
"invoices_and_estimates": "facturen en offertes met de mogelijkheid om meerdere sjablonen te kiezen." "invoices_and_estimates": "facturen en offertes met de mogelijkheid om meerdere sjablonen te kiezen."
}, },
"validation": { "validation": {
"invalid_phone": "Invalid Phone Number", "invalid_phone": "Ongeldig Telefoonnummer",
"invalid_url": "Ongeldige URL (bijvoorbeeld: http://www.crater.com))", "invalid_url": "Ongeldige URL (bijvoorbeeld: http://www.crater.com))",
"invalid_domain_url": "Ongeldige URL (bijvoorbeeld: crater.com))", "invalid_domain_url": "Ongeldige URL (bijvoorbeeld: crater.com))",
"required": "Veld is verplicht", "required": "Veld is verplicht",
@ -1129,42 +1151,47 @@
"address_maxlength": "Adres mag niet groter zijn dan 255 tekens.", "address_maxlength": "Adres mag niet groter zijn dan 255 tekens.",
"ref_number_maxlength": "Ref-nummer mag niet groter zijn dan 255 tekens.", "ref_number_maxlength": "Ref-nummer mag niet groter zijn dan 255 tekens.",
"prefix_maxlength": "Het voorvoegsel mag niet meer dan 5 tekens bevatten.", "prefix_maxlength": "Het voorvoegsel mag niet meer dan 5 tekens bevatten.",
"something_went_wrong": "Er is iets fout gegaan" "something_went_wrong": "Er is iets fout gegaan",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Offerte", "pdf_estimate_label": "Offerte",
"pdf_estimate_number": "Geschat aantal", "pdf_estimate_number": "Offerte nummer",
"pdf_estimate_date": "Geschatte datum", "pdf_estimate_date": "Offerte Datum",
"pdf_estimate_expire_date": "Expiry date", "pdf_estimate_expire_date": "Vervaldatum",
"pdf_invoice_label": "Factuur", "pdf_invoice_label": "Factuur",
"pdf_invoice_number": "Factuurnummer", "pdf_invoice_number": "Factuurnummer",
"pdf_invoice_date": "Factuur datum", "pdf_invoice_date": "Factuur datum",
"pdf_invoice_due_date": "Due date", "pdf_invoice_due_date": "Opleveringsdatum",
"pdf_notes": "Opmerkingen", "pdf_notes": "Opmerkingen",
"pdf_items_label": "Artikelen", "pdf_items_label": "Artikelen",
"pdf_quantity_label": "Aantal stuks", "pdf_quantity_label": "Aantal stuks",
"pdf_price_label": "Prijs", "pdf_price_label": "Prijs",
"pdf_discount_label": "Korting", "pdf_discount_label": "Korting",
"pdf_amount_label": "Bedrag", "pdf_amount_label": "Bedrag",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Subtotaal",
"pdf_total": "Totaal", "pdf_total": "Totaal",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_label": "Payment",
"pdf_payment_date": "Payment Date", "pdf_payment_receipt_label": "Betalingsafschrift",
"pdf_payment_date": "Betalingsdatum",
"pdf_payment_number": "Betalingsnummer", "pdf_payment_number": "Betalingsnummer",
"pdf_payment_mode": "Betaalmethode", "pdf_payment_mode": "Betaalmethode",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "Ontvangen bedrag",
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "UITGAVEN RAPPORT",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "TOTALE UITGAVEN",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "WINST & VERLIES RAPPORT",
"pdf_income_label": "INCOME", "pdf_sales_customers_label": "Sales Customer Report",
"pdf_net_profit_label": "NET PROFIT", "pdf_sales_items_label": "Sales Item Report",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_tax_summery_label": "Tax Summary Report",
"pdf_total_sales_label": "TOTAL SALES", "pdf_income_label": "INKOMEN",
"pdf_item_sales_label": "Sales Report: By Item", "pdf_net_profit_label": "NETTO WINST",
"pdf_tax_report_label": "TAX REPORT", "pdf_customer_sales_report": "Verkooprapport: per klant",
"pdf_total_tax_label": "TOTAL TAX", "pdf_total_sales_label": "TOTALE VERKOPEN",
"pdf_item_sales_label": "Verkooprapport: Per Item",
"pdf_tax_report_label": "BELASTINGEN RAPPORT",
"pdf_total_tax_label": "TOTALE BELASTINGEN",
"pdf_tax_types_label": "Belastingtypen", "pdf_tax_types_label": "Belastingtypen",
"pdf_expenses_label": "Uitgaven", "pdf_expenses_label": "Uitgaven",
"pdf_bill_to": "Rekening naar,", "pdf_bill_to": "Rekening naar,",
"pdf_ship_to": "Verzend naar,", "pdf_ship_to": "Verzend naar,",
"pdf_received_from": "Received from:" "pdf_received_from": "Ontvangen van:"
} }

View File

@ -158,6 +158,8 @@
"copy_billing_address": "Cópia de faturamento", "copy_billing_address": "Cópia de faturamento",
"no_customers": "Ainda não há clientes!", "no_customers": "Ainda não há clientes!",
"no_customers_found": "Clientes não encontrados!", "no_customers_found": "Clientes não encontrados!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Esta seção conterá a lista de clientes.", "list_of_customers": "Esta seção conterá a lista de clientes.",
"primary_display_name": "Nome de exibição principal", "primary_display_name": "Nome de exibição principal",
"select_currency": "Selecione o tipo de moeda", "select_currency": "Selecione o tipo de moeda",
@ -181,6 +183,7 @@
"added_on": "Adicionado", "added_on": "Adicionado",
"price": "Preço", "price": "Preço",
"date_of_creation": "Data de criação", "date_of_creation": "Data de criação",
"not_selected": "No item selected",
"action": "Ação", "action": "Ação",
"add_item": "Adicionar item", "add_item": "Adicionar item",
"save_item": "Salvar item", "save_item": "Salvar item",
@ -250,6 +253,7 @@
"required": "Campo obrigatório" "required": "Campo obrigatório"
}, },
"accepted": "Aceito", "accepted": "Aceito",
"rejected": "Rejected",
"sent": "Enviado", "sent": "Enviado",
"draft": "Rascunho", "draft": "Rascunho",
"declined": "Rejeitado", "declined": "Rejeitado",
@ -296,6 +300,9 @@
"all": "Todas", "all": "Todas",
"paid": "Paga", "paid": "Paga",
"unpaid": "Não Paga", "unpaid": "Não Paga",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CLIENTE", "customer": "CLIENTE",
"paid_status": "STATUS PAGAMENTO", "paid_status": "STATUS PAGAMENTO",
"ref_no": "REFERÊNCIA", "ref_no": "REFERÊNCIA",
@ -413,6 +420,8 @@
"update_payment": "Atualizar Pagamento", "update_payment": "Atualizar Pagamento",
"payment": "Pagamento | Pagamentos", "payment": "Pagamento | Pagamentos",
"no_payments": "Ainda sem pagamentos!", "no_payments": "Ainda sem pagamentos!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Não há pagamentos correspondentes!", "no_matching_payments": "Não há pagamentos correspondentes!",
"list_of_payments": "Esta seção conterá a lista de pagamentos.", "list_of_payments": "Esta seção conterá a lista de pagamentos.",
"select_payment_mode": "Selecione a forma de pagamento", "select_payment_mode": "Selecione a forma de pagamento",
@ -436,6 +445,7 @@
"receipt": "Receita", "receipt": "Receita",
"amount": "Montante", "amount": "Montante",
"action": "Ação", "action": "Ação",
"not_selected": "Not selected",
"note": "Observação", "note": "Observação",
"category_id": "Categoria", "category_id": "Categoria",
"date": "Data da Despesa", "date": "Data da Despesa",

View File

@ -10,15 +10,15 @@
"reports": "Relatórios", "reports": "Relatórios",
"settings": "Configurações", "settings": "Configurações",
"logout": "Encerrar sessão", "logout": "Encerrar sessão",
"users": "Users" "users": "Usuários"
}, },
"general": { "general": {
"add_company": "Add Company", "add_company": "Adicionar Empresa",
"view_pdf": "Ver PDF", "view_pdf": "Ver PDF",
"copy_pdf_url": "Copy PDF Url", "copy_pdf_url": "Copiar URL do PDF",
"download_pdf": "Baixar PDF", "download_pdf": "Baixar PDF",
"save": "Salvar", "save": "Salvar",
"create": "Create", "create": "Criar",
"cancel": "Cancelar", "cancel": "Cancelar",
"update": "Atualizar", "update": "Atualizar",
"deselect": "Desmarcar", "deselect": "Desmarcar",
@ -33,10 +33,10 @@
"subject": "Sujeita", "subject": "Sujeita",
"body": "Corpo", "body": "Corpo",
"message": "Mensagem", "message": "Mensagem",
"send": "Send", "send": "Enviar",
"go_back": "Voltar", "go_back": "Voltar",
"back_to_login": "Voltar ao Login", "back_to_login": "Voltar ao Login?",
"home": "Home", "home": "Painel",
"filter": "Filtrar", "filter": "Filtrar",
"delete": "Excluir", "delete": "Excluir",
"edit": "Editar", "edit": "Editar",
@ -59,7 +59,7 @@
"sent": "Enviado", "sent": "Enviado",
"all": "Todos", "all": "Todos",
"select_all": "Selecionar tudo", "select_all": "Selecionar tudo",
"choose_file": "Escolha um arquivo.", "choose_file": "Clique aqui para escolher um arquivo",
"choose_template": "Escolha um modelo", "choose_template": "Escolha um modelo",
"choose": "Escolher", "choose": "Escolher",
"remove": "Excluir", "remove": "Excluir",
@ -84,14 +84,15 @@
"street_2": "Rua # 2", "street_2": "Rua # 2",
"action_failed": "Ação: Falhou", "action_failed": "Ação: Falhou",
"retry": "Atualização falhou", "retry": "Atualização falhou",
"choose_note": "Choose Note", "choose_note": "Escolher Nota",
"no_note_found": "No Note Found", "no_note_found": "Nenhuma Nota Encontrada",
"insert_note": "Insert Note" "insert_note": "Inserir Nota",
"copied_pdf_url_clipboard": "Copied PDF url to clipboard!"
}, },
"dashboard": { "dashboard": {
"select_year": "Selecione Ano", "select_year": "Selecione Ano",
"cards": { "cards": {
"due_amount": "Montante devido", "due_amount": "Valor devido",
"customers": "Clientes", "customers": "Clientes",
"invoices": "Faturas", "invoices": "Faturas",
"estimates": "Orçamentos" "estimates": "Orçamentos"
@ -111,7 +112,7 @@
}, },
"recent_invoices_card": { "recent_invoices_card": {
"title": "Faturas vencidas", "title": "Faturas vencidas",
"due_on": "vencido em", "due_on": "Vencido em",
"customer": "Cliente", "customer": "Cliente",
"amount_due": "Valor Devido", "amount_due": "Valor Devido",
"actions": "Ações", "actions": "Ações",
@ -130,21 +131,21 @@
"name": "Nome", "name": "Nome",
"description": "Descrição", "description": "Descrição",
"percent": "Porcentagem", "percent": "Porcentagem",
"compound_tax": "Imposto compuesto" "compound_tax": "Imposto Composto"
}, },
"global_search": { "global_search": {
"search": "Search...", "search": "Buscar...",
"customers": "Clientes", "customers": "Clientes",
"users": "Users", "users": "Usuários",
"no_results_found": "No Results Found" "no_results_found": "Nenhum Resultado Encontrado"
}, },
"customers": { "customers": {
"title": "Clientes", "title": "Clientes",
"add_customer": "Adicionar cliente", "add_customer": "Adicionar cliente",
"contacts_list": "Lista de clientes", "contacts_list": "Lista de clientes",
"name": "Nome", "name": "Nome",
"mail": "Mail | Mails", "mail": "Email | Emails",
"statement": "Statement", "statement": "Declaração",
"display_name": "Nome de exibição", "display_name": "Nome de exibição",
"primary_contact_name": "Nome do contato principal", "primary_contact_name": "Nome do contato principal",
"contact_name": "Nome de Contato", "contact_name": "Nome de Contato",
@ -153,13 +154,13 @@
"address": "Endereço", "address": "Endereço",
"phone": "Telefone", "phone": "Telefone",
"website": "Site", "website": "Site",
"overview": "Overview", "overview": "Visão Geral",
"enable_portal": "Enable Portal", "enable_portal": "Habilitar Portal",
"country": "Pais", "country": "Pais",
"state": "Estado", "state": "Estado",
"city": "Cidade", "city": "Cidade",
"zip_code": "Código postal", "zip_code": "CEP",
"added_on": "Adicionado", "added_on": "Adicionado em",
"action": "Ação", "action": "Ação",
"password": "Senha", "password": "Senha",
"street_number": "Número", "street_number": "Número",
@ -169,14 +170,16 @@
"save_customer": "Salvar cliente", "save_customer": "Salvar cliente",
"update_customer": "Atualizar cliente", "update_customer": "Atualizar cliente",
"customer": "Cliente | Clientes", "customer": "Cliente | Clientes",
"new_customer": "Novo cliente", "new_customer": "Novo Cliente",
"edit_customer": "Editar cliente", "edit_customer": "Editar Cliente",
"basic_info": "Informação basica", "basic_info": "Informação sica",
"billing_address": "Endereço de cobrança", "billing_address": "Endereço de cobrança",
"shipping_address": "Endereço de entrega", "shipping_address": "Endereço de entrega",
"copy_billing_address": "Cópia de faturamento", "copy_billing_address": "Copiar Endereço de Faturamento",
"no_customers": "Ainda não há clientes!", "no_customers": "Ainda não há clientes!",
"no_customers_found": "Clientes não encontrados!", "no_customers_found": "Clientes não encontrados!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Esta seção conterá a lista de clientes.", "list_of_customers": "Esta seção conterá a lista de clientes.",
"primary_display_name": "Nome de exibição principal", "primary_display_name": "Nome de exibição principal",
"select_currency": "Selecione o tipo de moeda", "select_currency": "Selecione o tipo de moeda",
@ -186,7 +189,7 @@
"no_matching_customers": "Não há clientes correspondentes!", "no_matching_customers": "Não há clientes correspondentes!",
"phone_number": "Número de telefone", "phone_number": "Número de telefone",
"create_date": "Criar Data", "create_date": "Criar Data",
"confirm_delete": "Você não poderá recuperar este cliente e todas as faturas, estimativas e pagamentos relacionados. | Você não poderá recuperar esses clientes e todas as faturas, estimativas e pagamentos relacionados.", "confirm_delete": "Você não poderá recuperar este cliente e todas as faturas, orçamentos e pagamentos relacionados. | Você não poderá recuperar esses clientes e todas as faturas, estimativas e pagamentos relacionados.",
"created_message": "Cliente criado com sucesso", "created_message": "Cliente criado com sucesso",
"updated_message": "Cliente atualizado com sucesso", "updated_message": "Cliente atualizado com sucesso",
"deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso" "deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso"
@ -200,6 +203,7 @@
"added_on": "Adicionado", "added_on": "Adicionado",
"price": "Preço", "price": "Preço",
"date_of_creation": "Data de criação", "date_of_creation": "Data de criação",
"not_selected": "No item selected",
"action": "Ação", "action": "Ação",
"add_item": "Adicionar item", "add_item": "Adicionar item",
"save_item": "Salvar item", "save_item": "Salvar item",
@ -208,11 +212,11 @@
"add_new_item": "Adicionar novo item", "add_new_item": "Adicionar novo item",
"new_item": "Novo item", "new_item": "Novo item",
"edit_item": "Editar item", "edit_item": "Editar item",
"no_items": "Ainda não existe itens", "no_items": "Ainda não existe itens!",
"list_of_items": "Esta seção conterá a lista de itens.", "list_of_items": "Esta seção conterá a lista de itens.",
"select_a_unit": "Seleciona unidade", "select_a_unit": "selecionar unidade",
"taxes": "Impostos", "taxes": "Impostos",
"item_attached_message": "Não é possível excluir um item que já está em uso.", "item_attached_message": "Não é possível excluir um item que já está em uso",
"confirm_delete": "Você não poderá recuperar este item | Você não poderá recuperar esses itens", "confirm_delete": "Você não poderá recuperar este item | Você não poderá recuperar esses itens",
"created_message": "Item criado com sucesso", "created_message": "Item criado com sucesso",
"updated_message": "Item atualizado com sucesso", "updated_message": "Item atualizado com sucesso",
@ -222,9 +226,9 @@
"title": "Orçamentos", "title": "Orçamentos",
"estimate": "Orçamento | Orçamentos", "estimate": "Orçamento | Orçamentos",
"estimates_list": "Lista de orçamentos", "estimates_list": "Lista de orçamentos",
"days": "{dias} dias", "days": "{days} Dias",
"months": "{meses} Mês", "months": "{months} Mês",
"years": "{Anos} Ano", "years": "{years} Ano",
"all": "Todos", "all": "Todos",
"paid": "Pago", "paid": "Pago",
"unpaid": "Não pago", "unpaid": "Não pago",
@ -245,7 +249,7 @@
"expiry_date": "Data de expiração", "expiry_date": "Data de expiração",
"status": "Status", "status": "Status",
"add_tax": "Adicionar Imposto", "add_tax": "Adicionar Imposto",
"amount": "Montante", "amount": "Valor",
"action": "Ação", "action": "Ação",
"notes": "Observações", "notes": "Observações",
"tax": "Imposto", "tax": "Imposto",
@ -253,12 +257,12 @@
"convert_to_invoice": "Converter em fatura", "convert_to_invoice": "Converter em fatura",
"mark_as_sent": "Marcar como enviado", "mark_as_sent": "Marcar como enviado",
"send_estimate": "Enviar orçamento", "send_estimate": "Enviar orçamento",
"resend_estimate": "Resend Estimate", "resend_estimate": "Reenviar Orçamento",
"record_payment": "Registro de pago", "record_payment": "Registro de pago",
"add_estimate": "Adicionar orçamento", "add_estimate": "Adicionar orçamento",
"save_estimate": "Salvar Orçamento", "save_estimate": "Salvar Orçamento",
"confirm_conversion": "Deseja converter este orçamento em uma fatura?", "confirm_conversion": "Esse orçamento será usado para criar uma nova Fatura.",
"conversion_message": "Converção realizada com sucesso", "conversion_message": "Fatura criada com sucesso",
"confirm_send_estimate": "Este orçamento será enviado por email ao cliente", "confirm_send_estimate": "Este orçamento será enviado por email ao cliente",
"confirm_mark_as_sent": "Este orçamento será marcado como enviado", "confirm_mark_as_sent": "Este orçamento será marcado como enviado",
"confirm_mark_as_accepted": "Este orçamento será marcado como Aceito", "confirm_mark_as_accepted": "Este orçamento será marcado como Aceito",
@ -270,6 +274,7 @@
"required": "Campo obrigatório" "required": "Campo obrigatório"
}, },
"accepted": "Aceito", "accepted": "Aceito",
"rejected": "Rejected",
"sent": "Enviado", "sent": "Enviado",
"draft": "Rascunho", "draft": "Rascunho",
"declined": "Rejeitado", "declined": "Rejeitado",
@ -277,10 +282,10 @@
"add_new_estimate": "Adicionar novo orçamento", "add_new_estimate": "Adicionar novo orçamento",
"update_Estimate": "Atualizar orçamento", "update_Estimate": "Atualizar orçamento",
"edit_estimate": "Editar orçamento", "edit_estimate": "Editar orçamento",
"items": "artículos", "items": "itens",
"Estimate": "Orçamento | Orçamentos", "Estimate": "Orçamento | Orçamentos",
"add_new_tax": "Adicionar novo imposto", "add_new_tax": "Adicionar novo imposto",
"no_estimates": "Ainda não há orcamentos", "no_estimates": "Ainda não há orçamentos ainda!",
"list_of_estimates": "Esta seção contém a lista de orçamentos.", "list_of_estimates": "Esta seção contém a lista de orçamentos.",
"mark_as_rejected": "Marcar como rejeitado", "mark_as_rejected": "Marcar como rejeitado",
"mark_as_accepted": "Marcar como aceito", "mark_as_accepted": "Marcar como aceito",
@ -291,7 +296,7 @@
"updated_message": "Orçamento atualizado com sucesso", "updated_message": "Orçamento atualizado com sucesso",
"deleted_message": "Orçamento excluído com sucesso | Orçamentos excluídos com sucesso", "deleted_message": "Orçamento excluído com sucesso | Orçamentos excluídos com sucesso",
"user_email_does_not_exist": "Email de usuário não existe", "user_email_does_not_exist": "Email de usuário não existe",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "algo deu errado",
"item": { "item": {
"title": "Titulo do item", "title": "Titulo do item",
"description": "Descrição", "description": "Descrição",
@ -302,26 +307,29 @@
"total_discount": "Desconto total", "total_discount": "Desconto total",
"sub_total": "Subtotal", "sub_total": "Subtotal",
"tax": "Imposto", "tax": "Imposto",
"amount": "Montante", "amount": "Valor",
"select_an_item": "Escreva ou clique para selecionar um item", "select_an_item": "Escreva ou clique para selecionar um item",
"type_item_description": "Tipo Item Descrição (opcional)" "type_item_description": "Descrição do Item (opcional)"
} }
}, },
"invoices": { "invoices": {
"title": "Faturas", "title": "Faturas",
"invoices_list": "Lista de faturas", "invoices_list": "Lista de faturas",
"days": "{dias} dias", "days": "{days} dias",
"months": "{meses} Mês", "months": "{months} Mês",
"years": "{anos} Ano", "years": "{years} Ano",
"all": "Todas", "all": "Todas",
"paid": "Paga", "paid": "Paga",
"unpaid": "Não Paga", "unpaid": "Não Paga",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "CLIENTE", "customer": "CLIENTE",
"paid_status": "STATUS PAGAMENTO", "paid_status": "STATUS PAGAMENTO",
"ref_no": "REFERÊNCIA", "ref_no": "REF NO.",
"number": "NÚMERO", "number": "NÚMERO",
"amount_due": "VALOR DEVIDO", "amount_due": "VALOR DEVIDO",
"partially_paid": "Parcialmente pago", "partially_paid": "Parcialmente Pago",
"total": "Total", "total": "Total",
"discount": "Desconto", "discount": "Desconto",
"sub_total": "Subtotal", "sub_total": "Subtotal",
@ -329,17 +337,17 @@
"invoice_number": "Número da fatura", "invoice_number": "Número da fatura",
"ref_number": "Referência", "ref_number": "Referência",
"contact": "Contato", "contact": "Contato",
"add_item": "Adicionar um item", "add_item": "Adicionar um Item",
"date": "Data", "date": "Data",
"due_date": "Data de Vencimento", "due_date": "Data de Vencimento",
"status": "Status", "status": "Status",
"add_tax": "Adicionar imposto", "add_tax": "Adicionar imposto",
"amount": "Montante", "amount": "Valor",
"action": "Ação", "action": "Ação",
"notes": "Observações", "notes": "Observações",
"view": "Ver", "view": "Ver",
"send_invoice": "Enviar Fatura", "send_invoice": "Enviar Fatura",
"resend_invoice": "Resend Invoice", "resend_invoice": "Reenviar Fatura",
"invoice_template": "Modelo da Fatura", "invoice_template": "Modelo da Fatura",
"template": "Modelo", "template": "Modelo",
"mark_as_sent": "Marcar como enviada", "mark_as_sent": "Marcar como enviada",
@ -372,20 +380,20 @@
"discount": "Desconto", "discount": "Desconto",
"total": "Total", "total": "Total",
"total_discount": "Desconto Total", "total_discount": "Desconto Total",
"sub_total": "SubTotal", "sub_total": "Subtotal",
"tax": "Imposto", "tax": "Imposto",
"amount": "Montante", "amount": "Valor",
"select_an_item": "Digite ou clique para selecionar um item", "select_an_item": "Digite ou clique para selecionar um item",
"type_item_description": "Tipo Descrição do item (opcional)" "type_item_description": "Descrição do item (opcional)"
}, },
"payment_attached_message": "Uma das faturas selecionadas já possui um pagamento anexado. Certifique-se de excluir os pagamentos anexados primeiro, a fim de prosseguir com a remoção", "payment_attached_message": "Uma das faturas selecionadas já possui um pagamento anexado. Certifique-se de excluir os pagamentos anexados primeiro, para continuar com a exclusão",
"confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas", "confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas",
"created_message": "Fatura criada com sucesso", "created_message": "Fatura criada com sucesso",
"updated_message": "Fatura atualizada com sucesso", "updated_message": "Fatura atualizada com sucesso",
"deleted_message": "Fatura excluída com sucesso | Faturas excluídas com sucesso", "deleted_message": "Fatura excluída com sucesso | Faturas excluídas com sucesso",
"marked_as_sent_message": "Fatura marcada como enviada com sucesso", "marked_as_sent_message": "Fatura marcada como enviada com sucesso",
"user_email_does_not_exist": "O email do usuário não existe", "user_email_does_not_exist": "O email do usuário não existe",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "algo deu errado",
"invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar." "invalid_due_amount_message": "O valor total da fatura não pode ser menor que o valor total pago para esta fatura. Atualize a fatura ou exclua os pagamentos associados para continuar."
}, },
"credit_notes": { "credit_notes": {
@ -394,7 +402,7 @@
"credit_notes": "Notas de credito", "credit_notes": "Notas de credito",
"contact": "Contato", "contact": "Contato",
"date": "Data", "date": "Data",
"amount": "Montante", "amount": "Valor",
"action": "Ação", "action": "Ação",
"credit_number": "Número de crédito", "credit_number": "Número de crédito",
"notes": "Observações", "notes": "Observações",
@ -407,7 +415,7 @@
"discount": "Desconto", "discount": "Desconto",
"total": "Total", "total": "Total",
"total_discount": "Desconto Total", "total_discount": "Desconto Total",
"sub_total": "SubTotal", "sub_total": "Subtotal",
"tax": "Imposto" "tax": "Imposto"
} }
}, },
@ -417,9 +425,9 @@
"record_payment": "Gravar Pagamento", "record_payment": "Gravar Pagamento",
"customer": "Cliente", "customer": "Cliente",
"date": "Data", "date": "Data",
"amount": "Montante", "amount": "Valor",
"action": "Ação", "action": "Ação",
"payment_number": "Número do Pagamento", "payment_number": "Número de Pagamento",
"payment_mode": "Forma de Pagamento", "payment_mode": "Forma de Pagamento",
"invoice": "Fatura", "invoice": "Fatura",
"note": "Observação", "note": "Observação",
@ -429,19 +437,21 @@
"view_payment": "Ver Pagamento", "view_payment": "Ver Pagamento",
"add_new_payment": "Adicionar novo Pagamento", "add_new_payment": "Adicionar novo Pagamento",
"send_payment_receipt": "Enviar recibo de pagamento", "send_payment_receipt": "Enviar recibo de pagamento",
"send_payment": "Mande o pagamento", "send_payment": "Enviar Pagamento",
"save_payment": "Salvar Pagamento", "save_payment": "Salvar Pagamento",
"update_payment": "Atualizar Pagamento", "update_payment": "Atualizar Pagamento",
"payment": "Pagamento | Pagamentos", "payment": "Pagamento | Pagamentos",
"no_payments": "Ainda sem pagamentos!", "no_payments": "Não há pagamentos ainda!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Não há pagamentos correspondentes!", "no_matching_payments": "Não há pagamentos correspondentes!",
"list_of_payments": "Esta seção conterá a lista de pagamentos.", "list_of_payments": "Esta seção conterá a lista de pagamentos.",
"select_payment_mode": "Selecione a forma de pagamento", "select_payment_mode": "Selecione a forma de pagamento",
"confirm_mark_as_sent": "Este orçamento será marcado como enviado", "confirm_mark_as_sent": "Este orçamento será marcado como enviado",
"confirm_send_payment": "This payment will be sent via email to the customer", "confirm_send_payment": "Este pagamento será enviado por e-mail para o cliente",
"send_payment_successfully": "Payment sent successfully", "send_payment_successfully": "Pagamento enviado com sucesso",
"user_email_does_not_exist": "O email do usuário não existe", "user_email_does_not_exist": "O email do usuário não existe",
"something_went_wrong": "Algo deu errado", "something_went_wrong": "algo deu errado",
"confirm_delete": "Você não poderá recuperar este Pagamento | Você não poderá recuperar esses Pagamentos", "confirm_delete": "Você não poderá recuperar este Pagamento | Você não poderá recuperar esses Pagamentos",
"created_message": "Pagamento criado com sucesso", "created_message": "Pagamento criado com sucesso",
"updated_message": "Pagamento atualizado com sucesso", "updated_message": "Pagamento atualizado com sucesso",
@ -460,9 +470,10 @@
"to_date": "Até a Data", "to_date": "Até a Data",
"expense_date": "Data", "expense_date": "Data",
"description": "Descrição", "description": "Descrição",
"receipt": "Receita", "receipt": "Recibo",
"amount": "Montante", "amount": "Valor",
"action": "Ação", "action": "Ação",
"not_selected": "Not selected",
"note": "Observação", "note": "Observação",
"category_id": "Categoria", "category_id": "Categoria",
"date": "Data da Despesa", "date": "Data da Despesa",
@ -485,7 +496,7 @@
"title": "Título", "title": "Título",
"name": "Nome", "name": "Nome",
"description": "Descrição", "description": "Descrição",
"amount": "Montante", "amount": "Valor",
"actions": "Ações", "actions": "Ações",
"add_category": "Adicionar Categoria", "add_category": "Adicionar Categoria",
"new_category": "Nova Categoria", "new_category": "Nova Categoria",
@ -499,8 +510,8 @@
"forgot_password": "Esqueceu a senha?", "forgot_password": "Esqueceu a senha?",
"or_signIn_with": "ou Entre com", "or_signIn_with": "ou Entre com",
"login": "Entrar", "login": "Entrar",
"register": "Registre-se", "register": "Cadastre-se",
"reset_password": "Resetar Senha", "reset_password": "Redefinir Senha",
"password_reset_successfully": "Senha redefinida com sucesso", "password_reset_successfully": "Senha redefinida com sucesso",
"enter_email": "Digite email", "enter_email": "Digite email",
"enter_password": "Digite a senha", "enter_password": "Digite a senha",
@ -508,30 +519,30 @@
"login_placeholder": "mail@exemplo.com" "login_placeholder": "mail@exemplo.com"
}, },
"users": { "users": {
"title": "Users", "title": "Usuários",
"users_list": "Users List", "users_list": "Lista de Usuários",
"name": "Nome", "name": "Nome",
"description": "Descrição", "description": "Descrição",
"added_on": "Adicionado", "added_on": "Adicionado",
"date_of_creation": "Data de criação", "date_of_creation": "Data de criação",
"action": "Ação", "action": "Ação",
"add_user": "Add User", "add_user": "Adicionar Usuário",
"save_user": "Save User", "save_user": "Salvar Usuário",
"update_user": "Update User", "update_user": "Atualizar Usuário",
"user": "User | Users", "user": "Usuário | Usuários",
"add_new_user": "Add New User", "add_new_user": "Adicionar Novo Usuário",
"new_user": "New User", "new_user": "Novo Usuário",
"edit_user": "Edit User", "edit_user": "Editar Usuário",
"no_users": "No users yet!", "no_users": "Nenhum usuário ainda!",
"list_of_users": "This section will contain the list of users.", "list_of_users": "Esta seção conterá a lista de usuários.",
"email": "Email", "email": "Email",
"phone": "Telefone", "phone": "Telefone",
"password": "Senha", "password": "Senha",
"user_attached_message": "Não é possível excluir um item que já está em uso.", "user_attached_message": "Não é possível excluir um item que já está em uso",
"confirm_delete": "You will not be able to recover this User | You will not be able to recover these Users", "confirm_delete": "Você não poderá recuperar este Usuário | Você não poderá recuperar esses Usuários",
"created_message": "User created successfully", "created_message": "Usuário criado com sucesso",
"updated_message": "User updated successfully", "updated_message": "Usuário atualizado com sucesso",
"deleted_message": "User deleted successfully | User deleted successfully" "deleted_message": "Usuário excluído com sucesso | Usuários excluídos com sucesso"
}, },
"reports": { "reports": {
"title": "Relatório", "title": "Relatório",
@ -545,7 +556,7 @@
"update_report": "Atualizar Relatório", "update_report": "Atualizar Relatório",
"report": "Relatório | Relatórios", "report": "Relatório | Relatórios",
"profit_loss": { "profit_loss": {
"profit_loss": "Perda de lucro", "profit_loss": "Lucro & Perda",
"to_date": "Até a Data", "to_date": "Até a Data",
"from_date": "A partir da Data", "from_date": "A partir da Data",
"date_range": "Selecionar período" "date_range": "Selecionar período"
@ -570,7 +581,7 @@
"invoice": "Fatura", "invoice": "Fatura",
"invoice_date": "Data da Fatura", "invoice_date": "Data da Fatura",
"due_date": "Data de Vencimento", "due_date": "Data de Vencimento",
"amount": "Montante", "amount": "Valor",
"contact_name": "Nome de Contato", "contact_name": "Nome de Contato",
"status": "Status" "status": "Status"
}, },
@ -580,7 +591,7 @@
"due_date": "Data de Vencimento", "due_date": "Data de Vencimento",
"estimate_number": "Número do Orçamento", "estimate_number": "Número do Orçamento",
"ref_number": "Referência", "ref_number": "Referência",
"amount": "Montante", "amount": "Valor",
"contact_name": "Nome de Contato", "contact_name": "Nome de Contato",
"status": "Status" "status": "Status"
}, },
@ -588,7 +599,7 @@
"expenses": "Despesas", "expenses": "Despesas",
"category": "Categoria", "category": "Categoria",
"date": "Data", "date": "Data",
"amount": "Montante", "amount": "Valor",
"to_date": "Até a Data", "to_date": "Até a Data",
"from_date": "A partir da Data", "from_date": "A partir da Data",
"date_range": "Selecionar período" "date_range": "Selecionar período"
@ -605,16 +616,16 @@
"expense_category": "Categorias de Despesas", "expense_category": "Categorias de Despesas",
"update_app": "Atualizar Aplicativo", "update_app": "Atualizar Aplicativo",
"backup": "Backup", "backup": "Backup",
"file_disk": "File Disk", "file_disk": "Disco de Arquivos",
"custom_fields": "Os campos personalizados", "custom_fields": "Os campos personalizados",
"payment_modes": "Payment Modes", "payment_modes": "Meios de Pagamento",
"notes": "Observações" "notes": "Observações"
}, },
"title": "Configurações", "title": "Configurações",
"setting": "Configuração | Configurações", "setting": "Configuração | Configurações",
"general": "Geral", "general": "Geral",
"language": "Idioma", "language": "Idioma",
"primary_currency": "Moéda Principal", "primary_currency": "Moeda Principal",
"timezone": "Fuso horário", "timezone": "Fuso horário",
"date_format": "Formato de data", "date_format": "Formato de data",
"currencies": { "currencies": {
@ -640,16 +651,16 @@
"port": "Porta de Email", "port": "Porta de Email",
"driver": "Driver do email", "driver": "Driver do email",
"secret": "Segredo", "secret": "Segredo",
"mailgun_secret": "Mailgun Segredo", "mailgun_secret": "Segredo Mailgun",
"mailgun_domain": "Domínio", "mailgun_domain": "Domínio",
"mailgun_endpoint": "Endpoint do Mailgun", "mailgun_endpoint": "Endpoint do Mailgun",
"ses_secret": "SES Segredo", "ses_secret": "Segredo SES",
"ses_key": "SES Chave", "ses_key": "Chave SES",
"password": "Senha do Email", "password": "Senha do Email",
"username": "Nome de Usuário do Email", "username": "Nome de Usuário do Email",
"mail_config": "Configuração de Email", "mail_config": "Configuração de Email",
"from_name": "Do Nome de Email", "from_name": "Nome do Remetente",
"from_mail": "Do Endereço de Email", "from_mail": "Endereço Email do Remetente",
"encryption": "Criptografia de Email", "encryption": "Criptografia de Email",
"mail_config_desc": "Abaixo está o formulário para configurar o driver de email para enviar emails do aplicativo. Você também pode configurar provedores de terceiros como Sendgrid, SES etc." "mail_config_desc": "Abaixo está o formulário para configurar o driver de email para enviar emails do aplicativo. Você também pode configurar provedores de terceiros como Sendgrid, SES etc."
}, },
@ -674,7 +685,7 @@
}, },
"custom_fields": { "custom_fields": {
"title": "Os campos personalizados", "title": "Os campos personalizados",
"section_description": "Customize your Invoices, Estimates & Payment Receipts with your own fields. Make sure to use the below added fields on the address formats on Customization settings page.", "section_description": "Personalize as suas faturas, Orçamentos & Recibos de Pagamento com seus próprios campos. Certifique-se de usar os campos abaixo adicionados nos formatos de endereço na página de Configurações de Personalização.",
"add_custom_field": "Adicionar campo personalizado", "add_custom_field": "Adicionar campo personalizado",
"edit_custom_field": "Editar campo personalizado", "edit_custom_field": "Editar campo personalizado",
"field_name": "Nome do campo", "field_name": "Nome do campo",
@ -682,7 +693,7 @@
"type": "Tipo", "type": "Tipo",
"name": "Nome", "name": "Nome",
"required": "Requeridas", "required": "Requeridas",
"placeholder": "Placeholder", "placeholder": "Dica de Preenchimento",
"help_text": "Texto de ajuda", "help_text": "Texto de ajuda",
"default_value": "Valor padrão", "default_value": "Valor padrão",
"prefix": "Prefixo", "prefix": "Prefixo",
@ -690,7 +701,7 @@
"model": "Modelo", "model": "Modelo",
"help_text_description": "Digite algum texto para ajudar os usuários a entender a finalidade desse campo personalizado.", "help_text_description": "Digite algum texto para ajudar os usuários a entender a finalidade desse campo personalizado.",
"suffix": "Sufixo", "suffix": "Sufixo",
"yes": "sim", "yes": "Sim",
"no": "Não", "no": "Não",
"order": "Ordem", "order": "Ordem",
"custom_field_confirm_delete": "Você não poderá recuperar este campo personalizado", "custom_field_confirm_delete": "Você não poderá recuperar este campo personalizado",
@ -701,7 +712,7 @@
"add_another_option": "Adicione outra opção", "add_another_option": "Adicione outra opção",
"sort_in_alphabetical_order": "Classificar em ordem alfabética", "sort_in_alphabetical_order": "Classificar em ordem alfabética",
"add_options_in_bulk": "Adicionar opções em massa", "add_options_in_bulk": "Adicionar opções em massa",
"use_predefined_options": "Use Predefined Options", "use_predefined_options": "Usar Opções Predefinidas",
"select_custom_date": "Selecionar data personalizada", "select_custom_date": "Selecionar data personalizada",
"select_relative_date": "Selecionar data relativa", "select_relative_date": "Selecionar data relativa",
"ticked_by_default": "Marcado por padrão", "ticked_by_default": "Marcado por padrão",
@ -709,11 +720,11 @@
"added_message": "Campo personalizado adicionado com sucesso" "added_message": "Campo personalizado adicionado com sucesso"
}, },
"customization": { "customization": {
"customization": "Personalizar", "customization": "personalização",
"save": "Salvar", "save": "Salvar",
"addresses": { "addresses": {
"title": "Endereço", "title": "Endereço",
"section_description": "Você pode definir o endereço de cobrança do cliente e o formato do endereço de entrega do cliente (exibido apenas em PDF).", "section_description": "Você pode definir o endereço de cobrança do cliente e o formato do endereço de entrega do cliente (exibido apenas em PDF). ",
"customer_billing_address": "Endereço de Cobrança do Cliente", "customer_billing_address": "Endereço de Cobrança do Cliente",
"customer_shipping_address": "Endereço de Entrega do Cliente", "customer_shipping_address": "Endereço de Entrega do Cliente",
"company_address": "Endereço da Empresa", "company_address": "Endereço da Empresa",
@ -740,41 +751,50 @@
"title": "Faturas", "title": "Faturas",
"notes": "Notas", "notes": "Notas",
"invoice_prefix": "Fatura Prefixo", "invoice_prefix": "Fatura Prefixo",
"default_invoice_email_body": "Default Invoice Email Body", "invoice_number_length": "Invoice number length",
"invoice_settings": "Configrações da Fatura", "default_invoice_email_body": "Corpo Padrão de Email de Fatura",
"invoice_settings": "Configurações de Fatura",
"autogenerate_invoice_number": "Gerar automaticamente o número da Fatura", "autogenerate_invoice_number": "Gerar automaticamente o número da Fatura",
"invoice_setting_description": "Desative isso, se você não deseja gerar automaticamente números da Fatura sempre que criar uma nova.", "invoice_setting_description": "Desative isso, se você não deseja gerar automaticamente números da Fatura sempre que criar uma nova.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Digite o prefixo da Fatura", "enter_invoice_prefix": "Digite o prefixo da Fatura",
"terms_and_conditions": "Termos e Condições", "terms_and_conditions": "Termos e Condições",
"company_address_format": "Company Address Format", "company_address_format": "Formato de Endereço de Empresa",
"shipping_address_format": "Shipping Address Format", "shipping_address_format": "Formato de Endereço de Envio",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato de Endereço de Faturamento",
"invoice_setting_updated": "Configuração da Fatura atualizada com sucesso" "invoice_setting_updated": "Configuração da Fatura atualizada com sucesso"
}, },
"estimates": { "estimates": {
"title": "Orçamentos", "title": "Orçamentos",
"estimate_prefix": "Orçamento Prefixo", "estimate_prefix": "Orçamento Prefixo",
"default_estimate_email_body": "Default Estimate Email Body", "estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Corpo Padrão de Email de Orçamento",
"estimate_settings": "Configurações do Orçamento", "estimate_settings": "Configurações do Orçamento",
"autogenerate_estimate_number": "Gerar automaticamente o número do Orçamento", "autogenerate_estimate_number": "Gerar automaticamente o número do Orçamento",
"estimate_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Orçamento sempre que criar um novo.", "estimate_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Orçamento sempre que criar um novo.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Digite o prefixo do Orçamento", "enter_estimate_prefix": "Digite o prefixo do Orçamento",
"estimate_setting_updated": "Configuração do Orçamento atualizada com sucesso", "estimate_setting_updated": "Configuração de Orçamento atualizada com sucesso",
"company_address_format": "Company Address Format", "company_address_format": "Formato de Endereço de Empresa",
"billing_address_format": "Billing Address Format", "billing_address_format": "Formato de Endereço de Faturamento",
"shipping_address_format": "Shipping Address Format" "shipping_address_format": "Formato de Endereço de Envio"
}, },
"payments": { "payments": {
"title": "Pagamentos", "title": "Pagamentos",
"description": "Modes of transaction for payments", "description": "Modos de transação para pagamentos",
"payment_prefix": "Pagamento Prefixo", "payment_prefix": "Pagamento Prefixo",
"default_payment_email_body": "Default Payment Email Body", "payment_number_length": "Payment number lenght",
"default_payment_email_body": "Corpo Padrão de Email de Pagamento",
"payment_settings": "Configurações de Pagamento", "payment_settings": "Configurações de Pagamento",
"autogenerate_payment_number": "Gerar automaticamente número do Pagamento", "autogenerate_payment_number": "Gerar automaticamente número do Pagamento",
"payment_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Pagamento sempre que criar um novo.", "payment_setting_description": "Desative isso, se você não deseja gerar automaticamente números do Pagamento sempre que criar um novo.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Digite o Prefixo do Pagamento", "enter_payment_prefix": "Digite o Prefixo do Pagamento",
"payment_setting_updated": "Configurações de Pagamento atualizada com sucesso", "payment_setting_updated": "Configurações de Pagamento atualizada com sucesso",
"payment_modes": "Payment Modes", "payment_modes": "Meios de Pagamento",
"add_payment_mode": "Adicionar modo de pagamento", "add_payment_mode": "Adicionar modo de pagamento",
"edit_payment_mode": "Editar modo de pagamento", "edit_payment_mode": "Editar modo de pagamento",
"mode_name": "Nome do modo", "mode_name": "Nome do modo",
@ -783,35 +803,35 @@
"payment_mode_confirm_delete": "Você não poderá recuperar este modo de pagamento", "payment_mode_confirm_delete": "Você não poderá recuperar este modo de pagamento",
"already_in_use": "O modo de pagamento já está em uso", "already_in_use": "O modo de pagamento já está em uso",
"deleted_message": "Modo de pagamento excluído com sucesso", "deleted_message": "Modo de pagamento excluído com sucesso",
"company_address_format": "Company Address Format", "company_address_format": "Formato de Endereço de Empresa",
"from_customer_address_format": "From Customer Address Format" "from_customer_address_format": "Formato de Endereço de Cliente Remetente"
}, },
"items": { "items": {
"title": "Itens", "title": "Itens",
"units": "unidades", "units": "Unidades",
"add_item_unit": "Adicionar unidade de item", "add_item_unit": "Adicionar unidade de item",
"edit_item_unit": "Editar unidade de item", "edit_item_unit": "Editar unidade de item",
"unit_name": "Nome da unidade", "unit_name": "Nome da unidade",
"item_unit_added": "Item Unit Added", "item_unit_added": "Unidade de Item Adicionada",
"item_unit_updated": "Item Unit Updated", "item_unit_updated": "Unidade de Item Atualizada",
"item_unit_confirm_delete": "Você não poderá recuperar esta unidade de item", "item_unit_confirm_delete": "Você não poderá recuperar esta unidade de item",
"already_in_use": "A unidade do item já está em uso", "already_in_use": "A unidade do item já está em uso",
"deleted_message": "Unidade de item excluída com sucesso" "deleted_message": "Unidade de item excluída com sucesso"
}, },
"notes": { "notes": {
"title": "Observações", "title": "Observações",
"description": "Save time by creating notes and reusing them on your invoices, estimates & payments.", "description": "Economize tempo criando notas e reutilizando-as nas suas faturas, orçamentos e pagamentos.",
"notes": "Observações", "notes": "Notas",
"type": "Tipo", "type": "Tipo",
"add_note": "Add Note", "add_note": "Adicionar Nota",
"add_new_note": "Add New Note", "add_new_note": "Adicionar Nova Nota",
"name": "Nome", "name": "Nome",
"edit_note": "Edit Note", "edit_note": "Editar Nota",
"note_added": "Note added successfully", "note_added": "Nota adicionada com sucesso",
"note_updated": "Note Updated successfully", "note_updated": "Nota atualizada com sucesso",
"note_confirm_delete": "You will not be able to recover this Note", "note_confirm_delete": "Você não poderá recuperar essa nota",
"already_in_use": "Note is already in use", "already_in_use": "A nota já está em uso",
"deleted_message": "Note deleted successfully" "deleted_message": "Nota excluída com sucesso"
} }
}, },
"account_settings": { "account_settings": {
@ -855,7 +875,7 @@
"compound_tax": "Imposto Composto", "compound_tax": "Imposto Composto",
"percent": "Porcentagem", "percent": "Porcentagem",
"action": "Ação", "action": "Ação",
"tax_setting_description": "Habilite isso se desejar adicionar Impostos a itens da Fatura Idividualmente. Por padrão, os impostos são adicionados diretamente à Fatura.", "tax_setting_description": "Habilite isso se desejar adicionar Impostos a itens da Fatura Individualmente. Por padrão, os impostos são adicionados diretamente à Fatura.",
"created_message": "Tipo de Imposto criado com sucesso", "created_message": "Tipo de Imposto criado com sucesso",
"updated_message": "Tipo de Imposto Atualizado com sucesso", "updated_message": "Tipo de Imposto Atualizado com sucesso",
"deleted_message": "Tipo de Imposto Deletado com sucesso", "deleted_message": "Tipo de Imposto Deletado com sucesso",
@ -879,7 +899,7 @@
}, },
"preferences": { "preferences": {
"currency": "Moeda", "currency": "Moeda",
"default_language": "Default Language", "default_language": "Idioma padrão",
"time_zone": "Fuso Horário", "time_zone": "Fuso Horário",
"fiscal_year": "Ano Financeiro", "fiscal_year": "Ano Financeiro",
"date_format": "Formato da Data", "date_format": "Formato da Data",
@ -892,16 +912,16 @@
"updated_message": "Preferências atualizadas com sucesso", "updated_message": "Preferências atualizadas com sucesso",
"select_language": "Selecione um Idioma", "select_language": "Selecione um Idioma",
"select_time_zone": "Selecione um fuso horário", "select_time_zone": "Selecione um fuso horário",
"select_date_format": "Select Date Format", "select_date_format": "Selecionar um Formato de Data",
"select_financial_year": "Selecione o ano financeiro" "select_financial_year": "Selecione o ano financeiro"
}, },
"update_app": { "update_app": {
"title": "Atualizar Aplicativo", "title": "Atualizar Aplicativo",
"description": "Você pode atualizar facilmente o Crater, verifique se hà novas atualizações, clicando no botão abaixo", "description": "Você pode atualizar facilmente o Crater, verifique se há novas atualizações, clicando no botão abaixo",
"check_update": "Verifique se há atualizações", "check_update": "Verifique se há atualizações",
"avail_update": "Nova atualização disponível", "avail_update": "Nova atualização disponível",
"next_version": "Próxima versão", "next_version": "Próxima versão",
"requirements": "Requirements", "requirements": "Requisitos",
"update": "Atualizar agora", "update": "Atualizar agora",
"update_progress": "Atualização em progresso...", "update_progress": "Atualização em progresso...",
"progress_text": "Levará apenas alguns minutos. Não atualize a tela ou feche a janela antes que a atualização seja concluída", "progress_text": "Levará apenas alguns minutos. Não atualize a tela ou feche a janela antes que a atualização seja concluída",
@ -911,90 +931,92 @@
"download_zip_file": "Baixar arquivo ZIP", "download_zip_file": "Baixar arquivo ZIP",
"unzipping_package": "Descompactando o pacote", "unzipping_package": "Descompactando o pacote",
"copying_files": "Copiando arquivos", "copying_files": "Copiando arquivos",
"deleting_files": "Deleting Unused files",
"running_migrations": "Executando migrações", "running_migrations": "Executando migrações",
"finishing_update": "Atualização de acabamento", "finishing_update": "Acabando a Atualização",
"update_failed": "Atualização falhou", "update_failed": "Atualização falhou",
"update_failed_text": "Desculpa! Sua atualização falhou em: {step} step" "update_failed_text": "Desculpa! Sua atualização falhou no passo: {step}"
}, },
"backup": { "backup": {
"title": "Backup | Backups", "title": "Backup | Backups",
"description": "The backup is a zipfile that contains all files in the directories you specify along with a dump of your database", "description": "O backup é um arquivo zip que contém todos os arquivos nas pastas que você especificou juntamente com um arquivo de backup de sua base de dados",
"new_backup": "Add New Backup", "new_backup": "Adicionar Novo Backup",
"create_backup": "Create Backup", "create_backup": "Criar Backup",
"select_backup_type": "Select Backup Type", "select_backup_type": "Selecionar Tipo de Backup",
"backup_confirm_delete": "You will not be able to recover this Backup", "backup_confirm_delete": "Você não poderá recuperar este backup",
"path": "Caminho", "path": "caminho",
"new_disk": "Novo disco", "new_disk": "Novo disco",
"created_at": "Criado em", "created_at": "criado em",
"size": "Tamanho", "size": "tamanho",
"dropbox": "DropBox", "dropbox": "dropbox",
"local": "local", "local": "local",
"healthy": "healthy", "healthy": "sem erros",
"amount_of_backups": "Quantidade de backups", "amount_of_backups": "quantidade de backups",
"newest_backups": "Backups mais recentes", "newest_backups": "backups mais recentes",
"used_storage": "used storage", "used_storage": "armazenamento utilizado",
"select_disk": "Select Disk", "select_disk": "Selecionar Disco",
"action": "Ação", "action": "Ação",
"deleted_message": "Backup deleted successfully", "deleted_message": "Backup excluído com sucesso",
"created_message": "Backup created successfully", "created_message": "Backup criado com sucesso",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credencial inválida para o disco selecionado"
}, },
"disk": { "disk": {
"title": "File Disk | File Disks", "title": "Disco de Arquivo | Discos de Arquivo",
"description": "By default, Crater will use your local disk for saving backups, avatar and other image files. You can configure more than one disk drivers like DigitalOcean, S3 and Dropbox according to your preference.", "description": "Por padrão, o Crater usará o seu disco local para salvar os backups, avatar e outros arquivos de imagem. Você pode configurar mais de um drivers de disco como DigitalOcean, S3 e Dropbox de acordo com sua preferência.",
"created_at": "Criado em", "created_at": "criado em",
"dropbox": "DropBox", "dropbox": "dropbox",
"name": "Nome", "name": "Nome",
"driver": "Driver", "driver": "Driver",
"disk_type": "Tipo", "disk_type": "Tipo",
"disk_name": "Nome do disco", "disk_name": "Nome do disco",
"new_disk": "Adicionar novo disco", "new_disk": "Adicionar novo disco",
"filesystem_driver": "Filesystem Driver", "filesystem_driver": "Driver de Sistema de Arquivo",
"local_driver": "local Driver", "local_driver": "Driver local",
"local_root": "local Root", "local_root": "Root local",
"public_driver": "Public Driver", "public_driver": "Driver Público",
"public_root": "Public Root", "public_root": "Root Público",
"public_url": "Public URL", "public_url": "URL Pública",
"public_visibility": "Public Visibility", "public_visibility": "Visibilidade Pública",
"media_driver": "Media Driver", "media_driver": "Driver de Mídia",
"media_root": "Media Root", "media_root": "Root de Mídia",
"aws_driver": "Driver AWS", "aws_driver": "Driver AWS",
"aws_key": "Chave AWS", "aws_key": "Chave AWS",
"aws_secret": "Segredo AWS", "aws_secret": "Segredo AWS",
"aws_region": "Região AWS", "aws_region": "Região AWS",
"aws_bucket": "AWS Bucket", "aws_bucket": "Bucket AWS",
"aws_root": "AWS Root", "aws_root": "Root AWS",
"do_spaces_type": "Do Spaces type", "do_spaces_type": "Tipo de Spaces Do",
"do_spaces_key": "Do Spaces key", "do_spaces_key": "Chave de Spaces Do",
"do_spaces_secret": "Do Spaces Secret", "do_spaces_secret": "Segredo de Spaces Do",
"do_spaces_region": "Do Spaces Region", "do_spaces_region": "Região de Spaces Do",
"do_spaces_bucket": "Do Spaces Bucket", "do_spaces_bucket": "Bucket de Spaces Do",
"do_spaces_endpoint": "Do Spaces Endpoint", "do_spaces_endpoint": "Endpoint de Spaces Do",
"do_spaces_root": "Do Spaces Root", "do_spaces_root": "Root de Spaces Do",
"dropbox_type": "Dropbox Type", "dropbox_type": "Tipo de Dropbox",
"dropbox_token": "Dropbox Token", "dropbox_token": "Token Dropbox",
"dropbox_key": "Dropbox Key", "dropbox_key": "Chave Dropbox",
"dropbox_secret": "Dropbox Secret", "dropbox_secret": "Segredo Dropbox",
"dropbox_app": "Dropbox App", "dropbox_app": "Aplicativo Dropbox",
"dropbox_root": "Dropbox Root", "dropbox_root": "Root Dropbox",
"default_driver": "Default Driver", "default_driver": "Driver Padrão",
"is_default": "IS DEFAULT", "is_default": "ESTÁ PADRÃO",
"set_default_disk": "Set Default Disk", "set_default_disk": "Definir Disco Padrão",
"success_set_default_disk": "Disk set as default successfully", "set_default_disk_confirm": "This disk will be set as default and all the new PDFs will be saved on this disk",
"save_pdf_to_disk": "Save PDFs to Disk", "success_set_default_disk": "Disco definido como padrão com sucesso",
"disk_setting_description": " Enable this, if you wish to save a copy of each Invoice, Estimate & Payment Receipt PDF on your default disk automatically. Turning this option will decrease the load-time when viewing the PDFs.", "save_pdf_to_disk": "Salvar PDFs no Disco",
"select_disk": "Select Disk", "disk_setting_description": " Ative isso, se você deseja salvar uma cópia de cada fatura, Orçamento e Pagamento PDF em seu disco padrão automaticamente. Virar esta opção irá diminuir o tempo de carregamento ao visualizar os PDFs.",
"disk_settings": "Disk Settings", "select_disk": "Selecionar Disco",
"confirm_delete": "Your existing files & folders in the specified disk will not be affected but your disk configuration will be deleted from Crater", "disk_settings": "Configurações de Disco",
"confirm_delete": "Seus arquivos e pastas existentes no disco especificado não serão afetados, mas sua configuração de disco será excluída do Crater",
"action": "Ação", "action": "Ação",
"edit_file_disk": "Edit File Disk", "edit_file_disk": "Editar Disco de Arquivos",
"success_create": "Disk added successfully", "success_create": "Disco adicionado com sucesso",
"success_update": "Disk updated successfully", "success_update": "Disco atualizado com sucesso",
"error": "Disk addition failed", "error": "Falha na adição de disco",
"deleted_message": "File Disk deleted successfully", "deleted_message": "Disco de arquivo excluído com sucesso",
"disk_variables_save_successfully": "Disk Configured Successfully", "disk_variables_save_successfully": "Disco configurado com sucesso",
"disk_variables_save_error": "Disk configuration failed.", "disk_variables_save_error": "Configuração do disco falhou.",
"invalid_disk_credentials": "Invalid credential of selected disk" "invalid_disk_credentials": "Credencial inválida para o disco selecionado"
} }
}, },
"wizard": { "wizard": {
@ -1009,10 +1031,10 @@
"company_info_desc": "Esta informação será exibida nas Faturas. Observe que você pode editar isso mais tarde na página de configurações.", "company_info_desc": "Esta informação será exibida nas Faturas. Observe que você pode editar isso mais tarde na página de configurações.",
"company_name": "Nome da Empresa", "company_name": "Nome da Empresa",
"company_logo": "Logotipo da Empresa", "company_logo": "Logotipo da Empresa",
"logo_preview": "Previsualizar Logotipo", "logo_preview": "Pré-visualizar Logotipo",
"preferences": "Preferências", "preferences": "Preferências",
"preferences_desc": "Preferências padrão para o sistema.", "preferences_desc": "Preferências padrão para o sistema.",
"country": "Pais", "country": "País",
"state": "Estado", "state": "Estado",
"city": "Cidade", "city": "Cidade",
"address": "Endereço", "address": "Endereço",
@ -1037,10 +1059,10 @@
"port": "Porta da Base de Dados", "port": "Porta da Base de Dados",
"password": "Senha da Base de Dados", "password": "Senha da Base de Dados",
"app_url": "URL do Aplicativo", "app_url": "URL do Aplicativo",
"app_domain": "App Domain", "app_domain": "Domínio do Aplicativo",
"username": "Usuário da Base de Dados", "username": "Usuário da Base de Dados",
"db_name": "Nome da Base de Dados", "db_name": "Nome da Base de Dados",
"db_path": "Database Path", "db_path": "Pasta do Banco de Dados",
"desc": "Crie um Banco de Dados no seu servidor e defina as credenciais usando o formulário abaixo." "desc": "Crie um Banco de Dados no seu servidor e defina as credenciais usando o formulário abaixo."
}, },
"permissions": { "permissions": {
@ -1088,24 +1110,24 @@
"layout_login": { "layout_login": {
"copyright_crater": "Copyright @ Crater - 2020", "copyright_crater": "Copyright @ Crater - 2020",
"super_simple_invoicing": "Faturamento super simples", "super_simple_invoicing": "Faturamento super simples",
"for_freelancer": "Para Freelancers &", "for_freelancer": "para Freelancers &",
"small_businesses": "Pequenos Negócios ", "small_businesses": "Pequenos Negócios ",
"crater_help": "Crater ajuda a rastrear despesas, registrar pagamentos e gerar belas", "crater_help": "Crater ajuda a rastrear despesas, registrar pagamentos e gerar belas",
"invoices_and_estimates": "Faturas e Orçamentos com capacidade de escolher vários modelos." "invoices_and_estimates": "faturas e orçamentos com possibilidade de escolher vários modelos."
}, },
"validation": { "validation": {
"invalid_phone": "Número de telefone inválido", "invalid_phone": "Número de telefone inválido",
"invalid_url": "url inválidas (ex: http://www.crater.com)", "invalid_url": "URL inválida (ex: http://www.crater.com)",
"invalid_domain_url": "url inválidas (ex: crater.com)", "invalid_domain_url": "URL inválida (ex: crater.com)",
"required": "Campo obrigatório", "required": "Campo obrigatório",
"email_incorrect": "E-mail incorreto", "email_incorrect": "E-mail incorreto.",
"email_already_taken": "O email já foi recebido.", "email_already_taken": "O email já está em uso.",
"email_does_not_exist": "O usuário com determinado email não existe", "email_does_not_exist": "O usuário com determinado email não existe",
"item_unit_already_taken": "This item unit name has already been taken", "item_unit_already_taken": "Este nome de unidade de item já está em uso",
"payment_mode_already_taken": "This payment mode name has already been taken", "payment_mode_already_taken": "Este meio de pagamento já foi utilizado",
"send_reset_link": "Enviar link de redefinição", "send_reset_link": "Enviar link de redefinição",
"not_yet": "Ainda não? Envie novamente", "not_yet": "Ainda não? Envie novamente",
"password_min_length": "A senha deve conter {count} caracteres", "password_min_length": "A senha deve ter {count} caracteres",
"name_min_length": "O nome deve ter pelo menos {count} letras.", "name_min_length": "O nome deve ter pelo menos {count} letras.",
"enter_valid_tax_rate": "Insira uma taxa de imposto válida", "enter_valid_tax_rate": "Insira uma taxa de imposto válida",
"numbers_only": "Apenas Números.", "numbers_only": "Apenas Números.",
@ -1119,52 +1141,57 @@
"quantity_maxlength": "A quantidade não deve exceder 20 dígitos.", "quantity_maxlength": "A quantidade não deve exceder 20 dígitos.",
"price_maxlength": "O preço não deve ser superior a 20 dígitos.", "price_maxlength": "O preço não deve ser superior a 20 dígitos.",
"price_minvalue": "O preço deve ser maior que 0.", "price_minvalue": "O preço deve ser maior que 0.",
"amount_maxlength": "Montante não deve ser superior a 20 dígitos.", "amount_maxlength": "Valor não deve ter mais de 20 dígitos.",
"amount_minvalue": "Montante deve ser maior que zero", "amount_minvalue": "O valor deve ser maior que 0.",
"description_maxlength": "A descrição não deve ter mais que 255 caracteres.", "description_maxlength": "A descrição não deve ter mais que 255 caracteres.",
"subject_maxlength": "Subject should not be greater than 100 characters.", "subject_maxlength": "O assunto não deve ter mais que 100 caracteres.",
"message_maxlength": "Message should not be greater than 255 characters.", "message_maxlength": "A mensagem não deve ter mais que 255 caracteres.",
"maximum_options_error": "Máximo de {max} opções selecionadas. Primeiro remova uma opção selecionada para selecionar outra.", "maximum_options_error": "Máximo de {max} opções selecionadas. Primeiro remova uma opção selecionada para selecionar outra.",
"notes_maxlength": "As anotações não devem ter mais que 255 caracteres.", "notes_maxlength": "As anotações não devem ter mais que 255 caracteres.",
"address_maxlength": "O endereço não deve ter mais que 255 caracteres.", "address_maxlength": "O endereço não deve ter mais que 255 caracteres.",
"ref_number_maxlength": "O número de referência não deve ter mais que 255 caracteres.", "ref_number_maxlength": "O número de referência não deve ter mais que 255 caracteres.",
"prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres.", "prefix_maxlength": "O prefixo não deve ter mais que 5 caracteres.",
"something_went_wrong": "Algo deu errado" "something_went_wrong": "algo deu errado",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Orçamento", "pdf_estimate_label": "Orçamento",
"pdf_estimate_number": "Numero do Orçamento", "pdf_estimate_number": "Numero do Orçamento",
"pdf_estimate_date": "Data do Orçamento", "pdf_estimate_date": "Data do Orçamento",
"pdf_estimate_expire_date": "Expiry date", "pdf_estimate_expire_date": "Data de expiração",
"pdf_invoice_label": "Fatura", "pdf_invoice_label": "Fatura",
"pdf_invoice_number": "Número da fatura", "pdf_invoice_number": "Número da fatura",
"pdf_invoice_date": "Data da Fatura", "pdf_invoice_date": "Data da Fatura",
"pdf_invoice_due_date": "Due date", "pdf_invoice_due_date": "Data de Vencimento",
"pdf_notes": "Observações", "pdf_notes": "Observações",
"pdf_items_label": "Itens", "pdf_items_label": "Itens",
"pdf_quantity_label": "Quantidade", "pdf_quantity_label": "Quantidade",
"pdf_price_label": "Preço", "pdf_price_label": "Preço",
"pdf_discount_label": "Desconto", "pdf_discount_label": "Desconto",
"pdf_amount_label": "Montante", "pdf_amount_label": "Valor",
"pdf_subtotal": "Subtotal", "pdf_subtotal": "Subtotal",
"pdf_total": "Total", "pdf_total": "Total",
"pdf_payment_receipt_label": "PAYMENT RECEIPT", "pdf_payment_label": "Payment",
"pdf_payment_date": "Payment Date", "pdf_payment_receipt_label": "RECIBO DE PAGAMENTO",
"pdf_payment_date": "Data de Pagamento",
"pdf_payment_number": "Número do Pagamento", "pdf_payment_number": "Número do Pagamento",
"pdf_payment_mode": "Forma de Pagamento", "pdf_payment_mode": "Forma de Pagamento",
"pdf_payment_amount_received_label": "Amount Received", "pdf_payment_amount_received_label": "Valor Recebido",
"pdf_expense_report_label": "EXPENSES REPORT", "pdf_expense_report_label": "RELATÓRIO DE DESPESAS",
"pdf_total_expenses_label": "TOTAL EXPENSE", "pdf_total_expenses_label": "TOTAL DESPESAS",
"pdf_profit_loss_label": "PROFIT & LOSS REPORT", "pdf_profit_loss_label": "RELATÓRIO LUCRO & PERDA",
"pdf_income_label": "INCOME", "pdf_sales_customers_label": "Sales Customer Report",
"pdf_net_profit_label": "NET PROFIT", "pdf_sales_items_label": "Sales Item Report",
"pdf_customer_sales_report": "Sales Report: By Customer", "pdf_tax_summery_label": "Tax Summary Report",
"pdf_total_sales_label": "TOTAL SALES", "pdf_income_label": "RENDA",
"pdf_item_sales_label": "Sales Report: By Item", "pdf_net_profit_label": "LUCRO LÍQUIDO",
"pdf_tax_report_label": "TAX REPORT", "pdf_customer_sales_report": "Relatório de Vendas: Por Cliente",
"pdf_total_tax_label": "TOTAL TAX", "pdf_total_sales_label": "VENDAS TOTAIS",
"pdf_item_sales_label": "Relatório de Vendas: Por Item",
"pdf_tax_report_label": "RELATÓRIO DE IMPOSTOS",
"pdf_total_tax_label": "IMPOSTOS TOTAIS",
"pdf_tax_types_label": "Tipos de Impostos", "pdf_tax_types_label": "Tipos de Impostos",
"pdf_expenses_label": "Despesas", "pdf_expenses_label": "Despesas",
"pdf_bill_to": "Cobrar a,", "pdf_bill_to": "Cobrar a,",
"pdf_ship_to": "Envie a,", "pdf_ship_to": "Envie a,",
"pdf_received_from": "Received from:" "pdf_received_from": "Remetente:"
} }

File diff suppressed because it is too large Load Diff

View File

@ -178,6 +178,8 @@
"copy_billing_address": "Kopiraj iz adrese za naplatu", "copy_billing_address": "Kopiraj iz adrese za naplatu",
"no_customers": "Još uvek nema klijenata!", "no_customers": "Još uvek nema klijenata!",
"no_customers_found": "Klijenti nisu pronađeni!", "no_customers_found": "Klijenti nisu pronađeni!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Ova sekcija će da sadrži spisak klijenata.", "list_of_customers": "Ova sekcija će da sadrži spisak klijenata.",
"primary_display_name": "Primarni naziv koji se prikazuje", "primary_display_name": "Primarni naziv koji se prikazuje",
"select_currency": "Odaberi valutu", "select_currency": "Odaberi valutu",
@ -201,6 +203,7 @@
"added_on": "Datum dodavanja", "added_on": "Datum dodavanja",
"price": "Cena", "price": "Cena",
"date_of_creation": "Datum kreiranja", "date_of_creation": "Datum kreiranja",
"not_selected": "No item selected",
"action": "Akcije", "action": "Akcije",
"add_item": "Dodaj Stavku", "add_item": "Dodaj Stavku",
"save_item": "Sačuvaj Stavku", "save_item": "Sačuvaj Stavku",
@ -271,6 +274,7 @@
"required": "Polje je obavezno" "required": "Polje je obavezno"
}, },
"accepted": "Prihvaćeno", "accepted": "Prihvaćeno",
"rejected": "Rejected",
"sent": "Poslato", "sent": "Poslato",
"draft": "U izradi", "draft": "U izradi",
"declined": "Odbijeno", "declined": "Odbijeno",
@ -317,6 +321,9 @@
"all": "Sve", "all": "Sve",
"paid": "Plaćeno", "paid": "Plaćeno",
"unpaid": "Neplaćeno", "unpaid": "Neplaćeno",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "KLIJENT", "customer": "KLIJENT",
"paid_status": "STATUS UPLATE", "paid_status": "STATUS UPLATE",
"ref_no": "POZIV NA BROJ", "ref_no": "POZIV NA BROJ",
@ -435,6 +442,8 @@
"update_payment": "Ažuriraj Uplatu", "update_payment": "Ažuriraj Uplatu",
"payment": "Uplata | Uplate", "payment": "Uplata | Uplate",
"no_payments": "Još uvek nema uplata!", "no_payments": "Još uvek nema uplata!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Ne postoje uplate koje odgovaraju pretrazi!", "no_matching_payments": "Ne postoje uplate koje odgovaraju pretrazi!",
"list_of_payments": "Ova sekcija će da sadrži listu uplata.", "list_of_payments": "Ova sekcija će da sadrži listu uplata.",
"select_payment_mode": "Odaberi način plaćanja", "select_payment_mode": "Odaberi način plaćanja",
@ -464,6 +473,7 @@
"receipt": "Račun", "receipt": "Račun",
"amount": "Iznos", "amount": "Iznos",
"action": "Akcija", "action": "Akcija",
"not_selected": "Not selected",
"note": "Napomena", "note": "Napomena",
"category_id": "ID kategorije", "category_id": "ID kategorije",
"date": "Datum", "date": "Datum",
@ -741,10 +751,13 @@
"title": "Fakture", "title": "Fakture",
"notes": "Napomene", "notes": "Napomene",
"invoice_prefix": "Prefiks faktura", "invoice_prefix": "Prefiks faktura",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Podrazumevan sadržaj email-a za Fakture", "default_invoice_email_body": "Podrazumevan sadržaj email-a za Fakture",
"invoice_settings": "Podešavanje za fakture", "invoice_settings": "Podešavanje za fakture",
"autogenerate_invoice_number": "Automatski-generiši broj fakture", "autogenerate_invoice_number": "Automatski-generiši broj fakture",
"invoice_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj fakture kada pravite novu fakturu.", "invoice_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj fakture kada pravite novu fakturu.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Unesite prefiks fakture", "enter_invoice_prefix": "Unesite prefiks fakture",
"terms_and_conditions": "Uslovi Korišćenja", "terms_and_conditions": "Uslovi Korišćenja",
"company_address_format": "Format adrese firme", "company_address_format": "Format adrese firme",
@ -755,10 +768,13 @@
"estimates": { "estimates": {
"title": "Profakture", "title": "Profakture",
"estimate_prefix": "Prefiks profaktura", "estimate_prefix": "Prefiks profaktura",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Podrazumevan sadržaj email-a za Profakture", "default_estimate_email_body": "Podrazumevan sadržaj email-a za Profakture",
"estimate_settings": "Podešavanje za profakture", "estimate_settings": "Podešavanje za profakture",
"autogenerate_estimate_number": "Automatski-generiši broj profakture", "autogenerate_estimate_number": "Automatski-generiši broj profakture",
"estimate_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj profakture kada pravite novu profakturu.", "estimate_setting_description": "Onemogući ovo, Ako Vi ne želite da automatski-generišete broj profakture kada pravite novu profakturu.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Unesite prefiks profakture", "enter_estimate_prefix": "Unesite prefiks profakture",
"estimate_setting_updated": "Podešavanje za profakture je uspešno sačuvano", "estimate_setting_updated": "Podešavanje za profakture je uspešno sačuvano",
"company_address_format": "Format adrese firme", "company_address_format": "Format adrese firme",
@ -769,10 +785,13 @@
"title": "Uplate", "title": "Uplate",
"description": "Način plaćanja", "description": "Način plaćanja",
"payment_prefix": "Prefiks uplata", "payment_prefix": "Prefiks uplata",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "Podrazumevan sadržaj email-a za potvrdu o plaćanju (račun)", "default_payment_email_body": "Podrazumevan sadržaj email-a za potvrdu o plaćanju (račun)",
"payment_settings": "Podešavanje za plaćanja", "payment_settings": "Podešavanje za plaćanja",
"autogenerate_payment_number": "Automatski-generiši broj uplate", "autogenerate_payment_number": "Automatski-generiši broj uplate",
"payment_setting_description": "Onemogući ovo, Ako ne želite da automatski-generišete broj uplate kada pravite novu uplatu.", "payment_setting_description": "Onemogući ovo, Ako ne želite da automatski-generišete broj uplate kada pravite novu uplatu.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Unesite prefiks uplate", "enter_payment_prefix": "Unesite prefiks uplate",
"payment_setting_updated": "Podešavanje za plaćanja je uspešno sačuvano", "payment_setting_updated": "Podešavanje za plaćanja je uspešno sačuvano",
"payment_modes": "Način Plaćanja", "payment_modes": "Način Plaćanja",
@ -1059,9 +1078,9 @@
"secret": "Šifra", "secret": "Šifra",
"mailgun_secret": "Mailgun Šifra", "mailgun_secret": "Mailgun Šifra",
"mailgun_domain": "Domen", "mailgun_domain": "Domen",
"mailgun_endpoint": "Mailgun Endpoint", "mailgun_endpoint": "Mailgun Endpoint",
"ses_secret": "SES Šifra", "ses_secret": "SES Šifra",
"ses_key": "SES Ključ", "ses_key": "SES Ključ",
"password": "Šifra za e-mail", "password": "Šifra za e-mail",
"username": "Koristničko ime za e-mail", "username": "Koristničko ime za e-mail",
"mail_config": "E-mail konfigurisanje", "mail_config": "E-mail konfigurisanje",
@ -1132,7 +1151,8 @@
"address_maxlength": "Adresa ne može da ima više od 255 karaktera", "address_maxlength": "Adresa ne može da ima više od 255 karaktera",
"ref_number_maxlength": "Poziv na broj ne može da ima više od 225 karaktera", "ref_number_maxlength": "Poziv na broj ne može da ima više od 225 karaktera",
"prefix_maxlength": "Prefiks ne može da ima više od 5 karaktera", "prefix_maxlength": "Prefiks ne može da ima više od 5 karaktera",
"something_went_wrong": "nešto je krenulo naopako" "something_went_wrong": "nešto je krenulo naopako",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Profaktura", "pdf_estimate_label": "Profaktura",
"pdf_estimate_number": "Broj Profakture", "pdf_estimate_number": "Broj Profakture",
@ -1150,6 +1170,7 @@
"pdf_amount_label": "Iznos", "pdf_amount_label": "Iznos",
"pdf_subtotal": "Osnovica za obračun PDV-a", "pdf_subtotal": "Osnovica za obračun PDV-a",
"pdf_total": "Ukupan iznos", "pdf_total": "Ukupan iznos",
"pdf_payment_label": "Payment",
"pdf_payment_receipt_label": "POTVRDA O UPLATI", "pdf_payment_receipt_label": "POTVRDA O UPLATI",
"pdf_payment_date": "Datum Uplate", "pdf_payment_date": "Datum Uplate",
"pdf_payment_number": "Broj Uplate", "pdf_payment_number": "Broj Uplate",
@ -1158,6 +1179,9 @@
"pdf_expense_report_label": "IZVEŠTAJ O RASHODIMA", "pdf_expense_report_label": "IZVEŠTAJ O RASHODIMA",
"pdf_total_expenses_label": "RASHODI UKUPNO", "pdf_total_expenses_label": "RASHODI UKUPNO",
"pdf_profit_loss_label": "IZVEŠTAJ O PRIHODIMA I RASHODIMA", "pdf_profit_loss_label": "IZVEŠTAJ O PRIHODIMA I RASHODIMA",
"pdf_sales_customers_label": "Sales Customer Report",
"pdf_sales_items_label": "Sales Item Report",
"pdf_tax_summery_label": "Tax Summary Report",
"pdf_income_label": "PRIHOD", "pdf_income_label": "PRIHOD",
"pdf_net_profit_label": "NETO PROFIT", "pdf_net_profit_label": "NETO PROFIT",
"pdf_customer_sales_report": "Izveštaj o Prodaji: Po Klijentu", "pdf_customer_sales_report": "Izveštaj o Prodaji: Po Klijentu",

View File

@ -178,6 +178,8 @@
"copy_billing_address": "Kopiera från faktura", "copy_billing_address": "Kopiera från faktura",
"no_customers": "Inga kunder än!", "no_customers": "Inga kunder än!",
"no_customers_found": "Hittade inga kunder!", "no_customers_found": "Hittade inga kunder!",
"no_contact": "No contact",
"no_contact_name": "No contact name",
"list_of_customers": "Här kommer det finnas en lista med kunder.", "list_of_customers": "Här kommer det finnas en lista med kunder.",
"primary_display_name": "Visningsnamn", "primary_display_name": "Visningsnamn",
"select_currency": "Välj valuta", "select_currency": "Välj valuta",
@ -201,6 +203,7 @@
"added_on": "Tillagd den", "added_on": "Tillagd den",
"price": "Pris", "price": "Pris",
"date_of_creation": "Skapandedatum", "date_of_creation": "Skapandedatum",
"not_selected": "No item selected",
"action": "Handling", "action": "Handling",
"add_item": "Skapa artikel", "add_item": "Skapa artikel",
"save_item": "Spara artikel", "save_item": "Spara artikel",
@ -271,6 +274,7 @@
"required": "Fältet är tvingande" "required": "Fältet är tvingande"
}, },
"accepted": "Accepterad", "accepted": "Accepterad",
"rejected": "Rejected",
"sent": "Skickat", "sent": "Skickat",
"draft": "Utkast", "draft": "Utkast",
"declined": "Avvisad", "declined": "Avvisad",
@ -317,6 +321,9 @@
"all": "Alla", "all": "Alla",
"paid": "Betalda", "paid": "Betalda",
"unpaid": "Obetalda", "unpaid": "Obetalda",
"viewed": "Viewed",
"overdue": "Overdue",
"completed": "Completed",
"customer": "KUNDER", "customer": "KUNDER",
"paid_status": "BETALSTATUS", "paid_status": "BETALSTATUS",
"ref_no": "REF NR.", "ref_no": "REF NR.",
@ -435,6 +442,8 @@
"update_payment": "Uppdatera betalning", "update_payment": "Uppdatera betalning",
"payment": "Betalning | Betalningar", "payment": "Betalning | Betalningar",
"no_payments": "Inga betalningar än!", "no_payments": "Inga betalningar än!",
"not_selected": "Not selected",
"no_invoice": "No invoice",
"no_matching_payments": "Inga matchande betalningar!", "no_matching_payments": "Inga matchande betalningar!",
"list_of_payments": "Här kommer listan med betalningar finnas.", "list_of_payments": "Här kommer listan med betalningar finnas.",
"select_payment_mode": "Välj betalningssätt", "select_payment_mode": "Välj betalningssätt",
@ -464,6 +473,7 @@
"receipt": "Kvitto", "receipt": "Kvitto",
"amount": "Summa", "amount": "Summa",
"action": "Handling", "action": "Handling",
"not_selected": "Not selected",
"note": "Notering", "note": "Notering",
"category_id": "Kategorins ID", "category_id": "Kategorins ID",
"date": "Datum", "date": "Datum",
@ -741,10 +751,13 @@
"title": "Fakturor", "title": "Fakturor",
"notes": "Noteringar", "notes": "Noteringar",
"invoice_prefix": "Prefix för fakturor", "invoice_prefix": "Prefix för fakturor",
"invoice_number_length": "Invoice number length",
"default_invoice_email_body": "Standardtext för faktura", "default_invoice_email_body": "Standardtext för faktura",
"invoice_settings": "Fakturainställningar", "invoice_settings": "Fakturainställningar",
"autogenerate_invoice_number": "Generera fakturanummer automatiskt", "autogenerate_invoice_number": "Generera fakturanummer automatiskt",
"invoice_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt fakturanummer vid skapande av faktura.", "invoice_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt fakturanummer vid skapande av faktura.",
"invoice_email_attachment": "Send invoices as attachments",
"invoice_email_attachment_setting_description": "Enable this if you want to send invoices as email attachment. Please note that 'View Invoice' button in emails will not be displayed anymore when enabled.",
"enter_invoice_prefix": "Skriv prefix för faktura", "enter_invoice_prefix": "Skriv prefix för faktura",
"terms_and_conditions": "Villkor", "terms_and_conditions": "Villkor",
"company_address_format": "Formatering av företagsadress", "company_address_format": "Formatering av företagsadress",
@ -755,10 +768,13 @@
"estimates": { "estimates": {
"title": "Kostnadsförslag", "title": "Kostnadsförslag",
"estimate_prefix": "Prefix för kostnadsförslag", "estimate_prefix": "Prefix för kostnadsförslag",
"estimate_number_length": "Estimate number length",
"default_estimate_email_body": "Standardtext för kostnadsförslag", "default_estimate_email_body": "Standardtext för kostnadsförslag",
"estimate_settings": "Kostnadsförslagsinställningar", "estimate_settings": "Kostnadsförslagsinställningar",
"autogenerate_estimate_number": "Generera kostnadsförslagsnummer automatiskt", "autogenerate_estimate_number": "Generera kostnadsförslagsnummer automatiskt",
"estimate_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt kostnadsförslagsnummer vid skapande av kostnadsförslag.", "estimate_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt kostnadsförslagsnummer vid skapande av kostnadsförslag.",
"estimate_email_attachment": "Send estimates as attachments",
"estimate_email_attachment_setting_description": "Enable this if you want to send the estimates as an email attachment. Please note that 'View Estimate' button in emails will not be displayed anymore when enabled.",
"enter_estimate_prefix": "Skriv prefix för kostnadsförslag", "enter_estimate_prefix": "Skriv prefix för kostnadsförslag",
"estimate_setting_updated": "Kostnadsförslagsinställningar uppdaterades", "estimate_setting_updated": "Kostnadsförslagsinställningar uppdaterades",
"company_address_format": "Formatering av företagsadress", "company_address_format": "Formatering av företagsadress",
@ -769,10 +785,13 @@
"title": "Betalningar", "title": "Betalningar",
"description": "Överföringstyper för betalningar", "description": "Överföringstyper för betalningar",
"payment_prefix": "Prefix för betalningar", "payment_prefix": "Prefix för betalningar",
"payment_number_length": "Payment number lenght",
"default_payment_email_body": "Standardtext för betalningar", "default_payment_email_body": "Standardtext för betalningar",
"payment_settings": "Betalningsinställningar", "payment_settings": "Betalningsinställningar",
"autogenerate_payment_number": "Generera betalningsnummer automatiskt", "autogenerate_payment_number": "Generera betalningsnummer automatiskt",
"payment_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt betalningssnummer vid skapande av betalning.", "payment_setting_description": "Inaktivera detta dom du inte vill att det automatiskt ska genereras ett nytt betalningssnummer vid skapande av betalning.",
"payment_email_attachment": "Send payments as attachments",
"payment_email_attachment_setting_description": "Enable this if you want to send the payment receipts as an email attachment. Please note that 'View Payment' button in emails will not be displayed anymore when enabled.",
"enter_payment_prefix": "Skriv prefix för kostnadsförslag", "enter_payment_prefix": "Skriv prefix för kostnadsförslag",
"payment_setting_updated": "Betalningsinställningar uppdaterades", "payment_setting_updated": "Betalningsinställningar uppdaterades",
"payment_modes": "Betalningssätt", "payment_modes": "Betalningssätt",
@ -912,6 +931,7 @@
"download_zip_file": "Ladda ner ZIP-fil", "download_zip_file": "Ladda ner ZIP-fil",
"unzipping_package": "Zippar upp paket", "unzipping_package": "Zippar upp paket",
"copying_files": "Kopierar filer", "copying_files": "Kopierar filer",
"deleting_files": "Deleting Unused files",
"running_migrations": "Kör migreringar", "running_migrations": "Kör migreringar",
"finishing_update": "Avslutar uppdateringen", "finishing_update": "Avslutar uppdateringen",
"update_failed": "Uppdatering misslyckades", "update_failed": "Uppdatering misslyckades",
@ -1131,7 +1151,8 @@
"address_maxlength": "Adress kan inte vara större än 255 tecken.", "address_maxlength": "Adress kan inte vara större än 255 tecken.",
"ref_number_maxlength": "Referensnummer kan inte vara större än 255 tecken.", "ref_number_maxlength": "Referensnummer kan inte vara större än 255 tecken.",
"prefix_maxlength": "Prefix kan inte vara större än 5 tecken.", "prefix_maxlength": "Prefix kan inte vara större än 5 tecken.",
"something_went_wrong": "något blev fel" "something_went_wrong": "något blev fel",
"number_length_minvalue": "Number lenght should be greater than 0"
}, },
"pdf_estimate_label": "Kostnadsförslag", "pdf_estimate_label": "Kostnadsförslag",
"pdf_estimate_number": "Kostnadsförslagsnummer", "pdf_estimate_number": "Kostnadsförslagsnummer",
@ -1149,6 +1170,7 @@
"pdf_amount_label": "Belopp", "pdf_amount_label": "Belopp",
"pdf_subtotal": "Delsumma", "pdf_subtotal": "Delsumma",
"pdf_total": "Summa", "pdf_total": "Summa",
"pdf_payment_label": "Payment",
"pdf_payment_receipt_label": "Betalningskvitto", "pdf_payment_receipt_label": "Betalningskvitto",
"pdf_payment_date": "Betalningsdatum", "pdf_payment_date": "Betalningsdatum",
"pdf_payment_number": "Betalningsnummer", "pdf_payment_number": "Betalningsnummer",
@ -1157,6 +1179,9 @@
"pdf_expense_report_label": "Kostnadsrapport", "pdf_expense_report_label": "Kostnadsrapport",
"pdf_total_expenses_label": "Totalkostnad", "pdf_total_expenses_label": "Totalkostnad",
"pdf_profit_loss_label": "Resultat- och förlustrapport", "pdf_profit_loss_label": "Resultat- och förlustrapport",
"pdf_sales_customers_label": "Sales Customer Report",
"pdf_sales_items_label": "Sales Item Report",
"pdf_tax_summery_label": "Tax Summary Report",
"pdf_income_label": "Inkomst", "pdf_income_label": "Inkomst",
"pdf_net_profit_label": "Nettoförtjänst", "pdf_net_profit_label": "Nettoförtjänst",
"pdf_customer_sales_report": "Försäljningsrapport: Per kund", "pdf_customer_sales_report": "Försäljningsrapport: Per kund",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@ import estimateTemplate from './modules/estimate-template'
import invoiceTemplate from './modules/invoice-template' import invoiceTemplate from './modules/invoice-template'
import search from './modules/search' import search from './modules/search'
import notes from './modules/notes' import notes from './modules/notes'
import notification from './modules/notification'
Vue.use(Vuex) Vue.use(Vuex)
@ -76,5 +77,6 @@ export default new Vuex.Store({
invoiceTemplate, invoiceTemplate,
search, search,
notes, notes,
notification,
}, },
}) })

View File

@ -13,7 +13,6 @@ export const login = ({ commit }, data) => {
commit('user/' + userTypes.RESET_CURRENT_USER, null, { root: true }) commit('user/' + userTypes.RESET_CURRENT_USER, null, { root: true })
commit(rootTypes.UPDATE_APP_LOADING_STATUS, false, { root: true }) commit(rootTypes.UPDATE_APP_LOADING_STATUS, false, { root: true })
window.toastr['success']('Login Successful')
resolve(response) resolve(response)
}) })
.catch((err) => { .catch((err) => {
@ -28,7 +27,7 @@ export const setLogoutFalse = ({ state, commit }) => {
commit(types.SET_LOGOUT, false) commit(types.SET_LOGOUT, false)
} }
export const logout = ({ state, commit }) => { export const logout = ({ state, commit, dispatch }) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (state.isLoggedOut) { if (state.isLoggedOut) {
resolve() resolve()
@ -40,7 +39,14 @@ export const logout = ({ state, commit }) => {
.get('/auth/logout') .get('/auth/logout')
.then(() => { .then(() => {
router.push('/login') router.push('/login')
window.toastr['success']('Logged out!', 'Success') dispatch(
'notification/showNotification',
{
type: 'success',
message: 'Logged out successfully.',
},
{ root: true }
)
}) })
.catch((err) => { .catch((err) => {
router.push('/login') router.push('/login')

View File

@ -0,0 +1,27 @@
import * as types from './mutation-types'
export const showNotification = ({ commit, dispatch, state }, payload) => {
commit(types.SHOW_NOTIFICATION, true)
if (payload.type) {
commit(types.SET_NOTIFICATION_TYPE, payload.type)
}
if (payload.title) {
commit(types.SET_TITLE, payload.title)
}
if (payload.autoHide) {
commit(types.SET_AUTO_HIDE, payload.autoHide)
}
if (payload.message) {
commit(types.SET_MESSAGE, payload.message)
}
}
export const hideNotification = ({ commit, dispatch, state }) => {
commit(types.RESET_DATA)
commit(types.HIDE_NOTIFICATION, false)
}
export const resetNotificationData = ({ commit, dispatch, state }) => {
commit(types.RESET_DATA)
}

View File

@ -0,0 +1,5 @@
export const notificationActive = (state) => state.active
export const notificationTitle = (state) => state.title
export const notificationMessage = (state) => state.message
export const notificationAutoHide = (state) => state.autoHide
export const notificationType = (state) => state.type

View File

@ -0,0 +1,23 @@
import mutations from './mutations'
import * as actions from './actions'
import * as getters from './getters'
const initialState = {
active: false,
autoHide: true,
title: '',
message: '',
type: '',
}
export default {
namespaced: true,
state: initialState,
getters: getters,
actions: actions,
mutations: mutations,
}

View File

@ -0,0 +1,7 @@
export const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION'
export const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION'
export const SET_TITLE = 'SET_TITLE'
export const SET_AUTO_HIDE = 'SET_AUTO_HIDE'
export const SET_MESSAGE = 'SET_MESSAGE'
export const SET_NOTIFICATION_TYPE = 'SET_NOTIFICATION_TYPE'
export const RESET_DATA = 'RESET_DATA'

View File

@ -0,0 +1,33 @@
import * as types from './mutation-types'
export default {
[types.SHOW_NOTIFICATION](state, data) {
state.active = data
},
[types.HIDE_NOTIFICATION](state, data) {
state.active = data
},
[types.SET_TITLE](state, data) {
state.title = data
},
[types.SET_AUTO_HIDE](state, data) {
state.autoHide = data
},
[types.SET_MESSAGE](state, data) {
state.message = data
},
[types.SET_NOTIFICATION_TYPE](state, data) {
state.type = data
},
[types.RESET_DATA](state) {
state.active = false
state.description = ''
state.title = ''
},
}

View File

@ -45,9 +45,8 @@
</template> </template>
<script type="text/babel"> <script type="text/babel">
import { async } from 'q'
const { required, email } = require('vuelidate/lib/validators') const { required, email } = require('vuelidate/lib/validators')
import { mapActions } from 'vuex'
export default { export default {
data() { data() {
return { return {
@ -67,6 +66,7 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions('notification', ['showNotification']),
async validateBeforeSubmit(e) { async validateBeforeSubmit(e) {
this.$v.formData.$touch() this.$v.formData.$touch()
if (!this.$v.formData.$invalid) { if (!this.$v.formData.$invalid) {
@ -78,7 +78,10 @@ export default {
) )
if (res.data) { if (res.data) {
toastr['success']('Mail sent successfuly!', 'Success') this.showNotification({
type: 'success',
message: 'Mail sent successfuly!',
})
} }
this.isSent = true this.isSent = true

View File

@ -145,6 +145,7 @@ export default {
}, },
methods: { methods: {
...mapActions('auth', ['login']), ...mapActions('auth', ['login']),
...mapActions('notification', ['showNotification']),
async validateBeforeSubmit() { async validateBeforeSubmit() {
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
@ -158,6 +159,10 @@ export default {
try { try {
await this.login(this.loginData) await this.login(this.loginData)
this.$router.push('/admin/dashboard') this.$router.push('/admin/dashboard')
this.showNotification({
type: 'success',
message: 'Logged in successfully.',
})
this.isLoading = false this.isLoading = false
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false

View File

@ -92,6 +92,7 @@ const {
sameAs, sameAs,
minLength, minLength,
} = require('vuelidate/lib/validators') } = require('vuelidate/lib/validators')
import { mapActions } from 'vuex'
export default { export default {
data() { data() {
@ -120,6 +121,7 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions('notification', ['showNotification']),
async validateBeforeSubmit(e) { async validateBeforeSubmit(e) {
this.$v.formData.$touch() this.$v.formData.$touch()
@ -135,18 +137,18 @@ export default {
let res = await axios.post('/api/v1/auth/reset/password', data) let res = await axios.post('/api/v1/auth/reset/password', data)
this.isLoading = false this.isLoading = false
if (res.data) { if (res.data) {
toastr['success']( this.showNotification({
this.$t('login.password_reset_successfully'), type: 'success',
'Success' message: this.$t('login.password_reset_successfully'),
) })
this.$router.push('/login') this.$router.push('/login')
} }
} catch (err) { } catch (err) {
if (err.response && err.response.status === 403) { if (err.response && err.response.status === 403) {
toastr['error']( this.showNotification({
err.response.data, type: 'error',
this.$t('validation.email_incorrect') message: this.$t('validation.email_incorrect'),
) })
this.isLoading = false this.isLoading = false
} }
} }

View File

@ -1,26 +1,26 @@
<template> <template>
<base-page class="customer-create"> <base-page class="customer-create">
<form v-if="!initLoad" @submit.prevent="submitCustomerData"> <form v-if="!initLoad" @submit.prevent="submitCustomerData">
<sw-page-header class="mb-5" :title="pageTitle"> <sw-page-header :title="pageTitle" class="mb-5">
<sw-breadcrumb slot="breadcrumbs"> <sw-breadcrumb slot="breadcrumbs">
<sw-breadcrumb-item <sw-breadcrumb-item
to="/admin/dashboard"
:title="$t('general.home')" :title="$t('general.home')"
to="/admin/dashboard"
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
to="/admin/customers"
:title="$tc('customers.customer', 2)" :title="$tc('customers.customer', 2)"
to="/admin/customers"
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
v-if="$route.name === 'customers.edit'" v-if="$route.name === 'customers.edit'"
to="#"
:title="$t('customers.edit_customer')" :title="$t('customers.edit_customer')"
to="#"
active active
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
v-else v-else
to="#"
:title="$t('customers.new_customer')" :title="$t('customers.new_customer')"
to="#"
active active
/> />
</sw-breadcrumb> </sw-breadcrumb>
@ -56,8 +56,8 @@
> >
<sw-input-group <sw-input-group
:label="$t('customers.display_name')" :label="$t('customers.display_name')"
class="md:col-span-3"
:error="displayNameError" :error="displayNameError"
class="md:col-span-3"
required required
> >
<sw-input <sw-input
@ -85,8 +85,8 @@
<sw-input-group <sw-input-group
:label="$t('customers.email')" :label="$t('customers.email')"
class="md:col-span-3"
:error="emailError" :error="emailError"
class="md:col-span-3"
> >
<sw-input <sw-input
:invalid="$v.formData.email.$error" :invalid="$v.formData.email.$error"
@ -243,8 +243,8 @@
<sw-input-group :label="$t('customers.zip_code')"> <sw-input-group :label="$t('customers.zip_code')">
<sw-input <sw-input
tabindex="14"
v-model.trim="billing.zip" v-model.trim="billing.zip"
tabindex="14"
type="text" type="text"
name="zip" name="zip"
/> />
@ -406,16 +406,16 @@
class="grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6" class="grid col-span-5 lg:col-span-4 gap-y-6 gap-x-4 md:grid-cols-6"
> >
<sw-input-group <sw-input-group
class="md:col-span-3"
v-for="(field, index) in customFields" v-for="(field, index) in customFields"
:label="field.label" :label="field.label"
:required="field.is_required ? true : false" :required="field.is_required ? true : false"
:key="index" :key="index"
class="md:col-span-3"
> >
<component <component
:type="field.type.label" :type="field.type.label"
:field="field" :field="field"
:isEdit="isEdit" :is-edit="isEdit"
:is="field.type + 'Field'" :is="field.type + 'Field'"
:invalid-fields="invalidFields" :invalid-fields="invalidFields"
:tabindex="23 + index" :tabindex="23 + index"
@ -694,7 +694,7 @@ export default {
'updateCustomer', 'updateCustomer',
'fetchViewCustomer', 'fetchViewCustomer',
]), ]),
...mapActions('notification', ['showNotification']),
...mapActions('customFields', ['fetchCustomFields']), ...mapActions('customFields', ['fetchCustomFields']),
currencyNameWithCode({ name, code }) { currencyNameWithCode({ name, code }) {
@ -786,10 +786,16 @@ export default {
this.$router.push( this.$router.push(
`/admin/customers/${response.data.customer.id}/view` `/admin/customers/${response.data.customer.id}/view`
) )
window.toastr['success'](this.$t('customers.updated_message')) this.showNotification({
type: 'success',
message: this.$t('customers.updated_message'),
})
} }
if (response.data.error) { if (response.data.error) {
window.toastr['error'](this.$t('validation.email_already_taken')) this.showNotification({
type: 'error',
message: this.$t('validation.email_already_taken'),
})
} }
} else { } else {
response = await this.addCustomer(this.formData) response = await this.addCustomer(this.formData)
@ -797,7 +803,10 @@ export default {
this.$router.push( this.$router.push(
`/admin/customers/${response.data.customer.id}/view` `/admin/customers/${response.data.customer.id}/view`
) )
window.toastr['success'](this.$t('customers.created_message')) this.showNotification({
type: 'success',
message: this.$t('customers.created_message'),
})
} }
} }
@ -806,7 +815,10 @@ export default {
} catch (error) { } catch (error) {
this.isLoading = false this.isLoading = false
if (err.response.data.errors.email) { if (err.response.data.errors.email) {
window.toastr['error'](this.$t('validation.email_already_taken')) this.showNotification({
type: 'error',
message: this.$t('validation.email_already_taken'),
})
} }
} }
}, },

View File

@ -2,10 +2,10 @@
<base-page class="customer-create"> <base-page class="customer-create">
<sw-page-header :title="$t('customers.title')"> <sw-page-header :title="$t('customers.title')">
<sw-breadcrumb slot="breadcrumbs"> <sw-breadcrumb slot="breadcrumbs">
<sw-breadcrumb-item to="dashboard" :title="$t('general.home')" /> <sw-breadcrumb-item :title="$t('general.home')" to="dashboard" />
<sw-breadcrumb-item <sw-breadcrumb-item
to="#"
:title="$tc('customers.customer', 2)" :title="$tc('customers.customer', 2)"
to="#"
active active
/> />
</sw-breadcrumb> </sw-breadcrumb>
@ -159,7 +159,7 @@
:filterable="false" :filterable="false"
cell-class="no-click" cell-class="no-click"
> >
<div class="relative block" slot-scope="row"> <div slot-scope="row" class="relative block">
<sw-checkbox <sw-checkbox
:id="row.id" :id="row.id"
v-model="selectField" v-model="selectField"
@ -195,7 +195,11 @@
<template slot-scope="row"> <template slot-scope="row">
<span>{{ $t('customers.contact_name') }}</span> <span>{{ $t('customers.contact_name') }}</span>
<span> <span>
{{ row.contact_name ? row.contact_name : 'No Contact Name' }} {{
row.contact_name
? row.contact_name
: $t('customers.no_contact_name')
}}
</span> </span>
</template> </template>
</sw-table-column> </sw-table-column>
@ -208,7 +212,7 @@
<template slot-scope="row"> <template slot-scope="row">
<span>{{ $t('customers.phone') }}</span> <span>{{ $t('customers.phone') }}</span>
<span> <span>
{{ row.phone ? row.phone : 'No Contact' }} {{ row.phone ? row.phone : $t('customers.no_contact') }}
</span> </span>
</template> </template>
</sw-table-column> </sw-table-column>
@ -243,16 +247,16 @@
<dot-icon slot="activator" /> <dot-icon slot="activator" />
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`customers/${row.id}/edit`" :to="`customers/${row.id}/edit`"
tag-name="router-link"
> >
<pencil-icon class="h-5 mr-3 text-gray-600" /> <pencil-icon class="h-5 mr-3 text-gray-600" />
{{ $t('general.edit') }} {{ $t('general.edit') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`customers/${row.id}/view`" :to="`customers/${row.id}/view`"
tag-name="router-link"
> >
<eye-icon class="h-5 mr-3 text-gray-600" /> <eye-icon class="h-5 mr-3 text-gray-600" />
{{ $t('general.view') }} {{ $t('general.view') }}
@ -281,7 +285,6 @@ import {
EyeIcon, EyeIcon,
} from '@vue-hero-icons/solid' } from '@vue-hero-icons/solid'
import AstronautIcon from '../../components/icon/AstronautIcon' import AstronautIcon from '../../components/icon/AstronautIcon'
import { request } from 'http'
export default { export default {
components: { components: {
@ -355,6 +358,7 @@ export default {
'deleteMultipleCustomers', 'deleteMultipleCustomers',
'setSelectAllState', 'setSelectAllState',
]), ]),
...mapActions('notification', ['showNotification']),
refreshTable() { refreshTable() {
this.$refs.table.refresh() this.$refs.table.refresh()
}, },
@ -399,43 +403,60 @@ export default {
}, },
async removeCustomer(id) { async removeCustomer(id) {
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$tc('customers.confirm_delete'), text: this.$tc('customers.confirm_delete'),
icon: '/assets/icon/trash-solid.svg', icon: 'error',
buttons: true, iconHtml: `<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 text-red-600"fill="none" viewBox="0 0 24 24" stroke="currentColor">
dangerMode: true, <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
}).then(async (willDelete) => { </svg>`,
if (willDelete) { showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
let res = await this.deleteCustomer({ ids: [id] }) let res = await this.deleteCustomer({ ids: [id] })
if (res.data.success) { if (res.data.success) {
window.toastr['success'](this.$tc('customers.deleted_message', 1)) this.showNotification({
type: 'success',
message: this.$tc('customers.deleted_message', 1),
})
this.$refs.table.refresh() this.$refs.table.refresh()
return true return true
} }
this.showNotification({
window.toastr['error'](res.data.message) type: 'error',
message: this.$tc(res.data.message),
})
return true return true
} }
}) })
}, },
async removeMultipleCustomers() { async removeMultipleCustomers() {
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$tc('customers.confirm_delete', 2), text: this.$tc('customers.confirm_delete', 2),
icon: '/assets/icon/trash-solid.svg', icon: 'error',
buttons: true, iconHtml: `<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 text-red-600"fill="none" viewBox="0 0 24 24" stroke="currentColor">
dangerMode: true, <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
}).then(async (willDelete) => { </svg>`,
if (willDelete) { showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
let request = await this.deleteMultipleCustomers() let request = await this.deleteMultipleCustomers()
if (request.data.success) { if (request.data.success) {
window.toastr['success'](this.$tc('customers.deleted_message', 2)) this.showNotification({
type: 'success',
message: this.$tc('customers.deleted_message', 2),
})
this.refreshTable() this.refreshTable()
} else if (request.data.error) { } else if (request.data.error) {
window.toastr['error'](request.data.message) this.showNotification({
type: 'error',
message: request.data.message,
})
} }
} }
}) })

View File

@ -3,8 +3,8 @@
<sw-page-header :title="pageTitle"> <sw-page-header :title="pageTitle">
<template slot="actions"> <template slot="actions">
<sw-button <sw-button
tag-name="router-link"
:to="`/admin/customers/${$route.params.id}/edit`" :to="`/admin/customers/${$route.params.id}/edit`"
tag-name="router-link"
class="mr-3" class="mr-3"
variant="primary-outline" variant="primary-outline"
> >
@ -15,29 +15,29 @@
{{ $t('customers.new_transaction') }} {{ $t('customers.new_transaction') }}
</sw-button> </sw-button>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`/admin/estimates/create?customer=${$route.params.id}`" :to="`/admin/estimates/create?customer=${$route.params.id}`"
tag-name="router-link"
> >
<document-icon class="h-5 mr-3 text-gray-600" /> <document-icon class="h-5 mr-3 text-gray-600" />
{{ $t('estimates.new_estimate') }} {{ $t('estimates.new_estimate') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`/admin/invoices/create?customer=${$route.params.id}`" :to="`/admin/invoices/create?customer=${$route.params.id}`"
tag-name="router-link"
> >
<document-text-icon class="h-5 mr-3 text-gray-600" /> <document-text-icon class="h-5 mr-3 text-gray-600" />
{{ $t('invoices.new_invoice') }} {{ $t('invoices.new_invoice') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`/admin/payments/create?customer=${$route.params.id}`" :to="`/admin/payments/create?customer=${$route.params.id}`"
tag-name="router-link"
> >
<credit-card-icon class="h-5 mr-3 text-gray-600" /> <credit-card-icon class="h-5 mr-3 text-gray-600" />
{{ $t('payments.new_payment') }} {{ $t('payments.new_payment') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`/admin/expenses/create?customer=${$route.params.id}`" :to="`/admin/expenses/create?customer=${$route.params.id}`"
tag-name="router-link"
> >
<calculator-icon class="h-5 mr-3 text-gray-600" /> <calculator-icon class="h-5 mr-3 text-gray-600" />
{{ $t('expenses.new_expense') }} {{ $t('expenses.new_expense') }}
@ -112,25 +112,48 @@ export default {
'selectCustomer', 'selectCustomer',
'deleteMultipleCustomers', 'deleteMultipleCustomers',
]), ]),
...mapActions('notification', ['showNotification']),
async removeCustomer(id) { async removeCustomer(id) {
swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$tc('customers.confirm_delete'), text: this.$tc('customers.confirm_delete'),
icon: '/assets/icon/trash-solid.svg', icon: 'question',
buttons: true, iconHtml: `<svg
dangerMode: true, aria-hidden="true"
}).then(async (willDelete) => { class="w-6 h-6"
if (willDelete) { focusable="false"
data-prefix="fas"
data-icon="trash"
class="svg-inline--fa fa-trash fa-w-14"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 448 512"
>
<path
fill="#55547A"
d="M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"
></path>
</svg>`,
showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
let data = [id] let data = [id]
this.selectCustomer(data) this.selectCustomer(data)
let res = await this.deleteMultipleCustomers() let res = await this.deleteMultipleCustomers()
if (res.data.success) { if (res.data.success) {
window.toastr['success'](this.$tc('customers.deleted_message')) this.showNotification({
type: 'success',
message: this.$tc('customers.deleted_message'),
})
this.$router.push('/admin/customers') this.$router.push('/admin/customers')
return true return true
} else if (request.data.error) { } else if (request.data.error) {
window.toastr['error'](res.data.message) this.showNotification({
type: 'error',
message: res.data.message,
})
} }
} }
}) })

View File

@ -35,10 +35,10 @@
<sw-dropdown-item class="flex cursor-pointer"> <sw-dropdown-item class="flex cursor-pointer">
<sw-input-group class="-mt-3 font-normal"> <sw-input-group class="-mt-3 font-normal">
<sw-radio <sw-radio
:label="$t('customers.create_date')"
size="sm"
id="filter_create_date" id="filter_create_date"
:label="$t('customers.create_date')"
v-model="searchData.orderByField" v-model="searchData.orderByField"
size="sm"
name="filter" name="filter"
value="invoices.created_at" value="invoices.created_at"
@change="onSearch" @change="onSearch"
@ -49,10 +49,10 @@
<sw-dropdown-item class="flex cursor-pointer"> <sw-dropdown-item class="flex cursor-pointer">
<sw-input-group class="-mt-3 font-normal"> <sw-input-group class="-mt-3 font-normal">
<sw-radio <sw-radio
:label="$t('customers.display_name')"
size="sm"
id="filter_display_name" id="filter_display_name"
:label="$t('customers.display_name')"
v-model="searchData.orderByField" v-model="searchData.orderByField"
size="sm"
name="filter" name="filter"
value="users.name" value="users.name"
@change="onSearch" @change="onSearch"
@ -62,8 +62,8 @@
</sw-dropdown> </sw-dropdown>
<sw-button <sw-button
class="ml-1"
v-tooltip.top-center="{ content: getOrderName }" v-tooltip.top-center="{ content: getOrderName }"
class="ml-1"
size="md" size="md"
variant="gray-light" variant="gray-light"
@click="sortData" @click="sortData"
@ -102,13 +102,13 @@
{{ customer.name }} {{ customer.name }}
</div> </div>
<div <div
class="mt-1 text-xs not-italic font-medium leading-5 text-gray-600"
v-if="customer.contact_name" v-if="customer.contact_name"
class="mt-1 text-xs not-italic font-medium leading-5 text-gray-600"
> >
{{ customer.contact_name }} {{ customer.contact_name }}
</div> </div>
</div> </div>
<div class="flex-1 whitespace-no-wrap right"> <div class="flex-1 whitespace-nowrap right">
<div <div
class="text-xl not-italic font-semibold leading-8 text-right text-gray-900" class="text-xl not-italic font-semibold leading-8 text-right text-gray-900"
v-html="$utils.formatMoney(customer.due_amount, customer.currency)" v-html="$utils.formatMoney(customer.due_amount, customer.currency)"

View File

@ -65,9 +65,11 @@
:color="$utils.getBadgeStatusColor(row.status).color" :color="$utils.getBadgeStatusColor(row.status).color"
> >
{{ {{
row.status != 'PARTIALLY_PAID' $utils.getStatusTranslation(
? row.status row.status != 'PARTIALLY_PAID'
: row.status.replace('_', ' ') ? row.status
: row.status.replace('_', ' ')
)
}} }}
</sw-badge> </sw-badge>
</template> </template>
@ -96,16 +98,16 @@
<sw-dropdown slot-scope="row"> <sw-dropdown slot-scope="row">
<dot-icon slot="activator" /> <dot-icon slot="activator" />
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`invoices/${row.id}/edit`" :to="`invoices/${row.id}/edit`"
tag-name="router-link"
> >
<pencil-icon class="h-5 mr-3 text-gray-600" /> <pencil-icon class="h-5 mr-3 text-gray-600" />
{{ $t('general.edit') }} {{ $t('general.edit') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`invoices/${row.id}/view`" :to="`invoices/${row.id}/view`"
tag-name="router-link"
> >
<eye-icon class="h-5 mr-3 text-gray-600" /> <eye-icon class="h-5 mr-3 text-gray-600" />
{{ $t('invoices.view') }} {{ $t('invoices.view') }}
@ -225,16 +227,16 @@
<dot-icon slot="activator" /> <dot-icon slot="activator" />
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`estimates/${row.id}/edit`" :to="`estimates/${row.id}/edit`"
tag-name="router-link"
> >
<pencil-icon class="h-5 mr-3 text-gray-600" /> <pencil-icon class="h-5 mr-3 text-gray-600" />
{{ $t('general.edit') }} {{ $t('general.edit') }}
</sw-dropdown-item> </sw-dropdown-item>
<sw-dropdown-item <sw-dropdown-item
tag-name="router-link"
:to="`estimates/${row.id}/view`" :to="`estimates/${row.id}/view`"
tag-name="router-link"
> >
<eye-icon class="h-5 mr-3 text-gray-600" /> <eye-icon class="h-5 mr-3 text-gray-600" />
{{ $t('general.view') }} {{ $t('general.view') }}
@ -348,6 +350,8 @@ export default {
'convertToInvoice', 'convertToInvoice',
]), ]),
...mapActions('notification', ['showNotification']),
...mapActions('estimate', { ...mapActions('estimate', {
sendEstimateEmail: 'sendEmail', sendEstimateEmail: 'sendEmail',
markEstimateAsSent: 'markAsSent', markEstimateAsSent: 'markAsSent',
@ -360,25 +364,32 @@ export default {
async removeEstimate(id) { async removeEstimate(id) {
this.id = id this.id = id
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$tc('estimates.confirm_delete', 1),
text: this.$tc('estimates.confirm_delete', 1), icon: 'error',
icon: '/assets/icon/trash-solid.svg', iconHtml: `<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 text-red-600"fill="none" viewBox="0 0 24 24" stroke="currentColor">
buttons: true, <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
dangerMode: true, </svg>`,
}) showCancelButton: true,
.then(async (willDelete) => { showConfirmButton: true,
if (willDelete) { }).then(async (result) => {
let res = await this.deleteEstimate({ ids: [this.id] }) if (result.value) {
if (res.data.success) { let res = await this.deleteEstimate({ ids: [this.id] })
window.toastr['success'](this.$tc('estimates.deleted_message', 1)) if (res.data.success) {
this.refreshEstTable() this.showNotification({
} else if (res.data.error) { type: 'success',
window.toastr['error'](res.data.message) message: this.$tc('estimates.deleted_message', 1),
} })
this.refreshEstTable()
} else if (res.data.error) {
this.showNotification({
type: 'error',
message: res.data.message,
})
} }
}) }
})
}, },
refreshInvTable() { refreshInvTable() {
@ -390,229 +401,355 @@ export default {
}, },
async convertInToinvoice(id) { async convertInToinvoice(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('estimates.confirm_conversion'),
text: this.$t('estimates.confirm_conversion'), icon: 'question',
icon: '/assets/icon/file-alt-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, viewBox="0 0 384 512"
}) class="w-6 h-6"
.then(async (willDelete) => { data-prefix="fas"
if (willDelete) { data-icon="file-alt"
let res = await this.convertToInvoice(id) class="svg-inline--fa fa-file-alt fa-w-12"
this.selectAllField = false role="img"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill="#55547A"
d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"
></path>
</svg>`,
showCancelButton: true,
showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
let res = await this.convertToInvoice(id)
this.selectAllField = false
if (res.data) { if (res.data) {
window.toastr['success'](this.$t('estimates.conversion_message')) this.showNotification({
this.$router.push(`invoices/${res.data.invoice.id}/edit`) type: 'success',
} else if (res.data.error) { message: this.$t('estimates.conversion_message'),
window.toastr['error'](res.data.message) })
} this.$router.push(`invoices/${res.data.invoice.id}/edit`)
} else if (res.data.error) {
this.showNotification({
type: 'error',
message: res.data.message,
})
} }
}) }
})
}, },
async onMarkAsSent(id) { async onMarkAsSent(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('estimates.confirm_mark_as_sent'),
text: this.$t('estimates.confirm_mark_as_sent'), icon: 'question',
icon: '/assets/icon/check-circle-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, class="w-6 h-6"
}) focusable="false"
.then(async (willMarkAsSent) => { data-prefix="fas"
if (willMarkAsSent) { data-icon="check-circle"
const data = { class="svg-inline--fa fa-check-circle fa-w-16"
id: id, role="img"
status: 'SENT', xmlns="http://www.w3.org/2000/svg"
} viewBox="0 0 512 512"
>
let response = await this.markEstimateAsSent(data) <path
this.refreshEstTable() fill="#55547A"
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
if (response.data) { ></path>
window.toastr['success']( </svg>`,
this.$tc('estimates.mark_as_sent_successfully') showCancelButton: true,
) showConfirmButton: true,
} }).then(async (result) => {
if (result.value) {
const data = {
id: id,
status: 'SENT',
} }
})
let response = await this.markEstimateAsSent(data)
this.refreshEstTable()
if (response.data) {
this.showNotification({
type: 'success',
message: this.$tc('estimates.mark_as_sent_successfully'),
})
}
}
})
}, },
async removeInvoice(id) { async removeInvoice(id) {
this.id = id this.id = id
window window
.swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$tc('invoices.confirm_delete'), text: this.$tc('invoices.confirm_delete'),
icon: '/assets/icon/trash-solid.svg', icon: 'error',
buttons: true, iconHtml: `<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6 text-red-600"fill="none" viewBox="0 0 24 24" stroke="currentColor">
dangerMode: true, <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
}) </svg>`,
.then(async (willDelete) => { showCancelButton: true,
if (willDelete) { showConfirmButton: true,
let res = await this.deleteInvoice({ ids: [this.id] }) }).then(async (result) => {
if (res.data.success) { if (result.value) {
window.toastr['success'](this.$tc('invoices.deleted_message')) let res = await this.deleteInvoice({ ids: [this.id] })
this.refreshInvTable() if (res.data.success) {
} else if (res.data.error) { this.showNotification({
window.toastr['error'](res.data.message) type: 'success',
} message: this.$tc('invoices.deleted_message'),
})
this.refreshInvTable()
} else if (res.data.error) {
this.showNotification({
type: 'error',
message: res.data.message,
})
} }
}) }
})
}, },
async sendInvoice(id) { async sendInvoice(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('invoices.confirm_send'),
text: this.$t('invoices.confirm_send'), icon: 'question',
icon: '/assets/icon/paper-plane-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, focusable="false"
}) class="w-6 h-6"
.then(async (willSendInvoice) => { data-prefix="fas"
if (willSendInvoice) { data-icon="paper-plane"
const data = { class="svg-inline--fa fa-paper-plane fa-w-16"
id: id, role="img"
} xmlns="http://www.w3.org/2000/svg"
let response = await this.sendEmail(data) viewBox="0 0 512 512"
this.refreshInvTable() >
<path
if (response.data.success) { fill="#55547A"
window.toastr['success']( d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"
this.$tc('invoices.send_invoice_successfully') ></path>
) </svg>`,
return true showCancelButton: true,
} showConfirmButton: true,
}).then(async (result) => {
if (response.data.error === 'user_email_does_not_exist') { if (result.value) {
window.toastr['error']( const data = {
this.$tc('invoices.user_email_does_not_exist') id: id,
)
return false
}
window.toastr['error'](this.$tc('invoices.something_went_wrong'))
} }
}) let response = await this.sendEmail(data)
this.refreshInvTable()
if (response.data.success) {
this.showNotification({
type: 'success',
message: this.$tc('invoices.send_invoice_successfully'),
})
return true
}
if (response.data.error === 'user_email_does_not_exist') {
this.showNotification({
type: 'error',
message: this.$tc('invoices.user_email_does_not_exist'),
})
return false
}
this.showNotification({
type: 'error',
message: this.$tc('invoices.something_went_wrong'),
})
}
})
}, },
async sentInvoice(id) { async sentInvoice(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('invoices.invoice_mark_as_sent'),
text: this.$t('invoices.invoice_mark_as_sent'), icon: 'question',
icon: '/assets/icon/check-circle-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, class="w-6 h-6"
}) focusable="false"
.then(async (willMarkAsSend) => { data-prefix="fas"
if (willMarkAsSend) { data-icon="check-circle"
const data = { class="svg-inline--fa fa-check-circle fa-w-16"
id: id, role="img"
status: 'SENT', xmlns="http://www.w3.org/2000/svg"
} viewBox="0 0 512 512"
let response = await this.markAsSent(data) >
<path
this.refreshInvTable() fill="#55547A"
if (response.data) { d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
window.toastr['success']( ></path>
this.$tc('invoices.mark_as_sent_successfully') </svg>`,
) showCancelButton: true,
} showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
const data = {
id: id,
status: 'SENT',
} }
}) let response = await this.markAsSent(data)
this.refreshInvTable()
if (response.data) {
this.showNotification({
type: 'success',
message: this.$tc('invoices.mark_as_sent_successfully'),
})
}
}
})
}, },
async onMarkAsAccepted(id) { async onMarkAsAccepted(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('estimates.confirm_mark_as_accepted'),
text: this.$t('estimates.confirm_mark_as_accepted'), icon: 'question',
icon: '/assets/icon/check-circle-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, class="w-6 h-6"
}) focusable="false"
.then(async (markedAsRejected) => { data-prefix="fas"
if (markedAsRejected) { data-icon="check-circle"
const data = { class="svg-inline--fa fa-check-circle fa-w-16"
id: id, role="img"
} xmlns="http://www.w3.org/2000/svg"
let response = await this.markAsAccepted(data) viewBox="0 0 512 512"
this.refreshEstTable() >
<path
if (response.data) { fill="#55547A"
this.refreshEstTable() d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
window.toastr['success']( ></path>
this.$tc('estimates.marked_as_accepted_message') </svg>`,
) showCancelButton: true,
} showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
const data = {
id: id,
} }
}) let response = await this.markAsAccepted(data)
this.refreshEstTable()
if (response.data) {
this.refreshEstTable()
this.showNotification({
type: 'success',
message: this.$tc('estimates.marked_as_accepted_message'),
})
}
}
})
}, },
async onMarkAsRejected(id) { async onMarkAsRejected(id) {
window this.$swal({
.swal({ title: this.$t('general.are_you_sure'),
title: this.$t('general.are_you_sure'), text: this.$t('estimates.confirm_mark_as_rejected'),
text: this.$t('estimates.confirm_mark_as_rejected'), icon: 'error',
icon: '/assets/icon/times-circle-solid.svg', iconHtml: `<svg
buttons: true, aria-hidden="true"
dangerMode: true, class="w-6 h-6"
}) focusable="false"
.then(async (markedAsRejected) => { data-prefix="fas"
if (markedAsRejected) { data-icon="check-circle"
const data = { class="svg-inline--fa fa-check-circle fa-w-16"
id: id, role="img"
} xmlns="http://www.w3.org/2000/svg"
let response = await this.markAsRejected(data) viewBox="0 0 512 512"
this.refreshEstTable() >
<path
if (response.data) { fill="#DC2626"
this.refreshEstTable() d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"
window.toastr['success']( ></path>
this.$tc('estimates.marked_as_rejected_message') </svg>`,
) showCancelButton: true,
} showConfirmButton: true,
}).then(async (result) => {
if (result.value) {
const data = {
id: id,
} }
}) let response = await this.markAsRejected(data)
this.refreshEstTable()
if (response.data) {
this.refreshEstTable()
this.showNotification({
type: 'success',
message: this.$tc('estimates.marked_as_rejected_message'),
})
}
}
})
}, },
async sendEstimate(id) { async sendEstimate(id) {
window window
.swal({ this.$swal({
title: this.$t('general.are_you_sure'), title: this.$t('general.are_you_sure'),
text: this.$t('estimates.confirm_send_estimate'), text: this.$t('estimates.confirm_send_estimate'),
icon: '/assets/icon/paper-plane-solid.svg', icon: 'question',
buttons: true, iconHtml: `<svg
dangerMode: true, aria-hidden="true"
}) focusable="false"
.then(async (willSendEstimate) => { class="w-6 h-6"
if (willSendEstimate) { data-prefix="fas"
const data = { data-icon="paper-plane"
id: id, class="svg-inline--fa fa-paper-plane fa-w-16"
} role="img"
let response = await this.sendEstimateEmail(data) xmlns="http://www.w3.org/2000/svg"
this.refreshEstTable() viewBox="0 0 512 512"
>
if (response.data.success) { <path
window.toastr['success']( fill="#55547A"
this.$tc('estimates.send_estimate_successfully') d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"
) ></path>
return true </svg>`,
} showCancelButton: true,
showConfirmButton: true,
if (response.data.error === 'user_email_does_not_exist') { }).then(async (result) => {
window.toastr['error']( if (result.value) {
this.$tc('estimates.user_email_does_not_exist') const data = {
) id: id,
return true
}
window.toastr['error'](this.$tc('estimates.something_went_wrong'))
} }
}) let response = await this.sendEstimateEmail(data)
this.refreshEstTable()
if (response.data.success) {
this.showNotification({
type: 'success',
message: this.$tc('estimates.send_estimate_successfully'),
})
return true
}
if (response.data.error === 'user_email_does_not_exist') {
this.showNotification({
type: 'error',
message: this.$tc('estimates.user_email_does_not_exist'),
})
return true
}
this.showNotification({
type: 'error',
message: this.$tc('estimates.something_went_wrong'),
})
}
})
}, },
}, },
} }

View File

@ -9,7 +9,7 @@
{{ $t('general.you_got_lost') }} {{ $t('general.you_got_lost') }}
</h5> </h5>
<router-link <router-link
class="flex items-center w-32 h-12 px-2 py-1 text-base font-medium leading-none text-center text-white whitespace-no-wrap rounded bg-primary-500 btn-lg hover:text-white" class="flex items-center w-32 h-12 px-2 py-1 text-base font-medium leading-none text-center text-white whitespace-nowrap rounded bg-primary-500 btn-lg hover:text-white"
to="/admin/dashboard" to="/admin/dashboard"
> >
<arrow-left-icon class="mr-2 text-white icon" /> <arrow-left-icon class="mr-2 text-white icon" />

View File

@ -7,23 +7,23 @@
<sw-page-header :title="pageTitle"> <sw-page-header :title="pageTitle">
<sw-breadcrumb slot="breadcrumbs"> <sw-breadcrumb slot="breadcrumbs">
<sw-breadcrumb-item <sw-breadcrumb-item
to="/admin/dashboard"
:title="$t('general.home')" :title="$t('general.home')"
to="/admin/dashboard"
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
to="/admin/estimates"
:title="$tc('estimates.estimate', 2)" :title="$tc('estimates.estimate', 2)"
to="/admin/estimates"
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
v-if="$route.name === 'estimates.edit'" v-if="$route.name === 'estimates.edit'"
to="#"
:title="$t('estimates.edit_estimate')" :title="$t('estimates.edit_estimate')"
to="#"
active active
/> />
<sw-breadcrumb-item <sw-breadcrumb-item
v-else v-else
to="#"
:title="$t('estimates.new_estimate')" :title="$t('estimates.new_estimate')"
to="#"
active active
/> />
</sw-breadcrumb> </sw-breadcrumb>
@ -31,8 +31,8 @@
<template slot="actions"> <template slot="actions">
<sw-button <sw-button
v-if="$route.name === 'estimates.edit'" v-if="$route.name === 'estimates.edit'"
tag-name="a"
:href="`/estimates/pdf/${newEstimate.unique_hash}`" :href="`/estimates/pdf/${newEstimate.unique_hash}`"
tag-name="a"
target="_blank" target="_blank"
class="mr-3" class="mr-3"
variant="primary-outline" variant="primary-outline"
@ -59,9 +59,9 @@
<!-- Select Customer & Basic Fields --> <!-- Select Customer & Basic Fields -->
<div class="grid-cols-12 gap-8 mt-6 mb-8 lg:grid"> <div class="grid-cols-12 gap-8 mt-6 mb-8 lg:grid">
<customer-select <customer-select
class="col-span-5 pr-0"
:valid="$v.selectedCustomer" :valid="$v.selectedCustomer"
:customer-id="customerId" :customer-id="customerId"
class="col-span-5 pr-0"
/> />
<div <div
@ -218,7 +218,7 @@
<div class="mb-6"> <div class="mb-6">
<sw-popup <sw-popup
ref="notePopup" ref="notePopup"
class="text-sm font-semibold leading-5 text-primary-400" class="z-10 text-sm font-semibold leading-5 text-primary-400"
> >
<div slot="activator" class="float-right mt-1"> <div slot="activator" class="float-right mt-1">
+ {{ $t('general.insert_note') }} + {{ $t('general.insert_note') }}
@ -235,8 +235,8 @@
</div> </div>
<div <div
class="grid gap-x-4 gap-y-2 md:gap-x-8 md:gap-y-4 grid-col-1 md:grid-cols-2"
v-if="customFields.length > 0" v-if="customFields.length > 0"
class="grid gap-x-4 gap-y-2 md:gap-x-8 md:gap-y-4 grid-col-1 md:grid-cols-2"
> >
<sw-input-group <sw-input-group
v-for="(field, index) in customFields" v-for="(field, index) in customFields"
@ -247,7 +247,7 @@
<component <component
:type="field.type.label" :type="field.type.label"
:field="field" :field="field"
:isEdit="isEdit" :is-edit="isEdit"
:is="field.type + 'Field'" :is="field.type + 'Field'"
:invalid-fields="invalidFields" :invalid-fields="invalidFields"
@update="setCustomFieldValue" @update="setCustomFieldValue"
@ -322,8 +322,8 @@
<sw-button <sw-button
slot="activator" slot="activator"
type="button" type="button"
class="flex items-center justify-center w-12 border border-gray-300 border-solid rounded-tl-none rounded-bl-none font-base"
data-toggle="dropdown" data-toggle="dropdown"
size="discount"
aria-haspopup="true" aria-haspopup="true"
aria-expanded="false" aria-expanded="false"
style="height: 43px" style="height: 43px"
@ -366,8 +366,8 @@
</div> </div>
<sw-popup <sw-popup
ref="taxModal"
v-if="taxPerItem === 'NO' || taxPerItem === null" v-if="taxPerItem === 'NO' || taxPerItem === null"
ref="taxModal"
class="my-3 text-sm font-semibold leading-5 text-primary-400" class="my-3 text-sm font-semibold leading-5 text-primary-400"
> >
<div slot="activator" class="float-right pt-2 pb-4"> <div slot="activator" class="float-right pt-2 pb-4">
@ -425,8 +425,6 @@ const {
} = require('vuelidate/lib/validators') } = require('vuelidate/lib/validators')
export default { export default {
mixins: [CustomFieldsMixin],
components: { components: {
EstimateItem, EstimateItem,
CustomerSelect, CustomerSelect,
@ -438,6 +436,7 @@ export default {
PlusSmIcon, PlusSmIcon,
HashtagIcon, HashtagIcon,
}, },
mixins: [CustomFieldsMixin],
data() { data() {
return { return {
@ -470,7 +469,6 @@ export default {
isLoadingEstimate: false, isLoadingEstimate: false,
isLoadingData: false, isLoadingData: false,
isLoading: false, isLoading: false,
maxDiscount: 0,
estimateNumAttribute: null, estimateNumAttribute: null,
estimatePrefix: null, estimatePrefix: null,
EstimateFields: [ EstimateFields: [
@ -563,7 +561,7 @@ export default {
if (this.newEstimate.discount_type === 'percentage') { if (this.newEstimate.discount_type === 'percentage') {
this.newEstimate.discount_val = (this.subtotal * newValue) / 100 this.newEstimate.discount_val = (this.subtotal * newValue) / 100
} else { } else {
this.newEstimate.discount_val = newValue * 100 this.newEstimate.discount_val = Math.round(newValue * 100)
} }
this.newEstimate.discount = newValue this.newEstimate.discount = newValue
@ -722,12 +720,16 @@ export default {
...mapActions('customFields', ['fetchCustomFields']), ...mapActions('customFields', ['fetchCustomFields']),
...mapActions('notification', ['showNotification']),
selectFixed() { selectFixed() {
if (this.newEstimate.discount_type === 'fixed') { if (this.newEstimate.discount_type === 'fixed') {
return return
} }
this.newEstimate.discount_val = this.newEstimate.discount * 100 this.newEstimate.discount_val = Math.round(
this.newEstimate.discount * 100
)
this.newEstimate.discount_type = 'fixed' this.newEstimate.discount_type = 'fixed'
}, },
@ -921,7 +923,10 @@ export default {
.then((res) => { .then((res) => {
if (res.data) { if (res.data) {
this.$router.push(`/admin/estimates/${res.data.estimate.id}/view`) this.$router.push(`/admin/estimates/${res.data.estimate.id}/view`)
window.toastr['success'](this.$t('estimates.created_message')) this.showNotification({
type: 'success',
message: this.$t('estimates.created_message'),
})
} }
this.isLoading = false this.isLoading = false
@ -937,7 +942,10 @@ export default {
this.isLoading = false this.isLoading = false
if (res.data) { if (res.data) {
this.$router.push(`/admin/estimates/${res.data.estimate.id}/view`) this.$router.push(`/admin/estimates/${res.data.estimate.id}/view`)
window.toastr['success'](this.$t('estimates.updated_message')) this.showNotification({
type: 'success',
message: this.$t('estimates.updated_message'),
})
} }
}) })
.catch((err) => { .catch((err) => {
@ -953,12 +961,15 @@ export default {
let amount = 0 let amount = 0
if (selectedTax.compound_tax && this.subtotalWithDiscount) { if (selectedTax.compound_tax && this.subtotalWithDiscount) {
amount = amount = Math.round(
((this.subtotalWithDiscount + this.totalSimpleTax) * ((this.subtotalWithDiscount + this.totalSimpleTax) *
selectedTax.percent) / selectedTax.percent) /
100 100
)
} else if (this.subtotalWithDiscount && selectedTax.percent) { } else if (this.subtotalWithDiscount && selectedTax.percent) {
amount = (this.subtotalWithDiscount * selectedTax.percent) / 100 amount = Math.round(
(this.subtotalWithDiscount * selectedTax.percent) / 100
)
} }
this.newEstimate.taxes.push({ this.newEstimate.taxes.push({
@ -971,7 +982,7 @@ export default {
amount, amount,
}) })
if (this.$$refs) { if (this.$refs) {
this.$refs.taxModal.close() this.$refs.taxModal.close()
} }
}, },

View File

@ -25,7 +25,7 @@
<div v-if="selectedCustomer.billing_address"> <div v-if="selectedCustomer.billing_address">
<div class="flex flex-col"> <div class="flex flex-col">
<label <label
class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-no-wrap" class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap"
> >
{{ $t('general.bill_to') }} {{ $t('general.bill_to') }}
</label> </label>
@ -77,7 +77,7 @@
<div v-if="selectedCustomer.shipping_address"> <div v-if="selectedCustomer.shipping_address">
<div class="flex flex-col"> <div class="flex flex-col">
<label <label
class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-no-wrap" class="mb-1 text-sm font-medium text-gray-500 uppercase whitespace-nowrap"
> >
{{ $t('general.ship_to') }} {{ $t('general.ship_to') }}
</label> </label>

View File

@ -45,11 +45,13 @@ export default {
computed: { computed: {
taxAmount() { taxAmount() {
if (this.tax.compound_tax && this.total) { if (this.tax.compound_tax && this.total) {
return ((this.total + this.totalTax) * this.tax.percent) / 100 return Math.round(
((this.total + this.totalTax) * this.tax.percent) / 100
)
} }
if (this.total && this.tax.percent) { if (this.total && this.tax.percent) {
return (this.total * this.tax.percent) / 100 return Math.round((this.total * this.tax.percent) / 100)
} }
return 0 return 0

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