mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-27 11:41:09 -04:00
Compare commits
185 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2b03bc798e | |||
| 482556d378 | |||
| deb525af6e | |||
| cb2bfbb91c | |||
| 654395a175 | |||
| e31b60bc48 | |||
| 183953f4c4 | |||
| a24d8d3ebc | |||
| 4ca574c581 | |||
| c7ce8c87dd | |||
| f64d546672 | |||
| d4a1f1a784 | |||
| e07532961e | |||
| 450c265ded | |||
| f8502c3ca8 | |||
| 899da6990d | |||
| e7675f938e | |||
| b08138e9e0 | |||
| 5df4abdc4b | |||
| a2fa8afa72 | |||
| 7670cd67dc | |||
| 8446ac2b27 | |||
| 63a80e44d5 | |||
| 076df75322 | |||
| 11db99da73 | |||
| 050dca5a50 | |||
| 3c096f1386 | |||
| 0f3e8fce3b | |||
| 325f90bba5 | |||
| a739a938fc | |||
| b30e3a9b11 | |||
| fc1a7c7438 | |||
| 6046113cb1 | |||
| 611ffafec5 | |||
| c497b906df | |||
| c68fce19f9 | |||
| f8913531b6 | |||
| 30f76e2088 | |||
| 39556892cd | |||
| 2fd66bf748 | |||
| d4f1428d5f | |||
| 189141c84d | |||
| f8ccfece09 | |||
| 9a7c926d53 | |||
| c5c1674153 | |||
| 8562ee5414 | |||
| 06c66a756c | |||
| b66d07d21b | |||
| 05001b6a79 | |||
| f02f4ba9d3 | |||
| fbace98aac | |||
| 8f0af3dcd6 | |||
| e8e44c5dc8 | |||
| ac33164342 | |||
| 5c7c0d84ea | |||
| 7ca725ac37 | |||
| 510a4b3dbb | |||
| 0f130ab1b8 | |||
| 25114009e3 | |||
| 79c16d74ce | |||
| 742e1e445a | |||
| 386f96d60e | |||
| 82d85af672 | |||
| 4d1b267688 | |||
| bc99ad63a6 | |||
| 4bb44f8c93 | |||
| c72265ed50 | |||
| b8958c9eb6 | |||
| e33e314cb7 | |||
| 84cebee9da | |||
| 34d3cf7ae8 | |||
| 93d0da836a | |||
| fd51276948 | |||
| d6274854ba | |||
| ea4bd1a31d | |||
| 286e047963 | |||
| be16f48f3d | |||
| ebea1e0813 | |||
| cc8d08f829 | |||
| aacffc22eb | |||
| d71ca4ffb9 | |||
| 186004f7f8 | |||
| c2eb22d666 | |||
| af189b15b6 | |||
| 1c19be85c3 | |||
| 4bb4362d23 | |||
| f6f66b3ae6 | |||
| b4ccecbcf1 | |||
| 92f1f196bb | |||
| ee14070a7b | |||
| 8ce7e14a02 | |||
| 3401ca049e | |||
| 5dcc7b9efd | |||
| 06a538bb81 | |||
| 7ab0419f27 | |||
| a7275aaa42 | |||
| bc4e6a05ea | |||
| ca170f5a87 | |||
| 22e7e96dfa | |||
| fcfd1ddb7a | |||
| daf8c9265b | |||
| 406d098172 | |||
| 824d2e3e8d | |||
| 3cd975dbbd | |||
| 8e50c36a71 | |||
| b499741ab4 | |||
| b409cdb913 | |||
| 13e56105e3 | |||
| f68e86e4cf | |||
| da996c1f33 | |||
| 0990ce4678 | |||
| bb6fb2f49d | |||
| 400296575e | |||
| d58c790b1f | |||
| c674c2ab9e | |||
| d79692cf3b | |||
| 353c2479f1 | |||
| 0176a854b8 | |||
| 00548ea908 | |||
| 09e335a8a7 | |||
| 53e2ed253f | |||
| 06b035d9ac | |||
| 5c88cbcc42 | |||
| d9b175a676 | |||
| f5b9bc95c6 | |||
| 586dcdea0d | |||
| 50957fc179 | |||
| c725e4744b | |||
| 7479ce237e | |||
| 84420441c0 | |||
| ac96721e87 | |||
| db4c7f5e32 | |||
| 87dc78eea0 | |||
| e9c2898056 | |||
| b9c4570137 | |||
| 8e2525cc6c | |||
| 8862a93f23 | |||
| 82efd88920 | |||
| 0ef528d296 | |||
| 4c33a5d88c | |||
| d64d06181b | |||
| ef9cf2db22 | |||
| 96c295a003 | |||
| 22528f5b66 | |||
| 1cd9c72537 | |||
| 7253b43eb4 | |||
| 181964cf03 | |||
| 5914245ae4 | |||
| 1bf3d28d4e | |||
| dbcbd93ace | |||
| 1729c6a308 | |||
| 019493cbfa | |||
| 60540ba966 | |||
| 601ad419ec | |||
| 80e7bab891 | |||
| f5c8befbf0 | |||
| 09c984baa7 | |||
| 0d93260672 | |||
| 3e9e217f92 | |||
| 3cd8859c62 | |||
| 4493b4a419 | |||
| 79e3e70bd6 | |||
| 56a955befd | |||
| 496c28f80d | |||
| 7a59f3fe0c | |||
| 3d6875a532 | |||
| 15bf380f4f | |||
| 0b910db039 | |||
| 0e5e8f602f | |||
| d9db0f9401 | |||
| c0da7c7339 | |||
| 7e7599b4a7 | |||
| 99cd88e6c6 | |||
| 053a06229c | |||
| 1a6e8280a8 | |||
| 125e8be83c | |||
| 4d89ca2101 | |||
| e8aee3bb32 | |||
| d3c7ca75f0 | |||
| 694d5f56d5 | |||
| a48439785c | |||
| 7c9bd84f00 | |||
| 799d212d9b | |||
| fa15502ce7 | |||
| 1f4d3bf784 |
@ -9,7 +9,7 @@ DB_HOST=db
|
|||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=crater
|
DB_DATABASE=crater
|
||||||
DB_USERNAME=crater
|
DB_USERNAME=crater
|
||||||
DB_PASSWORD=crater
|
DB_PASSWORD="crater"
|
||||||
|
|
||||||
BROADCAST_DRIVER=log
|
BROADCAST_DRIVER=log
|
||||||
CACHE_DRIVER=file
|
CACHE_DRIVER=file
|
||||||
|
|||||||
12
.eslintrc
12
.eslintrc
@ -2,9 +2,17 @@
|
|||||||
"root": true,
|
"root": true,
|
||||||
"extends": [
|
"extends": [
|
||||||
"plugin:vue/recommended",
|
"plugin:vue/recommended",
|
||||||
"standard"
|
"eslint:recommended",
|
||||||
|
"prettier/vue",
|
||||||
|
"plugin:prettier/recommended"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"vue/max-attributes-per-line" : 3
|
"vue/max-attributes-per-line": ["error", {
|
||||||
|
"singleline": 10,
|
||||||
|
"multiline": {
|
||||||
|
"max": 1,
|
||||||
|
"allowFirstLine": false
|
||||||
|
}
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
5
.prettierrc.json
Normal file
5
.prettierrc.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"semi": false,
|
||||||
|
"singleQuote": true,
|
||||||
|
"tabWidth": 2
|
||||||
|
}
|
||||||
@ -23,8 +23,10 @@ FROM php:7.3.12-fpm-alpine
|
|||||||
# Use the default production configuration
|
# Use the default production configuration
|
||||||
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
|
||||||
|
|
||||||
RUN apk add --no-cache libpng-dev libxml2-dev oniguruma-dev && \
|
RUN apk add --no-cache libpng-dev libxml2-dev oniguruma-dev libzip-dev gnu-libiconv && \
|
||||||
docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml
|
docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml zip
|
||||||
|
|
||||||
|
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
|
||||||
|
|
||||||
# Set container's working dir
|
# Set container's working dir
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
@ -49,4 +51,3 @@ RUN touch database/database.sqlite && \
|
|||||||
EXPOSE 9000
|
EXPOSE 9000
|
||||||
|
|
||||||
CMD ["php-fpm", "--nodaemonize"]
|
CMD ["php-fpm", "--nodaemonize"]
|
||||||
|
|
||||||
|
|||||||
@ -7,8 +7,8 @@ use Crater\Country;
|
|||||||
|
|
||||||
class Address extends Model
|
class Address extends Model
|
||||||
{
|
{
|
||||||
const BILLING_TYPE = 'BILLING';
|
const BILLING_TYPE = 'billing';
|
||||||
const SHIPPING_TYPE = 'SHIPPING';
|
const SHIPPING_TYPE = 'shipping';
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name',
|
'name',
|
||||||
|
|||||||
51
app/Console/Commands/ResetApp.php
Normal file
51
app/Console/Commands/ResetApp.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
use Illuminate\Filesystem\Filesystem;
|
||||||
|
|
||||||
|
class ResetApp extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'reset:app';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Clean database, database_created and public/storage folder';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
if ($this->confirm('Do you wish to continue? This will delete your tables')) {
|
||||||
|
Artisan::call('migrate:reset --force');
|
||||||
|
|
||||||
|
\Storage::disk('local')->delete('database_created');
|
||||||
|
|
||||||
|
// $file = new Filesystem;
|
||||||
|
// $file->cleanDirectory('public/storage');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
189
app/Console/Commands/UpdateCommand.php
Normal file
189
app/Console/Commands/UpdateCommand.php
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Console\Commands;
|
||||||
|
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Crater\Space\Updater;
|
||||||
|
use Crater\Setting;
|
||||||
|
|
||||||
|
class UpdateCommand extends Command
|
||||||
|
{
|
||||||
|
public $installed;
|
||||||
|
|
||||||
|
public $version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'crater:update';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Automatically update your crater app';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
set_time_limit(3600); // 1 hour
|
||||||
|
|
||||||
|
$this->installed = $this->getInstalledVersion();
|
||||||
|
$this->version = $this->getLatestVersion();
|
||||||
|
|
||||||
|
if (!$this->version) {
|
||||||
|
$this->info('No Update Available! You are already on the latest version.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->confirm("Do you wish to update to {$this->version}?")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$path = $this->download()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$path = $this->unzip($path)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->copyFiles($path)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->migrateUpdate()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->finish()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info('Successfully updated to ' . $this->version);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInstalledVersion()
|
||||||
|
{
|
||||||
|
return Setting::getSetting('version');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLatestVersion()
|
||||||
|
{
|
||||||
|
$this->info('Your currently installed version is ' . $this->installed);
|
||||||
|
$this->line('');
|
||||||
|
$this->info('Checking for update...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = Updater::checkForUpdate($this->installed);
|
||||||
|
|
||||||
|
if ($response->success) {
|
||||||
|
return $response->version->version;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function download()
|
||||||
|
{
|
||||||
|
$this->info('Downloading update...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$path = Updater::download($this->version);
|
||||||
|
if (!is_string($path)) {
|
||||||
|
$this->error('Download exception');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unzip($path)
|
||||||
|
{
|
||||||
|
$this->info('Unzipping update package...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$path = Updater::unzip($path);
|
||||||
|
if (!is_string($path)) {
|
||||||
|
$this->error('Unzipping exception');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copyFiles($path)
|
||||||
|
{
|
||||||
|
$this->info('Copying update files...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
Updater::copyFiles($path);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function migrateUpdate()
|
||||||
|
{
|
||||||
|
$this->info('Running Migrations...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
Updater::migrateUpdate();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function finish()
|
||||||
|
{
|
||||||
|
$this->info('Finishing update...');
|
||||||
|
|
||||||
|
try {
|
||||||
|
Updater::finishUpdate($this->installed, $this->version);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,7 +12,8 @@ class Kernel extends ConsoleKernel
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $commands = [
|
protected $commands = [
|
||||||
|
Commands\ResetApp::class,
|
||||||
|
Commands\UpdateCommand::class
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class UpdateFinished
|
|||||||
*/
|
*/
|
||||||
public function __construct($old, $new)
|
public function __construct($old, $new)
|
||||||
{
|
{
|
||||||
$this->old = $old;
|
$this->old = $old;
|
||||||
$this->new = $new;
|
$this->new = $new;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
||||||
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
|
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
|
||||||
use Crater\ExpenseCategory;
|
use Crater\ExpenseCategory;
|
||||||
|
use Crater\User;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ class Expense extends Model implements HasMedia
|
|||||||
'expense_category_id',
|
'expense_category_id',
|
||||||
'amount',
|
'amount',
|
||||||
'company_id',
|
'company_id',
|
||||||
|
'user_id',
|
||||||
'expense_date',
|
'expense_date',
|
||||||
'notes',
|
'notes',
|
||||||
'attachment_receipt'
|
'attachment_receipt'
|
||||||
@ -32,6 +34,11 @@ class Expense extends Model implements HasMedia
|
|||||||
return $this->belongsTo(ExpenseCategory::class, 'expense_category_id');
|
return $this->belongsTo(ExpenseCategory::class, 'expense_category_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function user()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(User::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function getFormattedExpenseDateAttribute($value)
|
public function getFormattedExpenseDateAttribute($value)
|
||||||
{
|
{
|
||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
|
||||||
@ -81,6 +88,11 @@ class Expense extends Model implements HasMedia
|
|||||||
return $query->where('expenses.expense_category_id', $categoryId);
|
return $query->where('expenses.expense_category_id', $categoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeWhereUser($query, $user_id)
|
||||||
|
{
|
||||||
|
return $query->where('expenses.user_id', $user_id);
|
||||||
|
}
|
||||||
|
|
||||||
public function scopeApplyFilters($query, array $filters)
|
public function scopeApplyFilters($query, array $filters)
|
||||||
{
|
{
|
||||||
$filters = collect($filters);
|
$filters = collect($filters);
|
||||||
@ -89,6 +101,10 @@ class Expense extends Model implements HasMedia
|
|||||||
$query->whereCategory($filters->get('expense_category_id'));
|
$query->whereCategory($filters->get('expense_category_id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($filters->get('user_id')) {
|
||||||
|
$query->whereUser($filters->get('user_id'));
|
||||||
|
}
|
||||||
|
|
||||||
if ($filters->get('from_date') && $filters->get('to_date')) {
|
if ($filters->get('from_date') && $filters->get('to_date')) {
|
||||||
$start = Carbon::createFromFormat('d/m/Y', $filters->get('from_date'));
|
$start = Carbon::createFromFormat('d/m/Y', $filters->get('from_date'));
|
||||||
$end = Carbon::createFromFormat('d/m/Y', $filters->get('to_date'));
|
$end = Carbon::createFromFormat('d/m/Y', $filters->get('to_date'));
|
||||||
|
|||||||
@ -20,11 +20,22 @@ use Crater\CompanySetting;
|
|||||||
|
|
||||||
class CompanyController extends Controller
|
class CompanyController extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Retrive the Admin account.
|
||||||
|
* @return \Crater\User
|
||||||
|
*/
|
||||||
public function getAdmin()
|
public function getAdmin()
|
||||||
{
|
{
|
||||||
return User::find(1);
|
return User::find(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the Admin profile.
|
||||||
|
* Includes name, email and (or) password
|
||||||
|
*
|
||||||
|
* @param \Crater\Http\Requests\ProfileRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function updateAdminProfile(ProfileRequest $request)
|
public function updateAdminProfile(ProfileRequest $request)
|
||||||
{
|
{
|
||||||
$verifyEmail = User::where('email', $request->email)->first();
|
$verifyEmail = User::where('email', $request->email)->first();
|
||||||
@ -54,6 +65,14 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Admin Account alongside the country from the addresses table and
|
||||||
|
* The company from companies table
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getAdminCompany()
|
public function getAdminCompany()
|
||||||
{
|
{
|
||||||
$user = User::with(['addresses', 'addresses.country', 'company'])->find(1);
|
$user = User::with(['addresses', 'addresses.country', 'company'])->find(1);
|
||||||
@ -63,6 +82,13 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update Admin Company Details
|
||||||
|
* @param \Crater\Http\Requests\CompanyRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function updateAdminCompany(CompanyRequest $request)
|
public function updateAdminCompany(CompanyRequest $request)
|
||||||
{
|
{
|
||||||
$user = User::find(1);
|
$user = User::find(1);
|
||||||
@ -85,6 +111,11 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve General App Settings
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getGeneralSettings(Request $request)
|
public function getGeneralSettings(Request $request)
|
||||||
{
|
{
|
||||||
$date_formats = DateFormatter::get_list();
|
$date_formats = DateFormatter::get_list();
|
||||||
@ -112,10 +143,14 @@ class CompanyController extends Controller
|
|||||||
$currency = CompanySetting::getSetting('currency', $request->header('company'));
|
$currency = CompanySetting::getSetting('currency', $request->header('company'));
|
||||||
$fiscal_year = CompanySetting::getSetting('fiscal_year', $request->header('company'));
|
$fiscal_year = CompanySetting::getSetting('fiscal_year', $request->header('company'));
|
||||||
|
|
||||||
$languages = [
|
$languages = [ // alphabetical order
|
||||||
|
["code"=>"pt_BR", "name" => "Brazilian Portuguese"],
|
||||||
["code"=>"en", "name" => "English"],
|
["code"=>"en", "name" => "English"],
|
||||||
["code"=>"fr", "name" => "French"],
|
["code"=>"fr", "name" => "French"],
|
||||||
["code"=>"es", "name" => "Spanish"]
|
["code"=>"de", "name" => "German"],
|
||||||
|
["code"=>"it", "name" => "Italian"],
|
||||||
|
["code"=>"es", "name" => "Spanish"],
|
||||||
|
["code"=>"ar", "name" => "العربية"],
|
||||||
];
|
];
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -133,6 +168,13 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update General App Settings
|
||||||
|
* @param \Crater\Http\Requests\CompanySettingRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function updateGeneralSettings(CompanySettingRequest $request)
|
public function updateGeneralSettings(CompanySettingRequest $request)
|
||||||
{
|
{
|
||||||
$sets = [
|
$sets = [
|
||||||
@ -205,6 +247,11 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a specific Company Setting
|
||||||
|
* @param \Crater\Http\Requests\SettingRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function updateSetting(SettingRequest $request)
|
public function updateSetting(SettingRequest $request)
|
||||||
{
|
{
|
||||||
CompanySetting::setSetting($request->key, $request->value, $request->header('company'));
|
CompanySetting::setSetting($request->key, $request->value, $request->header('company'));
|
||||||
@ -214,6 +261,11 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Specific Company Setting
|
||||||
|
* @param \Crater\Http\Requests\SettingKeyRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getSetting(SettingKeyRequest $request)
|
public function getSetting(SettingKeyRequest $request)
|
||||||
{
|
{
|
||||||
$setting = CompanySetting::getSetting($request->key, $request->header('company'));
|
$setting = CompanySetting::getSetting($request->key, $request->header('company'));
|
||||||
@ -223,6 +275,12 @@ class CompanyController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve App Colors
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getColors(Request $request)
|
public function getColors(Request $request)
|
||||||
{
|
{
|
||||||
$colors = [
|
$colors = [
|
||||||
@ -257,7 +315,7 @@ class CompanyController extends Controller
|
|||||||
* Upload the company logo to storage.
|
* Upload the company logo to storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function uploadCompanyLogo(Request $request)
|
public function uploadCompanyLogo(Request $request)
|
||||||
{
|
{
|
||||||
@ -284,7 +342,7 @@ class CompanyController extends Controller
|
|||||||
* Upload the Admin Avatar to public storage.
|
* Upload the Admin Avatar to public storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function uploadAdminAvatar(Request $request)
|
public function uploadAdminAvatar(Request $request)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,7 +19,7 @@ class CustomersController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
@ -53,7 +53,7 @@ class CustomersController extends Controller
|
|||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(Requests\CustomerRequest $request)
|
public function store(Requests\CustomerRequest $request)
|
||||||
{
|
{
|
||||||
@ -104,7 +104,7 @@ class CustomersController extends Controller
|
|||||||
* Display the specified resource.
|
* Display the specified resource.
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function show($id)
|
public function show($id)
|
||||||
{
|
{
|
||||||
@ -124,7 +124,7 @@ class CustomersController extends Controller
|
|||||||
* Show the form for editing the specified resource.
|
* Show the form for editing the specified resource.
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function edit($id)
|
public function edit($id)
|
||||||
{
|
{
|
||||||
@ -144,7 +144,7 @@ class CustomersController extends Controller
|
|||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update($id, Requests\CustomerRequest $request)
|
public function update($id, Requests\CustomerRequest $request)
|
||||||
{
|
{
|
||||||
@ -204,10 +204,10 @@ class CustomersController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified Customer along side all his/her resources (ie. Estimates, Invoices, Payments and Addresses)
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
@ -218,6 +218,13 @@ class CustomersController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a list of Customers along side all their resources (ie. Estimates, Invoices, Payments and Addresses)
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function delete(Request $request)
|
public function delete(Request $request)
|
||||||
{
|
{
|
||||||
foreach ($request->id as $id) {
|
foreach ($request->id as $id) {
|
||||||
|
|||||||
@ -15,6 +15,12 @@ use Illuminate\Support\Facades\DB;
|
|||||||
|
|
||||||
class DashboardController extends Controller
|
class DashboardController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Dashboard details
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$invoiceTotals = [];
|
$invoiceTotals = [];
|
||||||
@ -30,7 +36,8 @@ class DashboardController extends Controller
|
|||||||
$start = Carbon::now();
|
$start = Carbon::now();
|
||||||
$end = Carbon::now();
|
$end = Carbon::now();
|
||||||
$terms = explode('-', $fiscalYear);
|
$terms = explode('-', $fiscalYear);
|
||||||
if ($terms[0] < $start->month) {
|
|
||||||
|
if ($terms[0] <= $start->month) {
|
||||||
$startDate->month($terms[0])->startOfMonth();
|
$startDate->month($terms[0])->startOfMonth();
|
||||||
$start->month($terms[0])->startOfMonth();
|
$start->month($terms[0])->startOfMonth();
|
||||||
$end->month($terms[0])->endOfMonth();
|
$end->month($terms[0])->endOfMonth();
|
||||||
@ -87,6 +94,7 @@ class DashboardController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$start->subMonth()->endOfMonth();
|
$start->subMonth()->endOfMonth();
|
||||||
|
|
||||||
$salesTotal = Invoice::whereCompany($request->header('company'))
|
$salesTotal = Invoice::whereCompany($request->header('company'))
|
||||||
->whereBetween(
|
->whereBetween(
|
||||||
'invoice_date',
|
'invoice_date',
|
||||||
@ -137,6 +145,11 @@ class DashboardController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive Expense Chart data
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getExpenseChartData(Request $request)
|
public function getExpenseChartData(Request $request)
|
||||||
{
|
{
|
||||||
$expensesCategories = Expense::with('category')
|
$expensesCategories = Expense::with('category')
|
||||||
|
|||||||
@ -168,10 +168,6 @@ class EstimatesController extends Controller
|
|||||||
$data['user'] = User::find($userId)->toArray();
|
$data['user'] = User::find($userId)->toArray();
|
||||||
$data['company'] = Company::find($estimate->company_id);
|
$data['company'] = Company::find($estimate->company_id);
|
||||||
$email = $data['user']['email'];
|
$email = $data['user']['email'];
|
||||||
$notificationEmail = CompanySetting::getSetting(
|
|
||||||
'notification_email',
|
|
||||||
$request->header('company')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$email) {
|
if (!$email) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -179,13 +175,7 @@ class EstimatesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$notificationEmail) {
|
\Mail::to($email)->send(new EstimatePdf($data));
|
||||||
return response()->json([
|
|
||||||
'error' => 'notification_email_does_not_exist'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
\Mail::to($email)->send(new EstimatePdf($data, $notificationEmail));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$estimate = Estimate::with([
|
$estimate = Estimate::with([
|
||||||
@ -340,10 +330,6 @@ class EstimatesController extends Controller
|
|||||||
$data['company'] = Company::find($estimate->company_id);
|
$data['company'] = Company::find($estimate->company_id);
|
||||||
|
|
||||||
$email = $data['user']['email'];
|
$email = $data['user']['email'];
|
||||||
$notificationEmail = CompanySetting::getSetting(
|
|
||||||
'notification_email',
|
|
||||||
$request->header('company')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$email) {
|
if (!$email) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -351,13 +337,7 @@ class EstimatesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$notificationEmail) {
|
\Mail::to($email)->send(new EstimatePdf($data));
|
||||||
return response()->json([
|
|
||||||
'error' => 'notification_email_does_not_exist'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
\Mail::to($email)->send(new EstimatePdf($data, $notificationEmail));
|
|
||||||
|
|
||||||
if ($estimate->status == Estimate::STATUS_DRAFT) {
|
if ($estimate->status == Estimate::STATUS_DRAFT) {
|
||||||
$estimate->status = Estimate::STATUS_SENT;
|
$estimate->status = Estimate::STATUS_SENT;
|
||||||
@ -405,8 +385,12 @@ class EstimatesController extends Controller
|
|||||||
public function estimateToInvoice(Request $request, $id)
|
public function estimateToInvoice(Request $request, $id)
|
||||||
{
|
{
|
||||||
$estimate = Estimate::with(['items', 'items.taxes', 'user', 'estimateTemplate', 'taxes'])->find($id);
|
$estimate = Estimate::with(['items', 'items.taxes', 'user', 'estimateTemplate', 'taxes'])->find($id);
|
||||||
$invoice_date = Carbon::parse($estimate->estimate_date);
|
$invoice_date = Carbon::now();
|
||||||
$due_date = Carbon::parse($estimate->estimate_date)->addDays(7);
|
$invoice_prefix = CompanySetting::getSetting(
|
||||||
|
'invoice_prefix',
|
||||||
|
$request->header('company')
|
||||||
|
);
|
||||||
|
$due_date = Carbon::now()->addDays(7);
|
||||||
$tax_per_item = CompanySetting::getSetting(
|
$tax_per_item = CompanySetting::getSetting(
|
||||||
'tax_per_item',
|
'tax_per_item',
|
||||||
$request->header('company')
|
$request->header('company')
|
||||||
@ -425,7 +409,7 @@ class EstimatesController extends Controller
|
|||||||
$invoice = Invoice::create([
|
$invoice = Invoice::create([
|
||||||
'invoice_date' => $invoice_date,
|
'invoice_date' => $invoice_date,
|
||||||
'due_date' => $due_date,
|
'due_date' => $due_date,
|
||||||
'invoice_number' => "INV-".Invoice::getNextInvoiceNumber(),
|
'invoice_number' => $invoice_prefix."-".Invoice::getNextInvoiceNumber($invoice_prefix),
|
||||||
'reference_number' => $estimate->reference_number,
|
'reference_number' => $estimate->reference_number,
|
||||||
'user_id' => $estimate->user_id,
|
'user_id' => $estimate->user_id,
|
||||||
'company_id' => $request->header('company'),
|
'company_id' => $request->header('company'),
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Crater\Http\Controllers;
|
namespace Crater\Http\Controllers;
|
||||||
|
|
||||||
use Crater\Expense;
|
use Crater\Expense;
|
||||||
@ -17,16 +18,18 @@ class ExpensesController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$limit = $request->has('limit') ? $request->limit : 10;
|
$limit = $request->has('limit') ? $request->limit : 10;
|
||||||
|
|
||||||
$expenses = Expense::with('category')
|
$expenses = Expense::with('category')
|
||||||
|
->leftJoin('users', 'users.id', '=', 'expenses.user_id')
|
||||||
->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id')
|
->join('expense_categories', 'expense_categories.id', '=', 'expenses.expense_category_id')
|
||||||
->applyFilters($request->only([
|
->applyFilters($request->only([
|
||||||
'expense_category_id',
|
'expense_category_id',
|
||||||
|
'user_id',
|
||||||
'search',
|
'search',
|
||||||
'from_date',
|
'from_date',
|
||||||
'to_date',
|
'to_date',
|
||||||
@ -34,11 +37,16 @@ class ExpensesController extends Controller
|
|||||||
'orderBy'
|
'orderBy'
|
||||||
]))
|
]))
|
||||||
->whereCompany($request->header('company'))
|
->whereCompany($request->header('company'))
|
||||||
->select('expenses.*', 'expense_categories.name')
|
->select('expenses.*', 'expense_categories.name', 'users.name as user_name')
|
||||||
->paginate($limit);
|
->paginate($limit);
|
||||||
|
|
||||||
|
$customers = User::customer()
|
||||||
|
->whereCompany($request->header('company'))
|
||||||
|
->get();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'expenses' => $expenses,
|
'expenses' => $expenses,
|
||||||
|
'customers' => $customers,
|
||||||
'currency' => Currency::findOrFail(
|
'currency' => Currency::findOrFail(
|
||||||
CompanySetting::getSetting('currency', $request->header('company'))
|
CompanySetting::getSetting('currency', $request->header('company'))
|
||||||
)
|
)
|
||||||
@ -48,14 +56,18 @@ class ExpensesController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function create(Request $request)
|
public function create(Request $request)
|
||||||
{
|
{
|
||||||
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
||||||
|
$customers = User::customer()
|
||||||
|
->whereCompany($request->header('company'))
|
||||||
|
->get();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'categories' => $categories
|
'categories' => $categories,
|
||||||
|
'customers' => $customers
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +75,7 @@ class ExpensesController extends Controller
|
|||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(ExpenseRequest $request)
|
public function store(ExpenseRequest $request)
|
||||||
{
|
{
|
||||||
@ -72,6 +84,7 @@ class ExpensesController extends Controller
|
|||||||
$expense = new Expense();
|
$expense = new Expense();
|
||||||
$expense->notes = $request->notes;
|
$expense->notes = $request->notes;
|
||||||
$expense->expense_category_id = $request->expense_category_id;
|
$expense->expense_category_id = $request->expense_category_id;
|
||||||
|
$expense->user_id = $request->user_id;
|
||||||
$expense->amount = $request->amount;
|
$expense->amount = $request->amount;
|
||||||
$expense->company_id = $request->header('company');
|
$expense->company_id = $request->header('company');
|
||||||
$expense->expense_date = $expense_date;
|
$expense->expense_date = $expense_date;
|
||||||
@ -91,7 +104,7 @@ class ExpensesController extends Controller
|
|||||||
* Display the specified resource.
|
* Display the specified resource.
|
||||||
*
|
*
|
||||||
* @param \Crater\Expense $expense
|
* @param \Crater\Expense $expense
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function show(Expense $expense)
|
public function show(Expense $expense)
|
||||||
{
|
{
|
||||||
@ -102,12 +115,14 @@ class ExpensesController extends Controller
|
|||||||
* Show the form for editing the specified resource.
|
* Show the form for editing the specified resource.
|
||||||
*
|
*
|
||||||
* @param $id
|
* @param $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function edit(Request $request,$id)
|
public function edit(Request $request, $id)
|
||||||
{
|
{
|
||||||
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
$categories = ExpenseCategory::whereCompany($request->header('company'))->get();
|
||||||
$customers = User::where('role', 'customer')->whereCompany($request->header('company'))->get();
|
$customers = User::customer()
|
||||||
|
->whereCompany($request->header('company'))
|
||||||
|
->get();
|
||||||
$expense = Expense::with('category')->where('id', $id)->first();
|
$expense = Expense::with('category')->where('id', $id)->first();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -122,7 +137,7 @@ class ExpensesController extends Controller
|
|||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param \Crater\Expense $expense
|
* @param \Crater\Expense $expense
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update(ExpenseRequest $request, Expense $expense)
|
public function update(ExpenseRequest $request, Expense $expense)
|
||||||
{
|
{
|
||||||
@ -132,6 +147,7 @@ class ExpensesController extends Controller
|
|||||||
$expense->notes = $request->notes;
|
$expense->notes = $request->notes;
|
||||||
$expense->expense_category_id = $request->expense_category_id;
|
$expense->expense_category_id = $request->expense_category_id;
|
||||||
$expense->amount = $request->amount;
|
$expense->amount = $request->amount;
|
||||||
|
$expense->user_id = $request->user_id;
|
||||||
$expense->expense_date = $expense_date;
|
$expense->expense_date = $expense_date;
|
||||||
$expense->save();
|
$expense->save();
|
||||||
|
|
||||||
@ -150,7 +166,7 @@ class ExpensesController extends Controller
|
|||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
* @param \Crater\Expense $expense
|
* @param \Crater\Expense $expense
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function destroy(Expense $expense)
|
public function destroy(Expense $expense)
|
||||||
{
|
{
|
||||||
@ -175,17 +191,17 @@ class ExpensesController extends Controller
|
|||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param $id
|
* @param $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function uploadReceipts(Request $request, $id)
|
public function uploadReceipts(Request $request, $id)
|
||||||
{
|
{
|
||||||
$data = json_decode($request->attachment_receipt);
|
$data = json_decode($request->attachment_receipt);
|
||||||
|
|
||||||
if($data) {
|
if ($data) {
|
||||||
$expense = Expense::find($id);
|
$expense = Expense::find($id);
|
||||||
|
|
||||||
if($expense) {
|
if ($expense) {
|
||||||
if($request->type === 'edit') {
|
if ($request->type === 'edit') {
|
||||||
$expense->clearMediaCollection('receipts');
|
$expense->clearMediaCollection('receipts');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,14 +216,20 @@ class ExpensesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive details of an expense receipt from storage.
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function showReceipt($id)
|
public function showReceipt($id)
|
||||||
{
|
{
|
||||||
$expense = Expense::find($id);
|
$expense = Expense::find($id);
|
||||||
$imagePath = null;
|
$imagePath = null;
|
||||||
|
|
||||||
if($expense) {
|
if ($expense) {
|
||||||
$media = $expense->getFirstMedia('receipts');
|
$media = $expense->getFirstMedia('receipts');
|
||||||
if($media) {
|
if ($media) {
|
||||||
$imagePath = $media->getPath();
|
$imagePath = $media->getPath();
|
||||||
} else {
|
} else {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -218,7 +240,7 @@ class ExpensesController extends Controller
|
|||||||
|
|
||||||
$type = \File::mimeType($imagePath);
|
$type = \File::mimeType($imagePath);
|
||||||
|
|
||||||
$image = 'data:'.$type.';base64,'.base64_encode(file_get_contents($imagePath));
|
$image = 'data:' . $type . ';base64,' . base64_encode(file_get_contents($imagePath));
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'image' => $image,
|
'image' => $image,
|
||||||
@ -226,6 +248,14 @@ class ExpensesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download an expense receipt from storage.
|
||||||
|
* @param int $id
|
||||||
|
* @param strig $hash
|
||||||
|
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse | \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function downloadReceipt($id, $hash)
|
public function downloadReceipt($id, $hash)
|
||||||
{
|
{
|
||||||
$company = Company::where('unique_hash', $hash)->first();
|
$company = Company::where('unique_hash', $hash)->first();
|
||||||
@ -235,17 +265,10 @@ class ExpensesController extends Controller
|
|||||||
->first();
|
->first();
|
||||||
$imagePath = null;
|
$imagePath = null;
|
||||||
|
|
||||||
if($expense) {
|
if ($expense) {
|
||||||
$media = $expense->getFirstMedia('receipts');
|
$media = $expense->getFirstMedia('receipts');
|
||||||
if($media) {
|
if ($media) {
|
||||||
$imagePath = $media->getPath();
|
$imagePath = $media->getPath();
|
||||||
$filename = $media->getPath();
|
|
||||||
$type = \File::mimeType($imagePath);
|
|
||||||
|
|
||||||
$headers = array(
|
|
||||||
'Content-Type' => $type,
|
|
||||||
);
|
|
||||||
|
|
||||||
$response = \Response::download($imagePath, $media->file_name);
|
$response = \Response::download($imagePath, $media->file_name);
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
return $response;
|
return $response;
|
||||||
@ -257,4 +280,3 @@ class ExpensesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@ use Crater\Invoice;
|
|||||||
use PDF;
|
use PDF;
|
||||||
use Crater\CompanySetting;
|
use Crater\CompanySetting;
|
||||||
use Crater\Estimate;
|
use Crater\Estimate;
|
||||||
|
use Crater\Payment;
|
||||||
use Crater\User;
|
use Crater\User;
|
||||||
use Crater\Company;
|
use Crater\Company;
|
||||||
use Crater\InvoiceTemplate;
|
use Crater\InvoiceTemplate;
|
||||||
@ -118,6 +119,11 @@ class FrontendController extends Controller
|
|||||||
return $pdf->stream();
|
return $pdf->stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
public function getCustomerInvoicePdf($id)
|
public function getCustomerInvoicePdf($id)
|
||||||
{
|
{
|
||||||
$invoice = Invoice::with([
|
$invoice = Invoice::with([
|
||||||
@ -371,4 +377,34 @@ class FrontendController extends Controller
|
|||||||
|
|
||||||
return $pdf->stream();
|
return $pdf->stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPaymentPdf($id)
|
||||||
|
{
|
||||||
|
$payment = Payment::with([
|
||||||
|
'user',
|
||||||
|
'invoice',
|
||||||
|
'paymentMethod'
|
||||||
|
])
|
||||||
|
->where('unique_hash', $id)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
$company = Company::find($payment->company_id);
|
||||||
|
$companyAddress = User::with(['addresses', 'addresses.country'])->find(1);
|
||||||
|
|
||||||
|
$logo = $company->getMedia('logo')->first();
|
||||||
|
|
||||||
|
if($logo) {
|
||||||
|
$logo = $logo->getFullUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
view()->share([
|
||||||
|
'payment' => $payment,
|
||||||
|
'company_address' => $companyAddress,
|
||||||
|
'logo' => $logo ?? null
|
||||||
|
]);
|
||||||
|
|
||||||
|
$pdf = PDF::loadView('app.pdf.payment.payment');
|
||||||
|
|
||||||
|
return $pdf->stream();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ use Crater\Invoice;
|
|||||||
use Crater\InvoiceItem;
|
use Crater\InvoiceItem;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Crater\Item;
|
use Crater\Item;
|
||||||
use Crater\Mail\invoicePdf;
|
use Crater\Mail\InvoicePdf;
|
||||||
use function MongoDB\BSON\toJSON;
|
use function MongoDB\BSON\toJSON;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Crater\User;
|
use Crater\User;
|
||||||
@ -27,7 +27,7 @@ class InvoicesController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
@ -60,7 +60,7 @@ class InvoicesController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function create(Request $request)
|
public function create(Request $request)
|
||||||
{
|
{
|
||||||
@ -91,7 +91,7 @@ class InvoicesController extends Controller
|
|||||||
* Store a newly created resource in storage.
|
* Store a newly created resource in storage.
|
||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(Requests\InvoicesRequest $request)
|
public function store(Requests\InvoicesRequest $request)
|
||||||
{
|
{
|
||||||
@ -167,11 +167,6 @@ class InvoicesController extends Controller
|
|||||||
$data['user'] = User::find($request->user_id)->toArray();
|
$data['user'] = User::find($request->user_id)->toArray();
|
||||||
$data['company'] = Company::find($invoice->company_id);
|
$data['company'] = Company::find($invoice->company_id);
|
||||||
|
|
||||||
$notificationEmail = CompanySetting::getSetting(
|
|
||||||
'notification_email',
|
|
||||||
$request->header('company')
|
|
||||||
);
|
|
||||||
|
|
||||||
$email = $data['user']['email'];
|
$email = $data['user']['email'];
|
||||||
|
|
||||||
if (!$email) {
|
if (!$email) {
|
||||||
@ -180,13 +175,7 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$notificationEmail) {
|
\Mail::to($email)->send(new InvoicePdf($data));
|
||||||
return response()->json([
|
|
||||||
'error' => 'notification_email_does_not_exist'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
\Mail::to($email)->send(new invoicePdf($data, $notificationEmail));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$invoice = Invoice::with(['items', 'user', 'invoiceTemplate', 'taxes'])->find($invoice->id);
|
$invoice = Invoice::with(['items', 'user', 'invoiceTemplate', 'taxes'])->find($invoice->id);
|
||||||
@ -201,7 +190,7 @@ class InvoicesController extends Controller
|
|||||||
* Display the specified resource.
|
* Display the specified resource.
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function show(Request $request, $id)
|
public function show(Request $request, $id)
|
||||||
{
|
{
|
||||||
@ -225,7 +214,7 @@ class InvoicesController extends Controller
|
|||||||
* Show the form for editing the specified resource.
|
* Show the form for editing the specified resource.
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function edit(Request $request,$id)
|
public function edit(Request $request,$id)
|
||||||
{
|
{
|
||||||
@ -253,7 +242,7 @@ class InvoicesController extends Controller
|
|||||||
*
|
*
|
||||||
* @param \Illuminate\Http\Request $request
|
* @param \Illuminate\Http\Request $request
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update(Requests\InvoicesRequest $request, $id)
|
public function update(Requests\InvoicesRequest $request, $id)
|
||||||
{
|
{
|
||||||
@ -353,7 +342,7 @@ class InvoicesController extends Controller
|
|||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
* @param int $id
|
* @param int $id
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\JsonResponse
|
||||||
*/
|
*/
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
@ -391,6 +380,14 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mail a specific invoice to the correponding cusitomer's email address.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function sendInvoice(Request $request)
|
public function sendInvoice(Request $request)
|
||||||
{
|
{
|
||||||
$invoice = Invoice::findOrFail($request->id);
|
$invoice = Invoice::findOrFail($request->id);
|
||||||
@ -400,10 +397,6 @@ class InvoicesController extends Controller
|
|||||||
$data['user'] = User::find($userId)->toArray();
|
$data['user'] = User::find($userId)->toArray();
|
||||||
$data['company'] = Company::find($invoice->company_id);
|
$data['company'] = Company::find($invoice->company_id);
|
||||||
$email = $data['user']['email'];
|
$email = $data['user']['email'];
|
||||||
$notificationEmail = CompanySetting::getSetting(
|
|
||||||
'notification_email',
|
|
||||||
$request->header('company')
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$email) {
|
if (!$email) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
@ -411,13 +404,7 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$notificationEmail) {
|
\Mail::to($email)->send(new InvoicePdf($data));
|
||||||
return response()->json([
|
|
||||||
'error' => 'notification_email_does_not_exist'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
\Mail::to($email)->send(new invoicePdf($data, $notificationEmail));
|
|
||||||
|
|
||||||
if ($invoice->status == Invoice::STATUS_DRAFT) {
|
if ($invoice->status == Invoice::STATUS_DRAFT) {
|
||||||
$invoice->status = Invoice::STATUS_SENT;
|
$invoice->status = Invoice::STATUS_SENT;
|
||||||
@ -431,6 +418,13 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a specific invoice as sent.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function markAsSent(Request $request)
|
public function markAsSent(Request $request)
|
||||||
{
|
{
|
||||||
$invoice = Invoice::findOrFail($request->id);
|
$invoice = Invoice::findOrFail($request->id);
|
||||||
@ -443,6 +437,13 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a specific invoice as paid.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function markAsPaid(Request $request)
|
public function markAsPaid(Request $request)
|
||||||
{
|
{
|
||||||
$invoice = Invoice::findOrFail($request->id);
|
$invoice = Invoice::findOrFail($request->id);
|
||||||
@ -456,6 +457,14 @@ class InvoicesController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive a specified user's unpaid invoices from storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getCustomersUnpaidInvoices(Request $request, $id)
|
public function getCustomersUnpaidInvoices(Request $request, $id)
|
||||||
{
|
{
|
||||||
$invoices = Invoice::where('paid_status', '<>', Invoice::STATUS_PAID)
|
$invoices = Invoice::where('paid_status', '<>', Invoice::STATUS_PAID)
|
||||||
@ -467,4 +476,94 @@ class InvoicesController extends Controller
|
|||||||
'invoices' => $invoices
|
'invoices' => $invoices
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function cloneInvoice(Request $request)
|
||||||
|
{
|
||||||
|
$oldInvoice = Invoice::with([
|
||||||
|
'items.taxes',
|
||||||
|
'user',
|
||||||
|
'invoiceTemplate',
|
||||||
|
'taxes.taxType'
|
||||||
|
])
|
||||||
|
->find($request->id);
|
||||||
|
|
||||||
|
$date = Carbon::now();
|
||||||
|
$invoice_prefix = CompanySetting::getSetting(
|
||||||
|
'invoice_prefix',
|
||||||
|
$request->header('company')
|
||||||
|
);
|
||||||
|
$tax_per_item = CompanySetting::getSetting(
|
||||||
|
'tax_per_item',
|
||||||
|
$request->header('company')
|
||||||
|
) ? CompanySetting::getSetting(
|
||||||
|
'tax_per_item',
|
||||||
|
$request->header('company')
|
||||||
|
) : 'NO';
|
||||||
|
$discount_per_item = CompanySetting::getSetting(
|
||||||
|
'discount_per_item',
|
||||||
|
$request->header('company')
|
||||||
|
) ? CompanySetting::getSetting(
|
||||||
|
'discount_per_item',
|
||||||
|
$request->header('company')
|
||||||
|
) : 'NO';
|
||||||
|
|
||||||
|
$invoice = Invoice::create([
|
||||||
|
'invoice_date' => $date,
|
||||||
|
'due_date' => $date,
|
||||||
|
'invoice_number' => $invoice_prefix."-".Invoice::getNextInvoiceNumber($invoice_prefix),
|
||||||
|
'reference_number' => $oldInvoice->reference_number,
|
||||||
|
'user_id' => $oldInvoice->user_id,
|
||||||
|
'company_id' => $request->header('company'),
|
||||||
|
'invoice_template_id' => 1,
|
||||||
|
'status' => Invoice::STATUS_DRAFT,
|
||||||
|
'paid_status' => Invoice::STATUS_UNPAID,
|
||||||
|
'sub_total' => $oldInvoice->sub_total,
|
||||||
|
'discount' => $oldInvoice->discount,
|
||||||
|
'discount_type' => $oldInvoice->discount_type,
|
||||||
|
'discount_val' => $oldInvoice->discount_val,
|
||||||
|
'total' => $oldInvoice->total,
|
||||||
|
'due_amount' => $oldInvoice->total,
|
||||||
|
'tax_per_item' => $oldInvoice->tax_per_item,
|
||||||
|
'discount_per_item' => $oldInvoice->discount_per_item,
|
||||||
|
'tax' => $oldInvoice->tax,
|
||||||
|
'notes' => $oldInvoice->notes,
|
||||||
|
'unique_hash' => str_random(60)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$invoiceItems = $oldInvoice->items->toArray();
|
||||||
|
|
||||||
|
foreach ($invoiceItems as $invoiceItem) {
|
||||||
|
$invoiceItem['company_id'] = $request->header('company');
|
||||||
|
$invoiceItem['name'] = $invoiceItem['name'];
|
||||||
|
$item = $invoice->items()->create($invoiceItem);
|
||||||
|
|
||||||
|
if (array_key_exists('taxes', $invoiceItem) && $invoiceItem['taxes']) {
|
||||||
|
foreach ($invoiceItem['taxes'] as $tax) {
|
||||||
|
$tax['company_id'] = $request->header('company');
|
||||||
|
|
||||||
|
if ($tax['amount']) {
|
||||||
|
$item->taxes()->create($tax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($oldInvoice->taxes) {
|
||||||
|
foreach ($oldInvoice->taxes->toArray() as $tax) {
|
||||||
|
$tax['company_id'] = $request->header('company');
|
||||||
|
$invoice->taxes()->create($tax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$invoice = Invoice::with([
|
||||||
|
'items',
|
||||||
|
'user',
|
||||||
|
'invoiceTemplate',
|
||||||
|
'taxes'
|
||||||
|
])->find($invoice->id);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'invoice' => $invoice
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,14 +14,17 @@ class ItemsController extends Controller
|
|||||||
{
|
{
|
||||||
$limit = $request->has('limit') ? $request->limit : 10;
|
$limit = $request->has('limit') ? $request->limit : 10;
|
||||||
|
|
||||||
$items = Item::applyFilters($request->only([
|
$items = Item::with(['taxes'])
|
||||||
|
->leftJoin('units', 'units.id', '=', 'items.unit_id')
|
||||||
|
->applyFilters($request->only([
|
||||||
'search',
|
'search',
|
||||||
'price',
|
'price',
|
||||||
'unit',
|
'unit_id',
|
||||||
'orderByField',
|
'orderByField',
|
||||||
'orderBy'
|
'orderBy'
|
||||||
]))
|
]))
|
||||||
->whereCompany($request->header('company'))
|
->whereCompany($request->header('company'))
|
||||||
|
->select('items.*', 'units.name as unit_name')
|
||||||
->latest()
|
->latest()
|
||||||
->paginate($limit);
|
->paginate($limit);
|
||||||
|
|
||||||
@ -33,7 +36,7 @@ class ItemsController extends Controller
|
|||||||
|
|
||||||
public function edit(Request $request, $id)
|
public function edit(Request $request, $id)
|
||||||
{
|
{
|
||||||
$item = Item::with('taxes')->find($id);
|
$item = Item::with(['taxes', 'unit'])->find($id);
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'item' => $item,
|
'item' => $item,
|
||||||
@ -43,11 +46,18 @@ class ItemsController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Item.
|
||||||
|
*
|
||||||
|
* @param Crater\Http\Requests\ItemsRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function store(Requests\ItemsRequest $request)
|
public function store(Requests\ItemsRequest $request)
|
||||||
{
|
{
|
||||||
$item = new Item();
|
$item = new Item();
|
||||||
$item->name = $request->name;
|
$item->name = $request->name;
|
||||||
$item->unit = $request->unit;
|
$item->unit_id = $request->unit_id;
|
||||||
$item->description = $request->description;
|
$item->description = $request->description;
|
||||||
$item->company_id = $request->header('company');
|
$item->company_id = $request->header('company');
|
||||||
$item->price = $request->price;
|
$item->price = $request->price;
|
||||||
@ -67,11 +77,18 @@ class ItemsController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update an existing Item.
|
||||||
|
*
|
||||||
|
* @param Crater\Http\Requests\ItemsRequest $request
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function update(Requests\ItemsRequest $request, $id)
|
public function update(Requests\ItemsRequest $request, $id)
|
||||||
{
|
{
|
||||||
$item = Item::find($id);
|
$item = Item::find($id);
|
||||||
$item->name = $request->name;
|
$item->name = $request->name;
|
||||||
$item->unit = $request->unit;
|
$item->unit_id = $request->unit_id;
|
||||||
$item->description = $request->description;
|
$item->description = $request->description;
|
||||||
$item->price = $request->price;
|
$item->price = $request->price;
|
||||||
$item->save();
|
$item->save();
|
||||||
@ -96,6 +113,13 @@ class ItemsController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an existing Item.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
$data = Item::deleteItem($id);
|
$data = Item::deleteItem($id);
|
||||||
@ -111,12 +135,20 @@ class ItemsController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a list of existing Items.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function delete(Request $request)
|
public function delete(Request $request)
|
||||||
{
|
{
|
||||||
$items = [];
|
$items = [];
|
||||||
foreach ($request->id as $id) {
|
foreach ($request->id as $id) {
|
||||||
$item = Item::deleteItem($id);
|
$item = Item::deleteItem($id);
|
||||||
if (!$item) {
|
if ($item) {
|
||||||
array_push($items, $id);
|
array_push($items, $id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,12 @@ use Crater\Country;
|
|||||||
|
|
||||||
class LocationController extends Controller
|
class LocationController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive a list of Countries.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getCountries()
|
public function getCountries()
|
||||||
{
|
{
|
||||||
return response()->json([
|
return response()->json([
|
||||||
|
|||||||
@ -18,6 +18,13 @@ use Illuminate\Support\Facades\Artisan;
|
|||||||
|
|
||||||
class OnboardingController extends Controller
|
class OnboardingController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve Onboarding data.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getOnboardingData(Request $request)
|
public function getOnboardingData(Request $request)
|
||||||
{
|
{
|
||||||
if (!\Storage::disk('local')->has('database_created')) {
|
if (!\Storage::disk('local')->has('database_created')) {
|
||||||
@ -37,9 +44,14 @@ class OnboardingController extends Controller
|
|||||||
$date_formats = DateFormatter::get_list();
|
$date_formats = DateFormatter::get_list();
|
||||||
$time_zones = TimeZones::get_list();
|
$time_zones = TimeZones::get_list();
|
||||||
$languages = [
|
$languages = [
|
||||||
|
["code"=>"ar", "name" => "Arabic"],
|
||||||
["code"=>"en", "name" => "English"],
|
["code"=>"en", "name" => "English"],
|
||||||
["code"=>"fr", "name" => "French"],
|
["code"=>"fr", "name" => "French"],
|
||||||
["code"=>"es", "name" => "Spanish"]
|
["code"=>"es", "name" => "Spanish"],
|
||||||
|
["code"=>"ar", "name" => "العربية"],
|
||||||
|
["code"=>"de", "name" => "German"],
|
||||||
|
["code"=>"pt-br", "name" => "Portuguese (Brazilian)"],
|
||||||
|
["code"=>"it", "name" => "Italian"],
|
||||||
];
|
];
|
||||||
$fiscal_years = [
|
$fiscal_years = [
|
||||||
['key' => 'january-december' , 'value' => '1-12'],
|
['key' => 'january-december' , 'value' => '1-12'],
|
||||||
@ -72,6 +84,13 @@ class OnboardingController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Admin Profile.
|
||||||
|
*
|
||||||
|
* @param \Crater\Http\Requests\ProfileRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function adminProfile(ProfileRequest $request)
|
public function adminProfile(ProfileRequest $request)
|
||||||
{
|
{
|
||||||
$setting = Setting::getSetting('profile_complete');
|
$setting = Setting::getSetting('profile_complete');
|
||||||
@ -97,6 +116,12 @@ class OnboardingController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Admin Avatar.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function uploadAdminAvatar(Request $request)
|
public function uploadAdminAvatar(Request $request)
|
||||||
{
|
{
|
||||||
$setting = Setting::getSetting('profile_complete');
|
$setting = Setting::getSetting('profile_complete');
|
||||||
@ -123,6 +148,12 @@ class OnboardingController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Admin Company.
|
||||||
|
*
|
||||||
|
* @param \Crater\Http\Requests\CompanyRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function adminCompany(CompanyRequest $request)
|
public function adminCompany(CompanyRequest $request)
|
||||||
{
|
{
|
||||||
$setting = Setting::getSetting('profile_complete');
|
$setting = Setting::getSetting('profile_complete');
|
||||||
@ -174,6 +205,13 @@ class OnboardingController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup Company Settings.
|
||||||
|
*
|
||||||
|
* @param \Crater\Http\Requests\CompanySettingRequest $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function companySettings(CompanySettingRequest $request)
|
public function companySettings(CompanySettingRequest $request)
|
||||||
{
|
{
|
||||||
$setting = Setting::getSetting('profile_complete');
|
$setting = Setting::getSetting('profile_complete');
|
||||||
@ -271,6 +309,10 @@ class OnboardingController extends Controller
|
|||||||
|
|
||||||
Artisan::call('passport:install --force');
|
Artisan::call('passport:install --force');
|
||||||
|
|
||||||
|
Artisan::call('db:seed', ['--class' => 'PaymentMethodSeeder', '--force' => true]);
|
||||||
|
|
||||||
|
Artisan::call('db:seed', ['--class' => 'UnitSeeder', '--force' => true]);
|
||||||
|
|
||||||
$client = DB::table('oauth_clients')->find(2);
|
$client = DB::table('oauth_clients')->find(2);
|
||||||
|
|
||||||
$path = base_path('.env');
|
$path = base_path('.env');
|
||||||
|
|||||||
@ -4,13 +4,16 @@ namespace Crater\Http\Controllers;
|
|||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\CompanySetting;
|
use Crater\CompanySetting;
|
||||||
use Crater\Currency;
|
use Crater\Currency;
|
||||||
|
use Crater\Company;
|
||||||
use Crater\Invoice;
|
use Crater\Invoice;
|
||||||
use Crater\Payment;
|
use Crater\Payment;
|
||||||
|
use Crater\PaymentMethod;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use function MongoDB\BSON\toJSON;
|
use function MongoDB\BSON\toJSON;
|
||||||
use Crater\User;
|
use Crater\User;
|
||||||
use Crater\Http\Requests\PaymentRequest;
|
use Crater\Http\Requests\PaymentRequest;
|
||||||
use Validator;
|
use Validator;
|
||||||
|
use Crater\Mail\PaymentPdf;
|
||||||
|
|
||||||
class PaymentController extends Controller
|
class PaymentController extends Controller
|
||||||
{
|
{
|
||||||
@ -23,19 +26,20 @@ class PaymentController extends Controller
|
|||||||
{
|
{
|
||||||
$limit = $request->has('limit') ? $request->limit : 10;
|
$limit = $request->has('limit') ? $request->limit : 10;
|
||||||
|
|
||||||
$payments = Payment::with('user', 'invoice')
|
$payments = Payment::with(['user', 'invoice', 'paymentMethod'])
|
||||||
->join('users', 'users.id', '=', 'payments.user_id')
|
->join('users', 'users.id', '=', 'payments.user_id')
|
||||||
->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id')
|
->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id')
|
||||||
|
->leftJoin('payment_methods', 'payment_methods.id', '=', 'payments.payment_method_id')
|
||||||
->applyFilters($request->only([
|
->applyFilters($request->only([
|
||||||
'search',
|
'search',
|
||||||
'payment_number',
|
'payment_number',
|
||||||
'payment_mode',
|
'payment_method_id',
|
||||||
'customer_id',
|
'customer_id',
|
||||||
'orderByField',
|
'orderByField',
|
||||||
'orderBy'
|
'orderBy'
|
||||||
]))
|
]))
|
||||||
->whereCompany($request->header('company'))
|
->whereCompany($request->header('company'))
|
||||||
->select('payments.*', 'users.name', 'invoices.invoice_number')
|
->select('payments.*', 'users.name', 'invoices.invoice_number', 'payment_methods.name as payment_mode')
|
||||||
->latest()
|
->latest()
|
||||||
->paginate($limit);
|
->paginate($limit);
|
||||||
|
|
||||||
@ -66,6 +70,9 @@ class PaymentController extends Controller
|
|||||||
'customers' => User::where('role', 'customer')
|
'customers' => User::where('role', 'customer')
|
||||||
->whereCompany($request->header('company'))
|
->whereCompany($request->header('company'))
|
||||||
->get(),
|
->get(),
|
||||||
|
'paymentMethods' => PaymentMethod::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get(),
|
||||||
'nextPaymentNumberAttribute' => $nextPaymentNumberAttribute,
|
'nextPaymentNumberAttribute' => $nextPaymentNumberAttribute,
|
||||||
'nextPaymentNumber' => $payment_prefix.'-'.$nextPaymentNumber,
|
'nextPaymentNumber' => $payment_prefix.'-'.$nextPaymentNumber,
|
||||||
'payment_prefix' => $payment_prefix
|
'payment_prefix' => $payment_prefix
|
||||||
@ -113,13 +120,15 @@ class PaymentController extends Controller
|
|||||||
'user_id' => $request->user_id,
|
'user_id' => $request->user_id,
|
||||||
'company_id' => $request->header('company'),
|
'company_id' => $request->header('company'),
|
||||||
'invoice_id' => $request->invoice_id,
|
'invoice_id' => $request->invoice_id,
|
||||||
'payment_mode' => $request->payment_mode,
|
'payment_method_id' => $request->payment_method_id,
|
||||||
'amount' => $request->amount,
|
'amount' => $request->amount,
|
||||||
'notes' => $request->notes,
|
'notes' => $request->notes,
|
||||||
|
'unique_hash' => str_random(60)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'payment' => $payment,
|
'payment' => $payment,
|
||||||
|
'shareable_link' => url('/payments/pdf/'.$payment->unique_hash),
|
||||||
'success' => true
|
'success' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -132,7 +141,12 @@ class PaymentController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function show($id)
|
public function show($id)
|
||||||
{
|
{
|
||||||
//
|
$payment = Payment::with(['user', 'invoice', 'paymentMethod'])->find($id);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'payment' => $payment,
|
||||||
|
'shareable_link' => url('/payments/pdf/'.$payment->unique_hash)
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -143,7 +157,7 @@ class PaymentController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function edit(Request $request, $id)
|
public function edit(Request $request, $id)
|
||||||
{
|
{
|
||||||
$payment = Payment::with('user', 'invoice')->find($id);
|
$payment = Payment::with(['user', 'invoice', 'paymentMethod'])->find($id);
|
||||||
|
|
||||||
$invoices = Invoice::where('paid_status', '<>', Invoice::STATUS_PAID)
|
$invoices = Invoice::where('paid_status', '<>', Invoice::STATUS_PAID)
|
||||||
->where('user_id', $payment->user_id)->where('due_amount', '>', 0)
|
->where('user_id', $payment->user_id)->where('due_amount', '>', 0)
|
||||||
@ -154,8 +168,12 @@ class PaymentController extends Controller
|
|||||||
'customers' => User::where('role', 'customer')
|
'customers' => User::where('role', 'customer')
|
||||||
->whereCompany($request->header('company'))
|
->whereCompany($request->header('company'))
|
||||||
->get(),
|
->get(),
|
||||||
|
'paymentMethods' => PaymentMethod::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get(),
|
||||||
'nextPaymentNumber' => $payment->getPaymentNumAttribute(),
|
'nextPaymentNumber' => $payment->getPaymentNumAttribute(),
|
||||||
'payment_prefix' => $payment->getPaymentPrefixAttribute(),
|
'payment_prefix' => $payment->getPaymentPrefixAttribute(),
|
||||||
|
'shareable_link' => url('/payments/pdf/'.$payment->unique_hash),
|
||||||
'payment' => $payment,
|
'payment' => $payment,
|
||||||
'invoices' => $invoices
|
'invoices' => $invoices
|
||||||
]);
|
]);
|
||||||
@ -208,13 +226,14 @@ class PaymentController extends Controller
|
|||||||
$payment->payment_number = $number_attributes['payment_number'];
|
$payment->payment_number = $number_attributes['payment_number'];
|
||||||
$payment->user_id = $request->user_id;
|
$payment->user_id = $request->user_id;
|
||||||
$payment->invoice_id = $request->invoice_id;
|
$payment->invoice_id = $request->invoice_id;
|
||||||
$payment->payment_mode = $request->payment_mode;
|
$payment->payment_method_id = $request->payment_method_id;
|
||||||
$payment->amount = $request->amount;
|
$payment->amount = $request->amount;
|
||||||
$payment->notes = $request->notes;
|
$payment->notes = $request->notes;
|
||||||
$payment->save();
|
$payment->save();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'payment' => $payment,
|
'payment' => $payment,
|
||||||
|
'shareable_link' => url('/payments/pdf/'.$payment->unique_hash),
|
||||||
'success' => true
|
'success' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@ -276,4 +295,27 @@ class PaymentController extends Controller
|
|||||||
'success' => true
|
'success' => true
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function sendPayment(Request $request)
|
||||||
|
{
|
||||||
|
$payment = Payment::findOrFail($request->id);
|
||||||
|
|
||||||
|
$data['payment'] = $payment->toArray();
|
||||||
|
$userId = $data['payment']['user_id'];
|
||||||
|
$data['user'] = User::find($userId)->toArray();
|
||||||
|
$data['company'] = Company::find($payment->company_id);
|
||||||
|
$email = $data['user']['email'];
|
||||||
|
|
||||||
|
if (!$email) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'user_email_does_not_exist'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
\Mail::to($email)->send(new PaymentPdf($data));
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
119
app/Http/Controllers/PaymentMethodController.php
Normal file
119
app/Http/Controllers/PaymentMethodController.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Http\Controllers;
|
||||||
|
|
||||||
|
use Crater\PaymentMethod;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Crater\Http\Requests\PaymentMethodRequest;
|
||||||
|
|
||||||
|
class PaymentMethodController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$paymentMethods = PaymentMethod::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'paymentMethods' => $paymentMethods
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function store(PaymentMethodRequest $request)
|
||||||
|
{
|
||||||
|
$paymentMethod = new PaymentMethod;
|
||||||
|
$paymentMethod->name = $request->name;
|
||||||
|
$paymentMethod->company_id = $request->header('company');
|
||||||
|
$paymentMethod->save();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'paymentMethod' => $paymentMethod
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*
|
||||||
|
* @param \Crater\PaymentMethod $paymentMethod
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show(PaymentMethod $paymentMethod)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*
|
||||||
|
* @param \Crater\PaymentMethod $paymentMethod
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function edit(PaymentMethod $paymentMethod)
|
||||||
|
{
|
||||||
|
return response()->json([
|
||||||
|
'paymentMethod' => $paymentMethod
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Crater\PaymentMethod $paymentMethod
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function update(PaymentMethodRequest $request, PaymentMethod $paymentMethod)
|
||||||
|
{
|
||||||
|
$paymentMethod->name = $request->name;
|
||||||
|
$paymentMethod->company_id = $request->header('company');
|
||||||
|
$paymentMethod->save();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'paymentMethod' => $paymentMethod
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*
|
||||||
|
* @param \Crater\PaymentMethod $paymentMethod
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function destroy(PaymentMethod $paymentMethod)
|
||||||
|
{
|
||||||
|
$payments = $paymentMethod->payments;
|
||||||
|
|
||||||
|
if ($payments->count() > 0) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'payments_attached'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$paymentMethod->delete();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => 'Payment method deleted successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,9 +4,18 @@ namespace Crater\Http\Controllers;
|
|||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Setting;
|
use Crater\Setting;
|
||||||
|
use Crater\Mail\TestMail;
|
||||||
|
use Mail;
|
||||||
|
|
||||||
class SettingsController extends Controller
|
class SettingsController extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrive App Version.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
public function getAppVersion(Request $request)
|
public function getAppVersion(Request $request)
|
||||||
{
|
{
|
||||||
$version = Setting::getSetting('version');
|
$version = Setting::getSetting('version');
|
||||||
@ -16,4 +25,18 @@ class SettingsController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testEmailConfig(Request $request)
|
||||||
|
{
|
||||||
|
$this->validate($request, [
|
||||||
|
'to' => 'required|email',
|
||||||
|
'subject' => 'required',
|
||||||
|
'message' => 'required'
|
||||||
|
]);
|
||||||
|
|
||||||
|
Mail::to($request->to)->send(new TestMail($request->subject, $request->message));
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
119
app/Http/Controllers/UnitController.php
Normal file
119
app/Http/Controllers/UnitController.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Http\Controllers;
|
||||||
|
|
||||||
|
use Crater\Unit;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Crater\Http\Requests\UnitRequest;
|
||||||
|
|
||||||
|
class UnitController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$units = Unit::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'units' => $units
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function store(UnitRequest $request)
|
||||||
|
{
|
||||||
|
$unit = new Unit;
|
||||||
|
$unit->name = $request->name;
|
||||||
|
$unit->company_id = $request->header('company');
|
||||||
|
$unit->save();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'unit' => $unit
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*
|
||||||
|
* @param \Crater\Unit $unit
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show(Unit $unit)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*
|
||||||
|
* @param \Crater\Unit $unit
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function edit(Unit $unit)
|
||||||
|
{
|
||||||
|
return response()->json([
|
||||||
|
'unit' => $unit
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Crater\Unit $unit
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function update(UnitRequest $request, Unit $unit)
|
||||||
|
{
|
||||||
|
$unit->name = $request->name;
|
||||||
|
$unit->company_id = $request->header('company');
|
||||||
|
$unit->save();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'unit' => $unit
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*
|
||||||
|
* @param \Crater\Unit $unit
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function destroy(Unit $unit)
|
||||||
|
{
|
||||||
|
$items = $unit->items;
|
||||||
|
|
||||||
|
if ($items->count() > 0) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'items_attached'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$unit->delete();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => 'Unit deleted successfully'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,23 +2,81 @@
|
|||||||
|
|
||||||
namespace Crater\Http\Controllers;
|
namespace Crater\Http\Controllers;
|
||||||
|
|
||||||
|
use Crater\Setting;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Crater\Space\Updater;
|
use Crater\Space\Updater;
|
||||||
use Crater\Space\SiteApi;
|
use Crater\Space\SiteApi;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
|
||||||
class UpdateController extends Controller
|
class UpdateController extends Controller
|
||||||
{
|
{
|
||||||
public function update(Request $request)
|
|
||||||
|
public function download(Request $request)
|
||||||
{
|
{
|
||||||
set_time_limit(600); // 10 minutes
|
$request->validate([
|
||||||
|
'version' => 'required',
|
||||||
|
]);
|
||||||
|
|
||||||
$json = Updater::update($request->installed, $request->version);
|
$path = Updater::download($request->version);
|
||||||
|
|
||||||
return response()->json($json);
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'path' => $path
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unzip(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'path' => 'required',
|
||||||
|
]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$path = Updater::unzip($request->path);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'path' => $path
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function copyFiles(Request $request)
|
||||||
|
{
|
||||||
|
$request->validate([
|
||||||
|
'path' => 'required',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$path = Updater::copyFiles($request->path);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'path' => $path
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function migrate(Request $request)
|
||||||
|
{
|
||||||
|
Updater::migrateUpdate();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function finishUpdate(Request $request)
|
public function finishUpdate(Request $request)
|
||||||
{
|
{
|
||||||
|
$request->validate([
|
||||||
|
'installed' => 'required',
|
||||||
|
'version' => 'required',
|
||||||
|
]);
|
||||||
|
|
||||||
$json = Updater::finishUpdate($request->installed, $request->version);
|
$json = Updater::finishUpdate($request->installed, $request->version);
|
||||||
|
|
||||||
return response()->json($json);
|
return response()->json($json);
|
||||||
@ -28,7 +86,7 @@ class UpdateController extends Controller
|
|||||||
{
|
{
|
||||||
set_time_limit(600); // 10 minutes
|
set_time_limit(600); // 10 minutes
|
||||||
|
|
||||||
$json = Updater::checkForUpdate();
|
$json = Updater::checkForUpdate(Setting::getSetting('version'));
|
||||||
|
|
||||||
return response()->json($json);
|
return response()->json($json);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,8 @@ use Crater\User;
|
|||||||
use Crater\Currency;
|
use Crater\Currency;
|
||||||
use Crater\Setting;
|
use Crater\Setting;
|
||||||
use Crater\Item;
|
use Crater\Item;
|
||||||
|
use Crater\PaymentMethod;
|
||||||
|
use Crater\Unit;
|
||||||
use Crater\TaxType;
|
use Crater\TaxType;
|
||||||
use DB;
|
use DB;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
@ -46,10 +48,18 @@ class UsersController extends Controller
|
|||||||
$request->header('company')
|
$request->header('company')
|
||||||
);
|
);
|
||||||
|
|
||||||
$items = Item::all();
|
$items = Item::with('taxes')->get();
|
||||||
|
|
||||||
$taxTypes = TaxType::latest()->get();
|
$taxTypes = TaxType::latest()->get();
|
||||||
|
|
||||||
|
$paymentMethods = PaymentMethod::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$units = Unit::whereCompany($request->header('company'))
|
||||||
|
->latest()
|
||||||
|
->get();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'user' => $user,
|
'user' => $user,
|
||||||
'customers' => $customers,
|
'customers' => $customers,
|
||||||
@ -61,6 +71,8 @@ class UsersController extends Controller
|
|||||||
'items' => $items,
|
'items' => $items,
|
||||||
'taxTypes' => $taxTypes,
|
'taxTypes' => $taxTypes,
|
||||||
'moment_date_format' => $moment_date_format,
|
'moment_date_format' => $moment_date_format,
|
||||||
|
'paymentMethods' => $paymentMethods,
|
||||||
|
'units' => $units,
|
||||||
'fiscal_year' => $fiscal_year,
|
'fiscal_year' => $fiscal_year,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,12 +40,9 @@ class MailEnvironmentRequest extends FormRequest
|
|||||||
case 'mailgun':
|
case 'mailgun':
|
||||||
return [
|
return [
|
||||||
'mail_driver' => 'required|string',
|
'mail_driver' => 'required|string',
|
||||||
'mail_host' => 'required|string',
|
|
||||||
'mail_port' => 'required',
|
|
||||||
'mail_mailgun_domain' => 'required|string',
|
'mail_mailgun_domain' => 'required|string',
|
||||||
'mail_mailgun_secret' => 'required|string',
|
'mail_mailgun_secret' => 'required|string',
|
||||||
'mail_mailgun_endpoint' => 'required|string',
|
'mail_mailgun_endpoint' => 'required|string',
|
||||||
'mail_encryption' => 'required|string',
|
|
||||||
'from_name' => 'required|string',
|
'from_name' => 'required|string',
|
||||||
'from_mail' => 'required|string',
|
'from_mail' => 'required|string',
|
||||||
];
|
];
|
||||||
|
|||||||
40
app/Http/Requests/PaymentMethodRequest.php
Normal file
40
app/Http/Requests/PaymentMethodRequest.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class PaymentMethodRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'name' => 'required|unique:payment_methods,name'
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($this->getMethod() == 'PUT') {
|
||||||
|
$data['name'] = [
|
||||||
|
'required',
|
||||||
|
Rule::unique('payment_methods')->ignore($this->route('payment_method'), 'id')
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
app/Http/Requests/UnitRequest.php
Normal file
40
app/Http/Requests/UnitRequest.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Http\Requests;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
|
||||||
|
class UnitRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'name' => 'required|unique:units,name'
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($this->getMethod() == 'PUT') {
|
||||||
|
$data['name'] = [
|
||||||
|
'required',
|
||||||
|
Rule::unique('units')->ignore($this->route('unit'), 'id')
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
app/Item.php
19
app/Item.php
@ -24,19 +24,24 @@ class Item extends Model
|
|||||||
'formattedCreatedAt'
|
'formattedCreatedAt'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function unit()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Unit::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function scopeWhereSearch($query, $search)
|
public function scopeWhereSearch($query, $search)
|
||||||
{
|
{
|
||||||
return $query->where('name', 'LIKE', '%'.$search.'%');
|
return $query->where('items.name', 'LIKE', '%'.$search.'%');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeWherePrice($query, $price)
|
public function scopeWherePrice($query, $price)
|
||||||
{
|
{
|
||||||
return $query->where('price', $price);
|
return $query->where('items.price', $price);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeWhereUnit($query, $unit)
|
public function scopeWhereUnit($query, $unit_id)
|
||||||
{
|
{
|
||||||
return $query->where('unit', $unit);
|
return $query->where('items.unit_id', $unit_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeWhereOrder($query, $orderByField, $orderBy)
|
public function scopeWhereOrder($query, $orderByField, $orderBy)
|
||||||
@ -56,8 +61,8 @@ class Item extends Model
|
|||||||
$query->wherePrice($filters->get('price'));
|
$query->wherePrice($filters->get('price'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($filters->get('unit')) {
|
if ($filters->get('unit_id')) {
|
||||||
$query->whereUnit($filters->get('unit'));
|
$query->whereUnit($filters->get('unit_id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($filters->get('orderByField') || $filters->get('orderBy')) {
|
if ($filters->get('orderByField') || $filters->get('orderBy')) {
|
||||||
@ -80,7 +85,7 @@ class Item extends Model
|
|||||||
|
|
||||||
public function scopeWhereCompany($query, $company_id)
|
public function scopeWhereCompany($query, $company_id)
|
||||||
{
|
{
|
||||||
$query->where('company_id', $company_id);
|
$query->where('items.company_id', $company_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function invoiceItems()
|
public function invoiceItems()
|
||||||
|
|||||||
162
app/Listeners/Updates/v3/Version300.php
Normal file
162
app/Listeners/Updates/v3/Version300.php
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Listeners\Updates\v3;
|
||||||
|
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Crater\Setting;
|
||||||
|
use Crater\Unit;
|
||||||
|
use Crater\PaymentMethod;
|
||||||
|
use Crater\Currency;
|
||||||
|
use Crater\Payment;
|
||||||
|
use Crater\Item;
|
||||||
|
use Crater\User;
|
||||||
|
use Crater\Listeners\Updates\Listener;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
|
||||||
|
class Version300 extends Listener
|
||||||
|
{
|
||||||
|
const VERSION = '3.0.0';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the event listener.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the event.
|
||||||
|
*
|
||||||
|
* @param object $event
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function handle($event)
|
||||||
|
{
|
||||||
|
if ($this->isListenerFired($event)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->changeMigrations();
|
||||||
|
|
||||||
|
$this->addSeederData();
|
||||||
|
|
||||||
|
$this->databaseChanges();
|
||||||
|
|
||||||
|
$this->changeMigrations(true);
|
||||||
|
|
||||||
|
Setting::setSetting('version', static::VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function changeMigrations($removeColumn = false)
|
||||||
|
{
|
||||||
|
if ($removeColumn) {
|
||||||
|
\Schema::table('items', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('unit');
|
||||||
|
});
|
||||||
|
|
||||||
|
\Schema::table('payments', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('payment_mode');
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
\Schema::create('units', function (Blueprint $table) {
|
||||||
|
$table->increments('id');
|
||||||
|
$table->string('name');
|
||||||
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('company_id')->references('id')->on('companies');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
\Schema::table('items', function (Blueprint $table) {
|
||||||
|
$table->integer('unit_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('unit_id')->references('id')->on('units')->onDelete('cascade');
|
||||||
|
});
|
||||||
|
|
||||||
|
\Schema::create('payment_methods', function (Blueprint $table) {
|
||||||
|
$table->increments('id');
|
||||||
|
$table->string('name');
|
||||||
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('company_id')->references('id')->on('companies');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
\Schema::table('payments', function (Blueprint $table) {
|
||||||
|
$table->string('unique_hash')->nullable();
|
||||||
|
$table->integer('payment_method_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('payment_method_id')->references('id')->on('payment_methods')->onDelete('cascade');
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addSeederData()
|
||||||
|
{
|
||||||
|
$company_id = User::where('role', 'admin')->first()->company_id;
|
||||||
|
|
||||||
|
Unit::create(['name' => 'box', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'cm', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'dz', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'ft', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'g', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'in', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'kg', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'km', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'lb', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'mg', 'company_id' => $company_id]);
|
||||||
|
Unit::create(['name' => 'pc', 'company_id' => $company_id]);
|
||||||
|
|
||||||
|
PaymentMethod::create(['name' => 'Cash', 'company_id' => $company_id]);
|
||||||
|
PaymentMethod::create(['name' => 'Check', 'company_id' => $company_id]);
|
||||||
|
PaymentMethod::create(['name' => 'Credit Card', 'company_id' => $company_id]);
|
||||||
|
PaymentMethod::create(['name' => 'Bank Transfer', 'company_id' => $company_id]);
|
||||||
|
|
||||||
|
Currency::create([
|
||||||
|
'name' => 'Serbian Dinar',
|
||||||
|
'code' => 'RSD',
|
||||||
|
'symbol' => 'RSD',
|
||||||
|
'precision' => '2',
|
||||||
|
'thousand_separator' => '.',
|
||||||
|
'decimal_separator' => ','
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function databaseChanges()
|
||||||
|
{
|
||||||
|
$payments = Payment::all();
|
||||||
|
|
||||||
|
if ($payments) {
|
||||||
|
foreach ($payments as $payment) {
|
||||||
|
$payment->unique_hash = str_random(60);
|
||||||
|
$payment->save();
|
||||||
|
|
||||||
|
$paymentMethod = PaymentMethod::where('name', $payment->payment_mode)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($paymentMethod) {
|
||||||
|
$payment->payment_method_id = $paymentMethod->id;
|
||||||
|
$payment->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$items = Item::all();
|
||||||
|
|
||||||
|
if ($items) {
|
||||||
|
foreach ($items as $item) {
|
||||||
|
$unit = Unit::where('name', $item->unit)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($unit) {
|
||||||
|
$item->unit_id = $unit->id;
|
||||||
|
$item->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
52
app/Listeners/Updates/v3/Version310.php
Normal file
52
app/Listeners/Updates/v3/Version310.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Listeners\Updates\v3;
|
||||||
|
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Crater\Listeners\Updates\Listener;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Crater\Events\UpdateFinished;
|
||||||
|
use Crater\Setting;
|
||||||
|
use Crater\Currency;
|
||||||
|
use Schema;
|
||||||
|
use Artisan;
|
||||||
|
|
||||||
|
class Version310 extends Listener
|
||||||
|
{
|
||||||
|
const VERSION = '3.1.0';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the event.
|
||||||
|
*
|
||||||
|
* @param UpdateFinished $event
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function handle(UpdateFinished $event)
|
||||||
|
{
|
||||||
|
if ($this->isListenerFired($event)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Currency::firstOrCreate(
|
||||||
|
[
|
||||||
|
'name' => 'Kyrgyzstani som',
|
||||||
|
'code' => 'KGS'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Kyrgyzstani som',
|
||||||
|
'code' => 'KGS',
|
||||||
|
'symbol' => 'С̲ ',
|
||||||
|
'precision' => '2',
|
||||||
|
'thousand_separator' => '.',
|
||||||
|
'decimal_separator' => ','
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
Artisan::call('migrate', ['--force' => true]);
|
||||||
|
|
||||||
|
// Update Crater app version
|
||||||
|
Setting::setSetting('version', static::VERSION);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,17 +12,14 @@ class EstimatePdf extends Mailable
|
|||||||
|
|
||||||
public $data = [];
|
public $data = [];
|
||||||
|
|
||||||
public $notificationEmail = '';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new message instance.
|
* Create a new message instance.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct($data, $notificationEmail)
|
public function __construct($data)
|
||||||
{
|
{
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
$this->notificationEmail = $notificationEmail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,6 +29,9 @@ class EstimatePdf extends Mailable
|
|||||||
*/
|
*/
|
||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
return $this->from($this->notificationEmail)->markdown('emails.send.estimate', ['data', $this->data]);
|
$company = $this->data['company']['name'];
|
||||||
|
|
||||||
|
return $this->subject("Estimate from $company")
|
||||||
|
->markdown('emails.send.estimate', ['data', $this->data]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,8 @@ class EstimateViewed extends Mailable
|
|||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
$email = $this->data['user']['email'];
|
$email = $this->data['user']['email'];
|
||||||
return $this->from($email)->markdown('emails.viewed.estimate', ['data', $this->data]);
|
$name = $this->data['user']['name'];
|
||||||
|
return $this->from($email, $name)
|
||||||
|
->markdown('emails.viewed.estimate', ['data', $this->data]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,23 +6,20 @@ use Illuminate\Mail\Mailable;
|
|||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
class invoicePdf extends Mailable
|
class InvoicePdf extends Mailable
|
||||||
{
|
{
|
||||||
use Queueable, SerializesModels;
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
public $data = [];
|
public $data = [];
|
||||||
|
|
||||||
public $notificationEmail = '';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new message instance.
|
* Create a new message instance.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct($data, $notificationEmail)
|
public function __construct($data)
|
||||||
{
|
{
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
$this->notificationEmail = $notificationEmail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,6 +29,9 @@ class invoicePdf extends Mailable
|
|||||||
*/
|
*/
|
||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
return $this->from($this->notificationEmail)->markdown('emails.send.invoice', ['data', $this->data]);
|
$company = $this->data['company']['name'];
|
||||||
|
|
||||||
|
return $this->subject("Invoice from $company")
|
||||||
|
->markdown('emails.send.invoice', ['data', $this->data]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -31,6 +31,8 @@ class InvoiceViewed extends Mailable
|
|||||||
public function build()
|
public function build()
|
||||||
{
|
{
|
||||||
$email = $this->data['user']['email'];
|
$email = $this->data['user']['email'];
|
||||||
return $this->from($email)->markdown('emails.viewed.invoice', ['data', $this->data]);
|
$name = $this->data['user']['name'];
|
||||||
|
return $this->from($email, $name)
|
||||||
|
->markdown('emails.viewed.invoice', ['data', $this->data]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
38
app/Mail/PaymentPdf.php
Normal file
38
app/Mail/PaymentPdf.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class PaymentPdf extends Mailable
|
||||||
|
{
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public $data = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new message instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct($data)
|
||||||
|
{
|
||||||
|
$this->data = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the message.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function build()
|
||||||
|
{
|
||||||
|
$company = $this->data['company']['name'];
|
||||||
|
|
||||||
|
return $this->subject("Payment from $company")
|
||||||
|
->markdown('emails.send.payment', ['data', $this->data]);
|
||||||
|
}
|
||||||
|
}
|
||||||
38
app/Mail/TestMail.php
Normal file
38
app/Mail/TestMail.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
namespace Crater\Mail;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Mail\Mailable;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
|
||||||
|
class TestMail extends Mailable
|
||||||
|
{
|
||||||
|
use Queueable, SerializesModels;
|
||||||
|
public $subject;
|
||||||
|
public $message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new message instance.
|
||||||
|
*
|
||||||
|
* @param $subject
|
||||||
|
* @param $message
|
||||||
|
*/
|
||||||
|
public function __construct($subject, $message)
|
||||||
|
{
|
||||||
|
$this->subject = $subject;
|
||||||
|
$this->message = $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the message.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function build()
|
||||||
|
{
|
||||||
|
return $this->subject($this->subject)->markdown('emails.test')->with([
|
||||||
|
'my_message' => $this->message
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@ use Crater\User;
|
|||||||
use Crater\Invoice;
|
use Crater\Invoice;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Crater\PaymentMethod;
|
||||||
|
|
||||||
class Payment extends Model
|
class Payment extends Model
|
||||||
{
|
{
|
||||||
@ -19,9 +20,11 @@ class Payment extends Model
|
|||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'user_id',
|
'user_id',
|
||||||
'invoice_id',
|
'invoice_id',
|
||||||
|
'payment_method_id',
|
||||||
'payment_date',
|
'payment_date',
|
||||||
'company_id',
|
'company_id',
|
||||||
'notes',
|
'notes',
|
||||||
|
'unique_hash',
|
||||||
'payment_number',
|
'payment_number',
|
||||||
'payment_mode',
|
'payment_mode',
|
||||||
'amount'
|
'amount'
|
||||||
@ -84,7 +87,6 @@ class Payment extends Model
|
|||||||
return $prefix;
|
return $prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function invoice()
|
public function invoice()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Invoice::class);
|
return $this->belongsTo(Invoice::class);
|
||||||
@ -95,6 +97,11 @@ class Payment extends Model
|
|||||||
return $this->belongsTo(User::class);
|
return $this->belongsTo(User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function paymentMethod()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(PaymentMethod::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function getFormattedCreatedAtAttribute($value)
|
public function getFormattedCreatedAtAttribute($value)
|
||||||
{
|
{
|
||||||
$dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
|
$dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id);
|
||||||
@ -123,9 +130,9 @@ class Payment extends Model
|
|||||||
return $query->where('payments.payment_number', 'LIKE', '%'.$paymentNumber.'%');
|
return $query->where('payments.payment_number', 'LIKE', '%'.$paymentNumber.'%');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopePaymentMode($query, $paymentMode)
|
public function scopePaymentMethod($query, $paymentMethodId)
|
||||||
{
|
{
|
||||||
return $query->where('payments.payment_mode', $paymentMode);
|
return $query->where('payments.payment_method_id', $paymentMethodId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function scopeApplyFilters($query, array $filters)
|
public function scopeApplyFilters($query, array $filters)
|
||||||
@ -140,8 +147,8 @@ class Payment extends Model
|
|||||||
$query->paymentNumber($filters->get('payment_number'));
|
$query->paymentNumber($filters->get('payment_number'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($filters->get('payment_mode')) {
|
if ($filters->get('payment_method_id')) {
|
||||||
$query->paymentMode($filters->get('payment_mode'));
|
$query->paymentMethod($filters->get('payment_method_id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($filters->get('customer_id')) {
|
if ($filters->get('customer_id')) {
|
||||||
|
|||||||
25
app/PaymentMethod.php
Normal file
25
app/PaymentMethod.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class PaymentMethod extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name', 'company_id'];
|
||||||
|
|
||||||
|
public function payments()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Payment::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function company()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Company::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeWhereCompany($query, $company_id)
|
||||||
|
{
|
||||||
|
$query->where('company_id', $company_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Crater\Providers;
|
namespace Crater\Providers;
|
||||||
|
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||||
@ -10,6 +11,8 @@ use Crater\Listeners\Updates\v2\Version200;
|
|||||||
use Crater\Listeners\Updates\v2\Version201;
|
use Crater\Listeners\Updates\v2\Version201;
|
||||||
use Crater\Listeners\Updates\v2\Version202;
|
use Crater\Listeners\Updates\v2\Version202;
|
||||||
use Crater\Listeners\Updates\v2\Version210;
|
use Crater\Listeners\Updates\v2\Version210;
|
||||||
|
use Crater\Listeners\Updates\v3\Version300;
|
||||||
|
use Crater\Listeners\Updates\v3\Version310;
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
class EventServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@ -19,12 +22,14 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $listen = [
|
protected $listen = [
|
||||||
UpdateFinished::class=> [
|
UpdateFinished::class => [
|
||||||
Version110::class,
|
Version110::class,
|
||||||
Version200::class,
|
Version200::class,
|
||||||
Version201::class,
|
Version201::class,
|
||||||
Version202::class,
|
Version202::class,
|
||||||
Version210::class,
|
Version210::class,
|
||||||
|
Version300::class,
|
||||||
|
Version310::class,
|
||||||
],
|
],
|
||||||
Registered::class => [
|
Registered::class => [
|
||||||
SendEmailVerificationNotification::class,
|
SendEmailVerificationNotification::class,
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class EnvironmentManager
|
|||||||
'DB_PORT='.config('database.connections.'.config('database.default').'.port')."\n".
|
'DB_PORT='.config('database.connections.'.config('database.default').'.port')."\n".
|
||||||
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n".
|
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n".
|
||||||
'DB_USERNAME='.config('database.connections.'.config('database.default').'.username')."\n".
|
'DB_USERNAME='.config('database.connections.'.config('database.default').'.username')."\n".
|
||||||
'DB_PASSWORD='.config('database.connections.'.config('database.default').'.password')."\n\n";
|
'DB_PASSWORD="'.config('database.connections.'.config('database.default').'.password')."\"\n\n";
|
||||||
|
|
||||||
$newDatabaseData =
|
$newDatabaseData =
|
||||||
'DB_CONNECTION='.$request->database_connection."\n".
|
'DB_CONNECTION='.$request->database_connection."\n".
|
||||||
@ -46,7 +46,7 @@ class EnvironmentManager
|
|||||||
'DB_PORT='.$request->database_port."\n".
|
'DB_PORT='.$request->database_port."\n".
|
||||||
'DB_DATABASE='.$request->database_name."\n".
|
'DB_DATABASE='.$request->database_name."\n".
|
||||||
'DB_USERNAME='.$request->database_username."\n".
|
'DB_USERNAME='.$request->database_username."\n".
|
||||||
'DB_PASSWORD='.$request->database_password."\n\n";
|
'DB_PASSWORD="'.$request->database_password."\"\n\n";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
|||||||
@ -2,24 +2,44 @@
|
|||||||
namespace Crater\Space;
|
namespace Crater\Space;
|
||||||
|
|
||||||
use File;
|
use File;
|
||||||
use ZipArchive;
|
|
||||||
use Artisan;
|
use Artisan;
|
||||||
use GuzzleHttp\Exception\RequestException;
|
use GuzzleHttp\Exception\RequestException;
|
||||||
use Crater\Space\SiteApi;
|
|
||||||
use Crater\Events\UpdateFinished;
|
use Crater\Events\UpdateFinished;
|
||||||
use Crater\Setting;
|
use ZipArchive;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class Updater
|
class Updater
|
||||||
{
|
{
|
||||||
use SiteApi;
|
use SiteApi;
|
||||||
|
|
||||||
public static function update($installed, $version)
|
public static function checkForUpdate($installed_version)
|
||||||
|
{
|
||||||
|
$data = null;
|
||||||
|
if(env('APP_ENV') === 'development')
|
||||||
|
{
|
||||||
|
$url = 'https://craterapp.com/downloads/check/latest/'. $installed_version . '?type=update&is_dev=1';
|
||||||
|
} else {
|
||||||
|
$url = 'https://craterapp.com/downloads/check/latest/'. $installed_version . '?type=update';
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]);
|
||||||
|
|
||||||
|
if ($response && ($response->getStatusCode() == 200)) {
|
||||||
|
$data = $response->getBody()->getContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
return json_decode($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function download($new_version)
|
||||||
{
|
{
|
||||||
$data = null;
|
$data = null;
|
||||||
$path = null;
|
$path = null;
|
||||||
|
|
||||||
$url = 'https://craterapp.com/downloads/file/'.$version.'?type=update';
|
if (env('APP_ENV') === 'development') {
|
||||||
|
$url = 'https://craterapp.com/downloads/file/' . $new_version . '?type=update&is_dev=1';
|
||||||
|
} else {
|
||||||
|
$url = 'https://craterapp.com/downloads/file/' . $new_version . '?type=update';
|
||||||
|
}
|
||||||
|
|
||||||
$response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]);
|
$response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]);
|
||||||
|
|
||||||
@ -39,66 +59,68 @@ class Updater
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create temp directory
|
// Create temp directory
|
||||||
$path = 'temp-' . md5(mt_rand());
|
$temp_dir = storage_path('app/temp-' . md5(mt_rand()));
|
||||||
$path2 = 'temp2-' . md5(mt_rand());
|
|
||||||
$temp_path = storage_path('app') . '/' . $path;
|
|
||||||
$temp_path2 = storage_path('app') . '/' . $path2;
|
|
||||||
|
|
||||||
if (!File::isDirectory($temp_path)) {
|
if (!File::isDirectory($temp_dir)) {
|
||||||
File::makeDirectory($temp_path);
|
File::makeDirectory($temp_dir);
|
||||||
File::makeDirectory($temp_path2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
$zip_file_path = $temp_dir . '/upload.zip';
|
||||||
|
|
||||||
$file = $temp_path . '/upload.zip';
|
// Add content to the Zip file
|
||||||
|
$uploaded = is_int(file_put_contents($zip_file_path, $data)) ? true : false;
|
||||||
|
|
||||||
// Add content to the Zip file
|
if (!$uploaded) {
|
||||||
$uploaded = is_int(file_put_contents($file, $data)) ? true : false;
|
return false;
|
||||||
|
|
||||||
if (!$uploaded) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unzip the file
|
|
||||||
$zip = new ZipArchive();
|
|
||||||
|
|
||||||
if ($zip->open($file)) {
|
|
||||||
$zip->extractTo($temp_path2);
|
|
||||||
}
|
|
||||||
|
|
||||||
$zip->close();
|
|
||||||
|
|
||||||
// Delete zip file
|
|
||||||
File::delete($file);
|
|
||||||
|
|
||||||
if (!File::copyDirectory($temp_path2.'/Crater', base_path())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete temp directory
|
|
||||||
File::deleteDirectory($temp_path);
|
|
||||||
File::deleteDirectory($temp_path2);
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'error' => false,
|
|
||||||
'data' => []
|
|
||||||
];
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
|
|
||||||
if (File::isDirectory($temp_path)) {
|
|
||||||
// Delete temp directory
|
|
||||||
File::deleteDirectory($temp_path);
|
|
||||||
File::deleteDirectory($temp_path2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => false,
|
|
||||||
'error' => 'Update error',
|
|
||||||
'data' => []
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $zip_file_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function unzip($zip_file_path)
|
||||||
|
{
|
||||||
|
if(!file_exists($zip_file_path)) {
|
||||||
|
throw new \Exception('Zip file not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$temp_extract_dir = storage_path('app/temp2-' . md5(mt_rand()));
|
||||||
|
|
||||||
|
if (!File::isDirectory($temp_extract_dir)) {
|
||||||
|
File::makeDirectory($temp_extract_dir);
|
||||||
|
}
|
||||||
|
// Unzip the file
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
|
||||||
|
if ($zip->open($zip_file_path)) {
|
||||||
|
$zip->extractTo($temp_extract_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->close();
|
||||||
|
|
||||||
|
// Delete zip file
|
||||||
|
File::delete($zip_file_path);
|
||||||
|
|
||||||
|
return $temp_extract_dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function copyFiles($temp_extract_dir)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!File::copyDirectory($temp_extract_dir . '/Crater', base_path())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete temp directory
|
||||||
|
File::deleteDirectory($temp_extract_dir);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function migrateUpdate()
|
||||||
|
{
|
||||||
|
Artisan::call('migrate --force');
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function finishUpdate($installed, $version)
|
public static function finishUpdate($installed, $version)
|
||||||
@ -112,17 +134,4 @@ class Updater
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function checkForUpdate()
|
|
||||||
{
|
|
||||||
$data = null;
|
|
||||||
$url = 'https://craterapp.com/downloads/check/latest/'. Setting::getSetting('version') . '?type=update';
|
|
||||||
|
|
||||||
$response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]);
|
|
||||||
|
|
||||||
if ($response && ($response->getStatusCode() == 200)) {
|
|
||||||
$data = $response->getBody()->getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
return json_decode($data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
26
app/Unit.php
Normal file
26
app/Unit.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Crater;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Crater\Item;
|
||||||
|
|
||||||
|
class Unit extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name', 'company_id'];
|
||||||
|
|
||||||
|
public function items()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Item::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function company()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Company::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeWhereCompany($query, $company_id)
|
||||||
|
{
|
||||||
|
$query->where('company_id', $company_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -9,6 +9,7 @@ use carbon\carbon;
|
|||||||
use Crater\MemberLoan;
|
use Crater\MemberLoan;
|
||||||
use Crater\Address;
|
use Crater\Address;
|
||||||
use Crater\Payment;
|
use Crater\Payment;
|
||||||
|
use Crater\Expense;
|
||||||
use Crater\Company;
|
use Crater\Company;
|
||||||
use Crater\Notifications\MailResetPasswordNotification;
|
use Crater\Notifications\MailResetPasswordNotification;
|
||||||
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
use Spatie\MediaLibrary\HasMedia\HasMedia;
|
||||||
@ -105,6 +106,11 @@ class User extends Authenticatable implements HasMedia
|
|||||||
return $this->hasMany(Address::class);
|
return $this->hasMany(Address::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function expenses()
|
||||||
|
{
|
||||||
|
return $this->hasMany(Expense::class);
|
||||||
|
}
|
||||||
|
|
||||||
public function billingAddress()
|
public function billingAddress()
|
||||||
{
|
{
|
||||||
return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE);
|
return $this->hasOne(Address::class)->where('type', Address::BILLING_TYPE);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "laravel/laravel",
|
"name": "bytefury/crater",
|
||||||
"description": "The Laravel Framework.",
|
"description": "Free & Open Source Invoice App for Freelancers & Small Businesses. https://craterapp.com",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"framework",
|
"framework",
|
||||||
"laravel"
|
"laravel"
|
||||||
@ -9,6 +9,7 @@
|
|||||||
"type": "project",
|
"type": "project",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2",
|
"php": "^7.2",
|
||||||
|
"aws/aws-sdk-php": "^3.137",
|
||||||
"barryvdh/laravel-dompdf": "^0.8.1",
|
"barryvdh/laravel-dompdf": "^0.8.1",
|
||||||
"doctrine/dbal": "^2.10",
|
"doctrine/dbal": "^2.10",
|
||||||
"fideloper/proxy": "^4.0",
|
"fideloper/proxy": "^4.0",
|
||||||
@ -53,11 +54,20 @@
|
|||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"initial-setup": [
|
||||||
|
"test -f .env || (cp .env.example .env; php artisan key:generate 2>/dev/null; exit 0)"
|
||||||
|
],
|
||||||
|
"pre-install-cmd": [
|
||||||
|
"@initial-setup"
|
||||||
|
],
|
||||||
|
"pre-update-cmd": [
|
||||||
|
"@initial-setup"
|
||||||
|
],
|
||||||
"post-root-package-install": [
|
"post-root-package-install": [
|
||||||
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
"@initial-setup"
|
||||||
],
|
],
|
||||||
"post-create-project-cmd": [
|
"post-create-project-cmd": [
|
||||||
"php artisan key:generate --ansi"
|
"@initial-setup"
|
||||||
],
|
],
|
||||||
"post-autoload-dump": [
|
"post-autoload-dump": [
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||||
|
|||||||
1719
composer.lock
generated
1719
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -9,6 +9,6 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'version' => '2.1.0',
|
'version' => '3.1.0',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
36
database/migrations/2017_04_11_064308_create_units_table.php
Normal file
36
database/migrations/2017_04_11_064308_create_units_table.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateUnitsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
if (!Schema::hasTable('units')) {
|
||||||
|
Schema::create('units', function (Blueprint $table) {
|
||||||
|
$table->increments('id');
|
||||||
|
$table->string('name');
|
||||||
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('units');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,6 +21,8 @@ class CreateItemsTable extends Migration
|
|||||||
$table->unsignedBigInteger('price');
|
$table->unsignedBigInteger('price');
|
||||||
$table->integer('company_id')->unsigned()->nullable();
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
||||||
|
$table->integer('unit_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('unit_id')->references('id')->on('units')->onDelete('cascade');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,6 +30,6 @@ class CreateExpenseCategoriesTable extends Migration
|
|||||||
*/
|
*/
|
||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('expenses_categories');
|
Schema::dropIfExists('expense_categories');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,6 @@ class CreateAddressesTable extends Migration
|
|||||||
*/
|
*/
|
||||||
public function down()
|
public function down()
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('address');
|
Schema::dropIfExists('addresses');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreatePaymentMethodsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
if (!Schema::hasTable('payment_methods')) {
|
||||||
|
Schema::create('payment_methods', function (Blueprint $table) {
|
||||||
|
$table->increments('id');
|
||||||
|
$table->string('name');
|
||||||
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('payment_methods');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -16,16 +16,18 @@ class CreatePaymentsTable extends Migration
|
|||||||
Schema::create('payments', function (Blueprint $table) {
|
Schema::create('payments', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->string('payment_number');
|
$table->string('payment_number');
|
||||||
$table->string('payment_mode')->nullable();
|
|
||||||
$table->date('payment_date');
|
$table->date('payment_date');
|
||||||
$table->text('notes')->nullable();
|
$table->text('notes')->nullable();
|
||||||
$table->unsignedBigInteger('amount');
|
$table->unsignedBigInteger('amount');
|
||||||
|
$table->string('unique_hash')->nullable();
|
||||||
$table->integer('user_id')->unsigned();
|
$table->integer('user_id')->unsigned();
|
||||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||||
$table->integer('invoice_id')->unsigned()->nullable();
|
$table->integer('invoice_id')->unsigned()->nullable();
|
||||||
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
|
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
|
||||||
$table->integer('company_id')->unsigned()->nullable();
|
$table->integer('company_id')->unsigned()->nullable();
|
||||||
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
$table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
|
||||||
|
$table->integer('payment_method_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('payment_method_id')->references('id')->on('payment_methods')->onDelete('cascade');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddUserIdToExpensesTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('expenses', function (Blueprint $table) {
|
||||||
|
$table->integer('user_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('expenses', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('paid');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -524,6 +524,22 @@ class CurrenciesTableSeeder extends Seeder
|
|||||||
'thousand_separator' => '.',
|
'thousand_separator' => '.',
|
||||||
'decimal_separator' => ','
|
'decimal_separator' => ','
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Serbian Dinar',
|
||||||
|
'code' => 'RSD',
|
||||||
|
'symbol' => 'RSD',
|
||||||
|
'precision' => '2',
|
||||||
|
'thousand_separator' => '.',
|
||||||
|
'decimal_separator' => ','
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'Kyrgyzstani som',
|
||||||
|
'code' => 'KGS',
|
||||||
|
'symbol' => 'С̲ ',
|
||||||
|
'precision' => '2',
|
||||||
|
'thousand_separator' => '.',
|
||||||
|
'decimal_separator' => ','
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($currencies as $currency) {
|
foreach ($currencies as $currency) {
|
||||||
|
|||||||
20
database/seeds/PaymentMethodSeeder.php
Normal file
20
database/seeds/PaymentMethodSeeder.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Crater\PaymentMethod;
|
||||||
|
|
||||||
|
class PaymentMethodSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
PaymentMethod::create(['name' => 'Cash', 'company_id' => 1]);
|
||||||
|
PaymentMethod::create(['name' => 'Check', 'company_id' => 1]);
|
||||||
|
PaymentMethod::create(['name' => 'Credit Card', 'company_id' => 1]);
|
||||||
|
PaymentMethod::create(['name' => 'Bank Transfer', 'company_id' => 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
27
database/seeds/UnitSeeder.php
Normal file
27
database/seeds/UnitSeeder.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use Crater\Unit;
|
||||||
|
|
||||||
|
class UnitSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
Unit::create(['name' => 'box', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'cm', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'dz', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'ft', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'g', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'in', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'kg', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'km', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'lb', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'mg', 'company_id' => 1]);
|
||||||
|
Unit::create(['name' => 'pc', 'company_id' => 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
5020
package-lock.json
generated
5020
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
24
package.json
24
package.json
@ -8,19 +8,16 @@
|
|||||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^8.2.3",
|
"babel-eslint": "^8.2.6",
|
||||||
"browser-sync": "^2.26.7",
|
|
||||||
"browser-sync-webpack-plugin": "^2.0.1",
|
|
||||||
"cross-env": "^5.1",
|
"cross-env": "^5.1",
|
||||||
"css-loader": "^0.28.8",
|
"css-loader": "^0.28.8",
|
||||||
"eslint": "^4.14.0",
|
"eslint": "^4.19.1",
|
||||||
"eslint-config-standard": "^11.0.0-beta.0",
|
"eslint-config-prettier": "^6.10.1",
|
||||||
"eslint-plugin-import": "^2.11.0",
|
"eslint-loader": "^3.0.3",
|
||||||
"eslint-plugin-node": "^5.2.1",
|
"eslint-plugin-prettier": "^3.1.2",
|
||||||
"eslint-plugin-promise": "^3.6.0",
|
"eslint-plugin-vue": "^4.7.1",
|
||||||
"eslint-plugin-standard": "^3.0.1",
|
|
||||||
"eslint-plugin-vue": "^4.0.1",
|
|
||||||
"laravel-mix": "^5.0.0",
|
"laravel-mix": "^5.0.0",
|
||||||
|
"prettier": "^2.0.2",
|
||||||
"resolve-url-loader": "3.1.0",
|
"resolve-url-loader": "3.1.0",
|
||||||
"sass": "^1.22.9",
|
"sass": "^1.22.9",
|
||||||
"sass-loader": "7.*",
|
"sass-loader": "7.*",
|
||||||
@ -35,19 +32,14 @@
|
|||||||
"axios": "^0.19",
|
"axios": "^0.19",
|
||||||
"bootstrap": "^4.1.0",
|
"bootstrap": "^4.1.0",
|
||||||
"chart.js": "^2.7.3",
|
"chart.js": "^2.7.3",
|
||||||
"cross-env": "^5.1.4",
|
|
||||||
"easy-pie-chart": "^2.1.7",
|
|
||||||
"fs": "0.0.1-security",
|
|
||||||
"guid": "0.0.12",
|
"guid": "0.0.12",
|
||||||
"lodash": "^4.17.13",
|
"lodash": "^4.17.13",
|
||||||
"moment": "^2.18.1",
|
"moment": "^2.18.1",
|
||||||
"npm": "^6.4.1",
|
|
||||||
"popper.js": "^1.12.9",
|
|
||||||
"sweet-modal-vue": "^2.0.0",
|
"sweet-modal-vue": "^2.0.0",
|
||||||
"sweetalert": "^2.1.2",
|
"sweetalert": "^2.1.2",
|
||||||
"toastr": "^2.1.4",
|
"toastr": "^2.1.4",
|
||||||
"upgrade": "^1.1.0",
|
|
||||||
"v-money": "^0.8.1",
|
"v-money": "^0.8.1",
|
||||||
|
"v-tooltip": "^2.0.2",
|
||||||
"vue": "^2.5.17",
|
"vue": "^2.5.17",
|
||||||
"vue-avatar-cropper": "^1.0.5",
|
"vue-avatar-cropper": "^1.0.5",
|
||||||
"vue-i18n": "^8.14.0",
|
"vue-i18n": "^8.14.0",
|
||||||
|
|||||||
4
public/assets/css/crater.css
vendored
4
public/assets/css/crater.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"/assets/js/app.js": "/assets/js/app.js?id=a9f802b3fe774e87bf0c",
|
"/assets/js/app.js": "/assets/js/app.js?id=2521d0dcc4cb4e4975a5",
|
||||||
"/assets/css/crater.css": "/assets/css/crater.css?id=193e5770a0e7a8604f35"
|
"/assets/css/crater.css": "/assets/css/crater.css?id=84a4eeb53b0e6a937e44"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,10 +62,12 @@ Crater is a product of [Bytefury](https://bytefury.com)
|
|||||||
|
|
||||||
**Special thanks to:**
|
**Special thanks to:**
|
||||||
* [Birkhoff Lee](https://github.com/BirkhoffLee)
|
* [Birkhoff Lee](https://github.com/BirkhoffLee)
|
||||||
|
* [Hassan A. Ba Abdullah](https://github.com/hsnapps)
|
||||||
|
|
||||||
## Translate
|
## Translate
|
||||||
Help us translate on [Transifex](https://www.transifex.com/bytefury/crater-invoice)
|
Help us translate or suggest changes to existing languages if you find any mistakes by creating a new PR.
|
||||||
|
|
||||||
|
Here's the [english-version](https://github.com/bytefury/crater/blob/master/resources/assets/js/plugins/en.json) json file which you can use as a reference.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Crater is released under the Attribution Assurance License.
|
Crater is released under the Attribution Assurance License.
|
||||||
|
|||||||
24
resources/assets/js/bootstrap.js
vendored
24
resources/assets/js/bootstrap.js
vendored
@ -12,6 +12,7 @@ import CustomerModal from './components/base/modal/CustomerModal.vue'
|
|||||||
import TaxTypeModal from './components/base/modal/TaxTypeModal.vue'
|
import TaxTypeModal from './components/base/modal/TaxTypeModal.vue'
|
||||||
import CategoryModal from './components/base/modal/CategoryModal.vue'
|
import CategoryModal from './components/base/modal/CategoryModal.vue'
|
||||||
import money from 'v-money'
|
import money from 'v-money'
|
||||||
|
import VTooltip from 'v-tooltip'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global css plugins
|
* Global css plugins
|
||||||
@ -87,17 +88,27 @@ window.axios.interceptors.request.use(function (config) {
|
|||||||
|
|
||||||
global.axios.interceptors.response.use(undefined, function (err) {
|
global.axios.interceptors.response.use(undefined, function (err) {
|
||||||
// Do something with request error
|
// Do something with request error
|
||||||
return new Promise((resolve, reject) => {
|
if (!err.response) {
|
||||||
|
window.toastr['error']('Network error: Please check your internet connection or wait until servers are back online')
|
||||||
|
console.log('Network error: Please check your internet connection.')
|
||||||
|
} else {
|
||||||
console.log(err.response)
|
console.log(err.response)
|
||||||
if (err.response.data.error === 'invalid_credentials') {
|
|
||||||
window.toastr['error']('Invalid Credentials')
|
|
||||||
}
|
|
||||||
if (err.response.data && (err.response.statusText === 'Unauthorized' || err.response.data === ' Unauthorized.')) {
|
if (err.response.data && (err.response.statusText === 'Unauthorized' || err.response.data === ' Unauthorized.')) {
|
||||||
|
// Unauthorized and log out
|
||||||
|
window.toastr['error']((err.response.data.message) ? err.response.data.message : 'Unauthorized')
|
||||||
store.dispatch('auth/logout', true)
|
store.dispatch('auth/logout', true)
|
||||||
|
} else if (err.response.data.errors) {
|
||||||
|
// Show a notification per error
|
||||||
|
const errors = JSON.parse(JSON.stringify(err.response.data.errors))
|
||||||
|
for (const i in errors) {
|
||||||
|
window.toastr['error'](errors[i])
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
throw err
|
// Unknown error
|
||||||
|
window.toastr['error']((err.response.data.message) ? err.response.data.message : 'Unknown error occurred')
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
return Promise.reject(err)
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,6 +118,7 @@ window.toastr = require('toastr')
|
|||||||
|
|
||||||
Vue.use(VueRouter)
|
Vue.use(VueRouter)
|
||||||
Vue.use(Vuex)
|
Vue.use(Vuex)
|
||||||
|
Vue.use(VTooltip)
|
||||||
|
|
||||||
// register directive v-money and component <money>
|
// register directive v-money and component <money>
|
||||||
Vue.use(money, {precision: 2})
|
Vue.use(money, {precision: 2})
|
||||||
|
|||||||
@ -21,6 +21,9 @@ import EstimateTemplate from './EstimateTemplate'
|
|||||||
import InvoiceTemplate from './InvoiceTemplate'
|
import InvoiceTemplate from './InvoiceTemplate'
|
||||||
import CustomerModal from './CustomerModal'
|
import CustomerModal from './CustomerModal'
|
||||||
import CategoryModal from './CategoryModal'
|
import CategoryModal from './CategoryModal'
|
||||||
|
import PaymentMode from './PaymentModeModal'
|
||||||
|
import ItemUnit from './ItemUnitModal'
|
||||||
|
import MailTestModal from './MailTestModal'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -29,7 +32,10 @@ export default {
|
|||||||
EstimateTemplate,
|
EstimateTemplate,
|
||||||
InvoiceTemplate,
|
InvoiceTemplate,
|
||||||
CustomerModal,
|
CustomerModal,
|
||||||
CategoryModal
|
CategoryModal,
|
||||||
|
PaymentMode,
|
||||||
|
ItemUnit,
|
||||||
|
MailTestModal
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -341,6 +341,7 @@ export default {
|
|||||||
mixins: [validationMixin],
|
mixins: [validationMixin],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
isEdit: false,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
countryList: [],
|
countryList: [],
|
||||||
billingCountry: null,
|
billingCountry: null,
|
||||||
@ -399,9 +400,22 @@ export default {
|
|||||||
...mapGetters('currency', [
|
...mapGetters('currency', [
|
||||||
'defaultCurrency',
|
'defaultCurrency',
|
||||||
'currencies'
|
'currencies'
|
||||||
|
]),
|
||||||
|
...mapGetters('modal', [
|
||||||
|
'modalDataID',
|
||||||
|
'modalData',
|
||||||
|
'modalActive'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
'modalDataID' (val) {
|
||||||
|
if (val) {
|
||||||
|
this.isEdit = true
|
||||||
|
this.setData()
|
||||||
|
} else {
|
||||||
|
this.isEdit = false
|
||||||
|
}
|
||||||
|
},
|
||||||
billingCountry () {
|
billingCountry () {
|
||||||
if (this.billingCountry) {
|
if (this.billingCountry) {
|
||||||
this.billing.country_id = this.billingCountry.id
|
this.billing.country_id = this.billingCountry.id
|
||||||
@ -419,6 +433,9 @@ export default {
|
|||||||
this.$refs.name.focus = true
|
this.$refs.name.focus = true
|
||||||
this.currency = this.defaultCurrency
|
this.currency = this.defaultCurrency
|
||||||
this.fetchCountry()
|
this.fetchCountry()
|
||||||
|
if (this.modalDataID) {
|
||||||
|
this.setData()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions('invoice', {
|
...mapActions('invoice', {
|
||||||
@ -493,6 +510,24 @@ export default {
|
|||||||
this.formData.addresses = [{...this.shipping, type: 'shipping'}]
|
this.formData.addresses = [{...this.shipping, type: 'shipping'}]
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
|
async setData () {
|
||||||
|
this.formData.id = this.modalData.id
|
||||||
|
this.formData.name = this.modalData.name
|
||||||
|
this.formData.email = this.modalData.email
|
||||||
|
this.formData.contact_name = this.modalData.contact_name
|
||||||
|
this.formData.phone = this.modalData.phone
|
||||||
|
this.formData.website = this.modalData.website
|
||||||
|
this.currency = this.modalData.currency
|
||||||
|
|
||||||
|
if (this.modalData.billing_address) {
|
||||||
|
this.billing = this.modalData.billing_address
|
||||||
|
this.billingCountry = this.modalData.billing_address.country
|
||||||
|
}
|
||||||
|
if (this.modalData.shipping_address) {
|
||||||
|
this.shipping = this.modalData.shipping_address
|
||||||
|
this.shippingCountry = this.modalData.shipping_address.country
|
||||||
|
}
|
||||||
|
},
|
||||||
async submitCustomerData () {
|
async submitCustomerData () {
|
||||||
this.$v.formData.$touch()
|
this.$v.formData.$touch()
|
||||||
|
|
||||||
@ -510,14 +545,23 @@ export default {
|
|||||||
this.formData.currency_id = this.defaultCurrency.id
|
this.formData.currency_id = this.defaultCurrency.id
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
let response = await this.addCustomer(this.formData)
|
let response = null
|
||||||
|
if (this.modalDataID) {
|
||||||
|
response = await this.updateCustomer(this.formData)
|
||||||
|
} else {
|
||||||
|
response = await this.addCustomer(this.formData)
|
||||||
|
}
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
window.toastr['success'](this.$tc('customers.created_message'))
|
if (this.modalDataID) {
|
||||||
|
window.toastr['success'](this.$tc('customers.updated_message'))
|
||||||
|
} else {
|
||||||
|
window.toastr['success'](this.$tc('customers.created_message'))
|
||||||
|
}
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
if (this.$route.name === 'invoices.create') {
|
if (this.$route.name === 'invoices.create' || this.$route.name === 'invoices.edit') {
|
||||||
this.setInvoiceCustomer(response.data.customer.id)
|
this.setInvoiceCustomer(response.data.customer.id)
|
||||||
}
|
}
|
||||||
if (this.$route.name === 'estimates.create') {
|
if (this.$route.name === 'estimates.create' || this.$route.name === 'estimates.edit') {
|
||||||
this.setEstimateCustomer(response.data.customer.id)
|
this.setEstimateCustomer(response.data.customer.id)
|
||||||
}
|
}
|
||||||
this.resetData()
|
this.resetData()
|
||||||
|
|||||||
@ -45,14 +45,34 @@
|
|||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
<base-select
|
<base-select
|
||||||
v-model="formData.unit"
|
v-model="formData.unit"
|
||||||
:options="units"
|
:options="itemUnits"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
:show-labels="false"
|
:show-labels="false"
|
||||||
label="name"
|
label="name"
|
||||||
|
>
|
||||||
|
<div slot="afterList">
|
||||||
|
<button type="button" class="list-add-button" @click="addItemUnit">
|
||||||
|
<font-awesome-icon class="icon" icon="cart-plus" />
|
||||||
|
<label>{{ $t('settings.customization.items.add_item_unit') }}</label>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</base-select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="isTexPerItem" class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('items.taxes') }}</label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<base-select
|
||||||
|
v-model="formData.taxes"
|
||||||
|
:options="getTaxTypes"
|
||||||
|
:searchable="true"
|
||||||
|
:show-labels="false"
|
||||||
|
:allow-empty="true"
|
||||||
|
:multiple="true"
|
||||||
|
label="tax_name"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-4 col-form-label input-label">{{ $t('items.description') }}</label>
|
<label class="col-sm-4 col-form-label input-label">{{ $t('items.description') }}</label>
|
||||||
<div class="col-sm-7">
|
<div class="col-sm-7">
|
||||||
@ -124,11 +144,13 @@ export default {
|
|||||||
{ name: 'mg', value: 'mg' },
|
{ name: 'mg', value: 'mg' },
|
||||||
{ name: 'pc', value: 'pc' }
|
{ name: 'pc', value: 'pc' }
|
||||||
],
|
],
|
||||||
|
taxes: [],
|
||||||
formData: {
|
formData: {
|
||||||
name: null,
|
name: null,
|
||||||
price: null,
|
price: null,
|
||||||
description: null,
|
description: null,
|
||||||
unit: null
|
unit: null,
|
||||||
|
taxes: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -161,12 +183,28 @@ export default {
|
|||||||
this.formData.price = newValue * 100
|
this.formData.price = newValue * 100
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// itemUnits () {
|
||||||
|
// return this.units
|
||||||
|
// },
|
||||||
...mapGetters('modal', [
|
...mapGetters('modal', [
|
||||||
'modalDataID'
|
'modalDataID',
|
||||||
|
'modalData'
|
||||||
]),
|
]),
|
||||||
...mapGetters('item', [
|
...mapGetters('item', [
|
||||||
'getItemById'
|
'getItemById',
|
||||||
])
|
'itemUnits'
|
||||||
|
]),
|
||||||
|
...mapGetters('taxType', [
|
||||||
|
'taxTypes'
|
||||||
|
]),
|
||||||
|
isTexPerItem () {
|
||||||
|
return this.modalData.taxPerItem === 'YES'
|
||||||
|
},
|
||||||
|
getTaxTypes () {
|
||||||
|
return this.taxTypes.map(tax => {
|
||||||
|
return {...tax, tax_name: tax.name + ' (' + tax.percent + '%)'}
|
||||||
|
})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
modalDataID () {
|
modalDataID () {
|
||||||
@ -179,12 +217,17 @@ export default {
|
|||||||
this.isEdit = true
|
this.isEdit = true
|
||||||
this.fetchEditData()
|
this.fetchEditData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isEdit) {
|
||||||
|
this.loadEditData()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
this.$refs.name.focus = true
|
this.$refs.name.focus = true
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions('modal', [
|
...mapActions('modal', [
|
||||||
|
'openModal',
|
||||||
'closeModal',
|
'closeModal',
|
||||||
'resetModalData'
|
'resetModalData'
|
||||||
]),
|
]),
|
||||||
@ -203,7 +246,6 @@ export default {
|
|||||||
unit: null,
|
unit: null,
|
||||||
id: null
|
id: null
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$v.$reset()
|
this.$v.$reset()
|
||||||
},
|
},
|
||||||
fetchEditData () {
|
fetchEditData () {
|
||||||
@ -230,9 +272,20 @@ export default {
|
|||||||
if (this.isEdit) {
|
if (this.isEdit) {
|
||||||
response = await this.updateItem(this.formData)
|
response = await this.updateItem(this.formData)
|
||||||
} else {
|
} else {
|
||||||
response = await this.addItem(this.formData)
|
let data = {
|
||||||
|
...this.formData,
|
||||||
|
taxes: this.formData.taxes.map(tax => {
|
||||||
|
return {
|
||||||
|
tax_type_id: tax.id,
|
||||||
|
amount: ((this.formData.price * tax.percent) / 100),
|
||||||
|
percent: tax.percent,
|
||||||
|
name: tax.name,
|
||||||
|
collective_tax: 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
response = await this.addItem(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
window.toastr['success'](this.$tc('items.created_message'))
|
window.toastr['success'](this.$tc('items.created_message'))
|
||||||
this.setItem(response.data.item)
|
this.setItem(response.data.item)
|
||||||
@ -245,6 +298,12 @@ export default {
|
|||||||
}
|
}
|
||||||
window.toastr['error'](response.data.error)
|
window.toastr['error'](response.data.error)
|
||||||
},
|
},
|
||||||
|
async addItemUnit () {
|
||||||
|
this.openModal({
|
||||||
|
'title': 'Add Item Unit',
|
||||||
|
'componentName': 'ItemUnit'
|
||||||
|
})
|
||||||
|
},
|
||||||
closeItemModal () {
|
closeItemModal () {
|
||||||
this.resetFormData()
|
this.resetFormData()
|
||||||
this.closeModal()
|
this.closeModal()
|
||||||
|
|||||||
148
resources/assets/js/components/base/modal/ItemUnitModal.vue
Normal file
148
resources/assets/js/components/base/modal/ItemUnitModal.vue
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
<template>
|
||||||
|
<div class="item-unit-modal">
|
||||||
|
<form action="" @submit.prevent="submitItemUnit">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('settings.customization.items.unit_name') }} <span class="required"> *</span></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<base-input
|
||||||
|
ref="name"
|
||||||
|
:invalid="$v.formData.name.$error"
|
||||||
|
v-model="formData.name"
|
||||||
|
type="text"
|
||||||
|
@input="$v.formData.name.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.formData.name.$error">
|
||||||
|
<span v-if="!$v.formData.name.required" class="form-group__message text-danger">{{ $tc('validation.required') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<base-button
|
||||||
|
:outline="true"
|
||||||
|
class="mr-3"
|
||||||
|
color="theme"
|
||||||
|
type="button"
|
||||||
|
@click="closePaymentModeModal"
|
||||||
|
>
|
||||||
|
{{ $t('general.cancel') }}
|
||||||
|
</base-button>
|
||||||
|
<base-button
|
||||||
|
:loading="isLoading"
|
||||||
|
color="theme"
|
||||||
|
icon="save"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{{ !isEdit ? $t('general.save') : $t('general.update') }}
|
||||||
|
</base-button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapActions, mapGetters } from 'vuex'
|
||||||
|
import { validationMixin } from 'vuelidate'
|
||||||
|
const { required, minLength } = require('vuelidate/lib/validators')
|
||||||
|
export default {
|
||||||
|
mixins: [validationMixin],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
isEdit: false,
|
||||||
|
isLoading: false,
|
||||||
|
formData: {
|
||||||
|
id: null,
|
||||||
|
name: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters('modal', [
|
||||||
|
'modalDataID',
|
||||||
|
'modalData',
|
||||||
|
'modalActive'
|
||||||
|
])
|
||||||
|
},
|
||||||
|
validations: {
|
||||||
|
formData: {
|
||||||
|
name: {
|
||||||
|
required,
|
||||||
|
minLength: minLength(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted () {
|
||||||
|
this.$refs.name.focus = true
|
||||||
|
if (this.modalDataID) {
|
||||||
|
this.isEdit = true
|
||||||
|
this.setData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions('modal', [
|
||||||
|
'closeModal',
|
||||||
|
'resetModalData'
|
||||||
|
]),
|
||||||
|
...mapActions('item', [
|
||||||
|
'addItemUnit',
|
||||||
|
'updateItemUnit',
|
||||||
|
'fatchItemUnit'
|
||||||
|
]),
|
||||||
|
resetFormData () {
|
||||||
|
this.formData = {
|
||||||
|
id: null,
|
||||||
|
name: null
|
||||||
|
}
|
||||||
|
this.$v.formData.$reset()
|
||||||
|
},
|
||||||
|
async submitItemUnit () {
|
||||||
|
this.$v.formData.$touch()
|
||||||
|
if (this.$v.$invalid) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
this.isLoading = true
|
||||||
|
|
||||||
|
let response
|
||||||
|
|
||||||
|
if (this.isEdit) {
|
||||||
|
response = await this.updateItemUnit(this.formData)
|
||||||
|
|
||||||
|
if (response.data) {
|
||||||
|
window.toastr['success'](this.$t('settings.customization.items.item_unit_updated'))
|
||||||
|
this.closePaymentModeModal()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
window.toastr['error'](response.data.error)
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
response = await this.addItemUnit(this.formData)
|
||||||
|
if (response.data) {
|
||||||
|
this.isLoading = false
|
||||||
|
window.toastr['success'](this.$t('settings.customization.items.item_unit_added'))
|
||||||
|
this.closePaymentModeModal()
|
||||||
|
return true
|
||||||
|
} window.toastr['error'](response.data.error)
|
||||||
|
} catch (err) {
|
||||||
|
if (err.response.data.errors.name) {
|
||||||
|
this.isLoading = true
|
||||||
|
window.toastr['error'](this.$t('validation.item_unit_already_taken'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async setData () {
|
||||||
|
this.formData = {
|
||||||
|
id: this.modalData.id,
|
||||||
|
name: this.modalData.name
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closePaymentModeModal () {
|
||||||
|
this.resetModalData()
|
||||||
|
this.resetFormData()
|
||||||
|
this.closeModal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
166
resources/assets/js/components/base/modal/MailTestModal.vue
Normal file
166
resources/assets/js/components/base/modal/MailTestModal.vue
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
<template>
|
||||||
|
<div class="mail-test-modal">
|
||||||
|
<form action="" @submit.prevent="onTestMailSend">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('general.to') }} <span class="required"> *</span></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<base-input
|
||||||
|
ref="to"
|
||||||
|
:invalid="$v.formData.to.$error"
|
||||||
|
v-model="formData.to"
|
||||||
|
type="text"
|
||||||
|
@input="$v.formData.to.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.formData.to.$error">
|
||||||
|
<span v-if="!$v.formData.to.required" class="form-group__message text-danger">{{ $tc('validation.required') }}</span>
|
||||||
|
<span v-if="!$v.formData.to.email" class="form-group__message text-danger"> {{ $t('validation.email_incorrect') }} </span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('general.subject') }} <span class="required"> *</span></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<div class="base-input">
|
||||||
|
<base-input
|
||||||
|
:invalid="$v.formData.subject.$error"
|
||||||
|
v-model="formData.subject"
|
||||||
|
type="text"
|
||||||
|
@input="$v.formData.subject.$touch()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div v-if="$v.formData.subject.$error">
|
||||||
|
<span v-if="!$v.formData.subject.required" class="text-danger">{{ $t('validation.required') }}</span>
|
||||||
|
<span v-if="!$v.formData.subject.maxLength" class="text-danger">{{ $t('validation.subject_maxlength') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('general.message') }}<span class="required"> *</span></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<base-text-area
|
||||||
|
v-model="formData.message"
|
||||||
|
:invalid="$v.formData.message.$error"
|
||||||
|
rows="4"
|
||||||
|
cols="50"
|
||||||
|
@input="$v.formData.message.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.formData.message.$error">
|
||||||
|
<span v-if="!$v.formData.message.required" class="text-danger">{{ $t('validation.required') }}</span>
|
||||||
|
<span v-if="!$v.formData.message.maxLength" class="text-danger">{{ $t('validation.message_maxlength') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<base-button
|
||||||
|
:outline="true"
|
||||||
|
class="mr-3"
|
||||||
|
color="theme"
|
||||||
|
type="button"
|
||||||
|
@click="closeTaxModal"
|
||||||
|
>
|
||||||
|
{{ $t('general.cancel') }}
|
||||||
|
</base-button>
|
||||||
|
<base-button
|
||||||
|
:loading="isLoading"
|
||||||
|
color="theme"
|
||||||
|
icon="save"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{{ !isEdit ? $t('general.save') : $t('general.update') }}
|
||||||
|
</base-button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapActions, mapGetters } from 'vuex'
|
||||||
|
import { validationMixin } from 'vuelidate'
|
||||||
|
const { required, minLength, email, maxLength } = require('vuelidate/lib/validators')
|
||||||
|
export default {
|
||||||
|
mixins: [validationMixin],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
isEdit: false,
|
||||||
|
isLoading: false,
|
||||||
|
formData: {
|
||||||
|
to: null,
|
||||||
|
subject: null,
|
||||||
|
message: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters('modal', [
|
||||||
|
'modalDataID',
|
||||||
|
'modalData',
|
||||||
|
'modalActive'
|
||||||
|
])
|
||||||
|
},
|
||||||
|
validations: {
|
||||||
|
formData: {
|
||||||
|
to: {
|
||||||
|
required,
|
||||||
|
email
|
||||||
|
},
|
||||||
|
subject: {
|
||||||
|
required,
|
||||||
|
maxLength: maxLength(100)
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
required,
|
||||||
|
maxLength: maxLength(255)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted () {
|
||||||
|
this.$refs.to.focus = true
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions('modal', [
|
||||||
|
'closeModal',
|
||||||
|
'resetModalData'
|
||||||
|
]),
|
||||||
|
resetFormData () {
|
||||||
|
this.formData = {
|
||||||
|
to: null,
|
||||||
|
subject: null,
|
||||||
|
message: null
|
||||||
|
}
|
||||||
|
this.$v.formData.$reset()
|
||||||
|
},
|
||||||
|
async onTestMailSend () {
|
||||||
|
this.$v.formData.$touch()
|
||||||
|
|
||||||
|
if (this.$v.$invalid) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isLoading = true
|
||||||
|
let response = await axios.post('/api/settings/test/mail', this.formData)
|
||||||
|
if (response.data) {
|
||||||
|
|
||||||
|
if (response.data.success) {
|
||||||
|
window.toastr['success'](this.$tc('general.send_mail_successfully'))
|
||||||
|
this.closeTaxModal()
|
||||||
|
this.isLoading = false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
window.toastr['error'](this.$tc('validation.something_went_wrong'))
|
||||||
|
this.closeTaxModal()
|
||||||
|
this.isLoading = false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
window.toastr['error'](response.data.error)
|
||||||
|
},
|
||||||
|
closeTaxModal () {
|
||||||
|
this.resetModalData()
|
||||||
|
this.resetFormData()
|
||||||
|
this.closeModal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
143
resources/assets/js/components/base/modal/PaymentModeModal.vue
Normal file
143
resources/assets/js/components/base/modal/PaymentModeModal.vue
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<div class="payment-modes-modal">
|
||||||
|
<form action="" @submit.prevent="submitPaymentMode">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label class="col-sm-4 col-form-label input-label">{{ $t('settings.customization.payments.mode_name') }} <span class="required"> *</span></label>
|
||||||
|
<div class="col-sm-7">
|
||||||
|
<base-input
|
||||||
|
ref="name"
|
||||||
|
:invalid="$v.formData.name.$error"
|
||||||
|
v-model="formData.name"
|
||||||
|
type="text"
|
||||||
|
@input="$v.formData.name.$touch()"
|
||||||
|
/>
|
||||||
|
<div v-if="$v.formData.name.$error">
|
||||||
|
<span v-if="!$v.formData.name.required" class="form-group__message text-danger">{{ $tc('validation.required') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<base-button
|
||||||
|
:outline="true"
|
||||||
|
class="mr-3"
|
||||||
|
color="theme"
|
||||||
|
type="button"
|
||||||
|
@click="closePaymentModeModal"
|
||||||
|
>
|
||||||
|
{{ $t('general.cancel') }}
|
||||||
|
</base-button>
|
||||||
|
<base-button
|
||||||
|
:loading="isLoading"
|
||||||
|
color="theme"
|
||||||
|
icon="save"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{{ !isEdit ? $t('general.save') : $t('general.update') }}
|
||||||
|
</base-button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapActions, mapGetters } from 'vuex'
|
||||||
|
import { validationMixin } from 'vuelidate'
|
||||||
|
const { required, minLength } = require('vuelidate/lib/validators')
|
||||||
|
|
||||||
|
export default {
|
||||||
|
mixins: [validationMixin],
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
isEdit: false,
|
||||||
|
isLoading: false,
|
||||||
|
formData: {
|
||||||
|
id: null,
|
||||||
|
name: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters('modal', [
|
||||||
|
'modalDataID',
|
||||||
|
'modalData',
|
||||||
|
'modalActive'
|
||||||
|
])
|
||||||
|
},
|
||||||
|
validations: {
|
||||||
|
formData: {
|
||||||
|
name: {
|
||||||
|
required,
|
||||||
|
minLength: minLength(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted () {
|
||||||
|
this.$refs.name.focus = true
|
||||||
|
if (this.modalDataID) {
|
||||||
|
this.isEdit = true
|
||||||
|
this.setData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions('modal', [
|
||||||
|
'closeModal',
|
||||||
|
'resetModalData'
|
||||||
|
]),
|
||||||
|
...mapActions('payment', [
|
||||||
|
'addPaymentMode',
|
||||||
|
'updatePaymentMode'
|
||||||
|
]),
|
||||||
|
resetFormData () {
|
||||||
|
this.formData = {
|
||||||
|
id: null,
|
||||||
|
name: null
|
||||||
|
}
|
||||||
|
this.$v.formData.$reset()
|
||||||
|
},
|
||||||
|
async submitPaymentMode () {
|
||||||
|
this.$v.formData.$touch()
|
||||||
|
if (this.$v.$invalid) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
this.isLoading = true
|
||||||
|
let response
|
||||||
|
if (this.isEdit) {
|
||||||
|
response = await this.updatePaymentMode(this.formData)
|
||||||
|
if (response.data) {
|
||||||
|
window.toastr['success'](this.$t('settings.customization.payments.payment_mode_updated'))
|
||||||
|
this.closePaymentModeModal()
|
||||||
|
return true
|
||||||
|
} window.toastr['error'](response.data.error)
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
response = await this.addPaymentMode(this.formData)
|
||||||
|
if (response.data) {
|
||||||
|
this.isLoading = false
|
||||||
|
window.toastr['success'](this.$t('settings.customization.payments.payment_mode_added'))
|
||||||
|
this.closePaymentModeModal()
|
||||||
|
return true
|
||||||
|
} window.toastr['error'](response.data.error)
|
||||||
|
} catch (err) {
|
||||||
|
if (err.response.data.errors.name) {
|
||||||
|
this.isLoading = true
|
||||||
|
window.toastr['error'](this.$t('validation.payment_mode_already_taken'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async setData () {
|
||||||
|
this.formData = {
|
||||||
|
id: this.modalData.id,
|
||||||
|
name: this.modalData.name
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closePaymentModeModal () {
|
||||||
|
this.resetModalData()
|
||||||
|
this.resetFormData()
|
||||||
|
this.closeModal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -1,69 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="graph-container">
|
|
||||||
<canvas
|
|
||||||
id="graph"
|
|
||||||
ref="graph"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Chart from 'chart.js'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
labels: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
values: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted () {
|
|
||||||
let context = this.$refs.graph.getContext('2d')
|
|
||||||
let options = {
|
|
||||||
responsive: true,
|
|
||||||
maintainAspectRatio: false,
|
|
||||||
legend: {
|
|
||||||
display: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = {
|
|
||||||
labels: this.labels,
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
label: 'My First dataset',
|
|
||||||
backgroundColor: 'rgba(79, 196, 127,0.2)',
|
|
||||||
borderColor: 'rgba(79, 196, 127,1)',
|
|
||||||
borderWidth: 1,
|
|
||||||
hoverBackgroundColor: 'rgba(79, 196, 127,0.4)',
|
|
||||||
hoverBorderColor: 'rgba(79, 196, 127,1)',
|
|
||||||
data: this.values
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
this.myBarChart = new Chart(context, {
|
|
||||||
type: 'bar',
|
|
||||||
data: data,
|
|
||||||
options: options
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeDestroy () {
|
|
||||||
this.myBarChart.destroy()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.graph-container {
|
|
||||||
height: 300px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="graph-container">
|
|
||||||
<canvas
|
|
||||||
id="graph"
|
|
||||||
ref="graph"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Chart from 'chart.js'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
labels: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
values: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
bgColors: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
hoverBgColors: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted () {
|
|
||||||
let context = this.$refs.graph.getContext('2d')
|
|
||||||
let options = {
|
|
||||||
responsive: true,
|
|
||||||
maintainAspectRatio: false
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = {
|
|
||||||
labels: this.labels,
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
data: this.values,
|
|
||||||
backgroundColor: this.bgColors,
|
|
||||||
hoverBackgroundColor: this.hoverBgColors
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
this.myDoughnutChart = new Chart(context, {
|
|
||||||
type: 'doughnut',
|
|
||||||
data: data,
|
|
||||||
options: options
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeDestroy () {
|
|
||||||
this.myDoughnutChart.destroy()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.graph-container {
|
|
||||||
height: 300px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,8 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="graph-container">
|
<div class="graph-container">
|
||||||
<canvas
|
<canvas id="graph" ref="graph" />
|
||||||
id="graph"
|
|
||||||
ref="graph" />
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -16,58 +14,56 @@ export default {
|
|||||||
labels: {
|
labels: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
values: {
|
values: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
invoices: {
|
invoices: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
expenses: {
|
expenses: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
receipts: {
|
receipts: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
income: {
|
income: {
|
||||||
type: Array,
|
type: Array,
|
||||||
require: true,
|
require: true,
|
||||||
default: Array
|
default: Array,
|
||||||
},
|
},
|
||||||
formatMoney: {
|
formatMoney: {
|
||||||
type: Function,
|
type: Function,
|
||||||
require: false,
|
require: false,
|
||||||
default: Function
|
default: Function,
|
||||||
},
|
},
|
||||||
FormatGraphMoney: {
|
FormatGraphMoney: {
|
||||||
type: Function,
|
type: Function,
|
||||||
require: false,
|
require: false,
|
||||||
default: Function
|
default: Function,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters('currency', [
|
...mapGetters('currency', ['defaultCurrency']),
|
||||||
'defaultCurrency'
|
|
||||||
])
|
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
labels (val) {
|
labels(val) {
|
||||||
this.update()
|
this.update()
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted () {
|
mounted() {
|
||||||
let self = this
|
let self = this
|
||||||
let context = this.$refs.graph.getContext('2d')
|
let context = this.$refs.graph.getContext('2d')
|
||||||
let options = {
|
let options = {
|
||||||
@ -77,13 +73,16 @@ export default {
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
callbacks: {
|
callbacks: {
|
||||||
label: function (tooltipItem, data) {
|
label: function (tooltipItem, data) {
|
||||||
return self.FormatGraphMoney(tooltipItem.value, self.defaultCurrency)
|
return self.FormatGraphMoney(
|
||||||
}
|
tooltipItem.value * 100,
|
||||||
}
|
self.defaultCurrency
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
display: false
|
display: false,
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
let data = {
|
let data = {
|
||||||
labels: this.labels,
|
labels: this.labels,
|
||||||
@ -107,7 +106,7 @@ export default {
|
|||||||
pointHoverBorderWidth: 2,
|
pointHoverBorderWidth: 2,
|
||||||
pointRadius: 4,
|
pointRadius: 4,
|
||||||
pointHitRadius: 10,
|
pointHitRadius: 10,
|
||||||
data: this.invoices
|
data: this.invoices.map((invoice) => invoice / 100),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Receipts',
|
label: 'Receipts',
|
||||||
@ -128,7 +127,7 @@ export default {
|
|||||||
pointHoverBorderWidth: 2,
|
pointHoverBorderWidth: 2,
|
||||||
pointRadius: 4,
|
pointRadius: 4,
|
||||||
pointHitRadius: 10,
|
pointHitRadius: 10,
|
||||||
data: this.receipts
|
data: this.receipts.map((receipt) => receipt / 100),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Expenses',
|
label: 'Expenses',
|
||||||
@ -149,7 +148,7 @@ export default {
|
|||||||
pointHoverBorderWidth: 2,
|
pointHoverBorderWidth: 2,
|
||||||
pointRadius: 4,
|
pointRadius: 4,
|
||||||
pointHitRadius: 10,
|
pointHitRadius: 10,
|
||||||
data: this.expenses
|
data: this.expenses.map((expense) => expense / 100),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Net Income',
|
label: 'Net Income',
|
||||||
@ -170,34 +169,40 @@ export default {
|
|||||||
pointHoverBorderWidth: 2,
|
pointHoverBorderWidth: 2,
|
||||||
pointRadius: 4,
|
pointRadius: 4,
|
||||||
pointHitRadius: 10,
|
pointHitRadius: 10,
|
||||||
data: this.income
|
data: this.income.map((_i) => _i / 100),
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
this.myLineChart = new Chart(context, {
|
this.myLineChart = new Chart(context, {
|
||||||
type: 'line',
|
type: 'line',
|
||||||
data: data,
|
data: data,
|
||||||
options: options
|
options: options,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
update () {
|
update() {
|
||||||
this.myLineChart.data.labels = this.labels
|
this.myLineChart.data.labels = this.labels
|
||||||
this.myLineChart.data.datasets[0].data = this.invoices
|
this.myLineChart.data.datasets[0].data = this.invoices.map(
|
||||||
this.myLineChart.data.datasets[1].data = this.receipts
|
(invoice) => invoice / 100
|
||||||
this.myLineChart.data.datasets[2].data = this.expenses
|
)
|
||||||
this.myLineChart.data.datasets[3].data = this.income
|
this.myLineChart.data.datasets[1].data = this.receipts.map(
|
||||||
|
(receipt) => receipt / 100
|
||||||
|
)
|
||||||
|
this.myLineChart.data.datasets[2].data = this.expenses.map(
|
||||||
|
(expense) => expense / 100
|
||||||
|
)
|
||||||
|
this.myLineChart.data.datasets[3].data = this.income.map((_i) => _i / 100)
|
||||||
this.myLineChart.update({
|
this.myLineChart.update({
|
||||||
lazy: true
|
lazy: true,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy () {
|
beforeDestroy() {
|
||||||
this.myLineChart.destroy()
|
this.myLineChart.destroy()
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -1,72 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="graph-container">
|
|
||||||
<canvas
|
|
||||||
id="graph"
|
|
||||||
ref="graph" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Chart from 'chart.js'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
labels: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
values: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
bgColors: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
},
|
|
||||||
hoverBgColors: {
|
|
||||||
type: Array,
|
|
||||||
require: true,
|
|
||||||
default: Array
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
mounted () {
|
|
||||||
let context = this.$refs.graph.getContext('2d')
|
|
||||||
|
|
||||||
let options = {
|
|
||||||
responsive: true,
|
|
||||||
maintainAspectRatio: false
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = {
|
|
||||||
labels: this.labels,
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
data: this.values,
|
|
||||||
backgroundColor: this.bgColors,
|
|
||||||
hoverBackgroundColor: this.hoverBgColors
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
this.pieChart = new Chart(context, {
|
|
||||||
type: 'pie',
|
|
||||||
data: data,
|
|
||||||
options: options
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeDestroy () {
|
|
||||||
this.pieChart.destroy()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.graph-container {
|
|
||||||
height: 300px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,95 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="graph-container easy-pie-chart">
|
|
||||||
<svg width="100%" height="100%" viewBox="0 0 34 34" class="donut">
|
|
||||||
<circle :stroke-width="strokeWidth" class="donut-segment" cx="17" cy="17" r="15.91549430918954" fill="transparent" :stroke="strokeColor" stroke-dasharray="100 0" />
|
|
||||||
<circle :stroke-width="strokeWidth" :stroke="color" :stroke-dasharray="successProgress" class="donut-segment" cx="17" cy="17" r="15.91549430918954" fill="transparent" />
|
|
||||||
<!-- <g class="chart-text">
|
|
||||||
<text :style="'fill:' + color" x="48%" y="50%" class="chart-number" >
|
|
||||||
{{ progress }}
|
|
||||||
</text>
|
|
||||||
<text :style="'fill:' + color" x="73%" y="50%" class="chart-label" >
|
|
||||||
%
|
|
||||||
</text>
|
|
||||||
</g> -->
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
values: {
|
|
||||||
type: Number,
|
|
||||||
require: true,
|
|
||||||
default: 100
|
|
||||||
},
|
|
||||||
strokeWidth: {
|
|
||||||
type: Number,
|
|
||||||
require: false,
|
|
||||||
default: 1.2
|
|
||||||
},
|
|
||||||
strokeColor: {
|
|
||||||
type: String,
|
|
||||||
require: true,
|
|
||||||
default: '#eeeeee'
|
|
||||||
},
|
|
||||||
color: {
|
|
||||||
type: String,
|
|
||||||
require: true,
|
|
||||||
default: '#007dcc'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
progress: 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
values (newvalue, oldvalue) {
|
|
||||||
if (newvalue !== oldvalue) {
|
|
||||||
this.setProgress()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
successProgress () {
|
|
||||||
return this.progress + ' ' + (100 - this.progress)
|
|
||||||
},
|
|
||||||
remainProgress () {
|
|
||||||
return 100 - this.progress + ' ' + this.progress
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted () {
|
|
||||||
this.setProgress()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setProgress () {
|
|
||||||
let self = this
|
|
||||||
for (let i = 0; i < this.values; i++) {
|
|
||||||
setTimeout(function () {
|
|
||||||
++self.progress
|
|
||||||
}, 15 * i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped>
|
|
||||||
.chart-text {
|
|
||||||
font: 6px "Montserrat", Arial, sans-serif;
|
|
||||||
fill: #000;
|
|
||||||
-moz-transform: translateY(0.25em);
|
|
||||||
-ms-transform: translateY(0.25em);
|
|
||||||
-webkit-transform: translateY(0.25em);
|
|
||||||
transform: translateY(0.5em);
|
|
||||||
}
|
|
||||||
.chart-number {
|
|
||||||
font-size: 8px;
|
|
||||||
line-height: 1;
|
|
||||||
text-anchor: middle;
|
|
||||||
}
|
|
||||||
.chart-label {
|
|
||||||
font-size: 5px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
text-anchor: middle;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,16 +1,16 @@
|
|||||||
export default {
|
export default {
|
||||||
toggleSidebar () {
|
toggleSidebar() {
|
||||||
let icon = document.getElementsByClassName('hamburger')[0]
|
let icon = document.getElementsByClassName('hamburger')[0]
|
||||||
document.body.classList.toggle('sidebar-open')
|
document.body.classList.toggle('sidebar-open')
|
||||||
icon.classList.toggle('is-active')
|
icon.classList.toggle('is-active')
|
||||||
},
|
},
|
||||||
|
|
||||||
addClass (el, className) {
|
addClass(el, className) {
|
||||||
if (el.classList) el.classList.add(className)
|
if (el.classList) el.classList.add(className)
|
||||||
else el.className += ' ' + className
|
else el.className += ' ' + className
|
||||||
},
|
},
|
||||||
|
|
||||||
hasClass (el, className) {
|
hasClass(el, className) {
|
||||||
const hasClass = el.classList
|
const hasClass = el.classList
|
||||||
? el.classList.contains(className)
|
? el.classList.contains(className)
|
||||||
: new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)
|
: new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)
|
||||||
@ -18,33 +18,38 @@ export default {
|
|||||||
return hasClass
|
return hasClass
|
||||||
},
|
},
|
||||||
|
|
||||||
reset (prefix) {
|
reset(prefix) {
|
||||||
let regx = new RegExp('\\b' + prefix + '(.*)?\\b', 'g')
|
let regx = new RegExp('\\b' + prefix + '(.*)?\\b', 'g')
|
||||||
document.body.className = document.body.className.replace(regx, '')
|
document.body.className = document.body.className.replace(regx, '')
|
||||||
},
|
},
|
||||||
|
|
||||||
setLayout (layoutName) {
|
setLayout(layoutName) {
|
||||||
this.reset('layout-')
|
this.reset('layout-')
|
||||||
document.body.classList.add('layout-' + layoutName)
|
document.body.classList.add('layout-' + layoutName)
|
||||||
},
|
},
|
||||||
|
|
||||||
setSkin (skinName) {
|
setSkin(skinName) {
|
||||||
this.reset('skin-')
|
this.reset('skin-')
|
||||||
document.body.classList.add('skin-' + skinName)
|
document.body.classList.add('skin-' + skinName)
|
||||||
},
|
},
|
||||||
|
|
||||||
setLogo (logoSrc) {
|
setLogo(logoSrc) {
|
||||||
document.getElementById('logo-desk').src = logoSrc
|
document.getElementById('logo-desk').src = logoSrc
|
||||||
},
|
},
|
||||||
|
|
||||||
formatMoney (amount, currency = 0) {
|
formatMoney(amount, currency = 0) {
|
||||||
if (!currency) {
|
if (!currency) {
|
||||||
currency = {precision: 2, thousand_separator: ',', decimal_separator: '.', symbol: '$'}
|
currency = {
|
||||||
|
precision: 2,
|
||||||
|
thousand_separator: ',',
|
||||||
|
decimal_separator: '.',
|
||||||
|
symbol: '$',
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = amount / 100
|
amount = amount / 100
|
||||||
|
|
||||||
let {precision, decimal_separator, thousand_separator, symbol} = currency
|
let { precision, decimal_separator, thousand_separator, symbol } = currency
|
||||||
|
|
||||||
try {
|
try {
|
||||||
precision = Math.abs(precision)
|
precision = Math.abs(precision)
|
||||||
@ -52,25 +57,44 @@ export default {
|
|||||||
|
|
||||||
const negativeSign = amount < 0 ? '-' : ''
|
const negativeSign = amount < 0 ? '-' : ''
|
||||||
|
|
||||||
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(precision)).toString()
|
let i = parseInt(
|
||||||
let j = (i.length > 3) ? i.length % 3 : 0
|
(amount = Math.abs(Number(amount) || 0).toFixed(precision))
|
||||||
|
).toString()
|
||||||
|
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>`
|
||||||
|
|
||||||
return moneySymbol + ' ' + 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) : '')
|
return (
|
||||||
|
moneySymbol +
|
||||||
|
' ' +
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
formatGraphMoney (amount, currency = 0) {
|
formatGraphMoney(amount, currency = 0) {
|
||||||
if (!currency) {
|
if (!currency) {
|
||||||
currency = {precision: 2, thousand_separator: ',', decimal_separator: '.', symbol: '$'}
|
currency = {
|
||||||
|
precision: 2,
|
||||||
|
thousand_separator: ',',
|
||||||
|
decimal_separator: '.',
|
||||||
|
symbol: '$',
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = amount / 100
|
amount = amount / 100
|
||||||
|
|
||||||
let {precision, decimal_separator, thousand_separator, symbol} = currency
|
let { precision, decimal_separator, thousand_separator, symbol } = currency
|
||||||
|
|
||||||
try {
|
try {
|
||||||
precision = Math.abs(precision)
|
precision = Math.abs(precision)
|
||||||
@ -78,25 +102,76 @@ export default {
|
|||||||
|
|
||||||
const negativeSign = amount < 0 ? '-' : ''
|
const negativeSign = amount < 0 ? '-' : ''
|
||||||
|
|
||||||
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(precision)).toString()
|
let i = parseInt(
|
||||||
let j = (i.length > 3) ? i.length % 3 : 0
|
(amount = Math.abs(Number(amount) || 0).toFixed(precision))
|
||||||
|
).toString()
|
||||||
|
let j = i.length > 3 ? i.length % 3 : 0
|
||||||
|
|
||||||
let moneySymbol = `${symbol}`
|
let moneySymbol = `${symbol}`
|
||||||
|
|
||||||
return moneySymbol + ' ' + 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) : '')
|
return (
|
||||||
|
moneySymbol +
|
||||||
|
' ' +
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
checkValidUrl (url) {
|
checkValidUrl(url) {
|
||||||
let pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
|
let pattern = new RegExp(
|
||||||
|
'^(https?:\\/\\/)?' + // protocol
|
||||||
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
|
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
|
||||||
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
|
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
|
||||||
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
|
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
|
||||||
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
|
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
|
||||||
'(\\#[-a-z\\d_]*)?$', 'i') // fragment locator
|
'(\\#[-a-z\\d_]*)?$',
|
||||||
|
'i'
|
||||||
|
) // fragment locator
|
||||||
|
|
||||||
return !!pattern.test(url)
|
return !!pattern.test(url)
|
||||||
}
|
},
|
||||||
|
|
||||||
|
fallbackCopyTextToClipboard(text) {
|
||||||
|
var textArea = document.createElement('textarea')
|
||||||
|
textArea.value = text
|
||||||
|
// Avoid scrolling to bottom
|
||||||
|
textArea.style.top = '0'
|
||||||
|
textArea.style.left = '0'
|
||||||
|
textArea.style.position = 'fixed'
|
||||||
|
document.body.appendChild(textArea)
|
||||||
|
textArea.focus()
|
||||||
|
textArea.select()
|
||||||
|
try {
|
||||||
|
var successful = document.execCommand('copy')
|
||||||
|
var msg = successful ? 'successful' : 'unsuccessful'
|
||||||
|
console.log('Fallback: Copying text command was ' + msg)
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Fallback: Oops, unable to copy', err)
|
||||||
|
}
|
||||||
|
document.body.removeChild(textArea)
|
||||||
|
},
|
||||||
|
copyTextToClipboard(text) {
|
||||||
|
if (!navigator.clipboard) {
|
||||||
|
this.fallbackCopyTextToClipboard(text)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
navigator.clipboard.writeText(text).then(
|
||||||
|
function () {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
function (err) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
892
resources/assets/js/plugins/ar.json
Normal file
892
resources/assets/js/plugins/ar.json
Normal file
@ -0,0 +1,892 @@
|
|||||||
|
{
|
||||||
|
"navigation": {
|
||||||
|
"dashboard": "الرئيسية",
|
||||||
|
"customers": "العملاء",
|
||||||
|
"items": "الأصناف",
|
||||||
|
"invoices": "الفواتير",
|
||||||
|
"expenses": "النفقات",
|
||||||
|
"estimates": "التقديرات",
|
||||||
|
"payments": "المدفوعات",
|
||||||
|
"reports": "التقارير",
|
||||||
|
"settings": "الإعدادات",
|
||||||
|
"logout": "خروج"
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"view_pdf": "عرض PDF",
|
||||||
|
"download_pdf": "تنزيل PDF",
|
||||||
|
"save": "حفظ",
|
||||||
|
"cancel": "إلغاء الأمر",
|
||||||
|
"update": "تحديث",
|
||||||
|
"download": "تنزيل",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"to_date": "إلى تاريخ",
|
||||||
|
"from": "من",
|
||||||
|
"to": "إلى",
|
||||||
|
"go_back": "إلى الخلف",
|
||||||
|
"back_to_login": "العودة إلى تسجيل الدخول؟",
|
||||||
|
"home": "الرئيسية",
|
||||||
|
"filter": "تصفية",
|
||||||
|
"delete": "حذف",
|
||||||
|
"edit": "تعديل",
|
||||||
|
"view": "عرض",
|
||||||
|
"add_new_item": "إضافة صنف جديد",
|
||||||
|
"clear_all": "مسح الكل",
|
||||||
|
"showing": "عرض",
|
||||||
|
"of": "من",
|
||||||
|
"actions": "العمليات",
|
||||||
|
"subtotal": "المجموع الفرعي",
|
||||||
|
"discount": "خصم",
|
||||||
|
"fixed": "ثابت",
|
||||||
|
"percentage": "نسبة",
|
||||||
|
"tax": "ضريبة",
|
||||||
|
"total_amount": "المبلغ الإجمالي",
|
||||||
|
"bill_to": "مطلوب من",
|
||||||
|
"ship_to": "يشحن إلى",
|
||||||
|
"due": "واجبة السداد",
|
||||||
|
"draft": "مسودة",
|
||||||
|
"sent": "مرسلة",
|
||||||
|
"all": "الكل",
|
||||||
|
"select_all": "تحديد الل",
|
||||||
|
"choose_file": "اضغط هنا لاختيار ملف",
|
||||||
|
"choose_template": "اختيار القالب",
|
||||||
|
"choose": "اختر",
|
||||||
|
"remove": "إزالة",
|
||||||
|
"powered_by": "تصميم",
|
||||||
|
"bytefury": "باترفوري",
|
||||||
|
"select_a_status": "اختر الحالة",
|
||||||
|
"select_a_tax": "اختر الضريبة",
|
||||||
|
"search": "بحث",
|
||||||
|
"are_you_sure": "هل أنت متأكد?",
|
||||||
|
"list_is_empty": "القائمة فارغة.",
|
||||||
|
"no_tax_found": "لا يوجد ضريبة!",
|
||||||
|
"four_zero_four": "404",
|
||||||
|
"you_got_lost": "عفواً! يبدو أنك قد تهت!",
|
||||||
|
"go_home": "عودة إلى الرئيسية",
|
||||||
|
"setting_updated": "تم تحديث الإعدادات بنجاح",
|
||||||
|
"select_state": "اختر الولاية/المنطقة",
|
||||||
|
"select_country": "اختر الدولة",
|
||||||
|
"select_city": "اختر المدينة",
|
||||||
|
"street_1": "عنوان الشارع 1",
|
||||||
|
"street_2": "عنوان الشارع 2",
|
||||||
|
"action_failed": "فشلت العملية",
|
||||||
|
"retry": "أعد المحاولة"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"select_year": "اختر السنة",
|
||||||
|
"cards": {
|
||||||
|
"due_amount": "المبلغ المطلوب",
|
||||||
|
"customers": "العملاء",
|
||||||
|
"invoices": "الفواتير",
|
||||||
|
"estimates": "التقديرات"
|
||||||
|
},
|
||||||
|
"chart_info": {
|
||||||
|
"total_sales": "المبيعات",
|
||||||
|
"total_receipts": "إجمالي الدخل",
|
||||||
|
"total_expense": "النفقات",
|
||||||
|
"net_income": "صافي الدخل",
|
||||||
|
"year": "اختر السنة"
|
||||||
|
},
|
||||||
|
"weekly_invoices": {
|
||||||
|
"title": "الفواتير الأسبوعية"
|
||||||
|
},
|
||||||
|
"monthly_chart": {
|
||||||
|
"title": "المبيعات والنفقات"
|
||||||
|
},
|
||||||
|
"recent_invoices_card": {
|
||||||
|
"title": "فواتير مستحقة",
|
||||||
|
"due_on": "مستحقة في",
|
||||||
|
"customer": "العميل",
|
||||||
|
"amount_due": "المبلغ المطلوب",
|
||||||
|
"actions": "العمليات",
|
||||||
|
"view_all": "عرض الكل"
|
||||||
|
},
|
||||||
|
"recent_estimate_card": {
|
||||||
|
"title": "أحدث التقديرات",
|
||||||
|
"date": "التاريخ",
|
||||||
|
"customer": "العميل",
|
||||||
|
"amount_due": "المبلغ المطلوب",
|
||||||
|
"actions": "العمليات",
|
||||||
|
"view_all": "عرض الكل"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"name": "الاسم",
|
||||||
|
"description": "الوصف",
|
||||||
|
"percent": "Percent",
|
||||||
|
"compound_tax": "Compound Tax"
|
||||||
|
},
|
||||||
|
"customers": {
|
||||||
|
"title": "العملاء",
|
||||||
|
"add_customer": "إضافة عميل",
|
||||||
|
"contacts_list": "قائمة العملاء",
|
||||||
|
"name": "الاسم",
|
||||||
|
"display_name": "اسم العرض",
|
||||||
|
"primary_contact_name": "اسم التواصل الرئيسي",
|
||||||
|
"contact_name": "اسم تواصل آخر",
|
||||||
|
"amount_due": "المبلغ المطلوب",
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"address": "العنوان",
|
||||||
|
"phone": "الهاتف",
|
||||||
|
"website": "موقع الإنترنت",
|
||||||
|
"country": "الدولة",
|
||||||
|
"state": "الولاية/المنطقة",
|
||||||
|
"city": "المدينة",
|
||||||
|
"zip_code": "الرمز البريدي",
|
||||||
|
"added_on": "أضيف في",
|
||||||
|
"action": "إجراء",
|
||||||
|
"password": "كلمة المرور",
|
||||||
|
"street_number": "رقم الشارع",
|
||||||
|
"primary_currency": "العملة الرئيسية",
|
||||||
|
"add_new_customer": "إضافة عميل جديد",
|
||||||
|
"save_customer": "حفظ العميل",
|
||||||
|
"update_customer": "تحديث بيانات العميل",
|
||||||
|
"customer": "عميل | عملاء",
|
||||||
|
"new_customer": "عميل جديد",
|
||||||
|
"edit_customer": "تعديل عميل",
|
||||||
|
"basic_info": "معلوات أساسية",
|
||||||
|
"billing_address": "عنوان الفوترة",
|
||||||
|
"shipping_address": "عنوان الشحن",
|
||||||
|
"copy_billing_address": "نسخ من عنوان الفوترة",
|
||||||
|
"no_customers": "لا يوجد عملاء حتى الآن!",
|
||||||
|
"no_customers_found": "لم يتم الحصول على عملاء!",
|
||||||
|
"list_of_customers": "سوف يحتوي هذا القسم على قائمة العملاء.",
|
||||||
|
"primary_display_name": "اسم العرض الرئيسي",
|
||||||
|
"select_currency": "اختر العملة",
|
||||||
|
"select_a_customer": "اختر العميل",
|
||||||
|
"type_or_click": "اكتب أو اضغط للاختيار",
|
||||||
|
|
||||||
|
"confirm_delete": "لن تتمكن من استرداد هذا العميل وجميع الفواتير والتقديرات والمدفوعات ذات الصلة. | لن تتمكن من استرداد هؤلاء العملاء وجميع الفواتير والتقديرات والمدفوعات ذات الصلة.",
|
||||||
|
"created_message": "تم إنشاء العملاء بنجاح",
|
||||||
|
"updated_message": "تم تحديث العملاء بنجاح",
|
||||||
|
"deleted_message": "تم حذف العملاء بنجاح | تم حذف العميل بنجاح"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"title": "الأصناف",
|
||||||
|
"items_list": "قائمة الأصناف",
|
||||||
|
"name": "الاسم",
|
||||||
|
"unit": "الوحدة",
|
||||||
|
"description": "الوصف",
|
||||||
|
"added_on": "أضيف في",
|
||||||
|
"price": "السعر",
|
||||||
|
"date_of_creation": "تاريخ الإنشاء",
|
||||||
|
"action": "إجراء",
|
||||||
|
"add_item": "إضافة صنف",
|
||||||
|
"save_item": "حفظ الصنف",
|
||||||
|
"update_item": "تحديث الصنف",
|
||||||
|
"item": "صنف | أصناف",
|
||||||
|
"add_new_item": "إضافة صنف جديد",
|
||||||
|
"new_item": "جديد صنف",
|
||||||
|
"edit_item": "تحديث صنف",
|
||||||
|
"no_items": "لا يوجد أصناف حتى الآن!",
|
||||||
|
"list_of_items": "هذا القسم سوف يحتوي على قائمة الأصناف.",
|
||||||
|
"select_a_unit": "اختر الوحدة",
|
||||||
|
|
||||||
|
"item_attached_message": "لا يمكن حذف الصنف قيد الاستخدام",
|
||||||
|
"confirm_delete": "لن تتمكن من استرجاع هذا الصنف | لن تتمكن من استرجاع هذه الأصناف",
|
||||||
|
"created_message": "تم إنشاء الصنف بنجاح",
|
||||||
|
"updated_message": "تم تحديث الصنف بنجاح",
|
||||||
|
"deleted_message": "تم حذف الصنف بنجاح | تم حذف الأصناف بنجاح"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"title": "التقديرات",
|
||||||
|
"estimate": "تقدير | تقديرات",
|
||||||
|
"estimates_list": "قائمة التقديرات",
|
||||||
|
"days": "{days} أيام",
|
||||||
|
"months": "{months} أشهر",
|
||||||
|
"years": "{years} سنوات",
|
||||||
|
"all": "الكل",
|
||||||
|
"paid": "مدفوع",
|
||||||
|
"unpaid": "غير مدفوع",
|
||||||
|
"customer": "العميل",
|
||||||
|
"ref_no": "رقم المرجع.",
|
||||||
|
"number": "الرقم",
|
||||||
|
"amount_due": "المبلغ المطلوب",
|
||||||
|
"partially_paid": "مدفوع جزئيا",
|
||||||
|
"total": "الإجمالي",
|
||||||
|
"discount": "الخصم",
|
||||||
|
"sub_total": "حاصل الجمع",
|
||||||
|
"estimate_number": "رقم تقدير",
|
||||||
|
"ref_number": "رقم المرجع",
|
||||||
|
"contact": "تواصل",
|
||||||
|
"add_item": "إضافة صنف",
|
||||||
|
"date": "تاريخ",
|
||||||
|
"due_date": "تاريخ الاستحقاق",
|
||||||
|
"expiry_date": "تاريخ الصلاحية",
|
||||||
|
"status": "الحالة",
|
||||||
|
"add_tax": "إضافة ضرية",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"action": "إجراء",
|
||||||
|
"notes": "ملاحظات",
|
||||||
|
"tax": "ضريبة",
|
||||||
|
"estimate_template": "قالب",
|
||||||
|
"convert_to_invoice": "تحويل إلى فاتورة",
|
||||||
|
"mark_as_sent": "تحديد كمرسل",
|
||||||
|
"send_estimate": "إرسال التقدير",
|
||||||
|
"record_payment": "تسجيل مدفوات",
|
||||||
|
"add_estimate": "إضافة تقدير",
|
||||||
|
"save_estimate": "حفظ التقدير",
|
||||||
|
"confirm_conversion": "هل تريد تحويل هذا التقدير إلى فاتورة؟",
|
||||||
|
"conversion_message": "تم إنشاء الفاتورة بنجاح",
|
||||||
|
"confirm_send_estimate": "سيتم إرسال هذا التقدير بالبريد الإلكتروني إلى العميل",
|
||||||
|
"confirm_mark_as_sent": "سيتم التحديد كمرسل على هذا التقدير",
|
||||||
|
"confirm_mark_as_accepted": "سيتم التحديد كمقبول على هذا التقدير",
|
||||||
|
"confirm_mark_as_rejected": "سيتم التحديد كمرفوض على هذا التقدير",
|
||||||
|
"no_matching_estimates": "لا يوجد تقديرات مطابقة!",
|
||||||
|
"mark_as_sent_successfully": "تم التحديد كمرسل بنجاح",
|
||||||
|
"send_estimate_successfully": "تم إرسال التقدير بنجاح",
|
||||||
|
"errors": {
|
||||||
|
"required": "حقل مطلوب"
|
||||||
|
},
|
||||||
|
"accepted": "مقبول",
|
||||||
|
"sent": "مرسل",
|
||||||
|
"draft": "مسودة",
|
||||||
|
"declined": "مرفوض",
|
||||||
|
"new_estimate": "تقدير جديد",
|
||||||
|
"add_new_estimate": "إضافة تقدير جديد",
|
||||||
|
"update_Estimate": "تحديث تقدير",
|
||||||
|
"edit_estimate": "تعديل التقدير",
|
||||||
|
"items": "الأصناف",
|
||||||
|
"Estimate": "تقدير | تقديرات",
|
||||||
|
"add_new_tax": "إضافة ضريبة جديدة",
|
||||||
|
"no_estimates": "لا يوجد تقديرات حالياً!",
|
||||||
|
"list_of_estimates": "هذا القسم سوف يحتوي على التقديرات.",
|
||||||
|
"mark_as_rejected": "تحديد كمرفوض",
|
||||||
|
"mark_as_accepted": "تحديد كمقروء",
|
||||||
|
|
||||||
|
"marked_as_accepted_message": "تحديد التقدير كمقبول",
|
||||||
|
"marked_as_rejected_message": "تحديد التقدير كمرفوض",
|
||||||
|
"confirm_delete": "لن تستطيع استرجاع هذا التقدير | لن تستطيع إستعادة هذه التقديرات",
|
||||||
|
"created_message": "تم إنشاء التقدير بنجاح",
|
||||||
|
"updated_message": "تم تحديث التقدير بنجاح",
|
||||||
|
"deleted_message": "تم حذف التقدير بنجاح | تم حذف التقديرات بنجاح",
|
||||||
|
"user_email_does_not_exist": "البريد الالكتروني للمستخدم غير موجود",
|
||||||
|
"something_went_wrong": "خطأ غير معروف!",
|
||||||
|
"item": {
|
||||||
|
"title": "اسم الصنف",
|
||||||
|
"description": "الوصف",
|
||||||
|
"quantity": "الكمية",
|
||||||
|
"price": "السعر",
|
||||||
|
"discount": "الخصم",
|
||||||
|
"total": "الإجمالي",
|
||||||
|
"total_discount": "مجموع الخصم",
|
||||||
|
"sub_total": "حاصل الجمع",
|
||||||
|
"tax": "الضرية",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"select_an_item": "اكتب أو اختر الصنف",
|
||||||
|
"type_item_description": "اكتب وصف الصنف (اختياري)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"title": "الفواتير",
|
||||||
|
"invoices_list": "قائمة الفواتير",
|
||||||
|
"days": "{days} أيام",
|
||||||
|
"months": "{months} أشهر",
|
||||||
|
"years": "{years} سنوات",
|
||||||
|
"all": "الكل",
|
||||||
|
"paid": "مدفوع",
|
||||||
|
"unpaid": "غير مدفوع",
|
||||||
|
"customer": "العميل",
|
||||||
|
"paid_status": "حالة الدفع",
|
||||||
|
"ref_no": "رقم المرجع.",
|
||||||
|
"number": "الرقم",
|
||||||
|
"amount_due": "المبلغ المطلوب",
|
||||||
|
"partially_paid": "مدفوع جزئياً",
|
||||||
|
"total": "الإجمالي",
|
||||||
|
"discount": "الخصم",
|
||||||
|
"sub_total": "حاصل الجمع",
|
||||||
|
"invoice": "فاتورة | فواتير",
|
||||||
|
"invoice_number": "رقم الفاتورة",
|
||||||
|
"ref_number": "رقم المرجع",
|
||||||
|
"contact": "تواصل",
|
||||||
|
"add_item": "إضافة صنف",
|
||||||
|
"date": "التاريخ",
|
||||||
|
"due_date": "تاريخ الاستحقاق",
|
||||||
|
"status": "الحالة",
|
||||||
|
"add_tax": "إضافة ضريبة",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"action": "إجراء",
|
||||||
|
"notes": "ملاحظات",
|
||||||
|
"view": "عرض",
|
||||||
|
"send_invoice": "إرسال الفاتورة",
|
||||||
|
"invoice_template": "قالب الفاتورة",
|
||||||
|
"template": "قالب",
|
||||||
|
"mark_as_sent": "تحديد كمرسل",
|
||||||
|
"confirm_send_invoice": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
||||||
|
"invoice_mark_as_sent": "سيتم تحديد هذه الفاتورة كمرسلة",
|
||||||
|
"confirm_send": "سيتم إرسال هذه الفاتورة بالبريد الألكتروني إلى العميل",
|
||||||
|
"invoice_date": "تاريخ الفاتورة",
|
||||||
|
"record_payment": "تسجيل مدفوعات",
|
||||||
|
"add_new_invoice": "إضافة فاتورة جديدة",
|
||||||
|
"update_expense": "تحديث المصروفات",
|
||||||
|
"edit_invoice": "تعديل الفاتورة",
|
||||||
|
"new_invoice": "فاتورة جديدة",
|
||||||
|
"save_invoice": "حفظ الفاتورة",
|
||||||
|
"update_invoice": "تحديث الفاتورة",
|
||||||
|
"add_new_tax": "إضافة ضريبة جديدة",
|
||||||
|
"no_invoices": "لا يوجد فواتير حتى الآن!",
|
||||||
|
"list_of_invoices": "قائمة الفواتير .",
|
||||||
|
"select_invoice": "اختر الفاتورة",
|
||||||
|
"no_matching_invoices": "لا يوجد فواتير مطابقة!",
|
||||||
|
"mark_as_sent_successfully": "تم تحديد الفاتورة كمرسلة بنجاح",
|
||||||
|
"send_invoice_successfully": "تم إرسال الفاتورة بنجاح",
|
||||||
|
"item": {
|
||||||
|
"title": "اسم الصنف",
|
||||||
|
"description": "الوصف",
|
||||||
|
"quantity": "الكمية",
|
||||||
|
"price": "السعر",
|
||||||
|
"discount": "الخصم",
|
||||||
|
"total": "الإجمالي",
|
||||||
|
"total_discount": "إجمالي الخصم",
|
||||||
|
"sub_total": "حاصل الجمع",
|
||||||
|
"tax": "الضريبة",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"select_an_item": "اكتب أو انقر لاختيار صنف",
|
||||||
|
"type_item_description": "وصف الصنف (اختياري)"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payment_attached_message": "هناك مدفوعات مرتبطة بالفعل بإحدى الفواتير المحددة. تأكد من حذف المدفوعات المرتبطة أولاً قبل حذف الفاتورة.",
|
||||||
|
"confirm_delete": "لن تتمكن من استرجاع الفاتورة بعد هذه الإجراء | لن تتمكن من استرجاع الفواتير بعد هذا الإجراء",
|
||||||
|
"created_message": "تم إنشاء الفاتورة بنجاح",
|
||||||
|
"updated_message": "تم تحديث الفاتورة بنجاح",
|
||||||
|
"deleted_message": "تم حذف الفاتورة بنجاح | تم حذف الفواتير بنجاح",
|
||||||
|
"marked_as_sent_message": "تم إرسال الفاتورة بنجاح",
|
||||||
|
"user_email_does_not_exist": "البريد الإلكتروني للمستخدم غير موجود!",
|
||||||
|
"something_went_wrong": "خطأ غير معروف!",
|
||||||
|
"invalid_due_amount_message": "المبلغ النهائي للفاتورة لا يمكن أن يكون أقل من المبلغ المطلوب لها. رجاءاً حدث الفاتورة أو قم بحذف المدفوعات المرتبطة بها للاستمرار."
|
||||||
|
},
|
||||||
|
"credit_notes": {
|
||||||
|
"title": "ملاحظات إئتمانية",
|
||||||
|
"credit_notes_list": "قائمة الملاحظات الإئتمانية",
|
||||||
|
"credit_notes": "ملاحظات إئتمانية",
|
||||||
|
"contact": "تواصل",
|
||||||
|
"date": "التاريخ",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"action": "إجراء",
|
||||||
|
"credit_number": "الرقم الإئتماني",
|
||||||
|
"notes": "ملاحظات",
|
||||||
|
"confirm_delete": "هل تريد حفذف هذه الملاحظة الإئتمانية؟",
|
||||||
|
"item": {
|
||||||
|
"title": "اسم الصنف",
|
||||||
|
"description": "الوصف",
|
||||||
|
"quantity": "الكمية",
|
||||||
|
"price": "السعر",
|
||||||
|
"discount": "الخصم",
|
||||||
|
"total": "الإجمالي",
|
||||||
|
"total_discount": "إجمالي الخصم",
|
||||||
|
"sub_total": "حاصل الجمع",
|
||||||
|
"tax": "الضريبة"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"payments": {
|
||||||
|
"title": "المدفوعات",
|
||||||
|
"payments_list": "قائمة المدفوعات",
|
||||||
|
"record_payment": "تسجيل دفعة",
|
||||||
|
"customer": "العميل",
|
||||||
|
"date": "التاريخ",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"action": "إجراء",
|
||||||
|
"payment_number": "رقم الدفعة",
|
||||||
|
"payment_mode": "نوع الدفعة",
|
||||||
|
"invoice": "الفاتورة",
|
||||||
|
"note": "ملاحظة",
|
||||||
|
"add_payment": "إضافة دفعة",
|
||||||
|
"new_payment": "دفعة جديدة",
|
||||||
|
"edit_payment": "تعديل الدفعة",
|
||||||
|
"view_payment": "عرض الدفعة",
|
||||||
|
"add_new_payment": "إضافة دفعة جديدة",
|
||||||
|
"save_payment": "حفظ الدفعة",
|
||||||
|
"update_payment": "تحديث الدفعة",
|
||||||
|
"payment": "دفعة | مدفوعات",
|
||||||
|
"no_payments": "لا يوجد مدفوعات حتى الآن!",
|
||||||
|
"no_matching_payments": "لا توجد مدفوعات مطابقة!",
|
||||||
|
"list_of_payments": "سوف تحتوي هذه القائمة على مدفوعات الفواتير.",
|
||||||
|
"select_payment_mode": "اختر طريقة الدفع",
|
||||||
|
|
||||||
|
"confirm_delete": "لن تكون قادر على استرجاع هذه الدفعة | لن تكون قادراً على استرجاع هذه المدفوعات",
|
||||||
|
"created_message": "تم إنشاء الدفعة بنجاح",
|
||||||
|
"updated_message": "تم تحديث الدفعة بنجاح",
|
||||||
|
"deleted_message": "تم حذف الدفعة بنجاح | تم حذف المدفوعات بنجاح",
|
||||||
|
"invalid_amount_message": "قيمة الدفعة غير صحيحة!"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"title": "النفقات",
|
||||||
|
"expenses_list": "قائمة النفقات",
|
||||||
|
"expense_title": "Title",
|
||||||
|
"select_a_customer": "حدد عميلاً",
|
||||||
|
"customer": "العميل",
|
||||||
|
"contact": "تواصل",
|
||||||
|
"category": "الفئة",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"expense_date": "التاريخ",
|
||||||
|
"description": "الوصف",
|
||||||
|
"receipt": "سند القبض",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"action": "إجراء",
|
||||||
|
"note": "ملاحظة",
|
||||||
|
"category_id": "رمز الفئة",
|
||||||
|
"date": "تاريخ النفقات",
|
||||||
|
"add_expense": "أضف نفقات",
|
||||||
|
"add_new_expense": "أضف نفقات جديدة",
|
||||||
|
"save_expense": "حفظ النفقات",
|
||||||
|
"update_expense": "تحديث النفقات",
|
||||||
|
"download_receipt": "تنزيل السند",
|
||||||
|
"edit_expense": "تعديل النفقات",
|
||||||
|
"new_expense": "نفقات جديدة",
|
||||||
|
"expense": "إنفاق | نفقات",
|
||||||
|
"no_expenses": "لا يوجد نفقات حتى الآن!",
|
||||||
|
"list_of_expenses": "هذه القائمة ستحتوي النفقات الخاصة بك",
|
||||||
|
|
||||||
|
"confirm_delete": "لن تتمكن من استرجاع هذا الإنفاق | لن تتمكن من استرجاع هذه النفقات",
|
||||||
|
"created_message": "تم إنشاء النفقات بنجاح",
|
||||||
|
"updated_message": "تم تحديث النفقات بنجاح",
|
||||||
|
"deleted_message": "تم حذف النفقات بنجاح",
|
||||||
|
"categories": {
|
||||||
|
"categories_list": "قائمة الفئات",
|
||||||
|
"title": "العنوان",
|
||||||
|
"name": "الاسم",
|
||||||
|
"description": "الوصف",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"actions": "العمليات",
|
||||||
|
"add_category": "إضافة فئمة",
|
||||||
|
"new_category": "فئة جديدة",
|
||||||
|
"category": "فئة | فئات",
|
||||||
|
"select_a_category": "اختر الفئة"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"password": "كلمة المرور",
|
||||||
|
"forgot_password": "نسيت كلمة المرور؟",
|
||||||
|
"or_signIn_with": "أو سجل الدخول بواسطة",
|
||||||
|
"login": "دخول",
|
||||||
|
"register": "تسجيل",
|
||||||
|
"reset_password": "إعادة تعيين كلمة المرور",
|
||||||
|
"password_reset_successfully": "تم إعادة تعيين كلمة المرور بنجاح",
|
||||||
|
"enter_email": "أدخل البريد الالكتروني",
|
||||||
|
"enter_password": "أكتب كلمة المرور",
|
||||||
|
"retype_password": "أعد كتابة كلمة المرور",
|
||||||
|
"login_placeholder": "mail@example.com"
|
||||||
|
},
|
||||||
|
"reports": {
|
||||||
|
"title": "تقرير",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"status": "الحالة",
|
||||||
|
"paid": "مدفوع",
|
||||||
|
"unpaid": "غير مدفوع",
|
||||||
|
"download_pdf": "تنزيل PDF",
|
||||||
|
"view_pdf": "عرض PDF",
|
||||||
|
"update_report": "تحديث التقرير",
|
||||||
|
"report": "تقرير | تقارير",
|
||||||
|
"profit_loss": {
|
||||||
|
"profit_loss": "الخسائر والأرباح",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"date_range": "اختر مدى التاريخ"
|
||||||
|
},
|
||||||
|
"sales": {
|
||||||
|
"sales": "المبيعات",
|
||||||
|
"date_range": "اختر مدى التاريخ",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"report_type": "نوع التقرير"
|
||||||
|
},
|
||||||
|
"taxes": {
|
||||||
|
"taxes": "الضرائب",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"date_range": "اختر مدى التاريخ"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"required": "حقل مطلوب"
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"invoice": "الفاتورة",
|
||||||
|
"invoice_date": "تاريخ الفاتورة",
|
||||||
|
"due_date": "تاريخ الاستحقاق",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"contact_name": "اسم التواصل",
|
||||||
|
"status": "الحالة"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"estimate": "تقدير",
|
||||||
|
"estimate_date": "تاريخ التقدير",
|
||||||
|
"due_date": "مستحق بتاريخ",
|
||||||
|
"estimate_number": "رقم مستحق",
|
||||||
|
"ref_number": "رقم المرجع",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"contact_name": "اسم التواصل",
|
||||||
|
"status": "الحالة"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"expenses": "النفقات",
|
||||||
|
"category": "الفئة",
|
||||||
|
"date": "التاريخ",
|
||||||
|
"amount": "المبلغ المطلوب",
|
||||||
|
"to_date": "حتى تاريخ",
|
||||||
|
"from_date": "من تاريخ",
|
||||||
|
"date_range": "اختر مدى التاريخ"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"menu_title": {
|
||||||
|
"account_settings": "إعدادات الحساب",
|
||||||
|
"company_information": "معلومات المنشأة",
|
||||||
|
"customization": "تخصيص",
|
||||||
|
"preferences": "تفضيلات",
|
||||||
|
"notifications": "تنبيهات",
|
||||||
|
"tax_types": "نوع الضريبة",
|
||||||
|
"expense_category": "فئات النفقات",
|
||||||
|
"update_app": "تحديث النظام"
|
||||||
|
},
|
||||||
|
"title": "إعدادات",
|
||||||
|
"setting": "إعدادات | إعدادات",
|
||||||
|
"general": "عام",
|
||||||
|
"language": "اللغة",
|
||||||
|
"primary_currency": "العملة الرئيسية",
|
||||||
|
"timezone": "المنطقة الزمنية",
|
||||||
|
"date_format": "صيغة التاريخ",
|
||||||
|
"currencies": {
|
||||||
|
"title": "العملات",
|
||||||
|
"currency": "العملة | العملات",
|
||||||
|
"currencies_list": "قائمة العملات",
|
||||||
|
"select_currency": "اختر العملة",
|
||||||
|
"name": "الاسم",
|
||||||
|
"code": "المرجع",
|
||||||
|
"symbol": "الرمز",
|
||||||
|
"precision": "الدقة",
|
||||||
|
"thousand_separator": "فاصل الآلاف",
|
||||||
|
"decimal_separator": "الفاصلة العشرية",
|
||||||
|
"position": "الموقع",
|
||||||
|
"position_of_symbol": "موقع رمز العملة",
|
||||||
|
"right": "يمين",
|
||||||
|
"left": "يسار",
|
||||||
|
"action": "إجراء",
|
||||||
|
"add_currency": "أضف عملة"
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "خادم البريد",
|
||||||
|
"port": "منفذ البريد",
|
||||||
|
"driver": "مشغل البريد",
|
||||||
|
"secret": "سري",
|
||||||
|
"mailgun_secret": "الرمز السري لـ Mailgun",
|
||||||
|
"mailgun_domain": "المجال",
|
||||||
|
"mailgun_endpoint": "النهاية الطرفية لـ Mailgun",
|
||||||
|
"ses_secret": "SES الرمز السري",
|
||||||
|
"ses_key": "SES مفتاح",
|
||||||
|
"password": "كلمة مرور البريد الالكتروني",
|
||||||
|
"username": "اسم المستخدم للبريد الإلكتروني",
|
||||||
|
"mail_config": "إعدادات البريد الالكتروني",
|
||||||
|
"from_name": "اسم المرسل",
|
||||||
|
"from_mail": "عنوان البريد الالكتروني للمرسل",
|
||||||
|
"encryption": "صيغة ا لتشفير",
|
||||||
|
"mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"title": "PDF إعدادات",
|
||||||
|
"footer_text": "نص التذييل",
|
||||||
|
"pdf_layout": "اتجاه صفحة PDF"
|
||||||
|
},
|
||||||
|
"company_info": {
|
||||||
|
"company_info": "معلومات الشركة",
|
||||||
|
"company_name": "اسم الشركة",
|
||||||
|
"company_logo": "شعار الشركة",
|
||||||
|
"section_description": "معلومات عن شركتك سيتم عرضها على الفواتير والتقديرات والمستندات الأخرى.",
|
||||||
|
"phone": "الهاتف",
|
||||||
|
"country": "الدولة",
|
||||||
|
"state": "الولاية/المنطقة",
|
||||||
|
"city": "المدينة",
|
||||||
|
"address": "العنوان",
|
||||||
|
"zip": "الرمز البريدي",
|
||||||
|
"save": "حفظ",
|
||||||
|
"updated_message": "تم تحديث معلومات الشركة بنجاح"
|
||||||
|
},
|
||||||
|
"customization": {
|
||||||
|
"customization": "التخصيص",
|
||||||
|
"save": "حفظ",
|
||||||
|
"addresses": {
|
||||||
|
"title": "العنوان",
|
||||||
|
"section_description": "يمكنك ضبط عنوان إرسال فواتير العملاء وتنسيق عنوان شحن العملاء (معروض في PDF فقط).",
|
||||||
|
"customer_billing_address": "عنوان فواتير العميل",
|
||||||
|
"customer_shipping_address": "عنوان الشحن للعميل",
|
||||||
|
"company_address": "عنوان الشركة",
|
||||||
|
"insert_fields": "أضف حقل",
|
||||||
|
"contact": "تواصل",
|
||||||
|
"address": "العنوان",
|
||||||
|
"display_name": "الاسم الظاهر",
|
||||||
|
"primary_contact_name": "مسؤول التواصل الرئيسي",
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"website": "موقع الإنترنت",
|
||||||
|
"name": "الاسم",
|
||||||
|
"country": "الدولة",
|
||||||
|
"state": "الولاية/المنطقة",
|
||||||
|
"city": "المدينة",
|
||||||
|
"company_name": "اسم الشركة",
|
||||||
|
"address_street_1": "عنوان الشارع 1",
|
||||||
|
"address_street_2": "عنوان الشارع 2",
|
||||||
|
"phone": "الهاتف",
|
||||||
|
"zip_code": "الرمز البريدي",
|
||||||
|
"address_setting_updated": "تم تحديث العنوان بنجاح"
|
||||||
|
},
|
||||||
|
"updated_message": "تم تحديث معلومات الشركة بنجاح",
|
||||||
|
|
||||||
|
"invoices": {
|
||||||
|
"title": "الفواتير",
|
||||||
|
"notes": "ملاحظات",
|
||||||
|
"invoice_prefix": "بادئة رقم الفاتورة",
|
||||||
|
"invoice_settings": "إعدادات الفاتورة",
|
||||||
|
"autogenerate_invoice_number": "ترقيم آلي للفاتورة",
|
||||||
|
"invoice_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الفاتورة تلقائيًا في كل مرة تقوم فيها بإنشاء فاتورة جديدة.",
|
||||||
|
"enter_invoice_prefix": "أدخل بادئة رقم الفاتورة",
|
||||||
|
"terms_and_conditions": "الأحكام والشروط",
|
||||||
|
"invoice_setting_updated": "تم تحديث إعداد الفاتورة بنجاح"
|
||||||
|
},
|
||||||
|
|
||||||
|
"estimates": {
|
||||||
|
"title": "التقديرات",
|
||||||
|
"estimate_prefix": "بادئة رقم التقدير",
|
||||||
|
"estimate_settings": "إعدادت التقدير",
|
||||||
|
"autogenerate_estimate_number": "ترقيم آلي للتقدير",
|
||||||
|
"estimate_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام التقديرات تلقائيًا في كل مرة تقوم فيها بإنشاء تقدير جديد.",
|
||||||
|
"enter_estimate_prefix": "أدخل بادئة رقم التقدير",
|
||||||
|
"estimate_setting_updated": "تم تحديث إعدادات التقدير بنجاح"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payments": {
|
||||||
|
"title": "المدفوعات",
|
||||||
|
"payment_prefix": "بادئة رقم الدفعة",
|
||||||
|
"payment_settings": "إعدادات الدفعة",
|
||||||
|
"autogenerate_payment_number": "ترقيم آلي للمدفوعات",
|
||||||
|
"payment_setting_description": "تعطيل الترقيم الآلي ، إذا كنت لا ترغب في إنشاء أرقام الدفعة تلقائيًا في كل مرة تقوم فيها بإنشاء دفعة جديدة.",
|
||||||
|
"enter_payment_prefix": "أدخل بادئة رقم الدفعة",
|
||||||
|
"payment_setting_updated": "تم تحديث إعدادات الدفعة بنجاح"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"profile_picture": "صورة الملف الشخصي",
|
||||||
|
"name": "الاسم",
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"password": "كلمة المرور",
|
||||||
|
"confirm_password": "أعد كتابة كلمة المرور",
|
||||||
|
"account_settings": "إعدادات الجساب",
|
||||||
|
"save": "حفظ",
|
||||||
|
"section_description": "يمكنك تحديث اسمك والبريد الإلكتروني وكلمة المرور باستخدام النموذج أدناه.",
|
||||||
|
"updated_message": "تم تحديث إعدادات الحساب بنجاح"
|
||||||
|
},
|
||||||
|
"user_profile": {
|
||||||
|
"name": "الاسم",
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"password": "كلمة المرور",
|
||||||
|
"confirm_password": "أعد كتابة كلمة المرور"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"title": "الإشعارات",
|
||||||
|
"email": "إرسال الإشعارات إلى",
|
||||||
|
"description": "ما هي إشعارات البريد الإلكتروني التي ترغب في تلقيها عندما يتغير شيء ما؟",
|
||||||
|
"invoice_viewed": "تم عرض الفاتورة",
|
||||||
|
"invoice_viewed_desc": "عندما يستعرض عميلك الفاتورة المرسلة عبر الشاشة الرئيسية.",
|
||||||
|
"estimate_viewed": "تم عرض التقدير",
|
||||||
|
"estimate_viewed_desc": "عندما يستعرض عميلك التقدير المرسلة عبر الشاشة الرئيسية.",
|
||||||
|
"save": "حفظ",
|
||||||
|
"email_save_message": "تم حفظ البريد الإلكتروني بنجاح",
|
||||||
|
"please_enter_email": "فضلاً أدخل البريد الإلكتروني"
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"title": "أنواع الضرائب",
|
||||||
|
"add_tax": "أضف ضريبة",
|
||||||
|
"description": "يمكنك إضافة أو إزالة الضرائب كما يحلو لك. النظام يدعم الضرائب على العناصر الفردية وكذلك على الفاتورة.",
|
||||||
|
"add_new_tax": "إضافة ضريبة جديدة",
|
||||||
|
"tax_settings": "إعدادات الضريبة",
|
||||||
|
"tax_per_item": "ضريبة على الصنف",
|
||||||
|
"tax_name": "اسم الضريبة",
|
||||||
|
"compound_tax": "ضريبة مجمعة",
|
||||||
|
"percent": "نسبة مؤوية",
|
||||||
|
"action": "إجراء",
|
||||||
|
"tax_setting_description": "قم بتمكين هذا إذا كنت تريد إضافة ضرائب لعناصر الفاتورة الفردية. بشكل افتراضي ، تضاف الضرائب مباشرة إلى الفاتورة.",
|
||||||
|
"created_message": "تم إنشاء نوع الضريبة بنجاح",
|
||||||
|
"updated_message": "تم تحديث نوع الضريبة بنجاح",
|
||||||
|
"deleted_message": "تم حذف نوع الضريبة بنجاح",
|
||||||
|
"confirm_delete": "لن تتمكن من استرجاع نوع الضرية هذا",
|
||||||
|
"already_in_use": "ضريبة قيد الاستخدام"
|
||||||
|
},
|
||||||
|
"expense_category": {
|
||||||
|
"title": "فئات النفقات",
|
||||||
|
"action": "إجراء",
|
||||||
|
"description": "الفئات مطلوبة لإضافة إدخالات النفقات. يمكنك إضافة أو إزالة هذه الفئات وفقًا لتفضيلاتك.",
|
||||||
|
"add_new_category": "إضافة فئة جديدة",
|
||||||
|
"category_name": "اسم الفئة",
|
||||||
|
"category_description": "الوصف",
|
||||||
|
"created_message": "تم إنشاء نوع النفقات بنجاح",
|
||||||
|
"deleted_message": "تم حذف نوع النفقات بنجاح",
|
||||||
|
"updated_message": "تم تحديث نوع النفقات بنجاح",
|
||||||
|
"confirm_delete": "لن تتمكن من استرجاع نوع النفقات هذا",
|
||||||
|
"already_in_use": "نوع قيد الاستخدام"
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"currency": "العملة",
|
||||||
|
"language": "اللغة",
|
||||||
|
"time_zone": "المنطة الزمنية",
|
||||||
|
"fiscal_year": "السنة المالية",
|
||||||
|
"date_format": "صيغة التاريخ",
|
||||||
|
"discount_setting": "إعدادات الخصم",
|
||||||
|
"discount_per_item": "خصم على الصنف ",
|
||||||
|
"discount_setting_description": "قم بتمكين هذا إذا كنت تريد إضافة خصم إلى عناصر الفاتورة الفردية. بشكل افتراضي ، يتم إضافة الخصم مباشرة إلى الفاتورة.",
|
||||||
|
"save": "حفظ",
|
||||||
|
"preference": "تفضيل | تفضيلات",
|
||||||
|
"general_settings": "التفضيلات الافتراضية للنظام.",
|
||||||
|
"updated_message": "تم تحديث التفضيلات بنجاح",
|
||||||
|
"select_language": "اختر اللغة",
|
||||||
|
"select_time_zone": "اختر المنطة الزمنية",
|
||||||
|
"select_date_formate": "اختر صيغة التاريخ",
|
||||||
|
"select_financial_year": "اختر السنة المالية"
|
||||||
|
},
|
||||||
|
"update_app": {
|
||||||
|
"title": "تحديث النظام",
|
||||||
|
"description": "يمكنك تحديث النظام بسهولة عن طريق البحث عن تحديث جديد بالنقر فوق الزر أدناه",
|
||||||
|
"check_update": "تحقق من التحديثات",
|
||||||
|
"avail_update": "تحديث جديد متوفر",
|
||||||
|
"next_version": "النسخة الجديدة",
|
||||||
|
"update": "حدث الآن",
|
||||||
|
"update_progress": "قيد التحديث...",
|
||||||
|
"progress_text": "سوف يستغرق التحديث بضع دقائق. يرجى عدم تحديث الشاشة أو إغلاق النافذة قبل انتهاء التحديث",
|
||||||
|
"update_success": "تم تحديث النظام! يرجى الانتظار حتى يتم إعادة تحميل نافذة المتصفح تلقائيًا.",
|
||||||
|
"latest_message": "لا يوجد تحديثات متوفرة! لديك حالياً أحدث نسخة.",
|
||||||
|
"current_version": "النسخة الحالية",
|
||||||
|
"download_zip_file": "تنزيل ملف ZIP",
|
||||||
|
"unzipping_package": "حزمة فك الضغط",
|
||||||
|
"copying_files": "نسخ الملفات",
|
||||||
|
"running_migrations": "إدارة عمليات الترحيل",
|
||||||
|
"finishing_update": "تحديث التشطيب",
|
||||||
|
"update_failed": "فشل التحديث",
|
||||||
|
"update_failed_text": "آسف! فشل التحديث الخاص بك في: {step} خطوة"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"account_info": "معلومات الحساب",
|
||||||
|
"account_info_desc": "سيتم استخدام التفاصيل أدناه لإنشاء حساب المسؤول الرئيسي. كما يمكنك تغيير التفاصيل في أي وقت بعد تسجيل الدخول.",
|
||||||
|
"name": "الاسم",
|
||||||
|
"email": "البريد الإلكتروني",
|
||||||
|
"password": "كلمة المرور",
|
||||||
|
"confirm_password": "أعد كتابة كلمة المرور",
|
||||||
|
"save_cont": "حفظ واستمرار",
|
||||||
|
"company_info": "معلومات الشركة",
|
||||||
|
"company_info_desc": "سيتم عرض هذه المعلومات على الفواتير. لاحظ أنه يمكنك تعديل هذا لاحقًا في صفحة الإعدادات.",
|
||||||
|
"company_name": "اسم الشركة",
|
||||||
|
"company_logo": "شعار الشركة",
|
||||||
|
"logo_preview": "استعراض الشعار",
|
||||||
|
"preferences": "التفضيلات",
|
||||||
|
"preferences_desc": "التفضيلات الافتراضية للنظام",
|
||||||
|
"country": "الدولة",
|
||||||
|
"state": "الولاية/المنطقة",
|
||||||
|
"city": "المدينة",
|
||||||
|
"address": "العنوان",
|
||||||
|
"street": "العنوان 1 | العنوان 2",
|
||||||
|
"phone": "الهاتف",
|
||||||
|
"zip_code": "الرمز البريدي",
|
||||||
|
"go_back": "للخلف",
|
||||||
|
"currency": "العملة",
|
||||||
|
"language": "اللغة",
|
||||||
|
"time_zone": "المنطة الزمنية",
|
||||||
|
"fiscal_year": "السنة المالية",
|
||||||
|
"date_format": "صيغة التاريخ",
|
||||||
|
"from_address": "من العنوان",
|
||||||
|
"username": "اسم المستخدم",
|
||||||
|
"next": "التالي",
|
||||||
|
"continue": "استمرار",
|
||||||
|
"skip": "تخطي",
|
||||||
|
"database": {
|
||||||
|
"database": "عنوان قاعدة البيانات",
|
||||||
|
"connection": "اتصال قاعدة البيانات",
|
||||||
|
"host": "خادم قاعدة البيانات",
|
||||||
|
"port": "منفذ قاعدة البيانات",
|
||||||
|
"password": "كلمة مرور قاعدة البيانات",
|
||||||
|
"app_url": "عنوان الإنترنت للنظام",
|
||||||
|
"username": "اسم المستخدم لقاعدة البيانات",
|
||||||
|
"db_name": "سم قاعدة البيانات",
|
||||||
|
"desc": "قم بإنشاء قاعدة بيانات على الخادم الخاص بك وتعيين بيانات الاعتماد باستخدام النموذج أدناه."
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"permissions": "الأذونات",
|
||||||
|
"permission_confirm_title": "هل أنت متأكد من الاستمرار؟",
|
||||||
|
"permission_confirm_desc": "فشل فحص أذونات المجلد",
|
||||||
|
"permission_desc": "فيما يلي قائمة أذونات المجلد المطلوبة حتى يعمل التطبيق. في حالة فشل فحص الإذن ، تأكد من تحديث أذونات المجلد."
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "خادم البريد",
|
||||||
|
"port": "منفذ البريد",
|
||||||
|
"driver": "مشغل البريد",
|
||||||
|
"secret": "سري",
|
||||||
|
"mailgun_secret": "الرمز السري لـ Mailgun",
|
||||||
|
"mailgun_domain": "المجال",
|
||||||
|
"mailgun_endpoint": "النهاية الطرفية لـ Mailgun",
|
||||||
|
"ses_secret": "SES الرمز السري",
|
||||||
|
"ses_key": "SES مفتاح",
|
||||||
|
"password": "كلمة مرور البريد الالكتروني",
|
||||||
|
"username": "اسم المستخدم للبريد الإلكتروني",
|
||||||
|
"mail_config": "إعدادات البريد الالكتروني",
|
||||||
|
"from_name": "اسم المرسل",
|
||||||
|
"from_mail": "عنوان البريد الالكتروني للمرسل",
|
||||||
|
"encryption": "صيغة ا لتشفير",
|
||||||
|
"mail_config_desc": "أدناه هو نموذج لتكوين برنامج تشغيل البريد الإلكتروني لإرسال رسائل البريد الإلكتروني من التطبيق. يمكنك أيضًا تهيئة موفري الجهات الخارجية مثل Sendgrid و SES إلخ."
|
||||||
|
},
|
||||||
|
"req": {
|
||||||
|
"system_req": "متطلبات النظام",
|
||||||
|
"php_req_version": "Php (النسخة المطلوبة {version} بحد أدنى)",
|
||||||
|
"check_req": "فحص متطلبات النظام",
|
||||||
|
"system_req_desc": "يحتوي النظام على بعض متطلبات الخادم. تأكد من أن خادمك لديه نسخة php المطلوبة وجميع الامتدادات المذكورة أدناه."
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"migrate_failed": "فشل إنشاء الجداول",
|
||||||
|
"database_variables_save_error": "غير قادر على الاتصال بقاعدة البيانات باستخدام القيم المقدمة.",
|
||||||
|
"mail_variables_save_error": "فشل تكوين البريد الإلكتروني.",
|
||||||
|
"connection_failed": "فشل اتصال قاعدة البيانات",
|
||||||
|
"database_should_be_empty": "يجب أن تكون قاعدة البيانات فارغة"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"mail_variables_save_successfully": "تم تكوين البريد الإلكتروني بنجاح",
|
||||||
|
"database_variables_save_successfully": "تم تكوين قاعدة البيانات بنجاح."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout_login": {
|
||||||
|
"copyright_crater": "حقوق الطبع والنشر @ كريتر - 2020",
|
||||||
|
"super_simple_invoicing": "فوترة سهلة ومبسطة للغاية",
|
||||||
|
"for_freelancer": "للمبرمجين المستقلين",
|
||||||
|
"small_businesses": "والأعال الصغيرة ",
|
||||||
|
"crater_help": "كريتر يساعدك على تتبع النفقات وتسجيل المدفوعات وإنشاء",
|
||||||
|
"invoices_and_estimates": "الفواتير والتقديرات مع إمكانية اختيار قوالب متعددة."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"invalid_url": "عنوان انترنت غير صحيح (مثال: http://www.crater.com)",
|
||||||
|
"required": "حقل مطلوب",
|
||||||
|
"email_incorrect": "بريد الكتروني غير صحيح.",
|
||||||
|
"email_already_taken": "هذا البريد الالكتروني مستخدم مسبقاً",
|
||||||
|
"email_does_not_exist": "لا يوجد كستخدم بهذا البريد الالكتروني",
|
||||||
|
"item_unit_already_taken": "وحدة البند قد اتخذت بالفعل",
|
||||||
|
"payment_mode_already_taken": "لقد تم بالفعل أخذ طريقة الدفع",
|
||||||
|
"send_reset_link": "أرسال رابط استعادة كلمة المرور",
|
||||||
|
"not_yet": "ليس بعد؟ أعد الإرسال الآن..",
|
||||||
|
"password_min_length": "كلمة المرور يجب أن تتكون من {count} أحرف على الأقل",
|
||||||
|
"name_min_length": "الاسم يجب أن يتكون من {count} أحرف على الأقل",
|
||||||
|
"enter_valid_tax_rate": "أدخل معدل الضريبة بشكل صحيح",
|
||||||
|
"numbers_only": "أرقام فقط.",
|
||||||
|
"characters_only": "حروف فقط.",
|
||||||
|
"password_incorrect": "يجب أن تكون كلمات المرور متطابقة",
|
||||||
|
"password_length": "يجب أن تكون كلمة المرور بطول {count} حرف.",
|
||||||
|
"qty_must_greater_than_zero": "الكمية يجب أن تكون أكبر من صفر.",
|
||||||
|
"price_greater_than_zero": "السعر يجب أن يكون أكبر من صفر.",
|
||||||
|
"payment_greater_than_zero": "الدفعة يجب أن تكون أكبر من صفر.",
|
||||||
|
"payment_greater_than_due_amount": "مبلغ الدفعة أكثر من المبلغ المستحق لهذه الفاتورة.",
|
||||||
|
"quantity_maxlength": "يجب ألا تزيد الكمية عن 20 رقماً.",
|
||||||
|
"price_maxlength": "يجب ألا يزيد السعر عن 20 رقماً.",
|
||||||
|
"price_minvalue": "يجب أن يكون السعر أكبر من صفر.",
|
||||||
|
"amount_maxlength": "يجب ألا يزيد المبلغ عن 20 رقماً.",
|
||||||
|
"amount_minvalue": "يجب أن يكون المبلغ أكبر من صفر.",
|
||||||
|
"description_maxlength": "يجب ألا يزيد الوصف عن 255 حرفاً.",
|
||||||
|
"maximum_options_error": "الحد الأعلى هو {max} خيارات. قم بإزالة أحد الخيارات لتحديد خيار آخر.",
|
||||||
|
"notes_maxlength": "يجب ألا يزيد حجم الملاحظات عن 255 حرفاً.",
|
||||||
|
"address_maxlength": "يجب ألا يزيد العنوان عن 255 حرفاً.",
|
||||||
|
"ref_number_maxlength": "يجب ألا يزيد الرقم المرجعي عن 255 حرفاً.",
|
||||||
|
"prefix_maxlength": "يجب ألا تزيد البادئة عن 5 أحرف."
|
||||||
|
}
|
||||||
|
}
|
||||||
919
resources/assets/js/plugins/de.json
Normal file
919
resources/assets/js/plugins/de.json
Normal file
@ -0,0 +1,919 @@
|
|||||||
|
{
|
||||||
|
"navigation": {
|
||||||
|
"dashboard": "Übersicht",
|
||||||
|
"customers": "Kunden",
|
||||||
|
"items": "Artikel",
|
||||||
|
"invoices": "Rechnungen",
|
||||||
|
"expenses": "Kosten",
|
||||||
|
"estimates": "Kostenvoranschläge",
|
||||||
|
"payments": "Zahlungen",
|
||||||
|
"reports": "Berichte",
|
||||||
|
"settings": "Einstellungen",
|
||||||
|
"logout": "Abmelden"
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"view_pdf": "PDF anzeigen",
|
||||||
|
"download_pdf": "PDF herunterladen",
|
||||||
|
"save": "Speichern",
|
||||||
|
"cancel": "Abrechen",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"deselect": "Entfernen",
|
||||||
|
"download": "Herunterladen",
|
||||||
|
"from_date": "Von Datum",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"from": "Von",
|
||||||
|
"to": "bis",
|
||||||
|
"sort_by": "Sortieren nach",
|
||||||
|
"ascending": "Aufsteigend",
|
||||||
|
"descending": "Absteigend",
|
||||||
|
"subject": "Betreff",
|
||||||
|
"message": "Nachricht",
|
||||||
|
"go_back": "zurück",
|
||||||
|
"back_to_login": "Zurück zum Login?",
|
||||||
|
"home": "Startseite",
|
||||||
|
"filter": "Filter",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"edit": "Ändern",
|
||||||
|
"view": "Anzeigen",
|
||||||
|
"add_new_item": "Artikel hinzufügen",
|
||||||
|
"clear_all": "Alle entfernen",
|
||||||
|
"showing": "Anzeigen",
|
||||||
|
"of": "von",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"subtotal": "ZWISCHENSUMME",
|
||||||
|
"discount": "RABATT",
|
||||||
|
"fixed": "Behoben",
|
||||||
|
"percentage": "Prozentsatz",
|
||||||
|
"tax": "Steuer",
|
||||||
|
"total_amount": "GESAMTSUMME",
|
||||||
|
"bill_to": "Rechnungsempfänger",
|
||||||
|
"ship_to": "Versand ein",
|
||||||
|
"due": "Fällig",
|
||||||
|
"draft": "Entwurf",
|
||||||
|
"sent": "Gesendet",
|
||||||
|
"all": "Alle",
|
||||||
|
"select_all": "Alle auswählen",
|
||||||
|
"choose_file": "Klicken Sie hier, um eine Datei auszuwählen",
|
||||||
|
"choose_template": "Wählen Sie eine Vorlage",
|
||||||
|
"choose": "Wählen",
|
||||||
|
"remove": "Entfernen",
|
||||||
|
"powered_by": "Powered by",
|
||||||
|
"bytefury": "Bytefury",
|
||||||
|
"select_a_status": "Status wählen",
|
||||||
|
"select_a_tax": "Steuersatz wählen",
|
||||||
|
"search": "Suchen",
|
||||||
|
"are_you_sure": "Sind Sie sicher?",
|
||||||
|
"list_is_empty": "Liste ist leer.",
|
||||||
|
"no_tax_found": "Kein Steuersatz gefunden!",
|
||||||
|
"four_zero_four": "Vier hundert vier",
|
||||||
|
"you_got_lost": "Hoppla! Du hast dich verirrt!",
|
||||||
|
"go_home": "Geh zurück",
|
||||||
|
"test_mail_conf": "E-Mail Konfiguration testen",
|
||||||
|
"send_mail_successfully": "E-Mail versendet erfolgreich",
|
||||||
|
"setting_updated": "Einstellungen erfolgreich aktualisiert",
|
||||||
|
"select_state": "Bundesland wählen",
|
||||||
|
"select_country": "Land wählen",
|
||||||
|
"select_city": "Stadt wählen",
|
||||||
|
"street_1": "Straße",
|
||||||
|
"street_2": "Zusatz Strasse",
|
||||||
|
"action_failed": "Aktion fehlgeschlagen",
|
||||||
|
"retry": "Wiederholen"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"select_year": "Jahr wählen",
|
||||||
|
"cards": {
|
||||||
|
"due_amount": "Offene Beträge",
|
||||||
|
"customers": "Kunden",
|
||||||
|
"invoices": "Rechnungen",
|
||||||
|
"estimates": "Kostenvoranschläge"
|
||||||
|
},
|
||||||
|
"chart_info": {
|
||||||
|
"total_sales": "Verkäufe gesamt",
|
||||||
|
"total_receipts": "Eingänge gesamt",
|
||||||
|
"total_expense": "Gesamtausgaben",
|
||||||
|
"net_income": "Einnahmen Netto",
|
||||||
|
"year": "Jahr"
|
||||||
|
},
|
||||||
|
"weekly_invoices": {
|
||||||
|
"title": "Wöchentliche Rechnungen"
|
||||||
|
},
|
||||||
|
"monthly_chart": {
|
||||||
|
"title": "Umsatz & Kosten"
|
||||||
|
},
|
||||||
|
"recent_invoices_card": {
|
||||||
|
"title": "Fällige Rechnungen",
|
||||||
|
"due_on": "Fällig am",
|
||||||
|
"customer": "Kunden",
|
||||||
|
"amount_due": "Offener Betrag",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"view_all": "Alle Anzeigen"
|
||||||
|
},
|
||||||
|
"recent_estimate_card": {
|
||||||
|
"title": "Aktuelle Kostenvoranschläge",
|
||||||
|
"date": "Datum",
|
||||||
|
"customer": "Kunden",
|
||||||
|
"amount_due": "Betrag",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"view_all": "Alle Anzeigen"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"name": "Name",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"percent": "Prozent",
|
||||||
|
"compound_tax": "zusammengesetzte Steuer"
|
||||||
|
},
|
||||||
|
"customers": {
|
||||||
|
"title": "Kunden",
|
||||||
|
"add_customer": "Kunde hinzufügen",
|
||||||
|
"contacts_list": "Kunden-Liste",
|
||||||
|
"name": "Name",
|
||||||
|
"display_name": "Anzeige Name",
|
||||||
|
"primary_contact_name": "Ansprechpartner",
|
||||||
|
"contact_name": "Kontakt Name",
|
||||||
|
"amount_due": "Offener Betrag",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"address": "Adresse",
|
||||||
|
"phone": "Telefon",
|
||||||
|
"website": "Webseite",
|
||||||
|
"country": "Land",
|
||||||
|
"state": "Bundesland",
|
||||||
|
"city": "Stadt",
|
||||||
|
"zip_code": "PLZ",
|
||||||
|
"added_on": "Hinzugefügt am",
|
||||||
|
"action": "Aktion",
|
||||||
|
"password": "Passwort",
|
||||||
|
"street_number": "Hausnummer",
|
||||||
|
"primary_currency": "Primäre Währung",
|
||||||
|
"add_new_customer": "Neuen Kunden hinzufügen",
|
||||||
|
"save_customer": "Kunde speichern",
|
||||||
|
"update_customer": "Kunden ändern",
|
||||||
|
"customer": "Kunde | Kunden",
|
||||||
|
"new_customer": "Neuer Kunde",
|
||||||
|
"edit_customer": "Kunde bearbeiten",
|
||||||
|
"basic_info": "Basisinformation",
|
||||||
|
"billing_address": "Rechnungsadresse",
|
||||||
|
"shipping_address": "Versand-Adresse",
|
||||||
|
"copy_billing_address": "Rechnungsadresse kopieren",
|
||||||
|
"no_customers": "Noch keine Kunden!",
|
||||||
|
"no_customers_found": "Keine Kunden gefunden!",
|
||||||
|
"list_of_customers": "Dieser Abschnitt enthält die Liste der Kunden.",
|
||||||
|
"primary_display_name": "Primärer Anzeige Name",
|
||||||
|
"select_currency": "Währung wählen",
|
||||||
|
"select_a_customer": "Wählen Sie einen Kunden",
|
||||||
|
"type_or_click": "Eingeben oder anklicken zum auswählen",
|
||||||
|
"confirm_delete": "Sie können diesen Kunden und alle zugehörigen Rechnungen, Schätzungen und Zahlungen nicht wiederherstellen. | Sie können diesen Kunden und alle zugehörigen Rechnungen, Schätzungen und Zahlungen nicht wiederherstellen.",
|
||||||
|
"updated_message": "Kunde erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Kunden erfolgreich gelöscht | Kunden erfolgreich gelöscht"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"title": "Artikel",
|
||||||
|
"items_list": "Artikel-Liste",
|
||||||
|
"name": "Name",
|
||||||
|
"unit": "Einheit",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"added_on": "Hinzugefügt am",
|
||||||
|
"price": "Preis",
|
||||||
|
"date_of_creation": "Erstellt am",
|
||||||
|
"action": "Aktion",
|
||||||
|
"add_item": "Artikel hinzufügen",
|
||||||
|
"save_item": "Artikel speichern",
|
||||||
|
"update_item": "Artikel ändern",
|
||||||
|
"item": "Artikel | Artikel",
|
||||||
|
"add_new_item": "Neuen Artikel hinzufügen",
|
||||||
|
"new_item": "Neuer Artikel",
|
||||||
|
"edit_item": "Artikel bearbeiten",
|
||||||
|
"no_items": "Keine Artikel vorhanden!",
|
||||||
|
"list_of_items": "Dieser Abschnitt enthält die Liste der Artikel.",
|
||||||
|
"select_a_unit": "wählen Sie die Einheit",
|
||||||
|
"taxes": "Steuern",
|
||||||
|
"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",
|
||||||
|
"created_message": "Artikel erfolgreich erstellt",
|
||||||
|
"updated_message": "Artikel erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Artikel erfolgreich gelöscht | Artikel erfolgreich gelöscht"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"title": "Kostenvoranschläge",
|
||||||
|
"estimate": "Kostenvoranschlag | Kostenvoranschläge",
|
||||||
|
"estimates_list": "Liste Kostenvoranschläge",
|
||||||
|
"days": "{days} Tage",
|
||||||
|
"months": "{months} Monat",
|
||||||
|
"years": "{years} Jahre",
|
||||||
|
"all": "Alle",
|
||||||
|
"paid": "Bezahlt",
|
||||||
|
"unpaid": "Unbezahlte",
|
||||||
|
"customer": "KUNDEN",
|
||||||
|
"ref_no": "REF. - NR.",
|
||||||
|
"number": "ANZAHL",
|
||||||
|
"amount_due": "OFFENER BETRAG",
|
||||||
|
"partially_paid": "Teilweise bezahlt",
|
||||||
|
"total": "Gesamt",
|
||||||
|
"discount": "Rabatt",
|
||||||
|
"sub_total": "Zwischensumme",
|
||||||
|
"estimate_number": "Kostenvoran. Nummer",
|
||||||
|
"ref_number": "Ref-Nummer",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"add_item": "Fügen Sie ein Artikel hinzu",
|
||||||
|
"date": "Datum",
|
||||||
|
"due_date": "Fälligkeit",
|
||||||
|
"expiry_date": "Zahlungsziel",
|
||||||
|
"status": "Status",
|
||||||
|
"add_tax": "Steuer hinzufügen",
|
||||||
|
"amount": "Summe",
|
||||||
|
"action": "Aktion",
|
||||||
|
"notes": "Hinweise",
|
||||||
|
"tax": "Steuer",
|
||||||
|
"estimate_template": "Vorlage",
|
||||||
|
"convert_to_invoice": "Konvertieren in Rechnung",
|
||||||
|
"mark_as_sent": "Als gesendet markieren",
|
||||||
|
"send_estimate": "Kostenvoranschlag senden",
|
||||||
|
"record_payment": "Zahlung erfassen",
|
||||||
|
"add_estimate": "Kostenvoranschlag hinzufügen",
|
||||||
|
"save_estimate": "Kostenvoranschlag speichern",
|
||||||
|
"confirm_conversion": "Sie möchten, konvertieren Sie diese Schätzung in die Rechnung?",
|
||||||
|
"conversion_message": "Rechnung erfolgreich erstellt",
|
||||||
|
"confirm_send_estimate": "Der Kostenvoranschlag wird per E-Mail an den Kunden gesendet",
|
||||||
|
"confirm_mark_as_sent": "Dieser Kostenvoranschlag wird als gesendet markiert",
|
||||||
|
"confirm_mark_as_accepted": "Dieser Kostenvoranschlag wird als angenommen markiert",
|
||||||
|
"confirm_mark_as_rejected": "Dieser Kostenvoranschlag wird als abgelehnt markiert",
|
||||||
|
"no_matching_estimates": "Es gibt keine übereinstimmenden Kostenvoranschläge!",
|
||||||
|
"mark_as_sent_successfully": "Kostenvoranschlag als gesendet markiert.",
|
||||||
|
"send_estimate_successfully": "Kostenvoranschlag erfolgreich gesendet",
|
||||||
|
"errors": {
|
||||||
|
"required": "Feld ist erforderlich"
|
||||||
|
},
|
||||||
|
"accepted": "Angenommen",
|
||||||
|
"sent": "Gesendet",
|
||||||
|
"draft": "Entwurf",
|
||||||
|
"declined": "Abgelehnt",
|
||||||
|
"new_estimate": "Neuer Kostenvoranschlag",
|
||||||
|
"add_new_estimate": "Neuen Kostenvoranschlag hinzufügen",
|
||||||
|
"update_Estimate": "Kostenvoranschlag aktualisieren",
|
||||||
|
"edit_estimate": "Kostenvoranschlag ändern",
|
||||||
|
"items": "Artikel",
|
||||||
|
"Estimate": "Kostenvoranschlag | Kostenvoranschläge",
|
||||||
|
"add_new_tax": "neuen Steuersatz hinzufügen",
|
||||||
|
"no_estimates": "Keine Kostenvoranschläge vorhanden!",
|
||||||
|
"list_of_estimates": "Dieser Abschnitt enthält die Liste der Kostenvoranschläge.",
|
||||||
|
"mark_as_rejected": "Markiert als abgelehnt",
|
||||||
|
"mark_as_accepted": "Markiert als angenommen",
|
||||||
|
"marked_as_accepted_message": "Kostenvoranschlag als angenommen markiert",
|
||||||
|
"marked_as_rejected_message": "Kostenvoranschlag als abgelehnt markiert",
|
||||||
|
"confirm_delete": "Der Kostenvoranschlag kann nicht wiederhergestellt werden | Die Kostenvoranschläge können nicht wiederhergestellt werden",
|
||||||
|
"created_message": "Kostenvoranschlag erfolgreich erstellt",
|
||||||
|
"updated_message": "Kostenvoranschlag erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Kostenvoranschlag erfolgreich gelöscht | Kostenvoranschläge erfolgreich gelöscht",
|
||||||
|
"user_email_does_not_exist": "Benutzer-E-Mail nicht vorhanden",
|
||||||
|
"something_went_wrong": "Da ging etwas schief",
|
||||||
|
"item": {
|
||||||
|
"title": "Titel",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"quantity": "Menge",
|
||||||
|
"price": "Preis",
|
||||||
|
"discount": "Rabatt",
|
||||||
|
"total": "Gesamt",
|
||||||
|
"total_discount": "Rabatt Gesamt",
|
||||||
|
"sub_total": "Zwischensumme",
|
||||||
|
"tax": "Steuer",
|
||||||
|
"amount": "Summe",
|
||||||
|
"select_an_item": "Wählen Sie einen Artikel",
|
||||||
|
"type_item_description": "Artikel Beschreibung (optional)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"title": "Rechnungen",
|
||||||
|
"invoices_list": "Liste der Rechnungen",
|
||||||
|
"days": "{days} Tage",
|
||||||
|
"months": "{months} Monat",
|
||||||
|
"years": "{years} Jahre",
|
||||||
|
"all": "Alle",
|
||||||
|
"paid": "Bezahlt",
|
||||||
|
"unpaid": "Unbezahlte",
|
||||||
|
"customer": "KUNDEN",
|
||||||
|
"paid_status": "BEZAHLT-STATUS",
|
||||||
|
"ref_no": "REF. - NR.",
|
||||||
|
"number": "ANZAHL",
|
||||||
|
"amount_due": "OFFENER BETRAG",
|
||||||
|
"partially_paid": "Teilzahlung",
|
||||||
|
"total": "Gesamt",
|
||||||
|
"discount": "Rabatt",
|
||||||
|
"sub_total": "Zwischensumme",
|
||||||
|
"invoice": "Rechnung | Rechnungen",
|
||||||
|
"invoice_number": "Rechnungsnummer",
|
||||||
|
"ref_number": "Ref-Nummer",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"add_item": "Fügen Sie ein Artikel hinzu",
|
||||||
|
"date": "Datum",
|
||||||
|
"due_date": "Fälligkeit",
|
||||||
|
"status": "Status",
|
||||||
|
"add_tax": "Steuersatz hinzufügen",
|
||||||
|
"amount": "Summe",
|
||||||
|
"action": "Aktion",
|
||||||
|
"notes": "Hinweise",
|
||||||
|
"view": "Anzeigen",
|
||||||
|
"send_invoice": "Rechnung senden",
|
||||||
|
"invoice_template": "Rechnungs-Vorlage",
|
||||||
|
"template": "Vorlage",
|
||||||
|
"mark_as_sent": "Als gesendet markieren",
|
||||||
|
"confirm_send_invoice": "Diese Rechnung wird per E-Mail an den Kunden gesendet",
|
||||||
|
"invoice_mark_as_sent": "Diese Rechnung wird als gesendet markiert",
|
||||||
|
"confirm_send": "Diese Rechnung wird per E-Mail an den Kunden gesendet",
|
||||||
|
"invoice_date": "Rechnungsdatum",
|
||||||
|
"record_payment": "Zahlung erfassen",
|
||||||
|
"add_new_invoice": "Neue Rechnung hinzufügen",
|
||||||
|
"update_expense": "Kosten aktualisieren",
|
||||||
|
"edit_invoice": "Rechnung bearbeiten",
|
||||||
|
"new_invoice": "Neue Rechnung",
|
||||||
|
"save_invoice": "Rechnung speichern",
|
||||||
|
"update_invoice": "Rechnung ändern",
|
||||||
|
"add_new_tax": "Neuen Steuersatz hinzufügen",
|
||||||
|
"no_invoices": "Keine Rechnungen vorhanden!",
|
||||||
|
"list_of_invoices": "Dieser Abschnitt enthält die Liste der Rechnungen.",
|
||||||
|
"select_invoice": "Wählen Sie eine Rechnung",
|
||||||
|
"no_matching_invoices": "Es gibt keine entsprechenden Rechnungen!",
|
||||||
|
"mark_as_sent_successfully": "Rechnung gekennzeichnet als erfolgreich gesendet",
|
||||||
|
"send_invoice_successfully": "Rechnung erfolgreich versendet",
|
||||||
|
"cloned_successfully": "Rechnung erfolgreich kopiert",
|
||||||
|
"clone_invoice": "Rechnung kopieren",
|
||||||
|
"confirm_clone": "Diese Rechnung wird kopiert",
|
||||||
|
"item": {
|
||||||
|
"title": "Titel",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"quantity": "Menge",
|
||||||
|
"price": "Preis",
|
||||||
|
"discount": "Rabatt",
|
||||||
|
"total": "Gesamt",
|
||||||
|
"total_discount": "Rabatt Gesamt",
|
||||||
|
"sub_total": "Zwischensumme",
|
||||||
|
"tax": "Steuer",
|
||||||
|
"amount": "Summe",
|
||||||
|
"select_an_item": "Geben Sie oder wählen Sie ein Artikel",
|
||||||
|
"type_item_description": "Artikel Beschreibung (optional)"
|
||||||
|
},
|
||||||
|
"payment_attached_message": "Einer der ausgewählten Rechnungen ist bereits eine Zahlung zugeordnet. Stellen Sie sicher, dass Sie zuerst die angehängten Zahlungen löschen, um mit dem Entfernen fortzufahren",
|
||||||
|
"confirm_delete": "Sie können diese Rechnung nicht wiederherstellen. | Sie können diese Rechnungen nicht wiederherstellen.",
|
||||||
|
"created_message": "Rechnung erfolgreich erstellt",
|
||||||
|
"updated_message": "Rechnung erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Rechnung erfolgreich gelöscht | Rechnungen erfolgreich gelöscht",
|
||||||
|
"marked_as_sent_message": "Rechnung als erfolgreich gesendet markiert",
|
||||||
|
"user_email_does_not_exist": "Benutzer-E-Mail existiert nicht",
|
||||||
|
"something_went_wrong": "Da ist etwas schief gelaufen",
|
||||||
|
"invalid_due_amount_message": "Der Gesamtrechnungsbetrag darf nicht kleiner sein als der für diese Rechnung bezahlte Gesamtbetrag. Bitte aktualisieren Sie die Rechnung oder löschen Sie die zugehörigen Zahlungen um fortzufahren."
|
||||||
|
},
|
||||||
|
"credit_notes": {
|
||||||
|
"title": "Gutschriften",
|
||||||
|
"credit_notes_list": "Gutschriften-Liste",
|
||||||
|
"credit_notes": "Gutschriften",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"date": "Datum",
|
||||||
|
"amount": "Summe",
|
||||||
|
"action": "Aktion",
|
||||||
|
"credit_number": "Kreditkarten-Nummer",
|
||||||
|
"notes": "Hinweise",
|
||||||
|
"confirm_delete": "Wollen Sie diese Gutschrift löschen?",
|
||||||
|
"item": {
|
||||||
|
"title": "Titel",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"quantity": "Menge",
|
||||||
|
"price": "Preis",
|
||||||
|
"discount": "Rabatt",
|
||||||
|
"total": "Gesamt",
|
||||||
|
"total_discount": "Rabatt Gesamt",
|
||||||
|
"sub_total": "Zwischensumme",
|
||||||
|
"tax": "Steuer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"payments": {
|
||||||
|
"title": "Zahlungen",
|
||||||
|
"payments_list": "Liste der Zahlungen",
|
||||||
|
"record_payment": "Zahlung eintragen",
|
||||||
|
"customer": "Kunden",
|
||||||
|
"date": "Datum",
|
||||||
|
"amount": "Summe",
|
||||||
|
"action": "Aktion",
|
||||||
|
"payment_number": "Zahlungsnummer",
|
||||||
|
"payment_mode": "Zahlungsart",
|
||||||
|
"invoice": "Rechnung",
|
||||||
|
"note": "Hinweis",
|
||||||
|
"add_payment": "Zahlung hinzufügen",
|
||||||
|
"new_payment": "Neue Zahlung",
|
||||||
|
"edit_payment": "Zahlung bearbeiten",
|
||||||
|
"view_payment": "Zahlung anzeigen",
|
||||||
|
"add_new_payment": "Neue Zahlung hinzufügen",
|
||||||
|
"send_payment_receipt": "Send Payment Receipt",
|
||||||
|
"save_payment": "Zahlung speichern",
|
||||||
|
"update_payment": "Zahlung ändern",
|
||||||
|
"payment": "Zahlung | Zahlungen",
|
||||||
|
"no_payments": "Keine Zahlungen vorhanden!",
|
||||||
|
"no_matching_payments": "Es gibt keine passenden Zahlungen!",
|
||||||
|
"list_of_payments": "Dieser Abschnitt enthält die Liste der Zahlungen.",
|
||||||
|
"select_payment_mode": "Wählen Sie den Zahlungsmodus",
|
||||||
|
"confirm_send_payment": "This payment will be sent via email to the customer",
|
||||||
|
"send_payment_successfully": "Payment sent successfully",
|
||||||
|
"user_email_does_not_exist": "User email does not exist",
|
||||||
|
"something_went_wrong": "something went wrong",
|
||||||
|
"confirm_delete": "Sie können diese Zahlung nicht wiederherstellen. | Sie können diese Zahlungen nicht wiederherstellen.",
|
||||||
|
"created_message": "Zahlung erfolgreich erstellt",
|
||||||
|
"updated_message": "Zahlung erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Zahlung erfolgreich gelöscht | Zahlungen erfolgreich gelöscht",
|
||||||
|
"invalid_amount_message": "Zahlungsbetrag ist ungültig"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"title": "Aufwendungen/Ausgaben",
|
||||||
|
"expenses_list": "Liste der Ausgaben",
|
||||||
|
"expense_title": "Titel",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"category": "Kategorie",
|
||||||
|
"from_date": "Von Datum",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"expense_date": "Datum",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"receipt": "Eingang",
|
||||||
|
"amount": "Summe",
|
||||||
|
"action": "Aktion",
|
||||||
|
"note": "Hinweis",
|
||||||
|
"category_id": "Kategorie-Id",
|
||||||
|
"date": "Aufwandsdatum",
|
||||||
|
"add_expense": "Aufwendung hinzufügen",
|
||||||
|
"add_new_expense": "Neue Aufwendung hinzufügen",
|
||||||
|
"save_expense": "Aufwendung speichern",
|
||||||
|
"update_expense": "Aufwendung aktualisieren",
|
||||||
|
"download_receipt": "Quittung herunterladen",
|
||||||
|
"edit_expense": "Aufwendung ändern",
|
||||||
|
"new_expense": "Neue Aufwendung",
|
||||||
|
"expense": "Aufwendung | Aufwendungen",
|
||||||
|
"no_expenses": "Noch keine Ausgaben!",
|
||||||
|
"list_of_expenses": "Dieser Abschnitt enthält die Liste der Ausgaben.",
|
||||||
|
"confirm_delete": "Sie können diese Ausgabe nicht wiederherstellen. | Sie können diese Ausgaben nicht wiederherstellen.",
|
||||||
|
"created_message": "Aufwand erfolgreich erstellt",
|
||||||
|
"updated_message": "Aufwand erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Aufwand erfolgreich gelöscht | Aufwand erfolgreich gelöscht",
|
||||||
|
"categories": {
|
||||||
|
"categories_list": "Liste der Kategorien",
|
||||||
|
"title": "Titel",
|
||||||
|
"name": "Name",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"amount": "Summe",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"add_category": "Kategorie hinzufügen",
|
||||||
|
"new_category": "Neue Kategorie",
|
||||||
|
"category": "Kategorie | Kategorien",
|
||||||
|
"select_a_category": "Wählen Sie eine Kategorie"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"email": "E-Mail",
|
||||||
|
"password": "Passwort",
|
||||||
|
"forgot_password": "Passwort vergessen?",
|
||||||
|
"or_signIn_with": "oder Anmelden mit",
|
||||||
|
"login": "Anmelden",
|
||||||
|
"register": "Registrieren",
|
||||||
|
"reset_password": "Passwort zurücksetzen",
|
||||||
|
"password_reset_successfully": "Passwort erfolgreich zurückgesetzt",
|
||||||
|
"enter_email": "Geben Sie Ihre E-Mail ein",
|
||||||
|
"enter_password": "Geben Sie das Passwort ein",
|
||||||
|
"retype_password": "Passwort bestätigen",
|
||||||
|
"login_placeholder": "mail@beispiel.de"
|
||||||
|
},
|
||||||
|
"reports": {
|
||||||
|
"title": "Bericht",
|
||||||
|
"from_date": "Ab Datum",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"status": "Status",
|
||||||
|
"paid": "Bezahlt",
|
||||||
|
"unpaid": "Unbezahlt",
|
||||||
|
"download_pdf": "PDF herunterladen",
|
||||||
|
"view_pdf": "PDF anzeigen",
|
||||||
|
"update_report": "Bericht aktualisieren",
|
||||||
|
"report": "Bericht | Berichte",
|
||||||
|
"profit_loss": {
|
||||||
|
"profit_loss": "Gewinn & Verlust",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"from_date": "Ab Datum",
|
||||||
|
"date_range": "Datumsbereich auswählen"
|
||||||
|
},
|
||||||
|
"sales": {
|
||||||
|
"sales": "Vertrieb",
|
||||||
|
"date_range": "Datumsbereich auswählen",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"from_date": "Ab Datum",
|
||||||
|
"report_type": "Berichtstyp"
|
||||||
|
},
|
||||||
|
"taxes": {
|
||||||
|
"taxes": "Steuern",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"from_date": "Ab Datum",
|
||||||
|
"date_range": "Datumsbereich auswählen"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"required": "Feld ist erforderlich"
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"invoice": "Rechnung",
|
||||||
|
"invoice_date": "Rechnungsdatum",
|
||||||
|
"due_date": "Fälligkeit",
|
||||||
|
"amount": "Summe",
|
||||||
|
"contact_name": "Ansprechpartner",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"estimate": "Kostenvoranschlag",
|
||||||
|
"estimate_date": "Datum Kostenvoranschlag",
|
||||||
|
"due_date": "Fälligkeit",
|
||||||
|
"estimate_number": "Kostenvoranschlag-Nr.",
|
||||||
|
"ref_number": "Ref-Nummer",
|
||||||
|
"amount": "Summe",
|
||||||
|
"contact_name": "Ansprechpartner",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"expenses": "Aufwendungen",
|
||||||
|
"category": "Kategorie",
|
||||||
|
"date": "Datum",
|
||||||
|
"amount": "Summe",
|
||||||
|
"to_date": "bis Datum",
|
||||||
|
"from_date": "Ab Datum",
|
||||||
|
"date_range": "Datumsbereich auswählen"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"menu_title": {
|
||||||
|
"account_settings": "Konto-Einstellungen",
|
||||||
|
"company_information": "Informationen zum Unternehmen",
|
||||||
|
"customization": "Anpassung",
|
||||||
|
"preferences": "Einstellungen",
|
||||||
|
"notifications": "Benachrichtigungen",
|
||||||
|
"tax_types": "Steuersätze",
|
||||||
|
"expense_category": "Ausgabenkategorien",
|
||||||
|
"update_app": "Applikation aktualisieren"
|
||||||
|
},
|
||||||
|
"title": "Einstellungen",
|
||||||
|
"setting": "Einstellung | Einstellungen",
|
||||||
|
"general": "Allgemeine",
|
||||||
|
"language": "Sprache",
|
||||||
|
"primary_currency": "Primäre Währung",
|
||||||
|
"timezone": "Zeitzone",
|
||||||
|
"date_format": "Datum-Format",
|
||||||
|
"currencies": {
|
||||||
|
"title": "Währungen",
|
||||||
|
"currency": "Währung | Währungen",
|
||||||
|
"currencies_list": "Währungen Liste",
|
||||||
|
"select_currency": "Währung wählen",
|
||||||
|
"name": "Name",
|
||||||
|
"code": "Code",
|
||||||
|
"symbol": "Symbol",
|
||||||
|
"precision": "Präzision",
|
||||||
|
"thousand_separator": "Tausendertrennzeichen",
|
||||||
|
"decimal_separator": "Dezimal-Trennzeichen",
|
||||||
|
"position": "Position",
|
||||||
|
"position_of_symbol": "Position des Währungssymbol",
|
||||||
|
"right": "Rechts",
|
||||||
|
"left": "Links",
|
||||||
|
"action": "Aktion",
|
||||||
|
"add_currency": "Währung einfügen"
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "E-Mail Mailserver",
|
||||||
|
"port": "E-Mail Port",
|
||||||
|
"driver": "E-Mail Treiber",
|
||||||
|
"secret": "Verschlüsselung",
|
||||||
|
"mailgun_secret": "Mailgun Verschlüsselung",
|
||||||
|
"mailgun_domain": "Domain",
|
||||||
|
"mailgun_endpoint": "Mailgun-Endpunkt",
|
||||||
|
"ses_secret": "SES Verschlüsselung",
|
||||||
|
"ses_key": "SES-Taste",
|
||||||
|
"password": "E-Mail-Kennwort",
|
||||||
|
"username": "E-Mail-Benutzername",
|
||||||
|
"mail_config": "E-Mail-Konfiguration",
|
||||||
|
"from_name": "Von E-Mail-Namen",
|
||||||
|
"from_mail": "Von E-Mail-Adresse",
|
||||||
|
"encryption": "E-Mail-Verschlüsselung",
|
||||||
|
"mail_config_desc": "Unten finden Sie das Formular zum Konfigurieren des E-Mail-Treibers zum Senden von E-Mails über die App. Sie können auch Drittanbieter wie Sendgrid, SES usw. konfigurieren."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"title": "PDF-Einstellung",
|
||||||
|
"footer_text": "Fußzeile Text",
|
||||||
|
"pdf_layout": "PDF-Layout"
|
||||||
|
},
|
||||||
|
"company_info": {
|
||||||
|
"company_info": "Firmeninfo",
|
||||||
|
"company_name": "Name des Unternehmens",
|
||||||
|
"company_logo": "Firmenlogo",
|
||||||
|
"section_description": "Informationen zu Ihrem Unternehmen, die auf Rechnungen, Kostenvoranschlägen und anderen von Crater erstellten Dokumenten angezeigt werden.",
|
||||||
|
"phone": "Telefon",
|
||||||
|
"country": "Land",
|
||||||
|
"state": "Bundesland",
|
||||||
|
"city": "Stadt",
|
||||||
|
"address": "Adresse",
|
||||||
|
"zip": "PLZ",
|
||||||
|
"save": "Speichern",
|
||||||
|
"updated_message": "Unternehmensinformationen wurden erfolgreich aktualisiert"
|
||||||
|
},
|
||||||
|
"customization": {
|
||||||
|
"customization": "Anpassung",
|
||||||
|
"save": "Speichern",
|
||||||
|
"addresses": {
|
||||||
|
"title": "Adressen",
|
||||||
|
"section_description": "Sie können die Rechnungsadresse und das Versandadressenformat des Kunden festlegen (nur in PDF angezeigt). ",
|
||||||
|
"customer_billing_address": "Rechnungsadresse des Kunden",
|
||||||
|
"customer_shipping_address": "Versand-Adresse des Kunden",
|
||||||
|
"company_address": "Firma Adresse",
|
||||||
|
"insert_fields": "Felder einfügen",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"address": "Adresse",
|
||||||
|
"display_name": "Anzeigename",
|
||||||
|
"primary_contact_name": "Ansprechpartner",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"website": "Website",
|
||||||
|
"name": "Name",
|
||||||
|
"country": "Land",
|
||||||
|
"state": "Bundesland",
|
||||||
|
"city": "Stadt",
|
||||||
|
"company_name": "Name des Unternehmens",
|
||||||
|
"address_street_1": "Strasse",
|
||||||
|
"address_street_2": "Zusatz Strasse",
|
||||||
|
"phone": "Telefon",
|
||||||
|
"zip_code": "PLZ",
|
||||||
|
"address_setting_updated": "Adresse-Einstellung erfolgreich aktualisiert"
|
||||||
|
},
|
||||||
|
"updated_message": "Unternehmensinformationen wurden erfolgreich aktualisiert",
|
||||||
|
"invoices": {
|
||||||
|
"title": "Rechnungen",
|
||||||
|
"notes": "Hinweise",
|
||||||
|
"invoice_prefix": "Rechnung Präfix",
|
||||||
|
"invoice_settings": "Rechnungseinstellungen",
|
||||||
|
"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.",
|
||||||
|
"enter_invoice_prefix": "Rechnungspräfix eingeben",
|
||||||
|
"terms_and_conditions": "Allgemeine Geschäftsbedingungen",
|
||||||
|
"invoice_setting_updated": "Rechnungseinstellung erfolgreich aktualisiert"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"title": "Kostenvoranschläge",
|
||||||
|
"estimate_prefix": "Kostenvoranschlag Präfix",
|
||||||
|
"estimate_settings": "Einstellungen Kostenvoranschlag",
|
||||||
|
"autogenerate_estimate_number": "Kostenvoranschlagsnummer 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.",
|
||||||
|
"enter_estimate_prefix": "Geben Sie das Kostenvoranschlag Präfix ein",
|
||||||
|
"estimate_setting_updated": "Einstellungen Kostenvoranschläge erfolgreich aktualisiert"
|
||||||
|
},
|
||||||
|
"payments": {
|
||||||
|
"title": "Zahlungen",
|
||||||
|
"payment_prefix": "Zahlung Präfix",
|
||||||
|
"payment_settings": "Zahlung Einstellungen",
|
||||||
|
"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.",
|
||||||
|
"enter_payment_prefix": "Zahlungspräfix eingeben",
|
||||||
|
"payment_setting_updated": "Zahlungseinstellung erfolgreich aktualisiert",
|
||||||
|
"payment_mode": "Zahlungsmethode",
|
||||||
|
"add_payment_mode": "Zahlungsmethode hinzufügen",
|
||||||
|
"mode_name": "Methodenname",
|
||||||
|
"payment_mode_added": "Zahlungsmethode hinzugefügt",
|
||||||
|
"payment_mode_updated": "Zahlungsmethode aktualisiert",
|
||||||
|
"payment_mode_confirm_delete": "Du kannst diese Zahlungsmethode nicht wiederherstellen",
|
||||||
|
"already_in_use": "Zahlungsmethode bereits in Verwendung",
|
||||||
|
"deleted_message": "Zahlungsmethode erfolgreich"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"title": "Artikel",
|
||||||
|
"units": "Einheiten",
|
||||||
|
"add_item_unit": "Artikeleinheit hinzufügen",
|
||||||
|
"unit_name": "Einheitname",
|
||||||
|
"item_unit_added": "Artikeleinheit hinzugefügt",
|
||||||
|
"item_unit_updated": "Artikeleinheit aktualisiert",
|
||||||
|
"item_unit_confirm_delete": "Du kannst diese Artikeleinheit nicht wiederherstellen",
|
||||||
|
"already_in_use": "Diese Artikeleinheit ist bereits in Verwendung",
|
||||||
|
"deleted_message": "Artikeleinheit erfolgreich gelöscht"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"profile_picture": "Profil Bild",
|
||||||
|
"name": "Name",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"password": "Passwort",
|
||||||
|
"confirm_password": "Kennwort Bestätigen",
|
||||||
|
"account_settings": "Konto-Einstellungen",
|
||||||
|
"save": "Speichern",
|
||||||
|
"section_description": "Sie können Ihren Namen, Ihre E-Mail-Adresse und Ihr Passwort mit dem folgenden Formular aktualisieren.",
|
||||||
|
"updated_message": "Kontoeinstellungen erfolgreich aktualisiert"
|
||||||
|
},
|
||||||
|
"user_profile": {
|
||||||
|
"name": "Name",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"password": "Passwort",
|
||||||
|
"confirm_password": "Kennwort bestätigen"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"title": "Benachrichtigung",
|
||||||
|
"email": "Benachrichtigungen senden an",
|
||||||
|
"description": "Welche E-Mail-Benachrichtigungen möchten Sie erhalten wenn sich etwas ändert?",
|
||||||
|
"invoice_viewed": "Rechnung angezeigt",
|
||||||
|
"invoice_viewed_desc": "Wenn Ihr Kunde die gesendete Rechnung anzeigt bekommt.",
|
||||||
|
"estimate_viewed": "Kostenvoranschlag angesehen",
|
||||||
|
"estimate_viewed_desc": "Wenn Ihr Kunde den gesendeten Kostenvoranschlag anzeigt bekommt.",
|
||||||
|
"save": "Speichern",
|
||||||
|
"email_save_message": "Email erfolgreich gespeichert",
|
||||||
|
"please_enter_email": "Bitte E-Mail eingeben"
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"title": "Steuersätze",
|
||||||
|
"add_tax": "Steuersätze hinzufügen",
|
||||||
|
"description": "Sie können Steuern nach Belieben hinzufügen oder entfernen. Crater unterstützt Steuern auf einzelne Artikel sowie auf die Rechnung.",
|
||||||
|
"add_new_tax": "Neuen Steuersatz hinzufügen",
|
||||||
|
"tax_settings": "Einstellungen Steuersatz",
|
||||||
|
"tax_per_item": "Steuersatz pro Artikel",
|
||||||
|
"tax_name": "Name des Steuersatzes",
|
||||||
|
"compound_tax": "Compound Tax",
|
||||||
|
"percent": "Prozent",
|
||||||
|
"action": "Aktion",
|
||||||
|
"tax_setting_description": "Aktivieren Sie diese Option, wenn Sie den Steuersatz zu einzelnen Rechnungspositionen hinzufügen möchten. Standardmäßig wird der Steuersatz direkt zur Rechnung hinzugefügt.",
|
||||||
|
"created_message": "Steuersatz erfolgreich erstellt",
|
||||||
|
"updated_message": "Steuersatz erfolgreich aktualisiert",
|
||||||
|
"deleted_message": "Steuersatz erfolgreich gelöscht",
|
||||||
|
"confirm_delete": "Sie können diesen Steuersatz nicht wiederherstellen",
|
||||||
|
"already_in_use": "Steuersatz wird bereits verwendet"
|
||||||
|
},
|
||||||
|
"expense_category": {
|
||||||
|
"title": "Kategorien Kosten",
|
||||||
|
"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.",
|
||||||
|
"add_new_category": "Neue Kategorie hinzufügen",
|
||||||
|
"category_name": "Kategorie Name",
|
||||||
|
"category_description": "Beschreibung",
|
||||||
|
"created_message": "Ausgabenkategorie erfolgreich erstellt",
|
||||||
|
"deleted_message": "Ausgabenkategorie erfolgreich gelöscht",
|
||||||
|
"updated_message": "Ausgabenkategorie erfolgreich aktualisiert",
|
||||||
|
"confirm_delete": "Sie können diese Ausgabenkategorie nicht wiederherstellen",
|
||||||
|
"already_in_use": "Kategorie wird bereits verwendet"
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"currency": "Währung",
|
||||||
|
"language": "Sprache",
|
||||||
|
"time_zone": "Zeitzone",
|
||||||
|
"fiscal_year": "Geschäftsjahr",
|
||||||
|
"date_format": "Datum-Format",
|
||||||
|
"discount_setting": "Einstellung Rabatt",
|
||||||
|
"discount_per_item": "Rabatt pro Artikel ",
|
||||||
|
"discount_setting_description": "Aktivieren Sie diese Option, wenn Sie einzelnen Rechnungspositionen einen Rabatt hinzufügen möchten. Standardmäßig wird der Rabatt direkt zur Rechnung hinzugefügt.",
|
||||||
|
"save": "Speichern",
|
||||||
|
"preference": "Präferenz | Präferenzen",
|
||||||
|
"general_settings": "Standardeinstellungen für das System.",
|
||||||
|
"updated_message": "Einstellungen erfolgreich aktualisiert",
|
||||||
|
"select_language": "Sprache auswählen",
|
||||||
|
"select_time_zone": "Zeitzone auswählen",
|
||||||
|
"select_date_formate": "select Date Formate",
|
||||||
|
"select_financial_year": "Geschäftsjahr auswählen"
|
||||||
|
},
|
||||||
|
"update_app": {
|
||||||
|
"title": "Applikation aktualisieren",
|
||||||
|
"description": "Sie können Crater ganz einfach aktualisieren, indem Sie auf die Schaltfläche unten klicken, um nach einem neuen Update zu suchen.",
|
||||||
|
"check_update": "Nach Updates suchen",
|
||||||
|
"avail_update": "Neues Update verfügbar",
|
||||||
|
"next_version": "Nächste Version",
|
||||||
|
"update": "Jetzt aktualisieren",
|
||||||
|
"update_progress": "Update läuft ...",
|
||||||
|
"progress_text": "Es dauert nur ein paar Minuten. Bitte aktualisieren Sie den Bildschirm nicht und schließen Sie das Fenster nicht, bevor das Update abgeschlossen ist.",
|
||||||
|
"update_success": "App wurde aktualisiert! Bitte warten Sie, während Ihr Browserfenster automatisch neu geladen wird.",
|
||||||
|
"latest_message": "Kein Update verfügbar! Du bist auf der neuesten Version.",
|
||||||
|
"current_version": "Aktuelle Version",
|
||||||
|
"download_zip_file": "Laden Sie die ZIP-Datei herunter",
|
||||||
|
"unzipping_package": "Paket entpacken",
|
||||||
|
"copying_files": "Dateien kopieren",
|
||||||
|
"running_migrations": "Ausführen von Migrationen",
|
||||||
|
"finishing_update": "Update beenden",
|
||||||
|
"update_failed": "Update fehlgeschlagen",
|
||||||
|
"update_failed_text": "Es tut uns leid! Ihr Update ist am folgenden Schritt fehlgeschlagen: {step}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"account_info": "Account-Informationen",
|
||||||
|
"account_info_desc": "Die folgenden Details werden zum Erstellen des Hauptadministratorkontos verwendet. Sie können die Details auch jederzeit nach dem Anmelden ändern.",
|
||||||
|
"name": "Name",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Passwort",
|
||||||
|
"confirm_password": "Passwort bestätigen",
|
||||||
|
"save_cont": "Speichern und weiter",
|
||||||
|
"company_info": "Unternehmensinformationen",
|
||||||
|
"company_info_desc": "Diese Informationen werden auf Rechnungen angezeigt. Beachten Sie, dass Sie diese später auf der Einstellungsseite bearbeiten können.",
|
||||||
|
"company_name": "Firmenname",
|
||||||
|
"company_logo": "Firmenlogo",
|
||||||
|
"logo_preview": "Vorschau Logo",
|
||||||
|
"preferences": "Einstellungen",
|
||||||
|
"preferences_desc": "Standardeinstellungen für das System.",
|
||||||
|
"country": "Land",
|
||||||
|
"state": "Bundesland",
|
||||||
|
"city": "Stadt",
|
||||||
|
"address": "Adresse",
|
||||||
|
"street": "Straße1 | Straße2",
|
||||||
|
"phone": "Telefon",
|
||||||
|
"zip_code": "Postleitzahl",
|
||||||
|
"go_back": "Zurück",
|
||||||
|
"currency": "Währung",
|
||||||
|
"language": "Sprache",
|
||||||
|
"time_zone": "Zeitzone",
|
||||||
|
"fiscal_year": "Geschäftsjahr",
|
||||||
|
"date_format": "Datumsformat",
|
||||||
|
"from_address": "From Address",
|
||||||
|
"username": "Benutzername",
|
||||||
|
"next": "Next",
|
||||||
|
"continue": "Weiter",
|
||||||
|
"skip": "Überspringen",
|
||||||
|
"database": {
|
||||||
|
"database": "URL der Seite & Datenbank",
|
||||||
|
"connection": "Datenbank Verbindung",
|
||||||
|
"host": "Datenbank Host",
|
||||||
|
"port": "Datenbank Port",
|
||||||
|
"password": "Datenbank Passwort",
|
||||||
|
"app_url": "App-URL",
|
||||||
|
"username": "Datenbank Benutzername",
|
||||||
|
"db_name": "Datenbank Name",
|
||||||
|
"desc": "Erstellen Sie eine Datenbank auf Ihrem Server und legen Sie die Anmeldeinformationen mithilfe des folgenden Formulars fest."
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"permissions": "Berechtigungen",
|
||||||
|
"permission_confirm_title": "Sind Sie sicher, dass Sie fortfahren möchten?",
|
||||||
|
"permission_confirm_desc": "Prüfung der Berechtigung der Ordner fehlgeschlagen.",
|
||||||
|
"permission_desc": "Unten finden Sie eine Liste der Ordnerberechtigungen, die erforderlich sind, damit die App funktioniert. Wenn die Berechtigungsprüfung fehlschlägt, müssen Sie Ihre Ordnerberechtigungen aktualisieren."
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "E-Mail-Host",
|
||||||
|
"port": "E-Mail-Port",
|
||||||
|
"driver": "E-Mail-Treiber",
|
||||||
|
"secret": "Verschlüsselung",
|
||||||
|
"mailgun_secret": "Mailgun Verschlüsselung",
|
||||||
|
"mailgun_domain": "Domain",
|
||||||
|
"mailgun_endpoint": "Mailgun-Endpunkt",
|
||||||
|
"ses_secret": "SES Verschlüsselung",
|
||||||
|
"ses_key": "SES-Taste",
|
||||||
|
"password": "E-Mail-Passwort",
|
||||||
|
"username": "E-Mail-Benutzername",
|
||||||
|
"mail_config": "E-Mail-Konfiguration",
|
||||||
|
"from_name": "Von E-Mail-Absendername",
|
||||||
|
"from_mail": "Von E-Mail-Absenderadresse",
|
||||||
|
"encryption": "E-Mail-Verschlüsselung",
|
||||||
|
"mail_config_desc": "Unten finden Sie das Formular zum Konfigurieren des E-Mail-Treibers zum Senden von E-Mails über die App. Sie können auch Drittanbieter wie Sendgrid, SES usw. konfigurieren."
|
||||||
|
},
|
||||||
|
"req": {
|
||||||
|
"system_req": "System Anforderungen",
|
||||||
|
"php_req_version": "Php (version {version} erforderlich)",
|
||||||
|
"check_req": "Anforderungen prüfen",
|
||||||
|
"system_req_desc": "Crater hat einige Serveranforderungen. Stellen Sie sicher, dass Ihr Server die erforderliche PHP-Version und alle unten genannten Erweiterungen hat."
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"migrate_failed": "Migration ist Fehlgeschlagen",
|
||||||
|
"database_variables_save_error": "Konfiguration kann nicht in EN.env-Datei geschrieben werden. Bitte überprüfen Sie die Dateiberechtigungen.",
|
||||||
|
"mail_variables_save_error": "E-Mail-Konfiguration fehlgeschlagen.",
|
||||||
|
"connection_failed": "Datenbankverbindung fehlgeschlagen",
|
||||||
|
"database_should_be_empty": "Datenbank sollte leer sein"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"mail_variables_save_successfully": "E-Mail erfolgreich konfiguriert",
|
||||||
|
"database_variables_save_successfully": "Datenbank erfolgreich konfiguriert."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout_login": {
|
||||||
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
|
"super_simple_invoicing": "Super einfache Buchhaltung",
|
||||||
|
"for_freelancer": "für Freelancers &",
|
||||||
|
"small_businesses": "kleine Unternehmen",
|
||||||
|
"crater_help": "Crater hilft dir eine wunderschönen Überblick über deine Buchhaltung zuhaben.",
|
||||||
|
"invoices_and_estimates": "Die Möglichkeit mehrere Versionen von Rechnungen und Kosten zuerstellen."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"invalid_url": "Ungültige URL (Bsp.: http://www.crater.com)",
|
||||||
|
"required": "Feld ist erforderlich",
|
||||||
|
"email_incorrect": "Falsche E-Mail.",
|
||||||
|
"email_already_taken": "Die E-Mail ist bereits vergeben.",
|
||||||
|
"email_does_not_exist": "Benutzer mit der angegebenen E-Mail existiert nicht",
|
||||||
|
"item_unit_already_taken": "Die Artikeleinheit wurde bereits vergeben",
|
||||||
|
"payment_mode_already_taken": "Der Zahlungsmodus wurde bereits verwendet",
|
||||||
|
"send_reset_link": "Link zum Zurücksetzen senden",
|
||||||
|
"not_yet": "Noch erhalten? Erneut senden",
|
||||||
|
"password_min_length": "Password muß {count} Zeichen enthalten",
|
||||||
|
"name_min_length": "Name muss mindestens {count} Zeichen enthalten.",
|
||||||
|
"enter_valid_tax_rate": "Geben Sie einen gültige Steuersatz ein",
|
||||||
|
"numbers_only": "Nur Zahlen.",
|
||||||
|
"characters_only": "Nur Zeichen.",
|
||||||
|
"password_incorrect": "Passwörter müssen identisch sein",
|
||||||
|
"password_length": "Passwort muss {count} Zeichen lang sein.",
|
||||||
|
"qty_must_greater_than_zero": "Die Menge muss größer als 0 sein.",
|
||||||
|
"price_greater_than_zero": "Preis muss größer als 0 sein.",
|
||||||
|
"payment_greater_than_zero": "Die Zahlung muss größer als 0 sein.",
|
||||||
|
"payment_greater_than_due_amount": "Die eingegebene Zahlung ist mehr als der fällige Betrag dieser Rechnung.",
|
||||||
|
"quantity_maxlength": "Die Menge sollte nicht größer als 20 Ziffern sein.",
|
||||||
|
"price_maxlength": "Der Preis sollte nicht größer als 20 Ziffern sein.",
|
||||||
|
"price_minvalue": "Der Preis sollte größer als 0 sein.",
|
||||||
|
"amount_maxlength": "Der Betrag sollte nicht größer als 20 Ziffern sein.",
|
||||||
|
"amount_minvalue": "Betrag sollte größer als 0 sein.",
|
||||||
|
"description_maxlength": "Die Beschreibung sollte nicht länger als 255 Zeichen sein.",
|
||||||
|
"subject_maxlength": "Der Betreff sollte nicht länger als 100 Zeichen sein.",
|
||||||
|
"message_maxlength": "Die Nachricht sollte nicht länger als 255 Zeichen sein.",
|
||||||
|
"maximum_options_error": "Maximal {max} Optionen ausgewählt. Entfernen Sie zuerst eine ausgewählte Option, um eine andere auszuwählen.",
|
||||||
|
"notes_maxlength": "Notizen sollten 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.",
|
||||||
|
"prefix_maxlength": "Das Präfix sollte nicht länger als 5 Zeichen sein.",
|
||||||
|
"something_went_wrong": "Etwas ist falsch gelaufen"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,15 +13,22 @@
|
|||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"view_pdf": "View PDF",
|
"view_pdf": "View PDF",
|
||||||
|
"copy_pdf_url": "Copy PDF Url",
|
||||||
"download_pdf": "Download PDF",
|
"download_pdf": "Download PDF",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
|
"deselect": "Deselect",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"from_date": "From Date",
|
"from_date": "From Date",
|
||||||
"to_date": "To Date",
|
"to_date": "To Date",
|
||||||
"from": "From",
|
"from": "From",
|
||||||
"to": "To",
|
"to": "To",
|
||||||
|
"sort_by": "Sort By",
|
||||||
|
"ascending": "Ascending",
|
||||||
|
"descending": "Descending",
|
||||||
|
"subject": "Subject",
|
||||||
|
"message": "Message",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"back_to_login": "Back to Login?",
|
"back_to_login": "Back to Login?",
|
||||||
"home": "Home",
|
"home": "Home",
|
||||||
@ -62,14 +69,16 @@
|
|||||||
"four_zero_four": "404",
|
"four_zero_four": "404",
|
||||||
"you_got_lost": "Whoops! You got Lost!",
|
"you_got_lost": "Whoops! You got Lost!",
|
||||||
"go_home": "Go Home",
|
"go_home": "Go Home",
|
||||||
|
"test_mail_conf": "Test Mail Configuration",
|
||||||
|
"send_mail_successfully": "Mail sent successfully",
|
||||||
"setting_updated": "Setting updated successfully",
|
"setting_updated": "Setting updated successfully",
|
||||||
"select_state": "Select state",
|
"select_state": "Select state",
|
||||||
"select_country": "Select Country",
|
"select_country": "Select Country",
|
||||||
"select_city": "Select City",
|
"select_city": "Select City",
|
||||||
"street_1": "Street 1",
|
"street_1": "Street 1",
|
||||||
"street_2": "Street 2",
|
"street_2": "Street 2",
|
||||||
"action_failed": "Action Failed"
|
"action_failed": "Action Failed",
|
||||||
|
"retry": "Retry"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "Select year",
|
"select_year": "Select year",
|
||||||
@ -155,7 +164,7 @@
|
|||||||
"select_a_customer": "Select a customer",
|
"select_a_customer": "Select a customer",
|
||||||
"type_or_click": "Type or click to select",
|
"type_or_click": "Type or click to select",
|
||||||
|
|
||||||
"confirm_delete": "You will not be able to recover this Customer | You will not be able to recover these Customers",
|
"confirm_delete": "You will not be able to recover this customer and all the related Invoices, Estimates and Payments. | You will not be able to recover these customers and all the related Invoices, Estimates and Payments.",
|
||||||
"created_message": "Customer created successfully",
|
"created_message": "Customer created successfully",
|
||||||
"updated_message": "Customer updated successfully",
|
"updated_message": "Customer updated successfully",
|
||||||
"deleted_message": "Customer deleted successfully | Customers deleted successfully"
|
"deleted_message": "Customer deleted successfully | Customers deleted successfully"
|
||||||
@ -180,7 +189,7 @@
|
|||||||
"no_items": "No items yet!",
|
"no_items": "No items yet!",
|
||||||
"list_of_items": "This section will contain the list of items.",
|
"list_of_items": "This section will contain the list of items.",
|
||||||
"select_a_unit": "select unit",
|
"select_a_unit": "select unit",
|
||||||
|
"taxes": "Taxes",
|
||||||
"item_attached_message": "Cannot delete an item which is already in use",
|
"item_attached_message": "Cannot delete an item which is already in use",
|
||||||
"confirm_delete": "You will not be able to recover this Item | You will not be able to recover these Items",
|
"confirm_delete": "You will not be able to recover this Item | You will not be able to recover these Items",
|
||||||
"created_message": "Item created successfully",
|
"created_message": "Item created successfully",
|
||||||
@ -222,10 +231,11 @@
|
|||||||
"convert_to_invoice": "Convert to Invoice",
|
"convert_to_invoice": "Convert to Invoice",
|
||||||
"mark_as_sent": "Mark as Sent",
|
"mark_as_sent": "Mark as Sent",
|
||||||
"send_estimate": "Send Estimate",
|
"send_estimate": "Send Estimate",
|
||||||
|
"resend_estimate": "Resend Estimate",
|
||||||
"record_payment": "Record Payment",
|
"record_payment": "Record Payment",
|
||||||
"add_estimate": "Add Estimate",
|
"add_estimate": "Add Estimate",
|
||||||
"save_estimate": "Save Estimate",
|
"save_estimate": "Save Estimate",
|
||||||
"confirm_conversion": "You want to convert this Estimate into Invoice?",
|
"confirm_conversion": "This estimate will be used to create a new Invoice.",
|
||||||
"conversion_message": "Invoice created successful",
|
"conversion_message": "Invoice created successful",
|
||||||
"confirm_send_estimate": "This estimate will be sent via email to the customer",
|
"confirm_send_estimate": "This estimate will be sent via email to the customer",
|
||||||
"confirm_mark_as_sent": "This estimate will be marked as sent",
|
"confirm_mark_as_sent": "This estimate will be marked as sent",
|
||||||
@ -308,6 +318,7 @@
|
|||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"view": "View",
|
"view": "View",
|
||||||
"send_invoice": "Send Invoice",
|
"send_invoice": "Send Invoice",
|
||||||
|
"resend_invoice": "Resend Invoice",
|
||||||
"invoice_template": "Invoice Template",
|
"invoice_template": "Invoice Template",
|
||||||
"template": "Template",
|
"template": "Template",
|
||||||
"mark_as_sent": "Mark as sent",
|
"mark_as_sent": "Mark as sent",
|
||||||
@ -329,6 +340,9 @@
|
|||||||
"no_matching_invoices": "There are no matching invoices!",
|
"no_matching_invoices": "There are no matching invoices!",
|
||||||
"mark_as_sent_successfully": "Invoice marked as sent successfully",
|
"mark_as_sent_successfully": "Invoice marked as sent successfully",
|
||||||
"send_invoice_successfully": "Invoice sent successfully",
|
"send_invoice_successfully": "Invoice sent successfully",
|
||||||
|
"cloned_successfully": "Invoice cloned successfully",
|
||||||
|
"clone_invoice": "Clone Invoice",
|
||||||
|
"confirm_clone": "This invoice will be cloned into a new Invoice",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Item Title",
|
"title": "Item Title",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
@ -343,7 +357,6 @@
|
|||||||
"select_an_item": "Type or click to select an item",
|
"select_an_item": "Type or click to select an item",
|
||||||
"type_item_description": "Type Item Description (optional)"
|
"type_item_description": "Type Item Description (optional)"
|
||||||
},
|
},
|
||||||
|
|
||||||
"payment_attached_message": "One of the selected invoices already have a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal",
|
"payment_attached_message": "One of the selected invoices already have a payment attached to it. Make sure to delete the attached payments first in order to go ahead with the removal",
|
||||||
"confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices",
|
"confirm_delete": "You will not be able to recover this Invoice | You will not be able to recover these Invoices",
|
||||||
"created_message": "Invoice created successfully",
|
"created_message": "Invoice created successfully",
|
||||||
@ -394,12 +407,18 @@
|
|||||||
"edit_payment": "Edit Payment",
|
"edit_payment": "Edit Payment",
|
||||||
"view_payment": "View Payment",
|
"view_payment": "View Payment",
|
||||||
"add_new_payment": "Add New Payment",
|
"add_new_payment": "Add New Payment",
|
||||||
|
"send_payment_receipt": "Send Payment Receipt",
|
||||||
"save_payment": "Save Payment",
|
"save_payment": "Save Payment",
|
||||||
"update_payment": "Update Payment",
|
"update_payment": "Update Payment",
|
||||||
"payment": "Payment | Payments",
|
"payment": "Payment | Payments",
|
||||||
"no_payments": "No payments yet!",
|
"no_payments": "No payments yet!",
|
||||||
|
"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",
|
||||||
|
"confirm_send_payment": "This payment will be sent via email to the customer",
|
||||||
|
"send_payment_successfully": "Payment sent successfully",
|
||||||
|
"user_email_does_not_exist": "User email does not exist",
|
||||||
|
"something_went_wrong": "something went wrong",
|
||||||
|
|
||||||
"confirm_delete": "You will not be able to recover this Payment | You will not be able to recover these Payments",
|
"confirm_delete": "You will not be able to recover this Payment | You will not be able to recover these Payments",
|
||||||
"created_message": "Payment created successfully",
|
"created_message": "Payment created successfully",
|
||||||
@ -410,7 +429,9 @@
|
|||||||
"expenses": {
|
"expenses": {
|
||||||
"title": "Expenses",
|
"title": "Expenses",
|
||||||
"expenses_list": "Expenses List",
|
"expenses_list": "Expenses List",
|
||||||
|
"select_a_customer": "Select a customer",
|
||||||
"expense_title": "Title",
|
"expense_title": "Title",
|
||||||
|
"customer": "Customer",
|
||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
"category": "Category",
|
"category": "Category",
|
||||||
"from_date": "From Date",
|
"from_date": "From Date",
|
||||||
@ -600,65 +621,85 @@
|
|||||||
"updated_message": "Company information updated successfully"
|
"updated_message": "Company information updated successfully"
|
||||||
},
|
},
|
||||||
"customization": {
|
"customization": {
|
||||||
"customization": "customization",
|
"customization": "customization",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"addresses": {
|
"addresses": {
|
||||||
"title": "Addresses",
|
"title": "Addresses",
|
||||||
"section_description": "You can set Customer Billing Address and Customer Shipping Address Format (Displayed in PDF only). ",
|
"section_description": "You can set Customer Billing Address and Customer Shipping Address Format (Displayed in PDF only). ",
|
||||||
"customer_billing_address": "Customer Billing Address",
|
"customer_billing_address": "Customer Billing Address",
|
||||||
"customer_shipping_address": "Customer Shipping Address",
|
"customer_shipping_address": "Customer Shipping Address",
|
||||||
"company_address": "Company Address",
|
"company_address": "Company Address",
|
||||||
"insert_fields": "Insert Fields",
|
"insert_fields": "Insert Fields",
|
||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
"address": "Address",
|
"address": "Address",
|
||||||
"display_name": "Display Name",
|
"display_name": "Display Name",
|
||||||
"primary_contact_name": "Primary Contact Name",
|
"primary_contact_name": "Primary Contact Name",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
"website": "Website",
|
"website": "Website",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"country": "Country",
|
"country": "Country",
|
||||||
"state": "State",
|
"state": "State",
|
||||||
"city": "City",
|
"city": "City",
|
||||||
"company_name": "Company Name",
|
"company_name": "Company Name",
|
||||||
"address_street_1": "Address Street 1",
|
"address_street_1": "Address Street 1",
|
||||||
"address_street_2": "Address Street 2",
|
"address_street_2": "Address Street 2",
|
||||||
"phone": "Phone",
|
"phone": "Phone",
|
||||||
"zip_code": "Zip Code",
|
"zip_code": "Zip Code",
|
||||||
"address_setting_updated": "Address Setting updated successfully"
|
"address_setting_updated": "Address Setting updated successfully"
|
||||||
},
|
},
|
||||||
"updated_message": "Company information updated successfully",
|
"updated_message": "Company information updated successfully",
|
||||||
|
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Invoices",
|
"title": "Invoices",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"invoice_prefix": "Invoice Prefix",
|
"invoice_prefix": "Invoice Prefix",
|
||||||
"invoice_settings": "Invoice Settings",
|
"invoice_settings": "Invoice Settings",
|
||||||
"autogenerate_invoice_number": "Autogenerate 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.",
|
||||||
"enter_invoice_prefix": "Enter invoice prefix",
|
"enter_invoice_prefix": "Enter invoice prefix",
|
||||||
"terms_and_conditions": "Terms and Conditions",
|
"terms_and_conditions": "Terms and Conditions",
|
||||||
"invoice_setting_updated": "Invoice Setting updated successfully"
|
"invoice_setting_updated": "Invoice Setting updated successfully"
|
||||||
},
|
},
|
||||||
|
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Estimates",
|
"title": "Estimates",
|
||||||
"estimate_prefix": "Estimate Prefix",
|
"estimate_prefix": "Estimate Prefix",
|
||||||
"estimate_settings": "Estimate Settings",
|
"estimate_settings": "Estimate Settings",
|
||||||
"autogenerate_estimate_number": "Autogenerate 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.",
|
||||||
"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"
|
||||||
},
|
},
|
||||||
|
|
||||||
"payments": {
|
"payments": {
|
||||||
"title": "Payments",
|
"title": "Payments",
|
||||||
"payment_prefix": "Payment Prefix",
|
"payment_prefix": "Payment Prefix",
|
||||||
"payment_settings": "Payment Settings",
|
"payment_settings": "Payment Settings",
|
||||||
"autogenerate_payment_number": "Autogenerate 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.",
|
||||||
"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_mode": "Payment Mode",
|
||||||
|
"add_payment_mode": "Add Payment Mode",
|
||||||
|
"mode_name": "Mode Name",
|
||||||
|
"payment_mode_added": "Payment Mode Added",
|
||||||
|
"payment_mode_updated": "Payment Mode Updated",
|
||||||
|
"payment_mode_confirm_delete": "You will not be able to recover this Payment Mode",
|
||||||
|
"already_in_use": "Payment Mode is already in use",
|
||||||
|
"deleted_message": "Payment Mode deleted successfully"
|
||||||
|
},
|
||||||
|
|
||||||
|
"items": {
|
||||||
|
"title": "Items",
|
||||||
|
"units": "units",
|
||||||
|
"add_item_unit": "Add Item Unit",
|
||||||
|
"unit_name": "Unit Name",
|
||||||
|
"item_unit_added": "Item Unit Added",
|
||||||
|
"item_unit_updated": "Item Unit Updated",
|
||||||
|
"item_unit_confirm_delete": "You will not be able to recover this Item unit",
|
||||||
|
"already_in_use": "Item Unit is already in use",
|
||||||
|
"deleted_message": "Item Unit deleted successfully"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"account_settings": {
|
"account_settings": {
|
||||||
"profile_picture": "Profile Picture",
|
"profile_picture": "Profile Picture",
|
||||||
@ -749,7 +790,14 @@
|
|||||||
"progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes",
|
"progress_text": "It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes",
|
||||||
"update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.",
|
"update_success": "App has been updated! Please wait while your browser window gets reloaded automatically.",
|
||||||
"latest_message": "No update available! You are on the latest version.",
|
"latest_message": "No update available! You are on the latest version.",
|
||||||
"current_version": "Current Version"
|
"current_version": "Current Version",
|
||||||
|
"download_zip_file": "Download ZIP file",
|
||||||
|
"unzipping_package": "Unzipping Package",
|
||||||
|
"copying_files": "Copying Files",
|
||||||
|
"running_migrations": "Running Migrations",
|
||||||
|
"finishing_update": "Finishing Update",
|
||||||
|
"update_failed": "Update Failed",
|
||||||
|
"update_failed_text": "Sorry! Your update failed on : {step} step"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
@ -828,7 +876,7 @@
|
|||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"migrate_failed": "Migrate Failed",
|
"migrate_failed": "Migrate Failed",
|
||||||
"database_variables_save_error": "Unable to connect to the DB with Provided Values.",
|
"database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions",
|
||||||
"mail_variables_save_error": "Email configuration failed.",
|
"mail_variables_save_error": "Email configuration failed.",
|
||||||
"connection_failed": "Database connection failed",
|
"connection_failed": "Database connection failed",
|
||||||
"database_should_be_empty": "Database should be empty"
|
"database_should_be_empty": "Database should be empty"
|
||||||
@ -839,7 +887,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"layout_login": {
|
"layout_login": {
|
||||||
"copyright_crater": "Copyright @ Crater - 2019",
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
"super_simple_invoicing": "Super Simple Invoicing",
|
"super_simple_invoicing": "Super Simple Invoicing",
|
||||||
"for_freelancer": "for Freelancers &",
|
"for_freelancer": "for Freelancers &",
|
||||||
"small_businesses": "Small Businesses ",
|
"small_businesses": "Small Businesses ",
|
||||||
@ -852,6 +900,8 @@
|
|||||||
"email_incorrect": "Incorrect Email.",
|
"email_incorrect": "Incorrect Email.",
|
||||||
"email_already_taken": "The email has already been taken.",
|
"email_already_taken": "The email has already been taken.",
|
||||||
"email_does_not_exist": "User with given email doesn't exist",
|
"email_does_not_exist": "User with given email doesn't exist",
|
||||||
|
"item_unit_already_taken": "This item unit name has already been taken",
|
||||||
|
"payment_mode_already_taken": "This payment mode name has already been taken",
|
||||||
"send_reset_link": "Send Reset Link",
|
"send_reset_link": "Send Reset Link",
|
||||||
"not_yet": "Not yet? Send it again",
|
"not_yet": "Not yet? Send it again",
|
||||||
"password_min_length": "Password must contain {count} characters",
|
"password_min_length": "Password must contain {count} characters",
|
||||||
@ -871,10 +921,13 @@
|
|||||||
"amount_maxlength": "Amount should not be greater than 20 digits.",
|
"amount_maxlength": "Amount should not be greater than 20 digits.",
|
||||||
"amount_minvalue": "Amount should be greater than 0.",
|
"amount_minvalue": "Amount should be greater than 0.",
|
||||||
"description_maxlength": "Description should not be greater than 255 characters.",
|
"description_maxlength": "Description should not be greater than 255 characters.",
|
||||||
|
"subject_maxlength": "Subject should not be greater than 100 characters.",
|
||||||
|
"message_maxlength": "Message should not be greater than 255 characters.",
|
||||||
"maximum_options_error": "Maximum of {max} options selected. First remove a selected option to select another.",
|
"maximum_options_error": "Maximum of {max} options selected. First remove a selected option to select another.",
|
||||||
"notes_maxlength": "Notes should not be greater than 255 characters.",
|
"notes_maxlength": "Notes should not be greater than 255 characters.",
|
||||||
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"items": "Artículos",
|
"items": "Artículos",
|
||||||
"invoices": "Facturas",
|
"invoices": "Facturas",
|
||||||
"expenses": "Gastos",
|
"expenses": "Gastos",
|
||||||
"estimates": "Estimadas",
|
"estimates": "Presupuestos",
|
||||||
"payments": "Pagos",
|
"payments": "Pagos",
|
||||||
"reports": "Informes",
|
"reports": "Informes",
|
||||||
"settings": "Configuraciones",
|
"settings": "Configuraciones",
|
||||||
@ -14,44 +14,44 @@
|
|||||||
"general": {
|
"general": {
|
||||||
"view_pdf": "Ver PDF",
|
"view_pdf": "Ver PDF",
|
||||||
"download_pdf": "Descargar PDF",
|
"download_pdf": "Descargar PDF",
|
||||||
"save": "Salvar",
|
"save": "Guardar",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"update": "Actualizar",
|
"update": "Actualizar",
|
||||||
"download": "Descargar",
|
"download": "Descargar",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "Desde la fecha",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"from": "De",
|
"from": "De",
|
||||||
"to": "A",
|
"to": "A",
|
||||||
"go_back": "Regresa",
|
"go_back": "Volver",
|
||||||
"back_to_login": "¿Atrás para iniciar sesión?",
|
"back_to_login": "¿Volver al inicio de sesión?",
|
||||||
"home": "Casa",
|
"home": "Inicio",
|
||||||
"filter": "Filtrar",
|
"filter": "Filtrar",
|
||||||
"delete": "Eliminar",
|
"delete": "Eliminar",
|
||||||
"edit": "Editar",
|
"edit": "Editar",
|
||||||
"view": "Ver",
|
"view": "Ver",
|
||||||
"add_new_item": "Agregar ítem nuevo",
|
"add_new_item": "Agregar ítem nuevo",
|
||||||
"clear_all": "Limpiar todo",
|
"clear_all": "Limpiar todo",
|
||||||
"showing": "Demostración",
|
"showing": "Mostrando",
|
||||||
"of": "de",
|
"of": "de",
|
||||||
"actions": "Comportamiento",
|
"actions": "Acciones",
|
||||||
"subtotal": "TOTAL PARCIAL",
|
"subtotal": "SUBTOTAL",
|
||||||
"discount": "DESCUENTO",
|
"discount": "DESCUENTO",
|
||||||
"fixed": "Fija",
|
"fixed": "Fijo",
|
||||||
"percentage": "Porcentaje",
|
"percentage": "Porcentaje",
|
||||||
"tax": "IMPUESTO",
|
"tax": "IMPUESTO",
|
||||||
"total_amount": "CANTIDAD TOTAL",
|
"total_amount": "CANTIDAD TOTAL",
|
||||||
"bill_to": "Cobrar a",
|
"bill_to": "Cobrar a",
|
||||||
"ship_to": "Envie a",
|
"ship_to": "Enviar a",
|
||||||
"due": "Debida",
|
"due": "Debido",
|
||||||
"draft": "Sequía",
|
"draft": "Borrador",
|
||||||
"sent": "Expedida",
|
"sent": "Enviado",
|
||||||
"all": "Todas",
|
"all": "Todas",
|
||||||
"select_all": "Seleccionar todo",
|
"select_all": "Seleccionar todo",
|
||||||
"choose_file": "Haga clic aquí para elegir un archivo.",
|
"choose_file": "Haga clic aquí para elegir un archivo",
|
||||||
"choose_template": "Elige una plantilla",
|
"choose_template": "Elige una plantilla",
|
||||||
"choose": "Escoger",
|
"choose": "Escoger",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
"powered_by": "Energizado por",
|
"powered_by": "Impulsado por",
|
||||||
"bytefury": "Bytefury",
|
"bytefury": "Bytefury",
|
||||||
"select_a_status": "Selecciona un estado",
|
"select_a_status": "Selecciona un estado",
|
||||||
"select_a_tax": "Selecciona un impuesto",
|
"select_a_tax": "Selecciona un impuesto",
|
||||||
@ -61,29 +61,29 @@
|
|||||||
"no_tax_found": "¡No se encontraron impuestos!",
|
"no_tax_found": "¡No se encontraron impuestos!",
|
||||||
"four_zero_four": "404",
|
"four_zero_four": "404",
|
||||||
"you_got_lost": "Whoops! ¡Te perdiste!",
|
"you_got_lost": "Whoops! ¡Te perdiste!",
|
||||||
"go_home": "Vete a casa",
|
"go_home": "Volver al Inicio",
|
||||||
|
|
||||||
"setting_updated": "Configuración actualizada con éxito",
|
"setting_updated": "Configuración actualizada con éxito",
|
||||||
"select_state": "Seleccione estado",
|
"select_state": "Seleccionar estado",
|
||||||
"select_country": "Seleccionar país",
|
"select_country": "Seleccionar país",
|
||||||
"select_city": "Ciudad selecta",
|
"select_city": "Seleccionar ciudad",
|
||||||
"street_1": "Calle 1",
|
"street_1": "Calle 1",
|
||||||
"street_2": "Calle # 2",
|
"street_2": "Calle 2",
|
||||||
"action_failed": "Accion: Fallida"
|
"action_failed": "Accion Fallida",
|
||||||
|
"retry": "Procesar de nuevo"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "Seleccione año",
|
"select_year": "Seleccionar año",
|
||||||
"cards": {
|
"cards": {
|
||||||
"due_amount": "Monto adeudado",
|
"due_amount": "Cantidad Debida",
|
||||||
"customers": "Clientes",
|
"customers": "Clientes",
|
||||||
"invoices": "Facturas",
|
"invoices": "Facturas",
|
||||||
"estimates": "Estimadas"
|
"estimates": "Presupuestos"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "Ventas",
|
"total_sales": "Ventas",
|
||||||
"total_receipts": "Ingresos",
|
"total_receipts": "Ingresos",
|
||||||
"total_expense": "Gastos",
|
"total_expense": "Gastos",
|
||||||
"net_income": "Lngresos netos",
|
"net_income": "Ingresos netos",
|
||||||
"year": "Seleccione año"
|
"year": "Seleccione año"
|
||||||
},
|
},
|
||||||
"weekly_invoices": {
|
"weekly_invoices": {
|
||||||
@ -96,16 +96,16 @@
|
|||||||
"title": "Facturas adeudadas",
|
"title": "Facturas adeudadas",
|
||||||
"due_on": "Debido a",
|
"due_on": "Debido a",
|
||||||
"customer": "Cliente",
|
"customer": "Cliente",
|
||||||
"amount_due": "Monto adeudado",
|
"amount_due": "Cantidad Debida",
|
||||||
"actions": "Comportamiento",
|
"actions": "Acciones",
|
||||||
"view_all": "Ver todo"
|
"view_all": "Ver todo"
|
||||||
},
|
},
|
||||||
"recent_estimate_card": {
|
"recent_estimate_card": {
|
||||||
"title": "Estimaciones recientes",
|
"title": "Presupuestos recientes",
|
||||||
"date": "Fecha",
|
"date": "Fecha",
|
||||||
"customer": "Cliente",
|
"customer": "Cliente",
|
||||||
"amount_due": "Monto adeudado",
|
"amount_due": "Cantidad Debida",
|
||||||
"actions": "Comportamiento",
|
"actions": "Acciones",
|
||||||
"view_all": "Ver todo"
|
"view_all": "Ver todo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -123,16 +123,16 @@
|
|||||||
"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": "Monto adeudado",
|
"amount_due": "Cantidad Debida",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
"address": "Habla a",
|
"address": "Dirección",
|
||||||
"phone": "Teléfono",
|
"phone": "Teléfono",
|
||||||
"website": "Sitio web",
|
"website": "Sitio web",
|
||||||
"country": "País",
|
"country": "País",
|
||||||
"state": "Estado",
|
"state": "Estado",
|
||||||
"city": "Ciudad",
|
"city": "Ciudad",
|
||||||
"zip_code": "Código postal",
|
"zip_code": "Código postal",
|
||||||
"added_on": "Añadido",
|
"added_on": "Añadido el",
|
||||||
"action": "Acción",
|
"action": "Acción",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"street_number": "Número de calle",
|
"street_number": "Número de calle",
|
||||||
@ -144,23 +144,18 @@
|
|||||||
"new_customer": "Nuevo cliente",
|
"new_customer": "Nuevo cliente",
|
||||||
"edit_customer": "Editar cliente",
|
"edit_customer": "Editar cliente",
|
||||||
"basic_info": "Información básica",
|
"basic_info": "Información básica",
|
||||||
"billing_address": "Dirección de Envio",
|
"billing_address": "Dirección de Facturación",
|
||||||
"shipping_address": "Dirección de Envío",
|
"shipping_address": "Dirección de Envío",
|
||||||
"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!",
|
||||||
"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_state": "Seleccione estado",
|
|
||||||
"select_country": "Seleccionar país",
|
|
||||||
"select_city": "Ciudad selecta",
|
|
||||||
"select_currency": "Seleccione el tipo de moneda",
|
"select_currency": "Seleccione el tipo de moneda",
|
||||||
"street_1": "Calle 1",
|
|
||||||
"street_2": "Calle 2",
|
|
||||||
"select_a_customer": "Selecciona un cliente",
|
"select_a_customer": "Selecciona un cliente",
|
||||||
"type_or_click": "Escriba o haga clic para seleccionar",
|
"type_or_click": "Escriba o haga clic para seleccionar",
|
||||||
|
|
||||||
"confirm_delete": "No podrá recuperar este cliente | No podrá recuperar estos clientes",
|
"confirm_delete": "No podrá recuperar este cliente y todas las facturas, estimaciones y pagos relacionados. | No podrá recuperar estos clientes y todas las facturas, estimaciones y pagos relacionados.",
|
||||||
"created_message": "Cliente creado con éxito",
|
"created_message": "Cliente creado con éxito",
|
||||||
"updated_message": "Cliente actualizado con éxito",
|
"updated_message": "Cliente actualizado con éxito",
|
||||||
"deleted_message": "Cliente eliminado correctamente | Clientes eliminados exitosamente"
|
"deleted_message": "Cliente eliminado correctamente | Clientes eliminados exitosamente"
|
||||||
@ -184,7 +179,7 @@
|
|||||||
"edit_item": "Editar elemento",
|
"edit_item": "Editar elemento",
|
||||||
"no_items": "¡Aún no hay artículos!",
|
"no_items": "¡Aún no hay artículos!",
|
||||||
"list_of_items": "Esta sección contendrá la lista de artículos.",
|
"list_of_items": "Esta sección contendrá la lista de artículos.",
|
||||||
"select_a_unit": "seleccione unidad",
|
"select_a_unit": "seleccionar unidad",
|
||||||
|
|
||||||
"item_attached_message": "No se puede eliminar un elemento que ya está en uso.",
|
"item_attached_message": "No se puede eliminar un elemento que ya está en uso.",
|
||||||
"confirm_delete": "No podrá recuperar este artículo | No podrás recuperar estos elementos",
|
"confirm_delete": "No podrá recuperar este artículo | No podrás recuperar estos elementos",
|
||||||
@ -193,10 +188,10 @@
|
|||||||
"deleted_message": "Elemento eliminado con éxito | Elementos eliminados correctamente"
|
"deleted_message": "Elemento eliminado con éxito | Elementos eliminados correctamente"
|
||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Estimadas",
|
"title": "Presupuestos",
|
||||||
"estimate": "Estimación | Estimados",
|
"estimate": "Presupuesto | Presupuestos",
|
||||||
"estimates_list": "Lista de estimaciones",
|
"estimates_list": "Lista de presupuestos",
|
||||||
"days": "{días} días",
|
"days": "{días} Días",
|
||||||
"months": "{meses} Mes",
|
"months": "{meses} Mes",
|
||||||
"years": "{años} Año",
|
"years": "{años} Año",
|
||||||
"all": "Todas",
|
"all": "Todas",
|
||||||
@ -210,7 +205,7 @@
|
|||||||
"total": "Total",
|
"total": "Total",
|
||||||
"discount": "Descuento",
|
"discount": "Descuento",
|
||||||
"sub_total": "Subtotal",
|
"sub_total": "Subtotal",
|
||||||
"estimate_number": "Numero Estimado",
|
"estimate_number": "Número de Presupuesto",
|
||||||
"ref_number": "Número de referencia",
|
"ref_number": "Número de referencia",
|
||||||
"contact": "Contacto",
|
"contact": "Contacto",
|
||||||
"add_item": "Agregar un artículo",
|
"add_item": "Agregar un artículo",
|
||||||
@ -224,49 +219,52 @@
|
|||||||
"notes": "Notas",
|
"notes": "Notas",
|
||||||
"tax": "Impuesto",
|
"tax": "Impuesto",
|
||||||
"send_estimate": "Enviar presupuesto",
|
"send_estimate": "Enviar presupuesto",
|
||||||
"estimate_template": "Plantilla de estimación",
|
"estimate_template": "Plantilla de presupuesto",
|
||||||
"convert_to_invoice": "Convertir a factura",
|
"convert_to_invoice": "Convertir a factura",
|
||||||
"mark_as_sent": "Marcar como enviado",
|
"mark_as_sent": "Marcar como enviado",
|
||||||
"record_payment": "Registro de pago",
|
"record_payment": "Registro de pago",
|
||||||
"add_estimate": "Agregar presupuesto",
|
"add_estimate": "Agregar presupuesto",
|
||||||
"save_estimate": "Guardar estimación",
|
"save_estimate": "Guardar presupuesto",
|
||||||
"confirm_conversion": "¿Quiere convertir esta estimación en factura?",
|
"confirm_conversion": "¿Quiere convertir este presupuesto en una factura?",
|
||||||
"conversion_message": "Conversión exitosa",
|
"conversion_message": "Conversión exitosa",
|
||||||
"confirm_send_estimate": "Esta estimación se enviará por correo electrónico al cliente",
|
"confirm_send_estimate": "Este presupuesto se enviará por correo electrónico al cliente",
|
||||||
"confirm_mark_as_sent": "Esta estimación se marcará como enviada",
|
"confirm_mark_as_sent": "Este presupuesto se marcará como enviado",
|
||||||
"confirm_mark_as_accepted": "Esta estimación se marcará como Aceptada",
|
"confirm_mark_as_accepted": "Este presupuesto se marcará como Aceptado",
|
||||||
"confirm_mark_as_rejected": "Esta estimación se marcará como Rechazada",
|
"confirm_mark_as_rejected": "Este presupuesto se marcará como Rechazado",
|
||||||
"mark_as_sent_successfully": "Estimación marcada como enviada correctamente",
|
"no_matching_estimates": "¡No hay presupuestos coincidentes!",
|
||||||
"send_estimate_successfully": "Estimación enviada con éxito",
|
"mark_as_sent_successfully": "Presupuesto marcado como enviado correctamente",
|
||||||
|
"send_estimate_successfully": "Presupuesto enviado con éxito",
|
||||||
"errors": {
|
"errors": {
|
||||||
"required": "Se requiere campo"
|
"required": "Se requiere campo"
|
||||||
},
|
},
|
||||||
"accepted": "Aceptada",
|
"accepted": "Aceptado",
|
||||||
"sent": "Expedida",
|
"sent": "Enviado",
|
||||||
"draft": "Sequía",
|
"draft": "Borrador",
|
||||||
"declined": "Rechazada",
|
"declined": "Rechazado",
|
||||||
"new_estimate": "Nueva estimación",
|
"new_estimate": "Nuevo presupuesto",
|
||||||
"add_new_estimate": "Añadir nuevo presupuesto",
|
"add_new_estimate": "Añadir nuevo presupuesto",
|
||||||
"update_Estimate": "Actualizar presupuesto",
|
"update_Estimate": "Actualizar presupuesto",
|
||||||
"edit_estimate": "Editar estimación",
|
"edit_estimate": "Editar presupuesto",
|
||||||
"items": "artículos",
|
"items": "artículos",
|
||||||
"Estimate": "Estimación | Estimados",
|
"Estimate": "Presupuestos | Presupuestos",
|
||||||
"add_new_tax": "Agregar nuevo impuesto",
|
"add_new_tax": "Agregar nuevo impuesto",
|
||||||
"no_estimates": "¡Aún no hay estimaciones!",
|
"no_estimates": "¡Aún no hay presupuestos!",
|
||||||
"list_of_estimates": "Esta sección contendrá la lista de estimaciones.",
|
"list_of_estimates": "Esta sección contendrá la lista de presupuestos.",
|
||||||
"mark_as_rejected": "Marcar como rechazado",
|
"mark_as_rejected": "Marcar como rechazado",
|
||||||
"mark_as_accepted": "Marcar como aceptado",
|
"mark_as_accepted": "Marcar como aceptado",
|
||||||
|
|
||||||
"marked_as_accepted_message": "Estimación marcada como aceptada",
|
"marked_as_accepted_message": "Presupuesto marcado como aceptado",
|
||||||
"marked_as_rejected_message": "Estimación marcada como rechazada",
|
"marked_as_rejected_message": "Presupuesto marcado como rechazado",
|
||||||
"confirm_delete": "No podrá recuperar esta estimación | No podrá recuperar estas estimaciones",
|
"confirm_delete": "No podrá recuperar este presupuesto | No podrá recuperar estos presupuestos",
|
||||||
"created_message": "Estimación creada con éxito",
|
"created_message": "Presupuesto creada con éxito",
|
||||||
"updated_message": "Estimación actualizada con éxito",
|
"updated_message": "Presupuesto actualizada con éxito",
|
||||||
"deleted_message": "Estimación eliminada con éxito | Estimaciones eliminadas exitosamente",
|
"deleted_message": "Presupuesto eliminada con éxito | Presupuestos eliminadas exitosamente",
|
||||||
|
"user_email_does_not_exist": "El email del usuario no existe",
|
||||||
|
"something_went_wrong": "Algo fue mal",
|
||||||
"item": {
|
"item": {
|
||||||
"title": "Título del artículo",
|
"title": "Título del artículo",
|
||||||
"description": "Descripción",
|
"description": "Descripción",
|
||||||
"quantity": "Quantity",
|
"quantity": "Cantidad",
|
||||||
"price": "Precio",
|
"price": "Precio",
|
||||||
"discount": "Descuento",
|
"discount": "Descuento",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
@ -275,13 +273,13 @@
|
|||||||
"tax": "Impuesto",
|
"tax": "Impuesto",
|
||||||
"amount": "Cantidad",
|
"amount": "Cantidad",
|
||||||
"select_an_item": "Escriba o haga clic para seleccionar un elemento",
|
"select_an_item": "Escriba o haga clic para seleccionar un elemento",
|
||||||
"type_item_description": "Tipo Elemento Descripción (opcional)"
|
"type_item_description": "Descripción del tipo de elemento(opcional)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Facturas",
|
"title": "Facturas",
|
||||||
"invoices_list": "Lista de facturas",
|
"invoices_list": "Lista de facturas",
|
||||||
"days": "{días} días",
|
"days": "{días} Días",
|
||||||
"months": "{meses} Mes",
|
"months": "{meses} Mes",
|
||||||
"years": "{años} Año",
|
"years": "{años} Año",
|
||||||
"all": "Todas",
|
"all": "Todas",
|
||||||
@ -309,16 +307,17 @@
|
|||||||
"action": "Acción",
|
"action": "Acción",
|
||||||
"notes": "Notas",
|
"notes": "Notas",
|
||||||
"view": "Ver",
|
"view": "Ver",
|
||||||
"send_invoice": "Enviará la factura",
|
"send_invoice": "Enviar la factura",
|
||||||
"invoice_template": "Plantilla de factura",
|
"invoice_template": "Plantilla de factura",
|
||||||
"template": "Modelo",
|
"template": "Modelo",
|
||||||
"mark_as_sent": "Marcar como enviado",
|
"mark_as_sent": "Marcar como enviada",
|
||||||
"invoice_mark_as_sent": "Esta factura se marcará como enviada",
|
"invoice_mark_as_sent": "Esta factura se marcará como enviada",
|
||||||
|
"confirm_send_invoice": "Esta factura será enviada por email al cliente",
|
||||||
"confirm_send": "Estas facturas se enviarán por correo electrónico al cliente.",
|
"confirm_send": "Estas facturas se enviarán por correo electrónico al cliente.",
|
||||||
"invoice_date": "Fecha de la factura",
|
"invoice_date": "Fecha de la factura",
|
||||||
"record_payment": "Registro de pago",
|
"record_payment": "Registro de pago",
|
||||||
"add_new_invoice": "Añadir nueva factura",
|
"add_new_invoice": "Añadir nueva factura",
|
||||||
"update_expense": "Gastos de actualización",
|
"update_expense": "Actualizar gasto",
|
||||||
"edit_invoice": "Editar factura",
|
"edit_invoice": "Editar factura",
|
||||||
"new_invoice": "Nueva factura",
|
"new_invoice": "Nueva factura",
|
||||||
"save_invoice": "Guardar factura",
|
"save_invoice": "Guardar factura",
|
||||||
@ -327,6 +326,7 @@
|
|||||||
"no_invoices": "¡Aún no hay facturas!",
|
"no_invoices": "¡Aún no hay facturas!",
|
||||||
"list_of_invoices": "Esta sección contendrá la lista de facturas.",
|
"list_of_invoices": "Esta sección contendrá la lista de facturas.",
|
||||||
"select_invoice": "Seleccionar factura",
|
"select_invoice": "Seleccionar factura",
|
||||||
|
"no_matching_invoices": "¡No hay facturas coincidentes con la selección!",
|
||||||
"mark_as_sent_successfully": "Factura marcada como enviada con éxito",
|
"mark_as_sent_successfully": "Factura marcada como enviada con éxito",
|
||||||
"send_invoice_successfully": "Factura enviada exitosamente",
|
"send_invoice_successfully": "Factura enviada exitosamente",
|
||||||
"item": {
|
"item": {
|
||||||
@ -341,7 +341,7 @@
|
|||||||
"tax": "Impuesto",
|
"tax": "Impuesto",
|
||||||
"amount": "Cantidad",
|
"amount": "Cantidad",
|
||||||
"select_an_item": "Escriba o haga clic para seleccionar un elemento",
|
"select_an_item": "Escriba o haga clic para seleccionar un elemento",
|
||||||
"type_item_description": "Tipo Elemento Descripción (opcional)"
|
"type_item_description": "Descripción del tipo de elemento (opcional)"
|
||||||
},
|
},
|
||||||
"payment_attached_message": "Una de las facturas seleccionadas ya tiene un pago adjunto. Asegúrese de eliminar primero los pagos adjuntos para continuar con la eliminación",
|
"payment_attached_message": "Una de las facturas seleccionadas ya tiene un pago adjunto. Asegúrese de eliminar primero los pagos adjuntos para continuar con la eliminación",
|
||||||
"confirm_delete": "No podrá recuperar esta factura | No podrá recuperar estas facturas",
|
"confirm_delete": "No podrá recuperar esta factura | No podrá recuperar estas facturas",
|
||||||
@ -349,7 +349,9 @@
|
|||||||
"updated_message": "Factura actualizada exitosamente",
|
"updated_message": "Factura actualizada exitosamente",
|
||||||
"deleted_message": "Factura eliminada con éxito | Facturas borradas exitosamente",
|
"deleted_message": "Factura eliminada con éxito | Facturas borradas exitosamente",
|
||||||
"marked_as_sent_message": "Factura marcada como enviada con éxito",
|
"marked_as_sent_message": "Factura marcada como enviada con éxito",
|
||||||
"invalid_due_amount_message": "El pago ingresado es mayor que el monto total adeudado por esta factura. Por favor verifique y vuelva a intentar"
|
"user_email_does_not_exist": "El email del usuario no existe",
|
||||||
|
"something_went_wrong": "Algo fue mal",
|
||||||
|
"invalid_due_amount_message": "El pago ingresado es mayor que la cantidad total debida por esta factura. Por favor verificalo y vuelve a intentarlo"
|
||||||
},
|
},
|
||||||
"credit_notes": {
|
"credit_notes": {
|
||||||
"title": "Notas de credito",
|
"title": "Notas de credito",
|
||||||
@ -395,6 +397,7 @@
|
|||||||
"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!",
|
||||||
|
"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",
|
||||||
|
|
||||||
@ -409,8 +412,10 @@
|
|||||||
"expenses_list": "Lista de gastos",
|
"expenses_list": "Lista de gastos",
|
||||||
"expense_title": "Título",
|
"expense_title": "Título",
|
||||||
"contact": "Contacto",
|
"contact": "Contacto",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"select_a_customer": "Selecciona un cliente",
|
||||||
"category": "Categoría",
|
"category": "Categoría",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "Desde la fecha",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"expense_date": "Fecha",
|
"expense_date": "Fecha",
|
||||||
"description": "Descripción",
|
"description": "Descripción",
|
||||||
@ -422,13 +427,13 @@
|
|||||||
"date": "Fecha de gastos",
|
"date": "Fecha de gastos",
|
||||||
"add_expense": "Añadir gastos",
|
"add_expense": "Añadir gastos",
|
||||||
"add_new_expense": "Añadir nuevo gasto",
|
"add_new_expense": "Añadir nuevo gasto",
|
||||||
"save_expense": "Ahorre gastos",
|
"save_expense": "Guardar gasto",
|
||||||
"update_expense": "Gastos de actualización",
|
"update_expense": "Actualizar gasto",
|
||||||
"download_receipt": "Descargar recibo",
|
"download_receipt": "Descargar recibo",
|
||||||
"edit_expense": "Editar gasto",
|
"edit_expense": "Editar gasto",
|
||||||
"new_expense": "Nuevo gasto",
|
"new_expense": "Nuevo gasto",
|
||||||
"expense": "Gastos | Gastos",
|
"expense": "Gastos | Gastos",
|
||||||
"no_expenses": "No hay gastos todavía!",
|
"no_expenses": "¡No hay gastos todavía!",
|
||||||
"list_of_expenses": "Esta sección contendrá la lista de gastos.",
|
"list_of_expenses": "Esta sección contendrá la lista de gastos.",
|
||||||
|
|
||||||
"confirm_delete": "No podrá recuperar este gasto | No podrá recuperar estos gastos",
|
"confirm_delete": "No podrá recuperar este gasto | No podrá recuperar estos gastos",
|
||||||
@ -451,19 +456,20 @@
|
|||||||
"login": {
|
"login": {
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"forgot_password": "¿Se te olvidó tu contraseña?",
|
"forgot_password": "¿Olvidaste tu contraseña?",
|
||||||
"or_signIn_with": "o Inicie sesión con",
|
"or_signIn_with": "o Inicia sesión con",
|
||||||
"login": "Iniciar sesión",
|
"login": "Iniciar sesión",
|
||||||
"register": "Registro",
|
"register": "Registro",
|
||||||
"reset_password": "Restablecer la contraseña",
|
"reset_password": "Restablecer la contraseña",
|
||||||
"enter_email": "Ingrese correo electrónico",
|
"password_reset_successfully": "Contraseña reestablecida con éxito",
|
||||||
"enter_password": "Introducir la contraseña",
|
"enter_email": "Escriba el correo electrónico",
|
||||||
"retype_password": "Retype Password",
|
"enter_password": "Escriba la contraseña",
|
||||||
|
"retype_password": "Reescriba la contraseña",
|
||||||
"login_placeholder": "mail@example.com"
|
"login_placeholder": "mail@example.com"
|
||||||
},
|
},
|
||||||
"reports": {
|
"reports": {
|
||||||
"title": "Reporte",
|
"title": "Informe",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "A partir de la fecha",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"paid": "Pagada",
|
"paid": "Pagada",
|
||||||
@ -475,20 +481,20 @@
|
|||||||
"profit_loss": {
|
"profit_loss": {
|
||||||
"profit_loss": "Pérdida de beneficios",
|
"profit_loss": "Pérdida de beneficios",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "A partir de la fecha",
|
||||||
"date_range": "Seleccionar rango de fechas"
|
"date_range": "Seleccionar rango de fechas"
|
||||||
},
|
},
|
||||||
"sales": {
|
"sales": {
|
||||||
"sales": "Ventas",
|
"sales": "Ventas",
|
||||||
"date_range": "Seleccionar rango de fechas",
|
"date_range": "Seleccionar rango de fechas",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "A partir de la fecha",
|
||||||
"report_type": "Tipo de informe"
|
"report_type": "Tipo de informe"
|
||||||
},
|
},
|
||||||
"taxes": {
|
"taxes": {
|
||||||
"taxes": "Impuestos",
|
"taxes": "Impuestos",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "A partir de la fecha",
|
||||||
"date_range": "Seleccionar rango de fechas"
|
"date_range": "Seleccionar rango de fechas"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
@ -503,10 +509,10 @@
|
|||||||
"status": "Estado"
|
"status": "Estado"
|
||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"estimate": "Estimar",
|
"estimate": "Presupuestar",
|
||||||
"estimate_date": "Fecha estimada",
|
"estimate_date": "Fecha presupuesto",
|
||||||
"due_date": "Fecha de vencimiento",
|
"due_date": "Fecha de vencimiento",
|
||||||
"estimate_number": "Numero Estimado",
|
"estimate_number": "Número de Presupuesto",
|
||||||
"ref_number": "Número de referencia",
|
"ref_number": "Número de referencia",
|
||||||
"amount": "Cantidad",
|
"amount": "Cantidad",
|
||||||
"contact_name": "Nombre de contacto",
|
"contact_name": "Nombre de contacto",
|
||||||
@ -518,7 +524,7 @@
|
|||||||
"date": "Fecha",
|
"date": "Fecha",
|
||||||
"amount": "Cantidad",
|
"amount": "Cantidad",
|
||||||
"to_date": "Hasta la fecha",
|
"to_date": "Hasta la fecha",
|
||||||
"from_date": "Partir de la fecha",
|
"from_date": "A partir de la fecha",
|
||||||
"date_range": "Seleccionar rango de fechas"
|
"date_range": "Seleccionar rango de fechas"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -526,6 +532,7 @@
|
|||||||
"menu_title": {
|
"menu_title": {
|
||||||
"account_settings": "Configuraciones de la cuenta",
|
"account_settings": "Configuraciones de la cuenta",
|
||||||
"company_information": "Información de la empresa",
|
"company_information": "Información de la empresa",
|
||||||
|
"customization": "Personalización",
|
||||||
"preferences": "Preferencias",
|
"preferences": "Preferencias",
|
||||||
"notifications": "Notificaciones",
|
"notifications": "Notificaciones",
|
||||||
"tax_types": "Tipos de impuestos",
|
"tax_types": "Tipos de impuestos",
|
||||||
@ -548,7 +555,7 @@
|
|||||||
"code": "Código",
|
"code": "Código",
|
||||||
"symbol": "Símbolo",
|
"symbol": "Símbolo",
|
||||||
"precision": "Precisión",
|
"precision": "Precisión",
|
||||||
"thousand_separator": "Mil separadores",
|
"thousand_separator": "Separador de miles",
|
||||||
"decimal_separator": "Separador decimal",
|
"decimal_separator": "Separador decimal",
|
||||||
"position": "Posición",
|
"position": "Posición",
|
||||||
"position_of_symbol": "Posición del símbolo",
|
"position_of_symbol": "Posición del símbolo",
|
||||||
@ -566,9 +573,9 @@
|
|||||||
"username": "Nombre de usuario de correo",
|
"username": "Nombre de usuario de correo",
|
||||||
"mailgun_secret": "Mailgun Secreto",
|
"mailgun_secret": "Mailgun Secreto",
|
||||||
"mailgun_domain": "Domino",
|
"mailgun_domain": "Domino",
|
||||||
"mailgun_endpoint": "Mailgun Punto Final",
|
"mailgun_endpoint": "Mailgun endpoint",
|
||||||
"ses_secret": "SES Secreto",
|
"ses_secret": "Secreto SES",
|
||||||
"ses_key": "SES llave",
|
"ses_key": "Clave SES",
|
||||||
"from_name": "Del nombre del correo",
|
"from_name": "Del nombre del correo",
|
||||||
"from_mail": "Desde la dirección de correo",
|
"from_mail": "Desde la dirección de correo",
|
||||||
"mail_config": "Configuración de correo",
|
"mail_config": "Configuración de correo",
|
||||||
@ -582,18 +589,79 @@
|
|||||||
},
|
},
|
||||||
"company_info": {
|
"company_info": {
|
||||||
"company_info": "Información de la compañía",
|
"company_info": "Información de la compañía",
|
||||||
"company_name": "nombre de empresa",
|
"company_name": "Nombre de Empresa",
|
||||||
"company_logo": "Logo de la compañía",
|
"company_logo": "Logo de la compañía",
|
||||||
"section_description": "Información sobre su empresa que se mostrará en las facturas, estimaciones y otros documentos creados por Crater.",
|
"section_description": "Información sobre su empresa que se mostrará en las facturas, presupuestos y otros documentos creados por Crater.",
|
||||||
"phone": "Teléfono",
|
"phone": "Teléfono",
|
||||||
"country": "País",
|
"country": "País",
|
||||||
"state": "Estado",
|
"state": "Estado",
|
||||||
"city": "Ciudad",
|
"city": "Ciudad",
|
||||||
"address": "Habla a",
|
"address": "Dirección",
|
||||||
"zip": "Código Postal",
|
"zip": "Código Postal",
|
||||||
"save": "Salvar",
|
"save": "Guardar",
|
||||||
"updated_message": "Información de la empresa actualizada con éxito"
|
"updated_message": "Información de la empresa actualizada con éxito"
|
||||||
},
|
},
|
||||||
|
"customization": {
|
||||||
|
"customization": "Personalización",
|
||||||
|
"save": "Guardar",
|
||||||
|
"addresses": {
|
||||||
|
"title": "Direcciones",
|
||||||
|
"section_description": "Puede configurar la Dirección de facturación del cliente y el Formato de dirección de envío del cliente (solo se muestra en PDF).",
|
||||||
|
"customer_billing_address": "Dirección de facturación del cliente",
|
||||||
|
"customer_shipping_address": "Dirección de envío del cliente",
|
||||||
|
"company_address": "Dirección de la compañia",
|
||||||
|
"insert_fields": "Insertar campos",
|
||||||
|
"contact": "Contacto",
|
||||||
|
"address": "Dirección",
|
||||||
|
"display_name": "Nombre para mostrar",
|
||||||
|
"primary_contact_name": "Nombre de contacto principal",
|
||||||
|
"email": "Email",
|
||||||
|
"website": "Sitio web",
|
||||||
|
"name": "Nombre",
|
||||||
|
"country": "País",
|
||||||
|
"state": "Estado",
|
||||||
|
"city": "Ciudad",
|
||||||
|
"company_name": "Nombre de la compañia",
|
||||||
|
"address_street_1": "Dirección de la calle 1",
|
||||||
|
"address_street_2": "Dirección de la calle 2",
|
||||||
|
"phone": "Telefono",
|
||||||
|
"zip_code": "Codigo postal",
|
||||||
|
"address_setting_updated": "Configuración de dirección actualizada correctamente"
|
||||||
|
},
|
||||||
|
"updated_message": "Información de la empresa actualizada con éxito",
|
||||||
|
|
||||||
|
"invoices": {
|
||||||
|
"title": "Facturas",
|
||||||
|
"notes": "Notas",
|
||||||
|
"invoice_prefix": "Prefijo de las facturas",
|
||||||
|
"invoice_settings": "Ajustes de facturas",
|
||||||
|
"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.",
|
||||||
|
"enter_invoice_prefix": "Introduzca el prefijo de factura",
|
||||||
|
"terms_and_conditions": "Términos y Condiciones",
|
||||||
|
"invoice_setting_updated": "Configuración de factura actualizada correctamente"
|
||||||
|
},
|
||||||
|
|
||||||
|
"estimates": {
|
||||||
|
"title": "Estimaciones",
|
||||||
|
"estimate_prefix": "Prefijo de los presupuestos",
|
||||||
|
"estimate_settings": "Ajustes de presupuestos",
|
||||||
|
"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.",
|
||||||
|
"enter_estimate_prefix": "Introduzca el prefijo de presupuesto",
|
||||||
|
"estimate_setting_updated": "Configuración de presupuestos actualizada correctamente"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payments": {
|
||||||
|
"title": "Payments",
|
||||||
|
"payment_prefix": "Prefijo de los pagos",
|
||||||
|
"payment_settings": "Ajustes de pagos",
|
||||||
|
"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.",
|
||||||
|
"enter_payment_prefix": "Introduzca el prefijo de pago",
|
||||||
|
"payment_setting_updated": "Configuración de pagos actualizada correctamente"
|
||||||
|
}
|
||||||
|
},
|
||||||
"account_settings": {
|
"account_settings": {
|
||||||
"profile_picture": "Foto de perfil",
|
"profile_picture": "Foto de perfil",
|
||||||
"name": "Nombre",
|
"name": "Nombre",
|
||||||
@ -601,7 +669,7 @@
|
|||||||
"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",
|
||||||
"save": "Salvar",
|
"save": "Guardar",
|
||||||
"section_description": "Puede actualizar su nombre, correo electrónico y contraseña utilizando el siguiente formulario.",
|
"section_description": "Puede actualizar su nombre, correo electrónico y contraseña utilizando el siguiente formulario.",
|
||||||
"updated_message": "Configuración de la cuenta actualizada correctamente"
|
"updated_message": "Configuración de la cuenta actualizada correctamente"
|
||||||
},
|
},
|
||||||
@ -616,10 +684,10 @@
|
|||||||
"email": "Enviar notificaciones a",
|
"email": "Enviar notificaciones a",
|
||||||
"description": "¿Qué notificaciones por correo electrónico le gustaría recibir cuando algo cambia?",
|
"description": "¿Qué notificaciones por correo electrónico le gustaría recibir cuando algo cambia?",
|
||||||
"invoice_viewed": "Factura vista",
|
"invoice_viewed": "Factura vista",
|
||||||
"invoice_viewed_desc": "Cuando su cliente ve la factura enviada a través del panel de control del cráter.",
|
"invoice_viewed_desc": "Cuando su cliente vio la factura enviada a través del panel de control de Crater.",
|
||||||
"estimate_viewed": "Estimación vista",
|
"estimate_viewed": "Presupuesto visto",
|
||||||
"estimate_viewed_desc": "Cuando su cliente ve la estimación enviada a través del panel de control del cráter.",
|
"estimate_viewed_desc": "Cuando su cliente vio el presupuesto enviado a través del panel de control de Crater.",
|
||||||
"save": "Salvar",
|
"save": "Guardar",
|
||||||
"email_save_message": "Correo electrónico guardado con éxito",
|
"email_save_message": "Correo electrónico guardado con éxito",
|
||||||
"please_enter_email": "Por favor, introduzca su correo electrónico"
|
"please_enter_email": "Por favor, introduzca su correo electrónico"
|
||||||
},
|
},
|
||||||
@ -630,11 +698,11 @@
|
|||||||
"add_new_tax": "Agregar nuevo impuesto",
|
"add_new_tax": "Agregar nuevo impuesto",
|
||||||
"tax_settings": "Configuraciones de impuestos",
|
"tax_settings": "Configuraciones de impuestos",
|
||||||
"tax_per_item": "Impuesto por artículo",
|
"tax_per_item": "Impuesto por artículo",
|
||||||
"tax_name": "Nombre fiscal",
|
"tax_name": "Nombre del impuesto",
|
||||||
"compound_tax": "Impuesto compuesto",
|
"compound_tax": "Impuesto compuesto",
|
||||||
"percent": "Por ciento",
|
"percent": "Porcentaje",
|
||||||
"action": "Acción",
|
"action": "Acción",
|
||||||
"tax_setting_description": "Habilítelo si desea agregar impuestos a artículos de factura individuales. Por defecto, los impuestos se agregan directamente a la factura.",
|
"tax_setting_description": "Habilítelo si desea agregar impuestos a artículos de factura de forma individual. Por defecto, los impuestos se agregan directamente a la factura.",
|
||||||
"created_message": "Tipo de impuesto creado con éxito",
|
"created_message": "Tipo de impuesto creado con éxito",
|
||||||
"updated_message": "Tipo de impuesto actualizado correctamente",
|
"updated_message": "Tipo de impuesto actualizado correctamente",
|
||||||
"deleted_message": "Tipo de impuesto eliminado correctamente",
|
"deleted_message": "Tipo de impuesto eliminado correctamente",
|
||||||
@ -663,7 +731,7 @@
|
|||||||
"discount_setting": "Ajuste de descuento",
|
"discount_setting": "Ajuste de descuento",
|
||||||
"discount_per_item": "Descuento por artículo",
|
"discount_per_item": "Descuento por artículo",
|
||||||
"discount_setting_description": "Habilítelo si desea agregar Descuento a artículos de factura individuales. Por defecto, los descuentos se agregan directamente a la factura.",
|
"discount_setting_description": "Habilítelo si desea agregar Descuento a artículos de factura individuales. Por defecto, los descuentos se agregan directamente a la factura.",
|
||||||
"save": "Salvar",
|
"save": "Guardar",
|
||||||
"preference": "Preferencia | Preferencias",
|
"preference": "Preferencia | Preferencias",
|
||||||
"general_settings": "Preferencias predeterminadas para el sistema.",
|
"general_settings": "Preferencias predeterminadas para el sistema.",
|
||||||
"updated_message": "Preferencias actualizadas exitosamente",
|
"updated_message": "Preferencias actualizadas exitosamente",
|
||||||
@ -683,7 +751,14 @@
|
|||||||
"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.",
|
||||||
"update_success": "¡La aplicación ha sido actualizada! Espere mientras la ventana de su navegador se vuelve a cargar automáticamente.",
|
"update_success": "¡La aplicación ha sido actualizada! Espere mientras la ventana de su navegador se vuelve a cargar automáticamente.",
|
||||||
"latest_message": "¡Actualización no disponible! Estás en la última versión.",
|
"latest_message": "¡Actualización no disponible! Estás en la última versión.",
|
||||||
"current_version": "Versión actual"
|
"current_version": "Versión actual",
|
||||||
|
"download_zip_file": "Descargar archivo ZIP",
|
||||||
|
"unzipping_package": "Descomprimir paquete",
|
||||||
|
"copying_files": "Copiando documentos",
|
||||||
|
"running_migrations": "Ejecutar migraciones",
|
||||||
|
"finishing_update": "Actualización final",
|
||||||
|
"update_failed": "Actualización fallida",
|
||||||
|
"update_failed_text": "¡Lo siento! Su actualización falló el: {step} paso"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
@ -693,7 +768,7 @@
|
|||||||
"email": "Email",
|
"email": "Email",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"confirm_password": "Confirmar contraseña",
|
"confirm_password": "Confirmar contraseña",
|
||||||
"save_cont": "Guardar Continuar",
|
"save_cont": "Guardar y continuar",
|
||||||
"company_info": "Información de la empresa",
|
"company_info": "Información de la empresa",
|
||||||
"company_info_desc": "Esta información se mostrará en las facturas. Tenga en cuenta que puede editar esto más adelante en la página de configuración.",
|
"company_info_desc": "Esta información se mostrará en las facturas. Tenga en cuenta que puede editar esto más adelante en la página de configuración.",
|
||||||
"company_name": "nombre de empresa",
|
"company_name": "nombre de empresa",
|
||||||
@ -704,8 +779,8 @@
|
|||||||
"country": "País",
|
"country": "País",
|
||||||
"state": "Estado",
|
"state": "Estado",
|
||||||
"city": "Ciudad",
|
"city": "Ciudad",
|
||||||
"address": "Habla a",
|
"address": "Dirección",
|
||||||
"street": "Calle1 | Calle # 2",
|
"street": "Calle1 | Calle2",
|
||||||
"phone": "Teléfono",
|
"phone": "Teléfono",
|
||||||
"zip_code": "Código postal",
|
"zip_code": "Código postal",
|
||||||
"go_back": "Regresa",
|
"go_back": "Regresa",
|
||||||
@ -714,16 +789,17 @@
|
|||||||
"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",
|
||||||
"from_address": "De la Dirección",
|
"from_address": "Desde la Dirección",
|
||||||
"username": "Nombre de usuario",
|
"username": "Nombre de usuario",
|
||||||
"next": "Próximo",
|
"next": "Siguiente",
|
||||||
"continue": "Hacer continuación",
|
"continue": "Continuar",
|
||||||
|
"skip": "Saltar",
|
||||||
"database": {
|
"database": {
|
||||||
"database": "URL del sitio y base de datose",
|
"database": "URL del sitio y base de datose",
|
||||||
"connection": "Conexión de base de datos",
|
"connection": "Conexión de base de datos",
|
||||||
"host": "Database Host",
|
"host": "Host de la base de datos",
|
||||||
"port": "Host de base de datos",
|
"port": "Puerto de la base de datos",
|
||||||
"password": "Contraseña de 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",
|
||||||
"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",
|
||||||
@ -731,7 +807,7 @@
|
|||||||
},
|
},
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"permissions": "Permisos",
|
"permissions": "Permisos",
|
||||||
"permission_confirm_title": "Estás seguro de que quieres continuar?",
|
"permission_confirm_title": "¿Estás seguro de que quieres continuar?",
|
||||||
"permission_confirm_desc": "Error de verificación de permisos de carpeta",
|
"permission_confirm_desc": "Error de verificación de permisos de carpeta",
|
||||||
"permission_desc": "A continuación se muestra la lista de permisos de carpeta necesarios para que la aplicación funcione. Si la verificación de permisos falla, asegúrese de actualizar los permisos de su carpeta."
|
"permission_desc": "A continuación se muestra la lista de permisos de carpeta necesarios para que la aplicación funcione. Si la verificación de permisos falla, asegúrese de actualizar los permisos de su carpeta."
|
||||||
},
|
},
|
||||||
@ -740,16 +816,16 @@
|
|||||||
"port": "Puerto de correo",
|
"port": "Puerto de correo",
|
||||||
"driver": "Conductor de correo",
|
"driver": "Conductor de correo",
|
||||||
"secret": "Secreto",
|
"secret": "Secreto",
|
||||||
|
"mailgun_secret": "Mailgun Secreto",
|
||||||
|
"mailgun_domain": "Dominio",
|
||||||
|
"mailgun_endpoint": "Mailgun endpoint",
|
||||||
"password": "Contraseña de correo",
|
"password": "Contraseña de correo",
|
||||||
"username": "Nombre de usuario de correo",
|
"username": "Nombre de usuario de correo",
|
||||||
"mailgun_secret": "Mailgun Secreto",
|
"ses_secret": "Secreto SES",
|
||||||
"mailgun_domain": "Domino",
|
"ses_key": "Clave SES",
|
||||||
"mailgun_endpoint": "Mailgun Punto Final",
|
"mail_config": "Configuración de correo",
|
||||||
"ses_secret": "SES Secreto",
|
|
||||||
"ses_key": "SES llave",
|
|
||||||
"from_name": "Del nombre del correo",
|
"from_name": "Del nombre del correo",
|
||||||
"from_mail": "Desde la dirección de correo",
|
"from_mail": "Desde la dirección de correo",
|
||||||
"mail_config": "Configuración de correo",
|
|
||||||
"encryption": "Cifrado de correo",
|
"encryption": "Cifrado de correo",
|
||||||
"mail_config_desc": "Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión."
|
"mail_config_desc": "Los detalles a continuación se utilizarán para actualizar el entorno de correo. También puede cambiar los detalles en cualquier momento después de iniciar sesión."
|
||||||
},
|
},
|
||||||
@ -763,7 +839,8 @@
|
|||||||
"migrate_failed": "La migración falló",
|
"migrate_failed": "La migración falló",
|
||||||
"database_variables_save_error": "No se puede conectar a la base de datos con los valores proporcionados.",
|
"database_variables_save_error": "No se puede conectar a la base de datos con los valores proporcionados.",
|
||||||
"mail_variables_save_error": "La configuración del correo electrónico ha fallado.",
|
"mail_variables_save_error": "La configuración del correo electrónico ha fallado.",
|
||||||
"connection_failed": "Conexión de base de datos fallida"
|
"connection_failed": "Conexión de base de datos fallida",
|
||||||
|
"database_should_be_empty": "La base de datos debe estar vacía"
|
||||||
},
|
},
|
||||||
"success": {
|
"success": {
|
||||||
"mail_variables_save_successfully": "Correo electrónico configurado correctamente",
|
"mail_variables_save_successfully": "Correo electrónico configurado correctamente",
|
||||||
@ -771,32 +848,33 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"layout_login": {
|
"layout_login": {
|
||||||
"copyright_crater": "Copyright @ Crater - 2019",
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
"super_simple_invoicing": "Facturación super simple",
|
"super_simple_invoicing": "Facturación super simple",
|
||||||
"for_freelancer": "para autónomos y",
|
"for_freelancer": "para autónomos y",
|
||||||
"small_businesses": "Pequeñas empresas",
|
"small_businesses": "pequeñas empresas",
|
||||||
"crater_help": "Crater te ayuda a rastrear gastos, registrar pagos y generar hermosos",
|
"crater_help": "Crater te ayuda a rastrear gastos, registrar pagos y generar hermosas",
|
||||||
"invoices_and_estimates": "facturas y presupuestos con capacidad para elegir múltiples plantillas."
|
"invoices_and_estimates": "facturas y presupuestos con capacidad para elegir múltiples plantillas."
|
||||||
|
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"invalid_url": "URL no válida (por ejemplo, http://www.crater.com)",
|
"invalid_url": "URL no válida (por ejemplo, http://www.crater.com)",
|
||||||
"required": "Se requiere campo",
|
"required": "Se requiere campo",
|
||||||
"email_incorrect": "Email incorrecto.",
|
"email_incorrect": "Email incorrecto.",
|
||||||
"email_does_not_exist": " Usuario con correo electrónico dado no existe",
|
"email_already_taken": "Este email ya está en uso",
|
||||||
"send_reset_link": "Enviar restablecer enlace",
|
"email_does_not_exist": "El usuario con el correo electrónico dado no existe",
|
||||||
"not_yet": "¿Aún no? Envialo de nuevo",
|
"send_reset_link": "Enviar enlace de restablecimiento",
|
||||||
|
"payment_mode_already_taken": "El modo de pago ya ha sido tomado",
|
||||||
|
"not_yet": "¿Aún no? Envíalo de nuevo",
|
||||||
"password_min_length": "La contraseña debe contener {count} caracteres",
|
"password_min_length": "La contraseña debe contener {count} caracteres",
|
||||||
"name_min_length": "El nombre debe tener al menos {count} letras.",
|
"name_min_length": "El nombre debe tener al menos {count} letras.",
|
||||||
"enter_valid_tax_rate": "Ingrese una tasa impositiva válida",
|
"enter_valid_tax_rate": "Ingrese una tasa impositiva válida",
|
||||||
"numbers_only": "Solo numeros.",
|
"numbers_only": "Solo números.",
|
||||||
"characters_only": "Solo personajes.",
|
"characters_only": "Solo caracteres.",
|
||||||
"password_incorrect": "Las contraseñas deben ser idénticas",
|
"password_incorrect": "Las contraseñas deben ser idénticas",
|
||||||
"password_length": "La contraseña debe tener 5 caracteres de longitud.",
|
"password_length": "La contraseña debe tener 5 caracteres de longitud.",
|
||||||
"qty_must_greater_than_zero": "La cantidad debe ser mayor que cero.",
|
"qty_must_greater_than_zero": "La cantidad debe ser mayor que cero.",
|
||||||
"price_greater_than_zero": "El precio debe ser mayor que cero.",
|
"price_greater_than_zero": "El precio debe ser mayor que cero.",
|
||||||
"payment_greater_than_zero": "El pago debe ser mayor que cero.",
|
"payment_greater_than_zero": "El pago debe ser mayor que cero.",
|
||||||
"payment_greater_than_due_amount": "El pago ingresado es mayor al monto adeudado de esta factura.",
|
"payment_greater_than_due_amount": "El pago ingresado es mayor a la cantidad debida de esta factura.",
|
||||||
"quantity_maxlength": "La cantidad no debe ser mayor de 20 dígitos.",
|
"quantity_maxlength": "La cantidad no debe ser mayor de 20 dígitos.",
|
||||||
"price_maxlength": "El precio no debe ser mayor de 20 dígitos.",
|
"price_maxlength": "El precio no debe ser mayor de 20 dígitos.",
|
||||||
"price_minvalue": "El precio debe ser mayor que 0 dígitos",
|
"price_minvalue": "El precio debe ser mayor que 0 dígitos",
|
||||||
@ -806,6 +884,7 @@
|
|||||||
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"dashboard": "Tableau de bord",
|
"dashboard": "Tableau de bord",
|
||||||
"customers": "Cliente",
|
"customers": "Clients",
|
||||||
"items": "Articles",
|
"items": "Articles",
|
||||||
"invoices": "Factures",
|
"invoices": "Factures",
|
||||||
"expenses": "Les dépenses",
|
"expenses": "Dépenses",
|
||||||
"estimates": "Estimations",
|
"estimates": "Devis",
|
||||||
"payments": "Paiements",
|
"payments": "Paiements",
|
||||||
"reports": "Rapports",
|
"reports": "Rapports",
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
@ -14,11 +14,12 @@
|
|||||||
"general": {
|
"general": {
|
||||||
"view_pdf": "Voir PDF",
|
"view_pdf": "Voir PDF",
|
||||||
"download_pdf": "Télécharger le PDF",
|
"download_pdf": "Télécharger le PDF",
|
||||||
"save": "sauver",
|
"save": "Sauvegarder",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"update": "Mise à jour",
|
"update": "Mise à jour",
|
||||||
|
"deselect": "Retirer",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"from": "De",
|
"from": "De",
|
||||||
"to": "À",
|
"to": "À",
|
||||||
@ -28,7 +29,7 @@
|
|||||||
"filter": "Filtre",
|
"filter": "Filtre",
|
||||||
"delete": "Effacer",
|
"delete": "Effacer",
|
||||||
"edit": "Modifier",
|
"edit": "Modifier",
|
||||||
"view": "Vue",
|
"view": "Voir",
|
||||||
"add_new_item": "Ajoute un nouvel objet",
|
"add_new_item": "Ajoute un nouvel objet",
|
||||||
"clear_all": "Tout effacer",
|
"clear_all": "Tout effacer",
|
||||||
"showing": "Montrant",
|
"showing": "Montrant",
|
||||||
@ -51,40 +52,47 @@
|
|||||||
"choose_template": "Choisissez un modèle",
|
"choose_template": "Choisissez un modèle",
|
||||||
"choose": "Choisir",
|
"choose": "Choisir",
|
||||||
"remove": "Retirer",
|
"remove": "Retirer",
|
||||||
"powered_by": "Alimenté par",
|
"powered_by": "Propulsé par",
|
||||||
"bytefury": "Bytefury",
|
"bytefury": "Bytefury",
|
||||||
"select_a_status": "Sélectionnez un statut",
|
"select_a_status": "Sélectionnez un statut",
|
||||||
"select_a_tax": "Sélectionnez une taxe",
|
"select_a_tax": "Sélectionnez une taxe",
|
||||||
"search": "Chercher",
|
"search": "Chercher",
|
||||||
"are_you_sure": "Êtes-vous sûr?",
|
"are_you_sure": "Êtes-vous sûr ?",
|
||||||
"list_is_empty": "La liste est vide",
|
"list_is_empty": "La liste est vide",
|
||||||
"no_tax_found": "Aucune taxe trouvée!",
|
"no_tax_found": "Aucune taxe trouvée!",
|
||||||
"four_zero_four": "404",
|
"four_zero_four": "404",
|
||||||
"you_got_lost": "Oups! Vous vous êtes perdus!",
|
"you_got_lost": "Oups! Vous vous êtes perdus!",
|
||||||
"go_home": "Rentrer chez soi",
|
"go_home": "Rentrer chez soi",
|
||||||
|
"test_mail_conf": "Tester la configuration",
|
||||||
|
"send_mail_successfully": "Mail envoyé avec succès",
|
||||||
"setting_updated": "Réglage mis à jour avec succès",
|
"setting_updated": "Réglage mis à jour avec succès",
|
||||||
"select_state": "Sélectionnez l'état",
|
"select_state": "Sélectionnez l'état",
|
||||||
"select_country": "Choisissez le pays",
|
"select_country": "Choisissez le pays",
|
||||||
"select_city": "Sélectionnez une ville",
|
"select_city": "Sélectionnez une ville",
|
||||||
"street_1": "Rue 1",
|
"street_1": "Rue 1",
|
||||||
"street_2": "Rue # 2",
|
"street_2": "Rue # 2",
|
||||||
"action_failed": "Action : échoué"
|
"action_failed": "Action : échoué",
|
||||||
|
"sort_by": "Trier par",
|
||||||
|
"ascending": "Ascendant",
|
||||||
|
"descending": "Descendant",
|
||||||
|
"subject": "matière",
|
||||||
|
"message": "Message",
|
||||||
|
"retry": "Réessayez"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
"select_year": "Sélectionnez lannée",
|
"select_year": "Sélectionnez l'année",
|
||||||
"cards": {
|
"cards": {
|
||||||
"due_amount": "Montant dû",
|
"due_amount": "Montant dû",
|
||||||
"customers": "Les clients",
|
"customers": "Clients",
|
||||||
"invoices": "Factures",
|
"invoices": "Factures",
|
||||||
"estimates": "Estimations"
|
"estimates": "Devis"
|
||||||
},
|
},
|
||||||
"chart_info": {
|
"chart_info": {
|
||||||
"total_sales": "Ventes",
|
"total_sales": "Ventes",
|
||||||
"total_receipts": "Reçus",
|
"total_receipts": "Reçus",
|
||||||
"total_expense": "Les dépenses",
|
"total_expense": "Dépenses",
|
||||||
"net_income": "Revenu net",
|
"net_income": "Revenu net",
|
||||||
"year": "Sélectionnez lannée"
|
"year": "Sélectionnez l'année"
|
||||||
},
|
},
|
||||||
"weekly_invoices": {
|
"weekly_invoices": {
|
||||||
"title": "Factures hebdomadaires"
|
"title": "Factures hebdomadaires"
|
||||||
@ -94,16 +102,16 @@
|
|||||||
},
|
},
|
||||||
"recent_invoices_card": {
|
"recent_invoices_card": {
|
||||||
"title": "Factures dues",
|
"title": "Factures dues",
|
||||||
"due_on": "Due On",
|
"due_on": "Due le",
|
||||||
"customer": "Cliente",
|
"customer": "Client",
|
||||||
"amount_due": "Montant dû",
|
"amount_due": "Montant dû",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"view_all": "Voir tout"
|
"view_all": "Voir tout"
|
||||||
},
|
},
|
||||||
"recent_estimate_card": {
|
"recent_estimate_card": {
|
||||||
"title": "Estimations récentes",
|
"title": "Devis récents",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"customer": "Cliente",
|
"customer": "Client",
|
||||||
"amount_due": "Montant dû",
|
"amount_due": "Montant dû",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"view_all": "Voir tout"
|
"view_all": "Voir tout"
|
||||||
@ -112,16 +120,16 @@
|
|||||||
"tax_types": {
|
"tax_types": {
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"description": "La description",
|
"description": "La description",
|
||||||
"percent": "Pour cent",
|
"percent": "Pourcent",
|
||||||
"compound_tax": "Taxe composée"
|
"compound_tax": "Taxe composée"
|
||||||
},
|
},
|
||||||
"customers": {
|
"customers": {
|
||||||
"title": "Les clients",
|
"title": "Clients",
|
||||||
"add_customer": "Ajouter un client",
|
"add_customer": "Ajouter un client",
|
||||||
"contacts_list": "Liste de clients",
|
"contacts_list": "Liste de clients",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"display_name": "Afficher un nom",
|
"display_name": "Statut et Nom de la société",
|
||||||
"primary_contact_name": "Nom du contact principal",
|
"primary_contact_name": "Nom du contact",
|
||||||
"contact_name": "Nom du contact",
|
"contact_name": "Nom du contact",
|
||||||
"amount_due": "Montant dû",
|
"amount_due": "Montant dû",
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
@ -155,12 +163,12 @@
|
|||||||
"select_country": "Choisissez le pays",
|
"select_country": "Choisissez le pays",
|
||||||
"select_city": "Sélectionnez une ville",
|
"select_city": "Sélectionnez une ville",
|
||||||
"select_currency": "Sélectionnez la devise",
|
"select_currency": "Sélectionnez la devise",
|
||||||
"street_1": "Rue 1",
|
"street_1": "Adresse",
|
||||||
"street_2": "Rue 2",
|
"street_2": "Adresse complémentaire",
|
||||||
"select_a_customer": "Sélectionnez un client",
|
"select_a_customer": "Sélectionnez un client",
|
||||||
"type_or_click": "Tapez ou cliquez pour sélectionner",
|
"type_or_click": "Tapez ou cliquez pour sélectionner",
|
||||||
|
|
||||||
"confirm_delete": "Vous ne pourrez pas récupérer ce client | Vous ne pourrez pas récupérer ces clients",
|
"confirm_delete": "Vous ne pourrez pas récupérer ce client et toutes les factures, devis et paiements associés. | Vous ne serez pas en mesure de récupérer ces clients et toutes les factures, devis et paiements associés.",
|
||||||
"created_message": "Client créé avec succès",
|
"created_message": "Client créé avec succès",
|
||||||
"updated_message": "Client mis à jour avec succès",
|
"updated_message": "Client mis à jour avec succès",
|
||||||
"deleted_message": "Client supprimé avec succès | Les clients supprimés avec succès"
|
"deleted_message": "Client supprimé avec succès | Les clients supprimés avec succès"
|
||||||
@ -184,7 +192,7 @@
|
|||||||
"edit_item": "Modifier larticle",
|
"edit_item": "Modifier larticle",
|
||||||
"no_items": "Aucun article pour le moment!",
|
"no_items": "Aucun article pour le moment!",
|
||||||
"list_of_items": "Cette section contiendra la liste des éléments.",
|
"list_of_items": "Cette section contiendra la liste des éléments.",
|
||||||
"select_a_unit": "sélectionner lunité",
|
"select_a_unit": "Sélectionnez l'unité",
|
||||||
|
|
||||||
"item_attached_message": "Impossible de supprimer un élément déjà utilisé",
|
"item_attached_message": "Impossible de supprimer un élément déjà utilisé",
|
||||||
"confirm_delete": "Vous ne pourrez pas récupérer cet article | Vous ne pourrez pas récupérer ces objets",
|
"confirm_delete": "Vous ne pourrez pas récupérer cet article | Vous ne pourrez pas récupérer ces objets",
|
||||||
@ -193,59 +201,59 @@
|
|||||||
"deleted_message": "Élément supprimé avec succès | Éléments supprimés avec succès"
|
"deleted_message": "Élément supprimé avec succès | Éléments supprimés avec succès"
|
||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"title": "Estimations",
|
"title": "Devis",
|
||||||
"estimate": "Estimation | Estimations",
|
"estimate": "Devis | Devis",
|
||||||
"estimates_list": "Liste des estimations",
|
"estimates_list": "Liste des devis",
|
||||||
"days": "{jours} jours",
|
"days": "{jours} jours",
|
||||||
"months": "{mois} mois",
|
"months": "{mois} mois",
|
||||||
"years": "{années} Année",
|
"years": "{années} Année",
|
||||||
"all": "Toute",
|
"all": "Tout",
|
||||||
"paid": "Payé",
|
"paid": "Payé",
|
||||||
"unpaid": "Non payé",
|
"unpaid": "Non payé",
|
||||||
"customer": "CLIENTE CLIENT",
|
"customer": "Client",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "Réf.",
|
||||||
"number": "NOMBRE",
|
"number": "N°",
|
||||||
"amount_due": "MONTANT DÛ",
|
"amount_due": "MONTANT DÛ",
|
||||||
"partially_paid": "Partiellement payé",
|
"partially_paid": "Partiellement payé",
|
||||||
"total": "Totale",
|
"total": "Total",
|
||||||
"discount": "Remise",
|
"discount": "Remise",
|
||||||
"sub_total": "Total partiel",
|
"sub_total": "Total partiel",
|
||||||
"estimate_number": "Numéro destimation",
|
"estimate_number": "N°",
|
||||||
"ref_number": "Numéro de ref",
|
"ref_number": "Numéro de ref",
|
||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
"add_item": "Ajouter un article",
|
"add_item": "Ajouter un article",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"due_date": "Date déchéance",
|
"due_date": "Date d'échéance",
|
||||||
"expiry_date": "Date dexpiration",
|
"expiry_date": "Date dexpiration",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"add_tax": "Ajouter une taxe",
|
"add_tax": "Ajouter une taxe",
|
||||||
"amount": "Montante",
|
"amount": "Montant",
|
||||||
"action": "action",
|
"action": "action",
|
||||||
"notes": "Remarques",
|
"notes": "Remarques",
|
||||||
"tax": "Impôt",
|
"tax": "Impôt",
|
||||||
"estimate_template": "Modèle destimation",
|
"estimate_template": "Modèle de devis",
|
||||||
"convert_to_invoice": "Convertir en facture",
|
"convert_to_invoice": "Convertir en facture",
|
||||||
"mark_as_sent": "Marquer comme envoyé",
|
"mark_as_sent": "Marquer comme envoyé",
|
||||||
"send_estimate": "Envoyer une estimation",
|
"send_estimate": "Envoyer un devis",
|
||||||
"record_payment": "Record de paiement",
|
"record_payment": "Enregistrer un paiement",
|
||||||
"add_estimate": "Ajouter une estimation",
|
"add_estimate": "Ajouter un devis",
|
||||||
"save_estimate": "Sauvegarder lestimation",
|
"save_estimate": "Sauvegarder le devis",
|
||||||
"confirm_conversion": "Vous souhaitez convertir cette estimation en facture?",
|
"confirm_conversion": "Vous souhaitez convertir ce devis en facture?",
|
||||||
"conversion_message": "Conversion réussie",
|
"conversion_message": "Conversion réussie",
|
||||||
"confirm_send_estimate": "Cette estimation sera envoyée par courrier électronique au client.",
|
"confirm_send_estimate": "Ce devis sera envoyée par courrier électronique au client.",
|
||||||
"confirm_mark_as_sent": "Cette estimation sera marquée comme envoyé",
|
"confirm_mark_as_sent": "Ce devis sera marquée comme envoyé",
|
||||||
"confirm_mark_as_accepted": "Cette estimation sera marquée comme acceptée",
|
"confirm_mark_as_accepted": "Ce devis sera marquée comme acceptée",
|
||||||
"confirm_mark_as_rejected": "Cette estimation sera marquée comme Rejetée",
|
"confirm_mark_as_rejected": "Ce devis sera marquée comme Rejetée",
|
||||||
"mark_as_sent_successfully": "Estimation marquée comme envoyée avec succès",
|
"mark_as_sent_successfully": "Devis marquée comme envoyée avec succès",
|
||||||
"send_estimate_successfully": "Estimation envoyée avec succès",
|
"send_estimate_successfully": "Devis envoyée avec succès",
|
||||||
"errors": {
|
"errors": {
|
||||||
"required": "Champ requis"
|
"required": "Champ requis"
|
||||||
},
|
},
|
||||||
"accepted": "Accepté",
|
"accepted": "Accepté",
|
||||||
"sent": "Envoyée",
|
"sent": "Envoyée",
|
||||||
"draft": "Brouillon",
|
"draft": "Brouillon",
|
||||||
"declined": "Diminué",
|
"declined": "Refusé",
|
||||||
"new_estimate": "Nouvelle estimation",
|
"new_estimate": "Nouveau devis",
|
||||||
"add_new_estimate": "Ajouter une nouvelle estimation",
|
"add_new_estimate": "Ajouter une nouvelle estimation",
|
||||||
"update_Estimate": "Mise à jour de lestimation",
|
"update_Estimate": "Mise à jour de lestimation",
|
||||||
"edit_estimate": "Modifier lestimation",
|
"edit_estimate": "Modifier lestimation",
|
||||||
@ -269,14 +277,17 @@
|
|||||||
"quantity": "Quantité",
|
"quantity": "Quantité",
|
||||||
"price": "Prix",
|
"price": "Prix",
|
||||||
"discount": "Remise",
|
"discount": "Remise",
|
||||||
"total": "Totale",
|
"total": "Total",
|
||||||
"total_discount": "Remise totale",
|
"total_discount": "Remise totale",
|
||||||
"sub_total": "Total partiel",
|
"sub_total": "Total partiel",
|
||||||
"tax": "Impôt",
|
"tax": "Impôt",
|
||||||
"amount": "Montante",
|
"amount": "Montant",
|
||||||
"select_an_item": "Tapez ou cliquez pour sélectionner un élément",
|
"select_an_item": "Tapez ou cliquez pour sélectionner un élément",
|
||||||
"type_item_description": "Type Item Description (optionnel)"
|
"type_item_description": "Type Item Description (optionnel)"
|
||||||
}
|
},
|
||||||
|
"no_matching_estimates": "Aucune estimation correspondante!",
|
||||||
|
"user_email_does_not_exist": "L'e-mail de l'utilisateur n'existe pas",
|
||||||
|
"something_went_wrong": "quelque chose a mal tourné"
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"title": "Factures",
|
"title": "Factures",
|
||||||
@ -287,13 +298,13 @@
|
|||||||
"all": "Toute",
|
"all": "Toute",
|
||||||
"paid": "Payé",
|
"paid": "Payé",
|
||||||
"unpaid": "Non payé",
|
"unpaid": "Non payé",
|
||||||
"customer": "CLIENTE CLIENT",
|
"customer": "CLIENT",
|
||||||
"paid_status": "Statut payé",
|
"paid_status": "Paiement",
|
||||||
"ref_no": "REF NO.",
|
"ref_no": "REF NO.",
|
||||||
"number": "NOMBRE",
|
"number": "N°",
|
||||||
"amount_due": "MONTANT DÛ",
|
"amount_due": "MONTANT DÛ",
|
||||||
"partially_paid": "Partiellement payé",
|
"partially_paid": "Partiellement payé",
|
||||||
"total": "Totale Total",
|
"total": "Total",
|
||||||
"discount": "Remise",
|
"discount": "Remise",
|
||||||
"sub_total": "Total partiel",
|
"sub_total": "Total partiel",
|
||||||
"invoice": "Facture | Factures",
|
"invoice": "Facture | Factures",
|
||||||
@ -302,21 +313,23 @@
|
|||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
"add_item": "Ajouter un article",
|
"add_item": "Ajouter un article",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"due_date": "Date déchéance",
|
"due_date": "Date d'échéance",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"add_tax": "Ajouter une taxe",
|
"add_tax": "Ajouter une taxe",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant",
|
||||||
"action": "action",
|
"action": "action",
|
||||||
"notes": "Remarques",
|
"notes": "Remarques",
|
||||||
"view": "Vue",
|
"view": "Voir",
|
||||||
"send_invoice": "Envoyer une facture",
|
"send_invoice": "Envoyer une facture",
|
||||||
|
"cloned_successfully": "Facture clonée avec succès",
|
||||||
|
"clone_invoice": "Cloner",
|
||||||
"invoice_template": "Modèle de facture",
|
"invoice_template": "Modèle de facture",
|
||||||
"template": "Modèle",
|
"template": "Modèle",
|
||||||
"mark_as_sent": "Marquer comme envoyé",
|
"mark_as_sent": "Marquer comme envoyé",
|
||||||
"invoice_mark_as_sent": "Cette facture sera marquée comme envoyé",
|
"invoice_mark_as_sent": "Cette facture sera marquée comme envoyé",
|
||||||
"confirm_send": "Cette facture sera envoyée par courrier électronique au client.",
|
"confirm_send": "Cette facture sera envoyée par courrier électronique au client.",
|
||||||
"invoice_date": "Date de facturation",
|
"invoice_date": "Date de facturation",
|
||||||
"record_payment": "Record de paiement",
|
"record_payment": "Enregister un paiement",
|
||||||
"add_new_invoice": "Ajouter une nouvelle facture",
|
"add_new_invoice": "Ajouter une nouvelle facture",
|
||||||
"update_expense": "Frais de mise à jour",
|
"update_expense": "Frais de mise à jour",
|
||||||
"edit_invoice": "Modifier la facture",
|
"edit_invoice": "Modifier la facture",
|
||||||
@ -335,11 +348,11 @@
|
|||||||
"quantity": "Quantité",
|
"quantity": "Quantité",
|
||||||
"price": "Prix",
|
"price": "Prix",
|
||||||
"discount": "Remise",
|
"discount": "Remise",
|
||||||
"total": "Totale Total",
|
"total": "Total",
|
||||||
"total_discount": "Remise totale",
|
"total_discount": "Remise totale",
|
||||||
"sub_total": "Total partiel",
|
"sub_total": "Total partiel",
|
||||||
"tax": "Impôt",
|
"tax": "Impôt",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant",
|
||||||
"select_an_item": "Tapez ou cliquez pour sélectionner un élément",
|
"select_an_item": "Tapez ou cliquez pour sélectionner un élément",
|
||||||
"type_item_description": "Type Item Description (optionnel)"
|
"type_item_description": "Type Item Description (optionnel)"
|
||||||
},
|
},
|
||||||
@ -347,9 +360,14 @@
|
|||||||
"confirm_delete": "Vous ne pourrez pas récupérer cette facture | Vous ne pourrez pas récupérer ces factures",
|
"confirm_delete": "Vous ne pourrez pas récupérer cette facture | Vous ne pourrez pas récupérer ces factures",
|
||||||
"created_message": "Facture créée avec succès",
|
"created_message": "Facture créée avec succès",
|
||||||
"updated_message": "Facture mise à jour avec succès",
|
"updated_message": "Facture mise à jour avec succès",
|
||||||
"deleted_message": "Invoice deleted successfully | Invoices deleted successfully",
|
"deleted_message": "La Facture a été supprimée ! | Les Factures ont été supprimées !",
|
||||||
"marked_as_sent_message": "Facture supprimée avec succès | Factures supprimées avec succès",
|
"marked_as_sent_message": "Facture supprimée avec succès | Factures supprimées avec succès",
|
||||||
"invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer"
|
"invalid_due_amount_message": "Le paiement entré est supérieur au montant total dû pour cette facture. Veuillez vérifier et réessayer",
|
||||||
|
"confirm_send_invoice": "Cette facture sera envoyée par email au client",
|
||||||
|
"no_matching_invoices": "Aucune facture correspondante!",
|
||||||
|
"confirm_clone": "Cette facture sera clonée dans une nouvelle facture",
|
||||||
|
"user_email_does_not_exist": "L'e-mail de l'utilisateur n'existe pas",
|
||||||
|
"something_went_wrong": "quelque chose a mal tourné"
|
||||||
},
|
},
|
||||||
"credit_notes": {
|
"credit_notes": {
|
||||||
"title": "Notes de crédit",
|
"title": "Notes de crédit",
|
||||||
@ -357,7 +375,7 @@
|
|||||||
"credit_notes": "Notes de crédit",
|
"credit_notes": "Notes de crédit",
|
||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant Montant",
|
||||||
"action": "action",
|
"action": "action",
|
||||||
"credit_number": "Numéro de crédit",
|
"credit_number": "Numéro de crédit",
|
||||||
"notes": "Remarques",
|
"notes": "Remarques",
|
||||||
@ -368,7 +386,7 @@
|
|||||||
"quantity": "Quantité",
|
"quantity": "Quantité",
|
||||||
"price": "Prix",
|
"price": "Prix",
|
||||||
"discount": "Remise",
|
"discount": "Remise",
|
||||||
"total": "Totale Total",
|
"total": "Total",
|
||||||
"total_discount": "Remise totale",
|
"total_discount": "Remise totale",
|
||||||
"sub_total": "Total partiel",
|
"sub_total": "Total partiel",
|
||||||
"tax": "Impôt"
|
"tax": "Impôt"
|
||||||
@ -377,12 +395,12 @@
|
|||||||
"payments": {
|
"payments": {
|
||||||
"title": "Paiements",
|
"title": "Paiements",
|
||||||
"payments_list": "Liste de paiements",
|
"payments_list": "Liste de paiements",
|
||||||
"record_payment": "Record de paiement",
|
"record_payment": "Enregistrer un paiement",
|
||||||
"customer": "Cliente Client",
|
"customer": "Client",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant",
|
||||||
"action": "action",
|
"action": "action",
|
||||||
"payment_number": "Numéro de paiement",
|
"payment_number": "N°",
|
||||||
"payment_mode": "Mode de paiement",
|
"payment_mode": "Mode de paiement",
|
||||||
"invoice": "Facture dachat",
|
"invoice": "Facture dachat",
|
||||||
"note": "Remarque",
|
"note": "Remarque",
|
||||||
@ -391,10 +409,12 @@
|
|||||||
"edit_payment": "Modifier le paiement",
|
"edit_payment": "Modifier le paiement",
|
||||||
"view_payment": "Voir le paiement",
|
"view_payment": "Voir le paiement",
|
||||||
"add_new_payment": "Ajouter un nouveau paiement",
|
"add_new_payment": "Ajouter un nouveau paiement",
|
||||||
|
"send_payment_receipt": "Envoyer le reçu",
|
||||||
"save_payment": "Enregistrer le paiement",
|
"save_payment": "Enregistrer le paiement",
|
||||||
"update_payment": "Mettre à jour le paiement",
|
"update_payment": "Mettre à jour le paiement",
|
||||||
"payment": "Paiement | Paiements",
|
"payment": "Paiement | Paiements",
|
||||||
"no_payments": "Aucun paiement pour le moment!",
|
"no_payments": "Aucun paiement pour le moment!",
|
||||||
|
"no_matching_payments": "Il n'y a aucun paiement correspondant!",
|
||||||
"list_of_payments": "Cette section contiendra la liste des paiements",
|
"list_of_payments": "Cette section contiendra la liste des paiements",
|
||||||
"select_payment_mode": "Sélectionnez le mode de paiement",
|
"select_payment_mode": "Sélectionnez le mode de paiement",
|
||||||
|
|
||||||
@ -402,27 +422,33 @@
|
|||||||
"created_message": "Paiement créé avec succès",
|
"created_message": "Paiement créé avec succès",
|
||||||
"updated_message": "Paiement mis à jour avec succès",
|
"updated_message": "Paiement mis à jour avec succès",
|
||||||
"deleted_message": "Paiement supprimé avec succès | Paiements supprimés avec succès",
|
"deleted_message": "Paiement supprimé avec succès | Paiements supprimés avec succès",
|
||||||
"invalid_amount_message": "Le montant du paiement est invalide"
|
"invalid_amount_message": "Le montant du paiement est invalide",
|
||||||
|
"confirm_send_payment": "Ce paiement sera envoyé par e-mail au client",
|
||||||
|
"send_payment_successfully": "Paiement envoyé avec succès",
|
||||||
|
"user_email_does_not_exist": "L'e-mail de l'utilisateur n'existe pas",
|
||||||
|
"something_went_wrong": "quelque chose a mal tourné"
|
||||||
},
|
},
|
||||||
"expenses": {
|
"expenses": {
|
||||||
"title": "Les dépenses",
|
"title": "Dépenses",
|
||||||
"expenses_list": "Liste des dépenses",
|
"expenses_list": "Liste des dépenses",
|
||||||
"expense_title": "Titre",
|
"expense_title": "Titre",
|
||||||
"contact": "Contact",
|
"contact": "Contact",
|
||||||
|
"customer": "Client Client",
|
||||||
|
"select_a_customer": "Sélectionnez un client",
|
||||||
"category": "Catégorie",
|
"category": "Catégorie",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"expense_date": "Date",
|
"expense_date": "Date",
|
||||||
"description": "La description",
|
"description": "La description",
|
||||||
"receipt": "Le reçu",
|
"receipt": "Le reçu",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant Montant",
|
||||||
"action": "action",
|
"action": "action",
|
||||||
"note": "Remarque",
|
"note": "Remarque",
|
||||||
"category_id": "Identifiant de catégorie",
|
"category_id": "Identifiant de catégorie",
|
||||||
"date": "Date de dépense",
|
"date": "Date de dépense",
|
||||||
"add_expense": "Ajouter une dépense",
|
"add_expense": "Ajouter une dépense",
|
||||||
"add_new_expense": "Ajouter une nouvelle dépense",
|
"add_new_expense": "Ajouter une nouvelle dépense",
|
||||||
"save_expense": "Économiser des dépenses",
|
"save_expense": "Enregistrer la dépense",
|
||||||
"update_expense": "Frais de mise à jour",
|
"update_expense": "Frais de mise à jour",
|
||||||
"download_receipt": "Télécharger le reçu",
|
"download_receipt": "Télécharger le reçu",
|
||||||
"edit_expense": "Modifier les dépenses",
|
"edit_expense": "Modifier les dépenses",
|
||||||
@ -440,13 +466,14 @@
|
|||||||
"title": "Titre",
|
"title": "Titre",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"description": "La description",
|
"description": "La description",
|
||||||
"amount": "Montante Montant",
|
"amount": "Montant Montant",
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"add_category": "ajouter une catégorie",
|
"add_category": "ajouter une catégorie",
|
||||||
"new_category": "Nouvelle catégorie",
|
"new_category": "Nouvelle catégorie",
|
||||||
"category": "Catégorie | Les catégories",
|
"category": "Catégorie | Les catégories",
|
||||||
"select_a_category": "choisissez une catégorie"
|
"select_a_category": "choisissez une catégorie"
|
||||||
}
|
},
|
||||||
|
"customer": "Client"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
"email": "Email",
|
"email": "Email",
|
||||||
@ -459,11 +486,12 @@
|
|||||||
"enter_email": "Entrer email",
|
"enter_email": "Entrer email",
|
||||||
"enter_password": "Entrer le mot de passe",
|
"enter_password": "Entrer le mot de passe",
|
||||||
"retype_password": "Retaper le mot de passe",
|
"retype_password": "Retaper le mot de passe",
|
||||||
"login_placeholder": "mail@example.com"
|
"login_placeholder": "mail@example.com",
|
||||||
|
"password_reset_successfully": "Réinitialisation du mot de passe réussie"
|
||||||
},
|
},
|
||||||
"reports": {
|
"reports": {
|
||||||
"title": "rapport",
|
"title": "rapport",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"paid": "Payé",
|
"paid": "Payé",
|
||||||
@ -482,43 +510,43 @@
|
|||||||
"sales": "Ventes",
|
"sales": "Ventes",
|
||||||
"date_range": "Sélectionner une plage de dates",
|
"date_range": "Sélectionner une plage de dates",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"report_type": "Type de rapport"
|
"report_type": "Type de rapport"
|
||||||
},
|
},
|
||||||
"taxes": {
|
"taxes": {
|
||||||
"taxes": "Les taxes",
|
"taxes": "Les taxes",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"date_range": "Sélectionner une plage de dates"
|
"date_range": "Sélectionner une plage de dates"
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"required": "Champ requis"
|
"required": "Champ requis"
|
||||||
},
|
},
|
||||||
"invoices": {
|
"invoices": {
|
||||||
"invoice": "Facture dachat",
|
"invoice": "Facture d'achat",
|
||||||
"invoice_date": "Date de facturation",
|
"invoice_date": "Date de facturation",
|
||||||
"due_date": "Date déchéance",
|
"due_date": "Date déchéance",
|
||||||
"amount": "Montante ",
|
"amount": "Montant ",
|
||||||
"contact_name": "Nom du contact",
|
"contact_name": "Nom du contact",
|
||||||
"status": "Statut"
|
"status": "Statut"
|
||||||
},
|
},
|
||||||
"estimates": {
|
"estimates": {
|
||||||
"estimate": "Estimation",
|
"estimate": "Devis",
|
||||||
"estimate_date": "Date destimation",
|
"estimate_date": "Date du devis",
|
||||||
"due_date": "Date déchéance",
|
"due_date": "Date d'échéance",
|
||||||
"estimate_number": "Numéro destimation",
|
"estimate_number": "N°",
|
||||||
"ref_number": "Numéro de ref",
|
"ref_number": "Numéro de ref",
|
||||||
"amount": "Montante",
|
"amount": "Montant",
|
||||||
"contact_name": "Nom du contact",
|
"contact_name": "Nom du contact",
|
||||||
"status": "Statut"
|
"status": "Statut"
|
||||||
},
|
},
|
||||||
"expenses": {
|
"expenses": {
|
||||||
"expenses": "Les dépenses",
|
"expenses": "Dépenses",
|
||||||
"category": "Catégorie",
|
"category": "Catégorie",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
"amount": "Montante",
|
"amount": "Montant",
|
||||||
"to_date": "À ce jour",
|
"to_date": "À ce jour",
|
||||||
"from_date": "Partir de la date",
|
"from_date": "A partir de la date",
|
||||||
"date_range": "Sélectionner une plage de dates"
|
"date_range": "Sélectionner une plage de dates"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -526,6 +554,7 @@
|
|||||||
"menu_title": {
|
"menu_title": {
|
||||||
"account_settings": "Paramètres du compte",
|
"account_settings": "Paramètres du compte",
|
||||||
"company_information": "Informations sur la société",
|
"company_information": "Informations sur la société",
|
||||||
|
"customization": "Personnalisation",
|
||||||
"preferences": "Préférences",
|
"preferences": "Préférences",
|
||||||
"notifications": "Les notifications",
|
"notifications": "Les notifications",
|
||||||
"tax_types": "Types de taxe",
|
"tax_types": "Types de taxe",
|
||||||
@ -535,7 +564,7 @@
|
|||||||
"title": "Paramètres",
|
"title": "Paramètres",
|
||||||
"setting": "Paramètres | Paramètres",
|
"setting": "Paramètres | Paramètres",
|
||||||
"general": "Générale",
|
"general": "Générale",
|
||||||
"language": "La langue",
|
"language": "Langue",
|
||||||
"primary_currency": "Devise principale",
|
"primary_currency": "Devise principale",
|
||||||
"timezone": "Fuseau horaire",
|
"timezone": "Fuseau horaire",
|
||||||
"date_format": "Format de date",
|
"date_format": "Format de date",
|
||||||
@ -558,18 +587,18 @@
|
|||||||
"add_currency": "Ajouter une devise"
|
"add_currency": "Ajouter une devise"
|
||||||
},
|
},
|
||||||
"mail": {
|
"mail": {
|
||||||
"host": "Mail Host",
|
"host": "Hôte du serveur mail",
|
||||||
"port": "Port mail",
|
"port": "Port du serveur mail",
|
||||||
"driver": "Pilote de courrier",
|
"driver": "Pilote de courrier",
|
||||||
"password": "Mot de passe mail",
|
"password": "Mot de passe du serveur mail",
|
||||||
"secret": "Secret",
|
"secret": "Secret",
|
||||||
"mailgun_secret": "Mailgun Secret",
|
"mailgun_secret": "Mailgun Secret",
|
||||||
"mailgun_domain": "Domaine",
|
"mailgun_domain": "Domaine",
|
||||||
"mailgun_endpoint": "Mailgun Point Final",
|
"mailgun_endpoint": "Mailgun Point Final",
|
||||||
"ses_secret": "SES Secret",
|
"ses_secret": "SES Secret",
|
||||||
"ses_key": "SES clé",
|
"ses_key": "SES clé",
|
||||||
"from_name": "Nom de messagerie",
|
"from_name": "Nom de l'email d'envoi",
|
||||||
"from_mail": "De ladresse mail",
|
"from_mail": "Adresse email d'envoi",
|
||||||
"username": "Mail Nom d'utilisateur",
|
"username": "Mail Nom d'utilisateur",
|
||||||
"mail_config": "Configuration du courrier",
|
"mail_config": "Configuration du courrier",
|
||||||
"encryption": "Chiffrement du courrier",
|
"encryption": "Chiffrement du courrier",
|
||||||
@ -581,19 +610,99 @@
|
|||||||
"pdf_layout": "Mise en page PDF"
|
"pdf_layout": "Mise en page PDF"
|
||||||
},
|
},
|
||||||
"company_info": {
|
"company_info": {
|
||||||
"company_info": "Information dentreprise",
|
"company_info": "Information d'entreprise",
|
||||||
"company_name": "Nom de la compagnie",
|
"company_name": "Nom de la compagnie",
|
||||||
"company_logo": "Logo dentreprise",
|
"company_logo": "Logo d'entreprise",
|
||||||
"section_description": "Informations sur votre entreprise qui figureront sur les factures, estimations et autres documents créés par Crater.",
|
"section_description": "Informations sur votre entreprise qui figureront sur les factures, estimations et autres documents créés par Crater.",
|
||||||
"phone": "Téléphone",
|
"phone": "Téléphone",
|
||||||
"country": "Pays",
|
"country": "Pays",
|
||||||
"state": "Etat",
|
"state": "Etat",
|
||||||
"city": "Ville",
|
"city": "Ville",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
"zip": "Zip",
|
"zip": "Code postal",
|
||||||
"save": "sauver",
|
"save": "Sauvegarder",
|
||||||
"updated_message": "Informations sur la société mises à jour avec succès"
|
"updated_message": "Informations sur la société mises à jour avec succès"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"customization": {
|
||||||
|
"customization": "Personnalisation",
|
||||||
|
"save": "Sauvegarder",
|
||||||
|
"addresses": {
|
||||||
|
"title": "Adresses",
|
||||||
|
"section_description": "You can set Customer Billing Address and Customer Shipping Address Format (Displayed in PDF only). ",
|
||||||
|
"customer_billing_address": "Adresse de paiement",
|
||||||
|
"customer_shipping_address": "Adresse de livraison",
|
||||||
|
"company_address": "Adresse de l'entreprise",
|
||||||
|
"insert_fields": "Ajouter des champs",
|
||||||
|
"contact": "Contact",
|
||||||
|
"address": "Addresse",
|
||||||
|
"display_name": "Nom",
|
||||||
|
"primary_contact_name": "Nom du contact principal",
|
||||||
|
"email": "Email",
|
||||||
|
"website": "Website",
|
||||||
|
"name": "Nom",
|
||||||
|
"country": "Pays",
|
||||||
|
"state": "State",
|
||||||
|
"city": "Ville",
|
||||||
|
"company_name": "Nom de l'entreprise",
|
||||||
|
"address_street_1": "Rue",
|
||||||
|
"address_street_2": "Complément",
|
||||||
|
"phone": "Téléphone",
|
||||||
|
"zip_code": "Code postal",
|
||||||
|
"address_setting_updated": "Adresse mise à jour avec succès"
|
||||||
|
},
|
||||||
|
"updated_message": "Informations de l'entreprise mises à jour",
|
||||||
|
|
||||||
|
"invoices": {
|
||||||
|
"title": "Factures",
|
||||||
|
"notes": "Notes",
|
||||||
|
"invoice_prefix": "Préfixe",
|
||||||
|
"invoice_settings": "Paramètre",
|
||||||
|
"autogenerate_invoice_number": "Générer automatiquement le numéro de facture",
|
||||||
|
"invoice_setting_description": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de facture à chaque fois que vous en créez une nouvelle.",
|
||||||
|
"enter_invoice_prefix": "Ajouter le préfixe de facture",
|
||||||
|
"terms_and_conditions": "Termes et conditions",
|
||||||
|
"invoice_setting_updated": "Paramètres de facturation mis à jour"
|
||||||
|
},
|
||||||
|
|
||||||
|
"estimates": {
|
||||||
|
"title": "Devis",
|
||||||
|
"estimate_prefix": "Préfixe",
|
||||||
|
"estimate_settings": "Paramètre",
|
||||||
|
"autogenerate_estimate_number": "Générer automatiquement le numéro de devis",
|
||||||
|
"estimate_setting_description": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de devis à chaque fois que vous en créez un nouveau.",
|
||||||
|
"estimate_setting_updated": "Paramètres de devis mis à jour"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payments": {
|
||||||
|
"title": "Paiements",
|
||||||
|
"payment_prefix": "Préfixe",
|
||||||
|
"payment_settings": "Paramètre",
|
||||||
|
"autogenerate_payment_number": "Générer automatiquement le numéro de paiement",
|
||||||
|
"payment_setting_description": "Désactivez cette option si vous ne souhaitez pas générer automatiquement les numéros de paiement à chaque fois que vous en créez un nouveau.",
|
||||||
|
"payment_setting_updated": "Les paramètres de paiement ont bien été mis à jour",
|
||||||
|
"payment_mode": "Mode de paiement",
|
||||||
|
"add_payment_mode": "Ajouter un mode de paiement",
|
||||||
|
"mode_name": "Nom",
|
||||||
|
"payment_mode_added": "Mode de paiement ajouté",
|
||||||
|
"payment_mode_updated": "Mode de paiement mis à jour",
|
||||||
|
"payment_mode_confirm_delete": "Êtes-vous sur de supprimer ce mode de paiement ?",
|
||||||
|
"already_in_use": "Ce mode de paiement existe déjà.",
|
||||||
|
"deleted_message": "Mode de paiement supprimé avec succès"
|
||||||
|
},
|
||||||
|
|
||||||
|
"items": {
|
||||||
|
"title": "Articles",
|
||||||
|
"units": "Unités",
|
||||||
|
"add_item_unit": "Ajouter une unité",
|
||||||
|
"unit_name": "Nom",
|
||||||
|
"item_unit_added": "Unité ajouté",
|
||||||
|
"item_unit_updated": "Unité mis à jour",
|
||||||
|
"item_unit_confirm_delete": "Êtes-vous sur de supprimer cette unité ?",
|
||||||
|
"already_in_use": "Cette unité existe déjà",
|
||||||
|
"deleted_message": "Unité supprimé avec succès"
|
||||||
|
}
|
||||||
|
},
|
||||||
"account_settings": {
|
"account_settings": {
|
||||||
"profile_picture": "Image de profil",
|
"profile_picture": "Image de profil",
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
@ -601,7 +710,7 @@
|
|||||||
"password": "Mot de passe",
|
"password": "Mot de passe",
|
||||||
"confirm_password": "Confirmez le mot de passe",
|
"confirm_password": "Confirmez le mot de passe",
|
||||||
"account_settings": "Paramètres du compte",
|
"account_settings": "Paramètres du compte",
|
||||||
"save": "sauver",
|
"save": "Sauvegarder",
|
||||||
"section_description": "Vous pouvez mettre à jour votre nom, votre email et votre mot de passe en utilisant le formulaire ci-dessous.",
|
"section_description": "Vous pouvez mettre à jour votre nom, votre email et votre mot de passe en utilisant le formulaire ci-dessous.",
|
||||||
"updated_message": "Paramètres du compte mis à jour avec succès"
|
"updated_message": "Paramètres du compte mis à jour avec succès"
|
||||||
},
|
},
|
||||||
@ -616,10 +725,10 @@
|
|||||||
"email": "Envoyer des notifications à",
|
"email": "Envoyer des notifications à",
|
||||||
"description": "Quelles notifications par courrier électronique souhaitez-vous recevoir lorsque quelque chose change?",
|
"description": "Quelles notifications par courrier électronique souhaitez-vous recevoir lorsque quelque chose change?",
|
||||||
"invoice_viewed": "Facture consultée",
|
"invoice_viewed": "Facture consultée",
|
||||||
"invoice_viewed_desc": "Lorsque votre client visualise la facture envoyée via le tableau de bord du cratère.",
|
"invoice_viewed_desc": "Lorsque le client visualise la facture envoyée via le tableau de bord de Neptune.",
|
||||||
"estimate_viewed": "Estimation vue",
|
"estimate_viewed": "Devis consulté",
|
||||||
"estimate_viewed_desc": "Lorsque votre client visualise le devis envoyé via le tableau de bord du cratère.",
|
"estimate_viewed_desc": "Lorsque le client visualise le devis envoyé via le tableau de bord de Neptune.",
|
||||||
"save": "sauver",
|
"save": "Sauvegarder",
|
||||||
"email_save_message": "Email enregistré avec succès",
|
"email_save_message": "Email enregistré avec succès",
|
||||||
"invoice_viewed_message": "Facture consultée",
|
"invoice_viewed_message": "Facture consultée",
|
||||||
"estimate_viewed_message": "Estimation vue",
|
"estimate_viewed_message": "Estimation vue",
|
||||||
@ -649,7 +758,7 @@
|
|||||||
"description": "Des catégories sont requises pour ajouter des entrées de dépenses. Vous pouvez ajouter ou supprimer ces catégories selon vos préférences.",
|
"description": "Des catégories sont requises pour ajouter des entrées de dépenses. Vous pouvez ajouter ou supprimer ces catégories selon vos préférences.",
|
||||||
"add_new_category": "Ajouter une nouvelle catégorie",
|
"add_new_category": "Ajouter une nouvelle catégorie",
|
||||||
"category_name": "Nom de catégorie",
|
"category_name": "Nom de catégorie",
|
||||||
"category_description": "La description",
|
"category_description": "Description",
|
||||||
"created_message": "Catégorie de dépenses créée avec succès",
|
"created_message": "Catégorie de dépenses créée avec succès",
|
||||||
"deleted_message": "La catégorie de dépenses a été supprimée avec succès",
|
"deleted_message": "La catégorie de dépenses a été supprimée avec succès",
|
||||||
"updated_message": "Catégorie de dépenses mise à jour avec succès",
|
"updated_message": "Catégorie de dépenses mise à jour avec succès",
|
||||||
@ -665,7 +774,7 @@
|
|||||||
"discount_setting": "Réglage de remise",
|
"discount_setting": "Réglage de remise",
|
||||||
"discount_per_item": "Remise par article",
|
"discount_per_item": "Remise par article",
|
||||||
"discount_setting_description": "Activez cette option si vous souhaitez ajouter une remise à des postes de facture individuels. Par défaut, les remises sont ajoutées directement à la facture.",
|
"discount_setting_description": "Activez cette option si vous souhaitez ajouter une remise à des postes de facture individuels. Par défaut, les remises sont ajoutées directement à la facture.",
|
||||||
"save": "sauver",
|
"save": "Sauvegarder",
|
||||||
"preference": "Préférence | Préférences",
|
"preference": "Préférence | Préférences",
|
||||||
"general_settings": "Préférences par défaut pour le système.",
|
"general_settings": "Préférences par défaut pour le système.",
|
||||||
"updated_message": "Préférences mises à jour avec succès",
|
"updated_message": "Préférences mises à jour avec succès",
|
||||||
@ -686,7 +795,14 @@
|
|||||||
"progress_text": "Cela ne prendra que quelques minutes. S'il vous plaît ne pas actualiser l'écran ou fermer la fenêtre avant la fin de la mise à jour",
|
"progress_text": "Cela ne prendra que quelques minutes. S'il vous plaît ne pas actualiser l'écran ou fermer la fenêtre avant la fin de la mise à jour",
|
||||||
"update_success": "App a été mis à jour! Veuillez patienter pendant le rechargement automatique de la fenêtre de votre navigateur.",
|
"update_success": "App a été mis à jour! Veuillez patienter pendant le rechargement automatique de la fenêtre de votre navigateur.",
|
||||||
"latest_message": "Pas de mise a jour disponible! Vous êtes sur la dernière version.",
|
"latest_message": "Pas de mise a jour disponible! Vous êtes sur la dernière version.",
|
||||||
"current_version": "Version actuelle"
|
"current_version": "Version actuelle",
|
||||||
|
"download_zip_file": "Télécharger le fichier ZIP",
|
||||||
|
"unzipping_package": "Dézipper le package",
|
||||||
|
"copying_files": "Copie de fichiers",
|
||||||
|
"running_migrations": "Exécution de migrations",
|
||||||
|
"finishing_update": "Mise à jour de finition",
|
||||||
|
"update_failed": "Mise à jour a échoué",
|
||||||
|
"update_failed_text": "Désolé! Votre mise à jour a échoué à: {step} étape"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
@ -771,22 +887,24 @@
|
|||||||
"success": {
|
"success": {
|
||||||
"mail_variables_save_successfully": "Email configuré avec succès",
|
"mail_variables_save_successfully": "Email configuré avec succès",
|
||||||
"database_variables_save_successfully": "Base de données configurée avec succès."
|
"database_variables_save_successfully": "Base de données configurée avec succès."
|
||||||
}
|
},
|
||||||
|
"skip": "sauter"
|
||||||
},
|
},
|
||||||
"layout_login": {
|
"layout_login": {
|
||||||
"copyright_crater": "Copyright @ Crater - 2019",
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
"super_simple_invoicing": "Super Simple Facturation",
|
"super_simple_invoicing": "Super Simple Facturation",
|
||||||
"for_freelancer": "pour les pigistes et",
|
"for_freelancer": "pour les pigistes et",
|
||||||
"small_businesses": "Petites entreprises ",
|
"small_businesses": "Petites entreprises ",
|
||||||
"crater_help": "Crater vous aide à suivre vos dépenses, à enregistrer vos paiements et à générer de belles",
|
"crater_help": "Crater vous aide à suivre vos dépenses, à enregistrer vos paiements et à générer de belles",
|
||||||
"invoices_and_estimates": "factures et devis avec possibilité de choisir plusieurs modèles."
|
"invoices_and_estimates": "factures et devis avec possibilité de choisir plusieurs modèles."
|
||||||
|
|
||||||
},
|
},
|
||||||
"validation": {
|
"validation": {
|
||||||
"invalid_url": "URL invalide (ex: http://www.crater.com)",
|
"invalid_url": "URL invalide (ex: http://www.crater.com)",
|
||||||
"required": "Champ requis",
|
"required": "Champ requis",
|
||||||
"email_incorrect": "Adresse Email incorrecte.",
|
"email_incorrect": "Adresse Email incorrecte.",
|
||||||
"email_does_not_exist": "L'utilisateur avec un email donné n'existe pas",
|
"email_does_not_exist": "L'utilisateur avec un email donné n'existe pas",
|
||||||
|
"item_unit_already_taken": "L'unité d'article a déjà été prise",
|
||||||
|
"payment_mode_already_taken": "Le mode de paiement a déjà été pris",
|
||||||
"send_reset_link": "Envoyer le lien de réinitialisation",
|
"send_reset_link": "Envoyer le lien de réinitialisation",
|
||||||
"not_yet": "Pas encore? Envoyer à nouveau",
|
"not_yet": "Pas encore? Envoyer à nouveau",
|
||||||
"password_min_length": "Le mot de passe doit contenir {nombre} caractères",
|
"password_min_length": "Le mot de passe doit contenir {nombre} caractères",
|
||||||
@ -809,6 +927,7 @@
|
|||||||
"maximum_options_error": "Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.",
|
"maximum_options_error": "Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.",
|
||||||
"notes_maxlength": "Les notes ne doivent pas dépasser 255 caractères.",
|
"notes_maxlength": "Les notes ne doivent pas dépasser 255 caractères.",
|
||||||
"address_maxlength": "L'adresse ne doit pas dépasser 255 caractères.",
|
"address_maxlength": "L'adresse ne doit pas dépasser 255 caractères.",
|
||||||
"ref_number_maxlength": "Le numéro de référence ne doit pas dépasser 255 caractères."
|
"ref_number_maxlength": "Le numéro de référence ne doit pas dépasser 255 caractères.",
|
||||||
|
"email_already_taken": "Un compte est déjà associé à cette adresse e-mail."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,10 @@ import VueI18n from 'vue-i18n'
|
|||||||
import en from './en.json'
|
import en from './en.json'
|
||||||
import fr from './fr.json'
|
import fr from './fr.json'
|
||||||
import es from './es.json'
|
import es from './es.json'
|
||||||
|
import ar from './ar.json'
|
||||||
|
import de from './de.json'
|
||||||
|
import pt_BR from './pt-br.json'
|
||||||
|
import it from './it.json'
|
||||||
|
|
||||||
Vue.use(VueI18n)
|
Vue.use(VueI18n)
|
||||||
|
|
||||||
@ -11,8 +15,12 @@ const i18n = new VueI18n({
|
|||||||
messages: {
|
messages: {
|
||||||
en,
|
en,
|
||||||
fr,
|
fr,
|
||||||
es
|
es,
|
||||||
}
|
ar,
|
||||||
|
de,
|
||||||
|
pt_BR,
|
||||||
|
it,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
export default i18n
|
export default i18n
|
||||||
|
|||||||
929
resources/assets/js/plugins/it.json
Normal file
929
resources/assets/js/plugins/it.json
Normal file
@ -0,0 +1,929 @@
|
|||||||
|
{
|
||||||
|
"_comment": "Italian - IT translation - by Alessandro Fuda - Milan, Italy - 20/03/2020 - Coronavirus's times But towards spring :-) ",
|
||||||
|
"navigation": {
|
||||||
|
"dashboard": "Dashboard",
|
||||||
|
"customers": "Clienti",
|
||||||
|
"items": "Commesse",
|
||||||
|
"invoices": "Fatture",
|
||||||
|
"expenses": "Spese",
|
||||||
|
"estimates": "Preventivi",
|
||||||
|
"payments": "Pagamenti",
|
||||||
|
"reports": "Reports",
|
||||||
|
"settings": "Configurazione",
|
||||||
|
"logout": "Logout"
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"view_pdf": "Vedi PDF",
|
||||||
|
"download_pdf": "Download PDF",
|
||||||
|
"save": "Salva",
|
||||||
|
"cancel": "Elimina",
|
||||||
|
"update": "Aggiorna",
|
||||||
|
"deselect": "Deseleziona",
|
||||||
|
"download": "Download",
|
||||||
|
"from_date": "Dalla Data",
|
||||||
|
"to_date": "Alla Data",
|
||||||
|
"from": "Da",
|
||||||
|
"to": "A",
|
||||||
|
"sort_by": "Ordina per",
|
||||||
|
"ascending": "Crescente",
|
||||||
|
"descending": "Decrescente",
|
||||||
|
"subject": "Oggetto",
|
||||||
|
"message": "Messaggio",
|
||||||
|
"go_back": "Torna indietro",
|
||||||
|
"back_to_login": "Torna al Login?",
|
||||||
|
"home": "Home",
|
||||||
|
"filter": "Filtro",
|
||||||
|
"delete": "Elimina",
|
||||||
|
"edit": "Modifica",
|
||||||
|
"view": "Visualizza",
|
||||||
|
"add_new_item": "Aggiungi nuova Commessa",
|
||||||
|
"clear_all": "Pulisci tutto",
|
||||||
|
"showing": "Showing",
|
||||||
|
"of": "di",
|
||||||
|
"actions": "Azioni",
|
||||||
|
"subtotal": "SUBTOTALE",
|
||||||
|
"discount": "SCONTO",
|
||||||
|
"fixed": "Fissato",
|
||||||
|
"percentage": "Percentuale",
|
||||||
|
"tax": "TASSA",
|
||||||
|
"total_amount": "AMMONTARE TOTALE",
|
||||||
|
"bill_to": "Fattura a",
|
||||||
|
"ship_to": "Invia a",
|
||||||
|
"due": "Dovuto",
|
||||||
|
"draft": "Bozza",
|
||||||
|
"sent": "Inviata",
|
||||||
|
"all": "Tutte",
|
||||||
|
"select_all": "Seleziona tutto",
|
||||||
|
"choose_file": "Clicca per selezionare un file",
|
||||||
|
"choose_template": "Scegli un modello",
|
||||||
|
"choose": "Scegli",
|
||||||
|
"remove": "Rimuovi",
|
||||||
|
"powered_by": "Prodotto da",
|
||||||
|
"bytefury": "Bytefury",
|
||||||
|
"select_a_status": "Seleziona uno Stato",
|
||||||
|
"select_a_tax": "Seleziona una Tassa",
|
||||||
|
"search": "Cerca",
|
||||||
|
"are_you_sure": "Sei sicuro/a?",
|
||||||
|
"list_is_empty": "La lista è vuota.",
|
||||||
|
"no_tax_found": "Nessuna Tassa trovata!",
|
||||||
|
"four_zero_four": "404",
|
||||||
|
"you_got_lost": "Hoops! Ti sei perso",
|
||||||
|
"go_home": "Vai alla Home",
|
||||||
|
"test_mail_conf": "Configurazione della mail di test",
|
||||||
|
"send_mail_successfully": "Mail inviata con successo",
|
||||||
|
"setting_updated": "Configurazioni aggiornate con successo",
|
||||||
|
"select_state": "Seleziona lo Stato",
|
||||||
|
"select_country": "Seleziona Paese",
|
||||||
|
"select_city": "Seleziona Città",
|
||||||
|
"street_1": "Indirizzo 1",
|
||||||
|
"street_2": "Indirizzo 2",
|
||||||
|
"action_failed": "Errore",
|
||||||
|
"retry": "Retry"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"select_year": "Seleziona anno",
|
||||||
|
"cards": {
|
||||||
|
"due_amount": "Somma dovuta",
|
||||||
|
"customers": "Clienti",
|
||||||
|
"invoices": "Fatture",
|
||||||
|
"estimates": "Preventivi"
|
||||||
|
},
|
||||||
|
"chart_info": {
|
||||||
|
"total_sales": "Vendite",
|
||||||
|
"total_receipts": "Ricevute",
|
||||||
|
"total_expense": "Uscite",
|
||||||
|
"net_income": "Guadagno netto",
|
||||||
|
"year": "Seleziona anno"
|
||||||
|
},
|
||||||
|
"weekly_invoices": {
|
||||||
|
"title": "Fatture a settimana"
|
||||||
|
},
|
||||||
|
"monthly_chart": {
|
||||||
|
"title": "Entrate & Uscite"
|
||||||
|
},
|
||||||
|
"recent_invoices_card": {
|
||||||
|
"title": "Fatture insolute",
|
||||||
|
"due_on": "Data di scadenza",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"amount_due": "Ammontare dovuto",
|
||||||
|
"actions": "Azioni",
|
||||||
|
"view_all": "Vedi tutto"
|
||||||
|
},
|
||||||
|
"recent_estimate_card": {
|
||||||
|
"title": "Preventivi recenti",
|
||||||
|
"date": "Data",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"amount_due": "Ammontare dovuto",
|
||||||
|
"actions": "Azioni",
|
||||||
|
"view_all": "Vedi tutto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"name": "Nome",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"percent": "Percento",
|
||||||
|
"compound_tax": "Tassa composta"
|
||||||
|
},
|
||||||
|
"customers": {
|
||||||
|
"title": "Clienti",
|
||||||
|
"add_customer": "Aggiungi cliente",
|
||||||
|
"contacts_list": "Lista clienti",
|
||||||
|
"name": "Nome",
|
||||||
|
"display_name": "Mostra nome",
|
||||||
|
"primary_contact_name": "Riferimento",
|
||||||
|
"contact_name": "Nome Contatto",
|
||||||
|
"amount_due": "Ammontare dovuto",
|
||||||
|
"email": "Email",
|
||||||
|
"address": "Indirizzo",
|
||||||
|
"phone": "Telefono",
|
||||||
|
"website": "Sito web",
|
||||||
|
"country": "Paese",
|
||||||
|
"state": "Stato",
|
||||||
|
"city": "Città",
|
||||||
|
"zip_code": "Codice Postale",
|
||||||
|
"added_on": "Aggiunto il",
|
||||||
|
"action": "Azione",
|
||||||
|
"password": "Password",
|
||||||
|
"street_number": "Numero Civico",
|
||||||
|
"primary_currency": "Valùta Principale",
|
||||||
|
"add_new_customer": "Aggiungi nuovo Cliente",
|
||||||
|
"save_customer": "Salva Cliente",
|
||||||
|
"update_customer": "Aggiorna Cliente",
|
||||||
|
"customer": "Cliente | Clienti",
|
||||||
|
"new_customer": "Nuovo cliente",
|
||||||
|
"edit_customer": "Modifica Cliente",
|
||||||
|
"basic_info": "Informazioni",
|
||||||
|
"billing_address": "Indirizzo di Fatturazione",
|
||||||
|
"shipping_address": "Indirizzo di Spedizione",
|
||||||
|
"copy_billing_address": "Copia da Fatturazione",
|
||||||
|
"no_customers": "Ancora nessun Cliente!",
|
||||||
|
"no_customers_found": "Nessun cliente trovato!",
|
||||||
|
"list_of_customers": "Qui ci sarà la lista dei tuoi clienti",
|
||||||
|
"primary_display_name": "Mostra il Nome Principale",
|
||||||
|
"select_currency": "Selezione Valùta",
|
||||||
|
"select_a_customer": "Seleziona Cliente",
|
||||||
|
"type_or_click": "Scrivi o clicca per selezionare",
|
||||||
|
|
||||||
|
"confirm_delete": "Non sarai in grado di recuperare questo cliente e tutte le relative fatture, stime e pagamenti. | Non sarai in grado di recuperare questi clienti e tutte le relative fatture, stime e pagamenti.",
|
||||||
|
"created_message": "Cliente creato con successo",
|
||||||
|
"updated_message": "Cliente aggiornato con successo",
|
||||||
|
"deleted_message": "Cliente cancellato con successo | Clienti cancellati con successo"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"title": "Commesse",
|
||||||
|
"items_list": "Lista Commesse",
|
||||||
|
"name": "Nome",
|
||||||
|
"unit": "Unità/Tipo",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"added_on": "Aggiunto il",
|
||||||
|
"price": "Prezzo",
|
||||||
|
"date_of_creation": "Data di creazione",
|
||||||
|
"action": "Azione",
|
||||||
|
"add_item": "Aggiungi Commessa",
|
||||||
|
"save_item": "Salva",
|
||||||
|
"update_item": "Aggiorna",
|
||||||
|
"item": "Commessa | Commesse",
|
||||||
|
"add_new_item": "Aggiungi nuova Commessa",
|
||||||
|
"new_item": "Nuova Commessa",
|
||||||
|
"edit_item": "Modifica Commessa",
|
||||||
|
"no_items": "Ancora nessuna commessa!",
|
||||||
|
"list_of_items": "Qui ci sarà la lista delle commesse.",
|
||||||
|
"select_a_unit": "Seleziona",
|
||||||
|
"taxes": "Imposte",
|
||||||
|
"item_attached_message": "Non puoi eliminare una Commessa che è già attiva",
|
||||||
|
"confirm_delete": "Non potrai ripristinare la Commessa | Non potrai ripristinare le Commesse",
|
||||||
|
"created_message": "Commessa creata con successo",
|
||||||
|
"updated_message": "Commessa aggiornata con successo",
|
||||||
|
"deleted_message": "Commessa eliminata con successo | Commesse eliminate con successo"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"title": "Preventivi",
|
||||||
|
"estimate": "Preventivo | Preventivi",
|
||||||
|
"estimates_list": "Lista Preventivi",
|
||||||
|
"days": "{days} Giorni",
|
||||||
|
"months": "{months} Mese",
|
||||||
|
"years": "{years} Anno",
|
||||||
|
"all": "Tutti",
|
||||||
|
"paid": "Pagato",
|
||||||
|
"unpaid": "Non pagato",
|
||||||
|
"customer": "CLIENTE",
|
||||||
|
"ref_no": "RIF N.",
|
||||||
|
"number": "NUMERO",
|
||||||
|
"amount_due": "AMMONTARE DOVUTO",
|
||||||
|
"partially_paid": "Pagamento Parziale",
|
||||||
|
"total": "Totale",
|
||||||
|
"discount": "Sconto",
|
||||||
|
"sub_total": "Sub Totale",
|
||||||
|
"estimate_number": "Preventivo Numero",
|
||||||
|
"ref_number": "Numero di Rif.",
|
||||||
|
"contact": "Contatto",
|
||||||
|
"add_item": "Aggiungi un item",
|
||||||
|
"date": "Data",
|
||||||
|
"due_date": "Data di pagamento",
|
||||||
|
"expiry_date": "Data di scadenza",
|
||||||
|
"status": "Status",
|
||||||
|
"add_tax": "Aggiungi Imposta",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"action": "Azione",
|
||||||
|
"notes": "Note",
|
||||||
|
"tax": "Imposta",
|
||||||
|
"estimate_template": "Modello",
|
||||||
|
"convert_to_invoice": "Converti in Fattura",
|
||||||
|
"mark_as_sent": "Segna come Inviata",
|
||||||
|
"send_estimate": "Invia preventivo",
|
||||||
|
"record_payment": "Registra Pagamento",
|
||||||
|
"add_estimate": "Aggiungi Preventivo",
|
||||||
|
"save_estimate": "Salva Preventivo",
|
||||||
|
"confirm_conversion": "Questo preventivo verrà usato per generare una nuova fattura.",
|
||||||
|
"conversion_message": "Fattura creata",
|
||||||
|
"confirm_send_estimate": "Questo preventivo verrà inviato al cliente via mail",
|
||||||
|
"confirm_mark_as_sent": "Questo preventivo verrà contrassegnato come inviato",
|
||||||
|
"confirm_mark_as_accepted": "Questo preventivo verrà contrassegnato come Accettato",
|
||||||
|
"confirm_mark_as_rejected": "Questo preventivo verrà contrassegnato come Rifiutato",
|
||||||
|
"no_matching_estimates": "Nessun preventivo trovato!",
|
||||||
|
"mark_as_sent_successfully": "Preventivo contrassegnato come inviato con successo",
|
||||||
|
"send_estimate_successfully": "Preventivo inviato con successo",
|
||||||
|
"errors": {
|
||||||
|
"required": "Campo obbligatorio"
|
||||||
|
},
|
||||||
|
"accepted": "Accettato",
|
||||||
|
"sent": "Inviato",
|
||||||
|
"draft": "Bozza",
|
||||||
|
"declined": "Rifiutato",
|
||||||
|
"new_estimate": "Nuovo Preventivo",
|
||||||
|
"add_new_estimate": "Crea Nuovo Preventivo",
|
||||||
|
"update_Estimate": "Aggiorna preventivo",
|
||||||
|
"edit_estimate": "Modifica Preventivo",
|
||||||
|
"items": "Commesse",
|
||||||
|
"Estimate": "Preventivo | Preventivi",
|
||||||
|
"add_new_tax": "Aggiungi una nuova tassa/imposta",
|
||||||
|
"no_estimates": "Ancora nessun preventivo!",
|
||||||
|
"list_of_estimates": "Questa sezione conterrà la lista dei preventivi.",
|
||||||
|
"mark_as_rejected": "Segna come Rifiutato",
|
||||||
|
"mark_as_accepted": "Segna come Accettato",
|
||||||
|
|
||||||
|
"marked_as_accepted_message": "Preventivo contrassegnato come accettato",
|
||||||
|
"marked_as_rejected_message": "Preventivo contrassegnato come rifiutato",
|
||||||
|
"confirm_delete": "Non potrai più recuperare questo preventivo | Non potrai più recuperare questi preventivi",
|
||||||
|
"created_message": "Preventivo creato con successo",
|
||||||
|
"updated_message": "Preventivo modificato con successo",
|
||||||
|
"deleted_message": "Preventivo eliminato con successo | Preventivi eliminati con successo",
|
||||||
|
"user_email_does_not_exist": "La Email utente non esiste",
|
||||||
|
"something_went_wrong": "Si è verificato un errore",
|
||||||
|
"item": {
|
||||||
|
"title": "Titolo Commessa",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"quantity": "Quantità",
|
||||||
|
"price": "Prezzo",
|
||||||
|
"discount": "Sconto",
|
||||||
|
"total": "Totale",
|
||||||
|
"total_discount": "Sconto Totale",
|
||||||
|
"sub_total": "Sub Totale",
|
||||||
|
"tax": "Tasse",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"select_an_item": "Scrivi o clicca per selezionare un item",
|
||||||
|
"type_item_description": "Scrivi una Descrizione (opzionale)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"title": "Fatture",
|
||||||
|
"invoices_list": "Lista Fatture",
|
||||||
|
"days": "{days} Giorni",
|
||||||
|
"months": "{months} Mese",
|
||||||
|
"years": "{years} Anno",
|
||||||
|
"all": "Tutti",
|
||||||
|
"paid": "Pagato",
|
||||||
|
"unpaid": "Insoluto",
|
||||||
|
"customer": "CLIENTE",
|
||||||
|
"paid_status": "STATO DI PAGAMENTO",
|
||||||
|
"ref_no": "RIF N.",
|
||||||
|
"number": "NUMERO",
|
||||||
|
"amount_due": "AMMONTARE DOVUTO",
|
||||||
|
"partially_paid": "Parzialmente Pagata",
|
||||||
|
"total": "Totale",
|
||||||
|
"discount": "Sconto",
|
||||||
|
"sub_total": "Sub Totale",
|
||||||
|
"invoice": "Fattura | Fatture",
|
||||||
|
"invoice_number": "Numero Fattura",
|
||||||
|
"ref_number": "Rif Numero",
|
||||||
|
"contact": "Contatto",
|
||||||
|
"add_item": "Aggiungi Commessa/Item",
|
||||||
|
"date": "Data",
|
||||||
|
"due_date": "Data di pagamento",
|
||||||
|
"status": "Stato",
|
||||||
|
"add_tax": "Aggiungi Imposta",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"action": "Azione",
|
||||||
|
"notes": "Note",
|
||||||
|
"view": "Vedi",
|
||||||
|
"send_invoice": "Invia Fattura",
|
||||||
|
"invoice_template": "Modello Fattura",
|
||||||
|
"template": "Modello",
|
||||||
|
"mark_as_sent": "Segna come inviata",
|
||||||
|
"confirm_send_invoice": "Questa fattura sarà inviata via Mail al Cliente",
|
||||||
|
"invoice_mark_as_sent": "Questa fattura sarà contrassegnata come inviata",
|
||||||
|
"confirm_send": "Questa fattura sarà inviata via Mail al Cliente",
|
||||||
|
"invoice_date": "Data fattura",
|
||||||
|
"record_payment": "Registra Pagamento",
|
||||||
|
"add_new_invoice": "Aggiungi nuova Fattura",
|
||||||
|
"update_expense": "Aggiorna Costo",
|
||||||
|
"edit_invoice": "Modifica Fattura",
|
||||||
|
"new_invoice": "Nuova Fattura",
|
||||||
|
"save_invoice": "Salva fattura",
|
||||||
|
"update_invoice": "Aggiorna Fattura",
|
||||||
|
"add_new_tax": "Aggiungi tassa/imposta",
|
||||||
|
"no_invoices": "Ancora nessuna fattura!",
|
||||||
|
"list_of_invoices": "Questa sezione conterrà la lista delle Fatture.",
|
||||||
|
"select_invoice": "Seleziona Fattura",
|
||||||
|
"no_matching_invoices": "Nessuna fattura trovata!",
|
||||||
|
"mark_as_sent_successfully": "Fattura contassegnata come inviata con successo",
|
||||||
|
"send_invoice_successfully": "Fattura inviata con successo",
|
||||||
|
"cloned_successfully": "Fattura copiata con successo",
|
||||||
|
"clone_invoice": "Clona Fattura",
|
||||||
|
"confirm_clone": "Questa fattura verrà clonata in una nuova fattura",
|
||||||
|
"item": {
|
||||||
|
"title": "Titolo Commessa",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"quantity": "Quantità",
|
||||||
|
"price": "Prezzo",
|
||||||
|
"discount": "Sconto",
|
||||||
|
"total": "Totale",
|
||||||
|
"total_discount": "Sconto Totale",
|
||||||
|
"sub_total": "Sub Totale",
|
||||||
|
"tax": "Tassa",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"select_an_item": "Scrivi o clicca per selezionare un item",
|
||||||
|
"type_item_description": "Scrivi una descrizione (opzionale)"
|
||||||
|
},
|
||||||
|
"payment_attached_message": "Una delle fatture selezionate ha già associato un pagamento. Assicurati di eliminare il pagamento associato prima di procedere con la rimozione",
|
||||||
|
"confirm_delete": "Non potrai recuperare la Fattura cancellata | Non potrai recuperare le Fatture cancellate",
|
||||||
|
"created_message": "Fattura creata con successo",
|
||||||
|
"updated_message": "Fattura aggiornata con successo",
|
||||||
|
"deleted_message": "Fattura cancellata con successo | Fatture cancellate con successo",
|
||||||
|
"marked_as_sent_message": "Fattura contrassegnata come inviata con successo",
|
||||||
|
"user_email_does_not_exist": "La Email utente non esiste",
|
||||||
|
"something_went_wrong": "Si è verificato un errore",
|
||||||
|
"invalid_due_amount_message": "L'ammontare totale della fattura non può essere inferiore all'ammontare totale pagato per questa fattura. Modifica la fattura o cancella i pagamenti associati per continuare."
|
||||||
|
},
|
||||||
|
"credit_notes": {
|
||||||
|
"title": "Note di Credito",
|
||||||
|
"credit_notes_list": "Lista Note di Credito",
|
||||||
|
"credit_notes": "Note di Credito",
|
||||||
|
"contact": "Contatta",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"action": "Azione",
|
||||||
|
"credit_number": "Numero Credito",
|
||||||
|
"notes": "Note",
|
||||||
|
"confirm_delete": "Vuoi cancellare questa nota di credito?",
|
||||||
|
"item": {
|
||||||
|
"title": "Titolo",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"quantity": "Quantità",
|
||||||
|
"price": "Prezzo",
|
||||||
|
"discount": "Sconto",
|
||||||
|
"total": "Totale",
|
||||||
|
"total_discount": "Sconto Totale",
|
||||||
|
"sub_total": "Sub Totale",
|
||||||
|
"tax": "Tassa"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"payments": {
|
||||||
|
"title": "Pagamenti",
|
||||||
|
"payments_list": "Lista Pagamenti",
|
||||||
|
"record_payment": "Registra Pagamento",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"action": "Azione",
|
||||||
|
"payment_number": "Numero di pagamento",
|
||||||
|
"payment_mode": "Modalità di Pagamento",
|
||||||
|
"invoice": "Fattura",
|
||||||
|
"note": "Note",
|
||||||
|
"add_payment": "Aggiungi Pagamento",
|
||||||
|
"new_payment": "Nuovo Pagamento",
|
||||||
|
"edit_payment": "Modifica Pagamento",
|
||||||
|
"view_payment": "Vedi Pagamento",
|
||||||
|
"add_new_payment": "Aggiungi nuovo pagamento",
|
||||||
|
"send_payment_receipt": "Invia ricevuta di pagamento",
|
||||||
|
"save_payment": "Salva pagamento",
|
||||||
|
"update_payment": "Aggiorna pagamento",
|
||||||
|
"payment": "Pagamento | Pagamenti",
|
||||||
|
"no_payments": "Ancora nessun pagamento!",
|
||||||
|
"no_matching_payments": "Non ci sono pagamenti!",
|
||||||
|
"list_of_payments": "Questa sezione conterrà la lista dei pagamenti.",
|
||||||
|
"select_payment_mode": "Seleziona modalità di pagamento",
|
||||||
|
"confirm_send_payment": "Questo pagamento verrà inviato via email al cliente",
|
||||||
|
"send_payment_successfully": "Pagamento inviato con successo",
|
||||||
|
"user_email_does_not_exist": "Email utente non esiste",
|
||||||
|
"something_went_wrong": "si è verificato un errore",
|
||||||
|
|
||||||
|
"confirm_delete": "Non potrai recuperare questo pagamento | Non potrai recuperare questi pagamenti",
|
||||||
|
"created_message": "Pagamento creato con successo",
|
||||||
|
"updated_message": "Pagamento aggiornato con successo",
|
||||||
|
"deleted_message": "Pagamento cancellato con successo | Pagamenti cancellati con successo",
|
||||||
|
"invalid_amount_message": "L'ammontare del pagamento non è valido"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"title": "Spese",
|
||||||
|
"expenses_list": "Lista Costi",
|
||||||
|
"expense_title": "Titolo",
|
||||||
|
"contact": "Contatto",
|
||||||
|
"category": "Categoria",
|
||||||
|
"from_date": "Dalla Data",
|
||||||
|
"to_date": "Alla Data",
|
||||||
|
"expense_date": "Data",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"receipt": "Ricevuta",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"action": "Azione",
|
||||||
|
"note": "Nota",
|
||||||
|
"category_id": "Id categoria",
|
||||||
|
"date": "Data Spesa",
|
||||||
|
"add_expense": "Aggiungi Spesa",
|
||||||
|
"add_new_expense": "Aggiungi nuova Spesa",
|
||||||
|
"save_expense": "Salva la Spesa",
|
||||||
|
"update_expense": "Aggiorna Spesa",
|
||||||
|
"download_receipt": "Scarica la Ricevuta",
|
||||||
|
"edit_expense": "Modifica Spesa",
|
||||||
|
"new_expense": "Nuova Spesa",
|
||||||
|
"expense": "Spesa | Spese",
|
||||||
|
"no_expenses": "Ancora nessuna spesa!",
|
||||||
|
"list_of_expenses": "Questa sezione conterrà la lista delle Spese.",
|
||||||
|
|
||||||
|
"confirm_delete": "Non potrai recuperare questa spesa | Non potrai recuperare queste spese",
|
||||||
|
"created_message": "Spesa creata con successo",
|
||||||
|
"updated_message": "Spesa modificata con successo",
|
||||||
|
"deleted_message": "Spesa cancellata con successo | Spese cancellate con successo",
|
||||||
|
"categories": {
|
||||||
|
"categories_list": "Lista categorie",
|
||||||
|
"title": "Titolo",
|
||||||
|
"name": "Nome",
|
||||||
|
"description": "Descrizione",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"actions": "Azioni",
|
||||||
|
"add_category": "Aggiungi Categoria",
|
||||||
|
"new_category": "Nuova Categoria",
|
||||||
|
"category": "Categoria | Categorie",
|
||||||
|
"select_a_category": "Seleziona Categoria"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Password",
|
||||||
|
"forgot_password": "Password dimenticata?",
|
||||||
|
"or_signIn_with": "o fai login con",
|
||||||
|
"login": "Login",
|
||||||
|
"register": "Registrati",
|
||||||
|
"reset_password": "Resetta Password",
|
||||||
|
"password_reset_successfully": "Password Resettata con successo",
|
||||||
|
"enter_email": "Inserisci email",
|
||||||
|
"enter_password": "Inserisci Password",
|
||||||
|
"retype_password": "Ridigita Password",
|
||||||
|
"login_placeholder": "mail@example.com"
|
||||||
|
},
|
||||||
|
"reports": {
|
||||||
|
"title": "Report",
|
||||||
|
"from_date": "Da",
|
||||||
|
"to_date": "A",
|
||||||
|
"status": "Status",
|
||||||
|
"paid": "Pagato",
|
||||||
|
"unpaid": "Non pagato",
|
||||||
|
"download_pdf": "Scarica PDF",
|
||||||
|
"view_pdf": "Vedi PDF",
|
||||||
|
"update_report": "Aggiorna Report",
|
||||||
|
"report": "Report | Reports",
|
||||||
|
"profit_loss": {
|
||||||
|
"profit_loss": "Guadagni & Perdite",
|
||||||
|
"to_date": "A",
|
||||||
|
"from_date": "Da",
|
||||||
|
"date_range": "Seleziona intervallo date"
|
||||||
|
},
|
||||||
|
"sales": {
|
||||||
|
"sales": "Vendite",
|
||||||
|
"date_range": "Seleziona intervallo date",
|
||||||
|
"to_date": "A",
|
||||||
|
"from_date": "Da",
|
||||||
|
"report_type": "Tipo di report"
|
||||||
|
},
|
||||||
|
"taxes": {
|
||||||
|
"taxes": "Tasse",
|
||||||
|
"to_date": "Alla data",
|
||||||
|
"from_date": "Dalla data",
|
||||||
|
"date_range": "Seleziona intervallo date"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"required": "Campo obbligatorio"
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"invoice": "Fattura",
|
||||||
|
"invoice_date": "Data fattura",
|
||||||
|
"due_date": "Data di pagamento",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"contact_name": "Nome contatto",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"estimate": "Preventivo",
|
||||||
|
"estimate_date": "Data preventivo",
|
||||||
|
"due_date": "Data di pagamento",
|
||||||
|
"estimate_number": "Numero di preventivo",
|
||||||
|
"ref_number": "Numero di Rif.",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"contact_name": "Nome contatto",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"expenses": "Spese",
|
||||||
|
"category": "Categoria",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Ammontare",
|
||||||
|
"to_date": "Alla data",
|
||||||
|
"from_date": "Dalla data",
|
||||||
|
"date_range": "Seleziona intervallo date"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"menu_title": {
|
||||||
|
"account_settings": "Impostazioni Account",
|
||||||
|
"company_information": "Informazioni Azienda",
|
||||||
|
"customization": "Personalizzazione",
|
||||||
|
"preferences": "Opzioni",
|
||||||
|
"notifications": "Notifiche",
|
||||||
|
"tax_types": "Tupi di Tasse",
|
||||||
|
"expense_category": "Categorie di spesa",
|
||||||
|
"update_app": "Aggiorna App"
|
||||||
|
},
|
||||||
|
"title": "Impostazioni",
|
||||||
|
"setting": "Opzione | Impostazioni",
|
||||||
|
"general": "Generale",
|
||||||
|
"language": "Lingua",
|
||||||
|
"primary_currency": "Valuta Principale",
|
||||||
|
"timezone": "Time Zone",
|
||||||
|
"date_format": "Formato data",
|
||||||
|
"currencies": {
|
||||||
|
"title": "Valute",
|
||||||
|
"currency": "Valùta | Valute",
|
||||||
|
"currencies_list": "Lista valute",
|
||||||
|
"select_currency": "Seleziona Valùta",
|
||||||
|
"name": "Nome",
|
||||||
|
"code": "Codice",
|
||||||
|
"symbol": "Simbolo",
|
||||||
|
"precision": "Precisione",
|
||||||
|
"thousand_separator": "Separatore migliaia",
|
||||||
|
"decimal_separator": "Separatore decimali",
|
||||||
|
"position": "Posizione",
|
||||||
|
"position_of_symbol": "Posizione del Simbolo",
|
||||||
|
"right": "Destra",
|
||||||
|
"left": "Sinistra",
|
||||||
|
"action": "Azione",
|
||||||
|
"add_currency": "Aggiungi Valùta"
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "Mail Host",
|
||||||
|
"port": "Mail Port",
|
||||||
|
"driver": "Mail Driver",
|
||||||
|
"secret": "Secret",
|
||||||
|
"mailgun_secret": "Mailgun Secret",
|
||||||
|
"mailgun_domain": "Domain",
|
||||||
|
"mailgun_endpoint": "Mailgun Endpoint",
|
||||||
|
"ses_secret": "SES Secret",
|
||||||
|
"ses_key": "SES Key",
|
||||||
|
"password": "Mail Password",
|
||||||
|
"username": "Mail Username",
|
||||||
|
"mail_config": "Configurazione Mail",
|
||||||
|
"from_name": "Nome Mittente Mail",
|
||||||
|
"from_mail": "Indirizzo Mittente Mail",
|
||||||
|
"encryption": "Mail Encryption",
|
||||||
|
"mail_config_desc": "Form per Configurazione Driver Mail per invio mail dall'App. Puoi anche configurare providers di terze parti come Sendgrid, SES, etc.."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"title": "Configurazione PDF",
|
||||||
|
"footer_text": "Testo Footer",
|
||||||
|
"pdf_layout": "Layout PDF"
|
||||||
|
},
|
||||||
|
"company_info": {
|
||||||
|
"company_info": "Info azienda",
|
||||||
|
"company_name": "Nome azienda",
|
||||||
|
"company_logo": "Logo azienda",
|
||||||
|
"section_description": "Informazioni sulla tua azienda che saranno mostrate in fattura, preventivi ed altri documenti creati dell'applicazione.",
|
||||||
|
"phone": "Telefono",
|
||||||
|
"country": "Paese",
|
||||||
|
"state": "Stato",
|
||||||
|
"city": "Città",
|
||||||
|
"address": "Indirizzo",
|
||||||
|
"zip": "CAP",
|
||||||
|
"save": "Salva",
|
||||||
|
"updated_message": "Informazioni Azienda aggiornate con successo."
|
||||||
|
},
|
||||||
|
"customization": {
|
||||||
|
"customization": "personalizzazione",
|
||||||
|
"save": "Salva",
|
||||||
|
"addresses": {
|
||||||
|
"title": "Indirizzi",
|
||||||
|
"section_description": "Puoi settare l'indirizzo di fatturazione del Cliente e/o il formato dell'indirizzo di spedizione (Mostrato solo sul PDF). ",
|
||||||
|
"customer_billing_address": "Indirizzo Fatturazione Cliente",
|
||||||
|
"customer_shipping_address": "Indirizzo spedizione Cliente",
|
||||||
|
"company_address": "Indirizzo Azienda",
|
||||||
|
"insert_fields": "Inserisci Campi",
|
||||||
|
"contact": "Contatto",
|
||||||
|
"address": "Indirizzo",
|
||||||
|
"display_name": "Mostra nome",
|
||||||
|
"primary_contact_name": "Nome contatto primario",
|
||||||
|
"email": "Email",
|
||||||
|
"website": "Sito web",
|
||||||
|
"name": "Nome",
|
||||||
|
"country": "Paese",
|
||||||
|
"state": "Stato",
|
||||||
|
"city": "Città",
|
||||||
|
"company_name": "Nome Azienda",
|
||||||
|
"address_street_1": "Indirizzo 1",
|
||||||
|
"address_street_2": "Indirizzo 2",
|
||||||
|
"phone": "Telefono",
|
||||||
|
"zip_code": "CAP/ZIP Code",
|
||||||
|
"address_setting_updated": "Indirizzo aggiornato con Successo"
|
||||||
|
},
|
||||||
|
"updated_message": "Info azienda aggiornate con successo",
|
||||||
|
|
||||||
|
"invoices": {
|
||||||
|
"title": "Fatture",
|
||||||
|
"notes": "Note",
|
||||||
|
"invoice_prefix": "Prefisso Fattura",
|
||||||
|
"invoice_settings": "Impostazioni fattura",
|
||||||
|
"autogenerate_invoice_number": "Auto genera numero di fattura",
|
||||||
|
"invoice_setting_description": "Disabilita, se non vuoi auto-generare i numeri delle fatture ogni volta che crei una nuova fattura.",
|
||||||
|
"enter_invoice_prefix": "Inserisci prefisso fattura",
|
||||||
|
"terms_and_conditions": "Termini e Condizioni",
|
||||||
|
"invoice_setting_updated": "Impostazioni fatture aggiornate con successo"
|
||||||
|
},
|
||||||
|
|
||||||
|
"estimates": {
|
||||||
|
"title": "Preventivi",
|
||||||
|
"estimate_prefix": "Prefisso Preventivi",
|
||||||
|
"estimate_settings": "Impostazioni Preventivi",
|
||||||
|
"autogenerate_estimate_number": "Auto-genera Numero di preventivo",
|
||||||
|
"estimate_setting_description": "Disabilita, se non vuoi autogenerare il numero di preventivo ogni volta che ne viene creato uno nuovo.",
|
||||||
|
"enter_estimate_prefix": "Inserisci prefisso preventivo",
|
||||||
|
"estimate_setting_updated": "Impostazioni preventivi aggiornate con successo"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payments": {
|
||||||
|
"title": "Pagamenti",
|
||||||
|
"payment_prefix": "Prefisso Pagamento",
|
||||||
|
"payment_settings": "Impostazioni Pagamento",
|
||||||
|
"autogenerate_payment_number": "Auto genera il numero di Pagamento",
|
||||||
|
"payment_setting_description": "Disabilita, se non vuoi autogenerare il numero di pagamento ogni volta che ne viene creato uno nuovo.",
|
||||||
|
"enter_payment_prefix": "Inserisci prefisso di pagamento",
|
||||||
|
"payment_setting_updated": "Impostazioni di pagamento aggiornate con successo",
|
||||||
|
"payment_mode": "Modalità di pagamento",
|
||||||
|
"add_payment_mode": "Aggiungi modalità di pagamento",
|
||||||
|
"mode_name": "Nome modalità",
|
||||||
|
"payment_mode_added": "Modalità di pagamento aggiunta",
|
||||||
|
"payment_mode_updated": "Modalità di pagamento aggiornata",
|
||||||
|
"payment_mode_confirm_delete": "Non potrai ripristinare la modalità di pagamento",
|
||||||
|
"already_in_use": "Modalità di pagamento già in uso",
|
||||||
|
"deleted_message": "Payment Mode deleted successfully"
|
||||||
|
},
|
||||||
|
|
||||||
|
"items": {
|
||||||
|
"title": "Items",
|
||||||
|
"units": "unità",
|
||||||
|
"add_item_unit": "Aggiungi Unità Item",
|
||||||
|
"unit_name": "Nome",
|
||||||
|
"item_unit_added": "Unità aggiunta",
|
||||||
|
"item_unit_updated": "Unità aggiornata",
|
||||||
|
"item_unit_confirm_delete": "Non potrai ripristinare questa unità Item",
|
||||||
|
"already_in_use": "Unità Item già in uso",
|
||||||
|
"deleted_message": "Unità item eliminata con successo"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"profile_picture": "Immagine profilo",
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Password",
|
||||||
|
"confirm_password": "Conferma Password",
|
||||||
|
"account_settings": "Impostazioni Account",
|
||||||
|
"save": "Salva",
|
||||||
|
"section_description": "Puoi aggiornare nome email e password utilizzando il form qui sotto.",
|
||||||
|
"updated_message": "Impostazioni account aggiornate con successo"
|
||||||
|
},
|
||||||
|
"user_profile": {
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Password",
|
||||||
|
"confirm_password": "Conferma Password"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"title": "Notifica",
|
||||||
|
"email": "Invia notifiche a",
|
||||||
|
"description": "Quali notifiche email vorresti ricevere quando qualcosa cambia?",
|
||||||
|
"invoice_viewed": "Fattura visualizzata",
|
||||||
|
"invoice_viewed_desc": "Quando il cliente visualizza la fattura inviata via dashboard applicazione.",
|
||||||
|
"estimate_viewed": "Preventivo visualizzato",
|
||||||
|
"estimate_viewed_desc": "Quando il cliente visualizza il preventivo inviato dall'applicazione.",
|
||||||
|
"save": "Salva",
|
||||||
|
"email_save_message": "Email salvata con successo",
|
||||||
|
"please_enter_email": "Inserisci Email"
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"title": "Tipi di Imposta",
|
||||||
|
"add_tax": "Aggiungi Imposta",
|
||||||
|
"description": "Puoi aggiongere e rimuovere imposte a piacimento. Vengono supportate Tasse differenti per prodotti/servizi specifici esattamento come per le fatture.",
|
||||||
|
"add_new_tax": "Aggiungi nuova imposta",
|
||||||
|
"tax_settings": "Impostazioni Imposte",
|
||||||
|
"tax_per_item": "Tassa per prodotto/servizio",
|
||||||
|
"tax_name": "Nome imposta",
|
||||||
|
"compound_tax": "Imposta composta",
|
||||||
|
"percent": "Percento",
|
||||||
|
"action": "Azione",
|
||||||
|
"tax_setting_description": "Abilita se vuoi aggiungere imposte specifiche per prodotti o servizi. Di default le imposte sono aggiunte direttamente alla fattura.",
|
||||||
|
"created_message": "Tipo di imposta creato con successo",
|
||||||
|
"updated_message": "Tipo di imposta aggiornato con successo",
|
||||||
|
"deleted_message": "Tipo di imposta eliminato con successo",
|
||||||
|
"confirm_delete": "Non potrai ripristinare questo tipo di imposta",
|
||||||
|
"already_in_use": "Imposta già in uso"
|
||||||
|
},
|
||||||
|
"expense_category": {
|
||||||
|
"title": "Categorie di spesa",
|
||||||
|
"action": "Azione",
|
||||||
|
"description": "Le categorie sono necessarie per aggiungere delle voci di spesa. Puoi aggiungere o eliminare queste categorie in base alle tue preferenze.",
|
||||||
|
"add_new_category": "Aggiungi nuova categoria",
|
||||||
|
"category_name": "Nome Categoria",
|
||||||
|
"category_description": "Descrizione",
|
||||||
|
"created_message": "Categoria di spesa creata con successo",
|
||||||
|
"deleted_message": "Categoria di spesa eliminata con successo",
|
||||||
|
"updated_message": "Categoria di spesa aggiornata con successo",
|
||||||
|
"confirm_delete": "Non potrai ripristinare questa categoria di spesa",
|
||||||
|
"already_in_use": "Categoria già in uso"
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"currency": "Valùta",
|
||||||
|
"language": "Lingua",
|
||||||
|
"time_zone": "Time Zone",
|
||||||
|
"fiscal_year": "Anno finanziario",
|
||||||
|
"date_format": "Formato Data",
|
||||||
|
"discount_setting": "Impostazione Sconto",
|
||||||
|
"discount_per_item": "Sconto Per Item ",
|
||||||
|
"discount_setting_description": "Abilita se vuoi aggiungere uno sconto ad uno specifica fattura. Di default, lo sconto è aggiunto direttamente in fattura.",
|
||||||
|
"save": "Salva",
|
||||||
|
"preference": "Preferenza | Preferenze",
|
||||||
|
"general_settings": "Impostazioni di default del sistema.",
|
||||||
|
"updated_message": "Preferenze aggiornate con successo",
|
||||||
|
"select_language": "seleziona lingua",
|
||||||
|
"select_time_zone": "Seleziona Time Zone",
|
||||||
|
"select_date_formate": "Seleziona Formato Data",
|
||||||
|
"select_financial_year": "Seleziona anno finanziario"
|
||||||
|
},
|
||||||
|
"update_app": {
|
||||||
|
"title": "Aggiorna App",
|
||||||
|
"description": "Puoi facilmente aggiornare l'app. Aggiorna cliccando sul bottone qui sotto",
|
||||||
|
"check_update": "Controllo aggiornamenti",
|
||||||
|
"avail_update": "Aggiornamento disponibile",
|
||||||
|
"next_version": "Versione successiva",
|
||||||
|
"update": "Aggiorna ora",
|
||||||
|
"update_progress": "Aggiornamento in corso...",
|
||||||
|
"progress_text": "Sarà necessario qualche minuto. Per favore non aggiornare la pagina e non chiudere la finestra prima che l'aggiornamento sia completato",
|
||||||
|
"update_success": "L'App è aggiornata! Attendi che la pagina venga ricaricata automaticamente.",
|
||||||
|
"latest_message": "Nessun aggiornamneto disponibile! Sei già alla versione più recente.",
|
||||||
|
"current_version": "Versione corrente",
|
||||||
|
"download_zip_file": "Scarica il file ZIP",
|
||||||
|
"unzipping_package": "Pacchetto di decompressione",
|
||||||
|
"copying_files": "Copia dei file",
|
||||||
|
"running_migrations": "Esecuzione delle migrazioni",
|
||||||
|
"finishing_update": "Aggiornamento di finitura",
|
||||||
|
"update_failed": "Aggiornamento non riuscito",
|
||||||
|
"update_failed_text": "Scusate! L'aggiornamento non è riuscito il: passaggio {step}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"account_info": "Informazioni Account",
|
||||||
|
"account_info_desc": "I dettagli qui sotto verranno usati per creare l'account principale dell'Amministratore. Puoi modificarli in qualsiasi momento dopo esserti loggato come Amministratore.",
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Password",
|
||||||
|
"confirm_password": "Conferma Password",
|
||||||
|
"save_cont": "Salva & Continua",
|
||||||
|
"company_info": "Informazioni Azienda",
|
||||||
|
"company_info_desc": "Questa informazione verrà mostrata nelle fatture. Puoi modificare queste informazione in un momento successivo dalla pagina delle impostazioni.",
|
||||||
|
"company_name": "Nome Azienda",
|
||||||
|
"company_logo": "Logo Azienda",
|
||||||
|
"logo_preview": "Anteprima Logo",
|
||||||
|
"preferences": "Impostazioni",
|
||||||
|
"preferences_desc": "Impostazioni di default del sistema.",
|
||||||
|
"country": "Paese",
|
||||||
|
"state": "Stato",
|
||||||
|
"city": "Città",
|
||||||
|
"address": "Indirizzo",
|
||||||
|
"street": "Indirizzo1 | Indirizzo2",
|
||||||
|
"phone": "Telefono",
|
||||||
|
"zip_code": "CAP/Zip Code",
|
||||||
|
"go_back": "Torna indietro",
|
||||||
|
"currency": "Valùta",
|
||||||
|
"language": "Lingua",
|
||||||
|
"time_zone": "Time Zone",
|
||||||
|
"fiscal_year": "Anno Finanziario",
|
||||||
|
"date_format": "Formato Date",
|
||||||
|
"from_address": "Indirizzo - Da",
|
||||||
|
"username": "Username",
|
||||||
|
"next": "Successivo",
|
||||||
|
"continue": "Continua",
|
||||||
|
"skip": "Salta",
|
||||||
|
"database": {
|
||||||
|
"database": "URL del sito & database",
|
||||||
|
"connection": "Connessione Database",
|
||||||
|
"host": "Database Host",
|
||||||
|
"port": "Database - Porta",
|
||||||
|
"password": "Database Password",
|
||||||
|
"app_url": "App URL",
|
||||||
|
"username": "Database Username",
|
||||||
|
"db_name": "Database Nome",
|
||||||
|
"desc": "Crea un database sul tuo server e setta le credenziali usando il form qui sotto."
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"permissions": "Permessi",
|
||||||
|
"permission_confirm_title": "Sei sicuro di voler continuare?",
|
||||||
|
"permission_confirm_desc": "Controllo sui permessi Cartelle, fallito",
|
||||||
|
"permission_desc": "Qui sotto la lista dei permessi richiesti per far funzionare correttamente l'App. Se il controllo dei permessi fallisce, assicurati di aggiornare/modificare i permessi sulle cartelle."
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "Mail Host",
|
||||||
|
"port": "Mail - Porta",
|
||||||
|
"driver": "Mail Driver",
|
||||||
|
"secret": "Secret",
|
||||||
|
"mailgun_secret": "Mailgun Secret",
|
||||||
|
"mailgun_domain": "Domain",
|
||||||
|
"mailgun_endpoint": "Mailgun Endpoint",
|
||||||
|
"ses_secret": "SES Secret",
|
||||||
|
"ses_key": "SES Key",
|
||||||
|
"password": "Mail Password",
|
||||||
|
"username": "Mail Username",
|
||||||
|
"mail_config": "Configurazione Mail",
|
||||||
|
"from_name": "Nome mittente mail",
|
||||||
|
"from_mail": "Indirizzo mittente mail",
|
||||||
|
"encryption": "Tipo di cifratura Mail",
|
||||||
|
"mail_config_desc": "Form per configurazione del 'driver mail' per inviare emails dall'App. Puoi anche configurare servizi di terze parti come Sendgrid, SES, ecc.."
|
||||||
|
},
|
||||||
|
"req": {
|
||||||
|
"system_req": "Requisiti di Sistema",
|
||||||
|
"php_req_version": "Php (versione {version} richiesta)",
|
||||||
|
"check_req": "Controllo Requisiti",
|
||||||
|
"system_req_desc": "Crater ha alcuni requisiti di sistema. Assicurati che il server ha la versione di php richiesta e tutte le estensioni necessarie."
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"migrate_failed": "Migrate Failed",
|
||||||
|
"database_variables_save_error": "Cannot write configuration to .env file. Please check its file permissions",
|
||||||
|
"mail_variables_save_error": "Email configuration failed.",
|
||||||
|
"connection_failed": "Database connection failed",
|
||||||
|
"database_should_be_empty": "Database should be empty"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"mail_variables_save_successfully": "Email configurata con successo",
|
||||||
|
"database_variables_save_successfully": "Database configurato con successo."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout_login": {
|
||||||
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
|
"super_simple_invoicing": "Fatturazione super semplice",
|
||||||
|
"for_freelancer": "per Freelancers &",
|
||||||
|
"small_businesses": "Medio Piccoli Business ",
|
||||||
|
"crater_help": "Crater ti aiuta a tracciare le spese, registrare pagamenti e generare graziose",
|
||||||
|
"invoices_and_estimates": "fatture & preventivi con possibilità di scegliere tra diversi modelli."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"invalid_url": "URL non valido (es: http://www.crater.com)",
|
||||||
|
"required": "Campo obbligatorio",
|
||||||
|
"email_incorrect": "Email non corretta.",
|
||||||
|
"email_already_taken": "Email già in uso.",
|
||||||
|
"email_does_not_exist": "L'utente con questa email non esiste",
|
||||||
|
"item_unit_already_taken": "Questo nome item è già utilizzato",
|
||||||
|
"payment_mode_already_taken": "Questa modalità di pagamento è già stata inserita.",
|
||||||
|
"send_reset_link": "Invia Link di Reset",
|
||||||
|
"not_yet": "Non ancora? Invia di nuovo",
|
||||||
|
"password_min_length": "La password deve contenere {count} caratteri",
|
||||||
|
"name_min_length": "Il nome deve avere almeno {count} lettere.",
|
||||||
|
"enter_valid_tax_rate": "Inserisci un tasso di imposta valido",
|
||||||
|
"numbers_only": "Solo numeri.",
|
||||||
|
"characters_only": "Solo caratteri.",
|
||||||
|
"password_incorrect": "La Password deve essere identica",
|
||||||
|
"password_length": "La password deve essere lunga {count} caratteri.",
|
||||||
|
"qty_must_greater_than_zero": "La quantità deve essere maggiore di zero.",
|
||||||
|
"price_greater_than_zero": "Il prezzo deve essere maggiore di zero.",
|
||||||
|
"payment_greater_than_zero": "Il pagamento deve essere maggiore di zero.",
|
||||||
|
"payment_greater_than_due_amount": "Il pagamento inserito è maggiore di quello indicato in fattura.",
|
||||||
|
"quantity_maxlength": "La Quantità non può essere maggiore di 20 cifre.",
|
||||||
|
"price_maxlength": "Il prezzo non può contenere più di 20 cifre.",
|
||||||
|
"price_minvalue": "Il prezzo deve essere maggiore di 0.",
|
||||||
|
"amount_maxlength": "La somma non deve contenere più di 20 cifre.",
|
||||||
|
"amount_minvalue": "La somma deve essere maggiore di 0.",
|
||||||
|
"description_maxlength": "La Descrizione non deve superare i 255 caratteri.",
|
||||||
|
"subject_maxlength": "L'Oggetto non deve superare i 100 caratter.",
|
||||||
|
"message_maxlength": "Il messaggio non può superare i 255 caratteri.",
|
||||||
|
"maximum_options_error": "Massimo di {max} opzioni selezionate. Per selezionare un'altra opzione deseleziona prima una opzione.",
|
||||||
|
"notes_maxlength": "Le note non possono superare i 255 caratteri.",
|
||||||
|
"address_maxlength": "L'Indirizzo non può eccedere i 255 caratteri.",
|
||||||
|
"ref_number_maxlength": "Il Numero di Riferimento non può superare i 255 caratteri.",
|
||||||
|
"prefix_maxlength": "Il Prefisso non può superare i 5 caratteri.",
|
||||||
|
"something_went_wrong": "Si è verificato un errore"
|
||||||
|
}
|
||||||
|
}
|
||||||
889
resources/assets/js/plugins/pt-br.json
Normal file
889
resources/assets/js/plugins/pt-br.json
Normal file
@ -0,0 +1,889 @@
|
|||||||
|
{
|
||||||
|
"navigation": {
|
||||||
|
"dashboard": "Painel",
|
||||||
|
"customers": "Clientes",
|
||||||
|
"items": "Itens",
|
||||||
|
"invoices": "Faturas",
|
||||||
|
"expenses": "Despesas",
|
||||||
|
"estimates": "Orçamentos",
|
||||||
|
"payments": "Pagamentos",
|
||||||
|
"reports": "Relatórios",
|
||||||
|
"settings": "Configurações",
|
||||||
|
"logout": "Encerrar sessão"
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"view_pdf": "Ver PDF",
|
||||||
|
"download_pdf": "Baixar PDF",
|
||||||
|
"save": "Salvar",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"update": "Atualizar",
|
||||||
|
"download": "Baixar",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"from": "De",
|
||||||
|
"to": "Para",
|
||||||
|
"go_back": "Voltar",
|
||||||
|
"back_to_login": "Voltar ao Login",
|
||||||
|
"home": "Home",
|
||||||
|
"filter": "Filtrar",
|
||||||
|
"delete": "Excluir",
|
||||||
|
"edit": "Editar",
|
||||||
|
"view": "Ver",
|
||||||
|
"add_new_item": "Adicionar novo item",
|
||||||
|
"clear_all": "Limpar tudo",
|
||||||
|
"showing": "Mostrando",
|
||||||
|
"of": "de",
|
||||||
|
"actions": "Ações",
|
||||||
|
"subtotal": "Total parcial",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"fixed": "Fixado",
|
||||||
|
"percentage": "Porcentagem",
|
||||||
|
"tax": "Imposto",
|
||||||
|
"total_amount": "Quantidade Total",
|
||||||
|
"bill_to": "Cobrar a",
|
||||||
|
"ship_to": "Envie a",
|
||||||
|
"due": "Vencida",
|
||||||
|
"draft": "Rascunho",
|
||||||
|
"sent": "Enviado",
|
||||||
|
"all": "Todos",
|
||||||
|
"select_all": "Selecionar tudo",
|
||||||
|
"choose_file": "Escolha um arquivo.",
|
||||||
|
"choose_template": "Escolha um modelo",
|
||||||
|
"choose": "Escolher",
|
||||||
|
"remove": "Excluir",
|
||||||
|
"powered_by": "Distribuído por",
|
||||||
|
"bytefury": "Bytefury",
|
||||||
|
"select_a_status": "Selecione um status",
|
||||||
|
"select_a_tax": "Selecione um Imposto",
|
||||||
|
"search": "Buscar",
|
||||||
|
"are_you_sure": "Tem certeza?",
|
||||||
|
"list_is_empty": "Lista está vazia.",
|
||||||
|
"no_tax_found": "Imposto não encontrado!",
|
||||||
|
"four_zero_four": "404",
|
||||||
|
"you_got_lost": "Ops! Se perdeu!",
|
||||||
|
"go_home": "Ir para Home",
|
||||||
|
"setting_updated": "Configuração atualizada com sucesso",
|
||||||
|
"select_state": "Selecione Estado",
|
||||||
|
"select_country": "Selecionar pais",
|
||||||
|
"select_city": "Selecionar cidade",
|
||||||
|
"street_1": "Rua 1",
|
||||||
|
"street_2": "Rua # 2",
|
||||||
|
"action_failed": "Ação: Falhou",
|
||||||
|
"retry": "Atualização falhou"
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"select_year": "Selecione Ano",
|
||||||
|
"cards": {
|
||||||
|
"due_amount": "Montante devido",
|
||||||
|
"customers": "Clientes",
|
||||||
|
"invoices": "Faturas",
|
||||||
|
"estimates": "Orçamentos"
|
||||||
|
},
|
||||||
|
"chart_info": {
|
||||||
|
"total_sales": "Vendas",
|
||||||
|
"total_receipts": "Receitas",
|
||||||
|
"total_expense": "Despesas",
|
||||||
|
"net_income": "Resultado líquido",
|
||||||
|
"year": "Selecione Ano"
|
||||||
|
},
|
||||||
|
"weekly_invoices": {
|
||||||
|
"title": "Faturas Semanais"
|
||||||
|
},
|
||||||
|
"monthly_chart": {
|
||||||
|
"title": "Vendas e Despesas"
|
||||||
|
},
|
||||||
|
"recent_invoices_card": {
|
||||||
|
"title": "Faturas vencidas",
|
||||||
|
"due_on": "vencido em",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"amount_due": "Valor Devido",
|
||||||
|
"actions": "Ações",
|
||||||
|
"view_all": "Ver todos"
|
||||||
|
},
|
||||||
|
"recent_estimate_card": {
|
||||||
|
"title": "Orçamentos Recentes",
|
||||||
|
"date": "Data",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"amount_due": "Valor Devido",
|
||||||
|
"actions": "Ações",
|
||||||
|
"view_all": "Ver todos"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"name": "Nome",
|
||||||
|
"description": "Descrição",
|
||||||
|
"percent": "Porcentagem",
|
||||||
|
"compound_tax": "Imposto compuesto"
|
||||||
|
},
|
||||||
|
"customers": {
|
||||||
|
"title": "Clientes",
|
||||||
|
"add_customer": "Adicionar cliente",
|
||||||
|
"contacts_list": "Lista de clientes",
|
||||||
|
"name": "Nome",
|
||||||
|
"display_name": "Nome de exibição",
|
||||||
|
"primary_contact_name": "Nome do contato principal",
|
||||||
|
"contact_name": "Nome de Contato",
|
||||||
|
"amount_due": "Valor Devido",
|
||||||
|
"email": "Email",
|
||||||
|
"address": "Endereço",
|
||||||
|
"phone": "Telefone",
|
||||||
|
"website": "Site",
|
||||||
|
"country": "Pais",
|
||||||
|
"state": "Estado",
|
||||||
|
"city": "Cidade",
|
||||||
|
"zip_code": "Código postal",
|
||||||
|
"added_on": "Adicionado",
|
||||||
|
"action": "Ação",
|
||||||
|
"password": "Senha",
|
||||||
|
"street_number": "Número",
|
||||||
|
"primary_currency": "Moeda principal",
|
||||||
|
"add_new_customer": "Adicionar novo cliente",
|
||||||
|
"save_customer": "Salvar cliente",
|
||||||
|
"update_customer": "Atualizar cliente",
|
||||||
|
"customer": "Cliente | Clientes",
|
||||||
|
"new_customer": "Novo cliente",
|
||||||
|
"edit_customer": "Editar cliente",
|
||||||
|
"basic_info": "Informação basica",
|
||||||
|
"billing_address": "Endereço de cobrança",
|
||||||
|
"shipping_address": "Endereço de entrega",
|
||||||
|
"copy_billing_address": "Cópia de faturamento",
|
||||||
|
"no_customers": "Ainda não há clientes!",
|
||||||
|
"no_customers_found": "Clientes não encontrados!",
|
||||||
|
"list_of_customers": "Esta seção conterá a lista de clientes.",
|
||||||
|
"primary_display_name": "Nome de exibição principal",
|
||||||
|
"select_currency": "Selecione o tipo de moeda",
|
||||||
|
"select_a_customer": "Selecione um cliente",
|
||||||
|
"type_or_click": "Digite ou clique para selecionar",
|
||||||
|
|
||||||
|
"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.",
|
||||||
|
"created_message": "Cliente criado com sucesso",
|
||||||
|
"updated_message": "Cliente atualizado com sucesso",
|
||||||
|
"deleted_message": "Cliente excluído com sucesso | Clientes excluídos com sucesso"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"title": "Itens",
|
||||||
|
"items_list": "Lista de Itens",
|
||||||
|
"name": "Nome",
|
||||||
|
"unit": "Unidade",
|
||||||
|
"description": "Descrição",
|
||||||
|
"added_on": "Adicionado",
|
||||||
|
"price": "Preço",
|
||||||
|
"date_of_creation": "Data de criação",
|
||||||
|
"action": "Ação",
|
||||||
|
"add_item": "Adicionar item",
|
||||||
|
"save_item": "Salvar item",
|
||||||
|
"update_item": "Atualizar item",
|
||||||
|
"item": "Item | Itens",
|
||||||
|
"add_new_item": "Adicionar novo item",
|
||||||
|
"new_item": "Novo item",
|
||||||
|
"edit_item": "Editar item",
|
||||||
|
"no_items": "Ainda não existe itens",
|
||||||
|
"list_of_items": "Esta seção conterá a lista de itens.",
|
||||||
|
"select_a_unit": "Seleciona unidade",
|
||||||
|
|
||||||
|
"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",
|
||||||
|
"created_message": "Item criado com sucesso",
|
||||||
|
"updated_message": "Item atualizado com sucesso",
|
||||||
|
"deleted_message": "Item excluído com sucesso | Itens Excluídos com sucesso"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"title": "Orçamentos",
|
||||||
|
"estimate": "Orçamento | Orçamentos",
|
||||||
|
"estimates_list": "Lista de orçamentos",
|
||||||
|
"days": "{dias} dias",
|
||||||
|
"months": "{meses} Mês",
|
||||||
|
"years": "{Anos} Ano",
|
||||||
|
"all": "Todos",
|
||||||
|
"paid": "Pago",
|
||||||
|
"unpaid": "Não pago",
|
||||||
|
"customer": "CLIENTE",
|
||||||
|
"ref_no": "NÚMERO DE REFERÊNCIA.",
|
||||||
|
"number": "NÚMERO",
|
||||||
|
"amount_due": "Valor Devido",
|
||||||
|
"partially_paid": "Pago parcialmente",
|
||||||
|
"total": "Total",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"sub_total": "Subtotal",
|
||||||
|
"estimate_number": "Numero do Orçamento",
|
||||||
|
"ref_number": "Referência",
|
||||||
|
"contact": "Contato",
|
||||||
|
"add_item": "Adicionar Item",
|
||||||
|
"date": "Data",
|
||||||
|
"due_date": "Data de Vencimento",
|
||||||
|
"expiry_date": "Data de expiração",
|
||||||
|
"status": "Status",
|
||||||
|
"add_tax": "Adicionar Imposto",
|
||||||
|
"amount": "Montante",
|
||||||
|
"action": "Ação",
|
||||||
|
"notes": "Observações",
|
||||||
|
"tax": "Imposto",
|
||||||
|
"estimate_template": "Modelo de orçamento",
|
||||||
|
"convert_to_invoice": "Converter em fatura",
|
||||||
|
"mark_as_sent": "Marcar como enviado",
|
||||||
|
"send_estimate": "Enviar orçamento",
|
||||||
|
"record_payment": "Registro de pago",
|
||||||
|
"add_estimate": "Adicionar orçamento",
|
||||||
|
"save_estimate": "Salvar Orçamento",
|
||||||
|
"confirm_conversion": "Deseja converter este orçamento em uma fatura?",
|
||||||
|
"conversion_message": "Converção realizada com sucesso",
|
||||||
|
"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_accepted": "Este orçamento será marcado como Aceito",
|
||||||
|
"confirm_mark_as_rejected": "Este orçamento será marcado como Rejeitado",
|
||||||
|
"no_matching_estimates": "Não há orçamentos correspondentes!",
|
||||||
|
"mark_as_sent_successfully": "Orçamento como marcado como enviado com sucesso",
|
||||||
|
"send_estimate_successfully": "Orçamento enviado com sucesso",
|
||||||
|
"errors": {
|
||||||
|
"required": "Campo obrigatório"
|
||||||
|
},
|
||||||
|
"accepted": "Aceito",
|
||||||
|
"sent": "Enviado",
|
||||||
|
"draft": "Rascunho",
|
||||||
|
"declined": "Rejeitado",
|
||||||
|
"new_estimate": "Novo orçamento",
|
||||||
|
"add_new_estimate": "Adicionar novo orçamento",
|
||||||
|
"update_Estimate": "Atualizar orçamento",
|
||||||
|
"edit_estimate": "Editar orçamento",
|
||||||
|
"items": "artículos",
|
||||||
|
"Estimate": "Orçamento | Orçamentos",
|
||||||
|
"add_new_tax": "Adicionar novo imposto",
|
||||||
|
"no_estimates": "Ainda não há orcamentos",
|
||||||
|
"list_of_estimates": "Esta seção contém a lista de orçamentos.",
|
||||||
|
"mark_as_rejected": "Marcar como rejeitado",
|
||||||
|
"mark_as_accepted": "Marcar como aceito",
|
||||||
|
|
||||||
|
"marked_as_accepted_message": "Orçamento marcado como aceito",
|
||||||
|
"marked_as_rejected_message": "Orçamento marcado como rejeitado",
|
||||||
|
"confirm_delete": "Não poderá recuperar este orçamento | Não poderá recuperar estes orçamentos",
|
||||||
|
"created_message": "Orçamento criado com sucesso",
|
||||||
|
"updated_message": "Orçamento atualizado 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",
|
||||||
|
"something_went_wrong": "Algo deu errado",
|
||||||
|
"item": {
|
||||||
|
"title": "Titulo do item",
|
||||||
|
"description": "Descrição",
|
||||||
|
"quantity": "Quantidade",
|
||||||
|
"price": "Preço",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"total": "Total",
|
||||||
|
"total_discount": "Desconto total",
|
||||||
|
"sub_total": "Subtotal",
|
||||||
|
"tax": "Imposto",
|
||||||
|
"amount": "Montante",
|
||||||
|
"select_an_item": "Escreva ou clique para selecionar um item",
|
||||||
|
"type_item_description": "Tipo Item Descrição (opcional)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"title": "Faturas",
|
||||||
|
"invoices_list": "Lista de faturas",
|
||||||
|
"days": "{dias} dias",
|
||||||
|
"months": "{meses} Mês",
|
||||||
|
"years": "{anos} Ano",
|
||||||
|
"all": "Todas",
|
||||||
|
"paid": "Paga",
|
||||||
|
"unpaid": "Não Paga",
|
||||||
|
"customer": "CLIENTE",
|
||||||
|
"paid_status": "STATUS PAGAMENTO",
|
||||||
|
"ref_no": "REFERÊNCIA",
|
||||||
|
"number": "NÚMERO",
|
||||||
|
"amount_due": "VALOR DEVIDO",
|
||||||
|
"partially_paid": "Parcialmente pago",
|
||||||
|
"total": "Total",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"sub_total": "Subtotal",
|
||||||
|
"invoice": "Fatura | Faturas",
|
||||||
|
"invoice_number": "Número da fatura",
|
||||||
|
"ref_number": "Referência",
|
||||||
|
"contact": "Contato",
|
||||||
|
"add_item": "Adicionar um item",
|
||||||
|
"date": "Data",
|
||||||
|
"due_date": "Data de Vencimento",
|
||||||
|
"status": "Status",
|
||||||
|
"add_tax": "Adicionar imposto",
|
||||||
|
"amount": "Montante",
|
||||||
|
"action": "Ação",
|
||||||
|
"notes": "Observações",
|
||||||
|
"view": "Ver",
|
||||||
|
"send_invoice": "Enviar Fatura",
|
||||||
|
"invoice_template": "Modelo da Fatura",
|
||||||
|
"template": "Modelo",
|
||||||
|
"mark_as_sent": "Marcar como enviada",
|
||||||
|
"confirm_send_invoice": "Esta fatura será enviada por e-mail ao cliente",
|
||||||
|
"invoice_mark_as_sent": "Esta fatura será marcada como enviada",
|
||||||
|
"confirm_send": "Esta fatura será enviada por e-mail ao cliente",
|
||||||
|
"invoice_date": "Data da Fatura",
|
||||||
|
"record_payment": "Gravar Pagamento",
|
||||||
|
"add_new_invoice": "Adicionar Nova Fatura",
|
||||||
|
"update_expense": "Atualizar Despesa",
|
||||||
|
"edit_invoice": "Editar Fatura",
|
||||||
|
"new_invoice": "Nova Fatura",
|
||||||
|
"save_invoice": "Salvar Fatura",
|
||||||
|
"update_invoice": "Atualizar Fatura",
|
||||||
|
"add_new_tax": "Adicionar novo Imposto",
|
||||||
|
"no_invoices": "Ainda não há faturas!",
|
||||||
|
"list_of_invoices": "Esta seção conterá a lista de faturas.",
|
||||||
|
"select_invoice": "Selecionar Fatura",
|
||||||
|
"no_matching_invoices": "Não há faturas correspondentes!",
|
||||||
|
"mark_as_sent_successfully": "Fatura marcada como enviada com sucesso",
|
||||||
|
"send_invoice_successfully": "Fatura enviada com sucesso",
|
||||||
|
"item": {
|
||||||
|
"title": "Titulo do Item",
|
||||||
|
"description": "Descrição",
|
||||||
|
"quantity": "Quantidade",
|
||||||
|
"price": "Preço",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"total": "Total",
|
||||||
|
"total_discount": "Desconto Total",
|
||||||
|
"sub_total": "SubTotal",
|
||||||
|
"tax": "Imposto",
|
||||||
|
"amount": "Montante",
|
||||||
|
"select_an_item": "Digite ou clique para selecionar um item",
|
||||||
|
"type_item_description": "Tipo 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",
|
||||||
|
"confirm_delete": "Você não poderá recuperar esta fatura | Você não poderá recuperar essas faturas",
|
||||||
|
"created_message": "Fatura criada com sucesso",
|
||||||
|
"updated_message": "Fatura atualizada com sucesso",
|
||||||
|
"deleted_message": "Fatura excluída com sucesso | Faturas excluídas 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",
|
||||||
|
"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."
|
||||||
|
},
|
||||||
|
"credit_notes": {
|
||||||
|
"title": "Notas de credito",
|
||||||
|
"credit_notes_list": "Lista Notas de credito",
|
||||||
|
"credit_notes": "Notas de credito",
|
||||||
|
"contact": "Contato",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Montante",
|
||||||
|
"action": "Ação",
|
||||||
|
"credit_number": "Número de crédito",
|
||||||
|
"notes": "Notes",
|
||||||
|
"confirm_delete": "Deseja excluir esta nota de crédito?",
|
||||||
|
"item": {
|
||||||
|
"title": "Título do Item",
|
||||||
|
"description": "Descrição",
|
||||||
|
"quantity": "Quantidade",
|
||||||
|
"price": "Preço",
|
||||||
|
"discount": "Desconto",
|
||||||
|
"total": "Total",
|
||||||
|
"total_discount": "Desconto Total",
|
||||||
|
"sub_total": "SubTotal",
|
||||||
|
"tax": "Imposto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"payments": {
|
||||||
|
"title": "Pagamentos",
|
||||||
|
"payments_list": "Lista de Pagamentos",
|
||||||
|
"record_payment": "Gravar Pagamento",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Montante",
|
||||||
|
"action": "Ação",
|
||||||
|
"payment_number": "Número do Pagamento",
|
||||||
|
"payment_mode": "Forma de Pagamento",
|
||||||
|
"invoice": "Fatura",
|
||||||
|
"note": "Observação",
|
||||||
|
"add_payment": "Adicionar Pagamento",
|
||||||
|
"new_payment": "Novo Pagamento",
|
||||||
|
"edit_payment": "Editar Pagamento",
|
||||||
|
"view_payment": "Ver Pagamento",
|
||||||
|
"add_new_payment": "Adicionar novo Pagamento",
|
||||||
|
"save_payment": "Salvar Pagamento",
|
||||||
|
"update_payment": "Atualizar Pagamento",
|
||||||
|
"payment": "Pagamento | Pagamentos",
|
||||||
|
"no_payments": "Ainda sem pagamentos!",
|
||||||
|
"no_matching_payments": "Não há pagamentos correspondentes!",
|
||||||
|
"list_of_payments": "Esta seção conterá a lista de pagamentos.",
|
||||||
|
"select_payment_mode": "Selecione a forma de pagamento",
|
||||||
|
|
||||||
|
"confirm_delete": "Você não poderá recuperar este Pagamento | Você não poderá recuperar esses Pagamentos",
|
||||||
|
"created_message": "Pagamento criado com sucesso",
|
||||||
|
"updated_message": "Pagamento atualizado com sucesso",
|
||||||
|
"deleted_message": "Pagamento excluído com sucesso | Pagamentos excluídos com sucesso",
|
||||||
|
"invalid_amount_message": "O valor do pagamento é inválido"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"title": "Despesas",
|
||||||
|
"expenses_list": "Lista de Despesas",
|
||||||
|
"expense_title": "Título",
|
||||||
|
"contact": "Contato",
|
||||||
|
"category": "Categoria",
|
||||||
|
"customer": "Cliente",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"expense_date": "Data",
|
||||||
|
"description": "Descrição",
|
||||||
|
"receipt": "Receita",
|
||||||
|
"amount": "Montante",
|
||||||
|
"action": "Ação",
|
||||||
|
"note": "Observação",
|
||||||
|
"category_id": "Categoria",
|
||||||
|
"date": "Data da Despesa",
|
||||||
|
"add_expense": "Adicionar Despesa",
|
||||||
|
"add_new_expense": "Adicionar Nova Despesa",
|
||||||
|
"save_expense": "Salvar Despesa",
|
||||||
|
"update_expense": "Atualizar Despesa",
|
||||||
|
"download_receipt": "Baixar Receita",
|
||||||
|
"edit_expense": "Editar Despesa",
|
||||||
|
"new_expense": "Nova Despesa",
|
||||||
|
"expense": "Despesa | Despesas",
|
||||||
|
"no_expenses": "Ainda sem Despesas!",
|
||||||
|
"list_of_expenses": "Esta seção conterá a lista de despesas.",
|
||||||
|
|
||||||
|
"confirm_delete": "Você não poderá recuperar esta despesa | Você não poderá recuperar essas despesas",
|
||||||
|
"created_message": "Despesa criada com sucesso",
|
||||||
|
"updated_message": "Despesa atualizada com sucesso",
|
||||||
|
"deleted_message": "Despesas excluídas com sucesso | Despesas excluídas com sucesso",
|
||||||
|
"categories": {
|
||||||
|
"categories_list": "Lista de Categorias",
|
||||||
|
"title": "Título",
|
||||||
|
"name": "Nome",
|
||||||
|
"description": "Descrição",
|
||||||
|
"amount": "Montante",
|
||||||
|
"actions": "Ações",
|
||||||
|
"add_category": "Adicionar Categoria",
|
||||||
|
"new_category": "Nova Categoria",
|
||||||
|
"category": "Categoria | Categorias",
|
||||||
|
"select_a_category": "Selecionar uma Categoria"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"login": {
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Senha",
|
||||||
|
"forgot_password": "Esqueceu a senha?",
|
||||||
|
"or_signIn_with": "ou Entre com",
|
||||||
|
"login": "Entrar",
|
||||||
|
"register": "Registre-se",
|
||||||
|
"reset_password": "Resetar Senha",
|
||||||
|
"password_reset_successfully": "Senha redefinida com sucesso",
|
||||||
|
"enter_email": "Digite email",
|
||||||
|
"enter_password": "Digite a senha",
|
||||||
|
"retype_password": "Confirme a Senha",
|
||||||
|
"login_placeholder": "mail@exemplo.com"
|
||||||
|
},
|
||||||
|
"reports": {
|
||||||
|
"title": "Relatório",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"status": "Status",
|
||||||
|
"paid": "Pago",
|
||||||
|
"unpaid": "Não Pago",
|
||||||
|
"download_pdf": "Baixar PDF",
|
||||||
|
"view_pdf": "Ver PDF",
|
||||||
|
"update_report": "Atualizar Relatório",
|
||||||
|
"report": "Relatório | Relatórios",
|
||||||
|
"profit_loss": {
|
||||||
|
"profit_loss": "Perda de lucro",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"date_range": "Selecionar período"
|
||||||
|
},
|
||||||
|
"sales": {
|
||||||
|
"sales": "Vendas",
|
||||||
|
"date_range": "Selecionar período",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"report_type": "Tipo de Relatório"
|
||||||
|
},
|
||||||
|
"taxes": {
|
||||||
|
"taxes": "Impostos",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"date_range": "Selecionar período"
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"required": "Campo obrigatório"
|
||||||
|
},
|
||||||
|
"invoices": {
|
||||||
|
"invoice": "Fatura",
|
||||||
|
"invoice_date": "Data da Fatura",
|
||||||
|
"due_date": "Data de Vencimento",
|
||||||
|
"amount": "Montante",
|
||||||
|
"contact_name": "Nome de Contato",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"estimates": {
|
||||||
|
"estimate": "Orçamento",
|
||||||
|
"estimate_date": "Data do Orçamento",
|
||||||
|
"due_date": "Data de Vencimento",
|
||||||
|
"estimate_number": "Número do Orçamento",
|
||||||
|
"ref_number": "Referência",
|
||||||
|
"amount": "Montante",
|
||||||
|
"contact_name": "Nome de Contato",
|
||||||
|
"status": "Status"
|
||||||
|
},
|
||||||
|
"expenses": {
|
||||||
|
"expenses": "Despesas",
|
||||||
|
"category": "Categoria",
|
||||||
|
"date": "Data",
|
||||||
|
"amount": "Montante",
|
||||||
|
"to_date": "Até a Data",
|
||||||
|
"from_date": "A partir da Data",
|
||||||
|
"date_range": "Selecionar período"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"menu_title": {
|
||||||
|
"account_settings": "Configurações da conta",
|
||||||
|
"company_information": "Informações da Empresa",
|
||||||
|
"customization": "Personalizar",
|
||||||
|
"preferences": "Preferências",
|
||||||
|
"notifications": "Notificações",
|
||||||
|
"tax_types": "Tipos de Impostos",
|
||||||
|
"expense_category": "Categorias de Despesas",
|
||||||
|
"update_app": "Atualizar Aplicativo"
|
||||||
|
},
|
||||||
|
"title": "Configurações",
|
||||||
|
"setting": "Configuração | Configurações",
|
||||||
|
"general": "Geral",
|
||||||
|
"language": "Idioma",
|
||||||
|
"primary_currency": "Moéda Principal",
|
||||||
|
"timezone": "Fuso horário",
|
||||||
|
"date_format": "Formato de data",
|
||||||
|
"currencies": {
|
||||||
|
"title": "Moedas",
|
||||||
|
"currency": "Moeda | Moedas",
|
||||||
|
"currencies_list": "Moedas",
|
||||||
|
"select_currency": "Selecione uma Moeda",
|
||||||
|
"name": "Nome",
|
||||||
|
"code": "Código",
|
||||||
|
"symbol": "Símbolo",
|
||||||
|
"precision": "Precisão",
|
||||||
|
"thousand_separator": "Separador de Milhar",
|
||||||
|
"decimal_separator": "Separador Decimal",
|
||||||
|
"position": "Posição",
|
||||||
|
"position_of_symbol": "Posição do Símbolo",
|
||||||
|
"right": "Direita",
|
||||||
|
"left": "Esquerda",
|
||||||
|
"action": "Ação",
|
||||||
|
"add_currency": "Adicionar Moeda"
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "Host de Email",
|
||||||
|
"port": "Porta de Email",
|
||||||
|
"driver": "Mail Driver",
|
||||||
|
"secret": "Segredo",
|
||||||
|
"mailgun_secret": "Mailgun Segredo",
|
||||||
|
"mailgun_domain": "Domínio",
|
||||||
|
"mailgun_endpoint": "Mailgun Endpoint",
|
||||||
|
"ses_secret": "SES Segredo",
|
||||||
|
"ses_key": "SES Chave",
|
||||||
|
"password": "Senha do Email",
|
||||||
|
"username": "Nome de Usuário do Email",
|
||||||
|
"mail_config": "Configuração de Email",
|
||||||
|
"from_name": "Do Nome de Email",
|
||||||
|
"from_mail": "Do Endereço 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."
|
||||||
|
},
|
||||||
|
"pdf": {
|
||||||
|
"title": "Configurações de PDF",
|
||||||
|
"footer_text": "Texto do Rodapé",
|
||||||
|
"pdf_layout": "Layout de PDF"
|
||||||
|
},
|
||||||
|
"company_info": {
|
||||||
|
"company_info": "Informação da Empresa",
|
||||||
|
"company_name": "Nome da Empresa",
|
||||||
|
"company_logo": "Logotipo da Empresa",
|
||||||
|
"section_description": "Informações sobre sua empresa que serão exibidas em Faturas, Orçamentos e outros documentos criados pela Crater.",
|
||||||
|
"phone": "Telefone",
|
||||||
|
"country": "Pais",
|
||||||
|
"state": "Estado",
|
||||||
|
"city": "Cidade",
|
||||||
|
"address": "Endereço",
|
||||||
|
"zip": "CEP",
|
||||||
|
"save": "Salvar",
|
||||||
|
"updated_message": "Informações da Empresa atualizadas com sucesso"
|
||||||
|
},
|
||||||
|
"customization": {
|
||||||
|
"customization": "Personalizar",
|
||||||
|
"save": "Salvar",
|
||||||
|
"addresses": {
|
||||||
|
"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).",
|
||||||
|
"customer_billing_address": "Endereço de Cobrança do Cliente",
|
||||||
|
"customer_shipping_address": "Endereço de Entrega do Cliente",
|
||||||
|
"company_address": "Endereço da Empresa",
|
||||||
|
"insert_fields": "Inserir Campos",
|
||||||
|
"contact": "Contato",
|
||||||
|
"address": "Endereço",
|
||||||
|
"display_name": "Nome em Exibição",
|
||||||
|
"primary_contact_name": "Nome do Contato Principal",
|
||||||
|
"email": "Email",
|
||||||
|
"website": "Website",
|
||||||
|
"name": "Nome",
|
||||||
|
"country": "Pais",
|
||||||
|
"state": "Estado",
|
||||||
|
"city": "Cidade",
|
||||||
|
"company_name": "Nome da Empresa",
|
||||||
|
"address_street_1": "Endereço Rua 1",
|
||||||
|
"address_street_2": "Endereço Rua 2",
|
||||||
|
"phone": "Telefone",
|
||||||
|
"zip_code": "CEP",
|
||||||
|
"address_setting_updated": "Configuração de Endereço Atualizada com Sucesso"
|
||||||
|
},
|
||||||
|
"updated_message": "Informações da Empresa atualizadas com sucesso",
|
||||||
|
|
||||||
|
"invoices": {
|
||||||
|
"title": "Faturas",
|
||||||
|
"notes": "Notas",
|
||||||
|
"invoice_prefix": "Fatura Prefixo",
|
||||||
|
"invoice_settings": "Configrações 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.",
|
||||||
|
"enter_invoice_prefix": "Digite o prefixo da Fatura",
|
||||||
|
"terms_and_conditions": "Termos e Condições",
|
||||||
|
"invoice_setting_updated": "Configuração da Fatura atualizada com sucesso"
|
||||||
|
},
|
||||||
|
|
||||||
|
"estimates": {
|
||||||
|
"title": "Orçamentos",
|
||||||
|
"estimate_prefix": "Orçamento Prefixo",
|
||||||
|
"estimate_settings": "Configurações 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.",
|
||||||
|
"enter_estimate_prefix": "Digite o prefixo do Orçamento",
|
||||||
|
"estimate_setting_updated": "Configuração do Orçamento atualizada com sucesso"
|
||||||
|
},
|
||||||
|
|
||||||
|
"payments": {
|
||||||
|
"title": "Pagamentos",
|
||||||
|
"payment_prefix": "Pagamento Prefixo",
|
||||||
|
"payment_settings": "Configurações de 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.",
|
||||||
|
"enter_payment_prefix": "Digite o Prefixo do Pagamento",
|
||||||
|
"payment_setting_updated": "Configurações de Pagamento atualizada com sucesso"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"account_settings": {
|
||||||
|
"profile_picture": "Foto do Perfil",
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Senha",
|
||||||
|
"confirm_password": "Confirmar Senha",
|
||||||
|
"account_settings": "Configurações da conta",
|
||||||
|
"save": "Salvar",
|
||||||
|
"section_description": "Você pode atualizar seu nome, email e senha usando o formulário abaixo.",
|
||||||
|
"updated_message": "Configurações da conta atualizadas com sucesso"
|
||||||
|
},
|
||||||
|
"user_profile": {
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Password",
|
||||||
|
"confirm_password": "Confirmar Senha"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"title": "Notificação",
|
||||||
|
"email": "Enviar Notificações para",
|
||||||
|
"description": "Quais notificações por email você gostaria de receber quando algo mudar?",
|
||||||
|
"invoice_viewed": "Fatura Visualizada",
|
||||||
|
"invoice_viewed_desc": "Quando o seu cliente visualiza uma Fatura enviada pelo painel do Crater.",
|
||||||
|
"estimate_viewed": "Orçamento Visualizado",
|
||||||
|
"estimate_viewed_desc": "Quando o seu cliente visualiza um Orçamento enviada pelo painel do Crater.",
|
||||||
|
"save": "Salvar",
|
||||||
|
"email_save_message": "E-mail salvo com sucesso",
|
||||||
|
"please_enter_email": "Por favor digite um E-mail"
|
||||||
|
},
|
||||||
|
"tax_types": {
|
||||||
|
"title": "Tipos de Impostos",
|
||||||
|
"add_tax": "Adicionar Imposto",
|
||||||
|
"description": "Você pode adicionar ou remover impostos conforme desejar. O Crater suporta impostos sobre itens individuais e também na Fatura.",
|
||||||
|
"add_new_tax": "Adicionar Novo Imposto",
|
||||||
|
"tax_settings": "Configurações de Impostos",
|
||||||
|
"tax_per_item": "Imposto por Item",
|
||||||
|
"tax_name": "Nome do Imposto",
|
||||||
|
"compound_tax": "Imposto Composto",
|
||||||
|
"percent": "Porcentagem",
|
||||||
|
"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.",
|
||||||
|
"created_message": "Tipo de Imposto criado com sucesso",
|
||||||
|
"updated_message": "Tipo de Imposto Atualizado com sucesso",
|
||||||
|
"deleted_message": "Tipo de Imposto Deletado com sucesso",
|
||||||
|
"confirm_delete": "Você não poderá recuperar este tipo de Imposto",
|
||||||
|
"already_in_use": "O Imposto já está em uso"
|
||||||
|
},
|
||||||
|
"expense_category": {
|
||||||
|
"title": "Categoria de Despesa",
|
||||||
|
"action": "Ação",
|
||||||
|
"description": "As Categorias são necessárias para adicionar entradas de Despesas. Você pode adicionar ou remover essas Categorias de acordo com sua preferência.",
|
||||||
|
"add_new_category": "Adicionar Nova Categoria",
|
||||||
|
"category_name": "Nome da Categoria",
|
||||||
|
"category_description": "Descrição",
|
||||||
|
"created_message": "Categoria de Despesa criada com sucesso",
|
||||||
|
"deleted_message": "Categoria de Despesa excluída com sucesso",
|
||||||
|
"updated_message": "Categoria de Despesa atualizada com sucesso",
|
||||||
|
"confirm_delete": "Você não poderá recuperar esta Categoria de Despesa",
|
||||||
|
"already_in_use": "A categoria já está em uso"
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"currency": "Moeda",
|
||||||
|
"language": "Idioma",
|
||||||
|
"time_zone": "Fuso Horário",
|
||||||
|
"fiscal_year": "Ano Financeiro",
|
||||||
|
"date_format": "Formato da Data",
|
||||||
|
"discount_setting": "Configuração de Desconto",
|
||||||
|
"discount_per_item": "Desconto por Item ",
|
||||||
|
"discount_setting_description": "Habilite isso se desejar adicionar desconto a itens de Fatura individualmente. Por padrão, o desconto é adicionado diretamente à Fatura.",
|
||||||
|
"save": "Salvar",
|
||||||
|
"preference": "Preferência | Preferências",
|
||||||
|
"general_settings": "Preferências padrão para o sistema.",
|
||||||
|
"updated_message": "Preferências atualizadas com sucesso",
|
||||||
|
"select_language": "Selecione um Idioma",
|
||||||
|
"select_time_zone": "Selecione um fuso horário",
|
||||||
|
"select_date_formate": "Selecione um formato de data",
|
||||||
|
"select_financial_year": "Selecione o ano financeiro"
|
||||||
|
},
|
||||||
|
"update_app": {
|
||||||
|
"title": "Atualizar Aplicativo",
|
||||||
|
"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",
|
||||||
|
"avail_update": "Nova atualização disponível",
|
||||||
|
"next_version": "Próxima versão",
|
||||||
|
"update": "Atualizar agora",
|
||||||
|
"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",
|
||||||
|
"update_success": "O aplicativo foi atualizado! Aguarde enquanto a janela do navegador é recarregada automaticamente.",
|
||||||
|
"latest_message": "Nenhuma atualização disponível! Você está na versão mais recente.",
|
||||||
|
"current_version": "Versão Atual",
|
||||||
|
"download_zip_file": "Baixar arquivo ZIP",
|
||||||
|
"unzipping_package": "Descompactando o pacote",
|
||||||
|
"copying_files": "Copiando arquivos",
|
||||||
|
"running_migrations": "Executando migrações",
|
||||||
|
"finishing_update": "Atualização de acabamento",
|
||||||
|
"update_failed": "Atualização falhou",
|
||||||
|
"update_failed_text": "Desculpa! Sua atualização falhou em: {step} step"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"account_info": "Informação da conta",
|
||||||
|
"account_info_desc": "Os detalhes abaixo serão usados para criar a conta principal do administrador. Além disso, você pode alterar os detalhes a qualquer momento após o login.",
|
||||||
|
"name": "Nome",
|
||||||
|
"email": "Email",
|
||||||
|
"password": "Senha",
|
||||||
|
"confirm_password": "Confirmar Senha",
|
||||||
|
"save_cont": "Salvar e Continuar",
|
||||||
|
"company_info": "Informação da Empresa",
|
||||||
|
"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_logo": "Logotipo da Empresa",
|
||||||
|
"logo_preview": "Previsualizar Logotipo",
|
||||||
|
"preferences": "Preferências",
|
||||||
|
"preferences_desc": "Preferências padrão para o sistema.",
|
||||||
|
"country": "Pais",
|
||||||
|
"state": "Estado",
|
||||||
|
"city": "Cidade",
|
||||||
|
"address": "Endereço",
|
||||||
|
"street": "Rua 1 | Rua 2",
|
||||||
|
"phone": "Telefone",
|
||||||
|
"zip_code": "CEP",
|
||||||
|
"go_back": "Voltar",
|
||||||
|
"currency": "Moeda",
|
||||||
|
"language": "Idioma",
|
||||||
|
"time_zone": "Fuso Horário",
|
||||||
|
"fiscal_year": "Ano Financeiro",
|
||||||
|
"date_format": "Formato de Data",
|
||||||
|
"from_address": "Do Endereço",
|
||||||
|
"username": "Nome de Usuário",
|
||||||
|
"next": "Próximo",
|
||||||
|
"continue": "Continuar",
|
||||||
|
"skip": "Pular",
|
||||||
|
"database": {
|
||||||
|
"database": "URL do Site e Base de Dados",
|
||||||
|
"connection": "Conexão da Base de Dados",
|
||||||
|
"host": "Host da Base de Dados",
|
||||||
|
"port": "Porta da Base de Dados",
|
||||||
|
"password": "Senha da Base de Dados",
|
||||||
|
"app_url": "URL do Aplicativo",
|
||||||
|
"username": "Usuário da Base de Dados",
|
||||||
|
"db_name": "Nome da Base de Dados",
|
||||||
|
"desc": "Crie um Banco de Dados no seu servidor e defina as credenciais usando o formulário abaixo."
|
||||||
|
},
|
||||||
|
"permissions": {
|
||||||
|
"permissions": "Permissões",
|
||||||
|
"permission_confirm_title": "Você tem certeza que quer continuar?",
|
||||||
|
"permission_confirm_desc": "Falha na verificação de permissão da pasta",
|
||||||
|
"permission_desc": "Abaixo está a lista de permissões de pasta que são necessárias para que o aplicativo funcione. Se a verificação da permissão falhar, atualize as permissões da pasta."
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"host": "Host do email",
|
||||||
|
"port": "Porta do email",
|
||||||
|
"driver": "Driver do email",
|
||||||
|
"secret": "Segredo",
|
||||||
|
"mailgun_secret": "Segredo do Mailgun",
|
||||||
|
"mailgun_domain": "Domínio",
|
||||||
|
"mailgun_endpoint": "Endpoint do Mailgun",
|
||||||
|
"ses_secret": "Segredo do SES",
|
||||||
|
"ses_key": "Chave SES",
|
||||||
|
"password": "Senha do email",
|
||||||
|
"username": "Nome do Usuário do email",
|
||||||
|
"mail_config": "Configuração de email",
|
||||||
|
"from_name": "Nome do email",
|
||||||
|
"from_mail": "Endereço de email",
|
||||||
|
"encryption": "Criptografia de email",
|
||||||
|
"mail_config_desc": "Abaixo está o formulário para configurar o driver de email que será usado para enviar emails do aplicativo. Você também pode configurar provedores de terceiros como Sendgrid, SES etc."
|
||||||
|
},
|
||||||
|
"req": {
|
||||||
|
"system_req": "Requisitos de Sistema",
|
||||||
|
"php_req_version": "PHP (versão {version} obrigatória)",
|
||||||
|
"check_req": "Verificar Requisitos",
|
||||||
|
"system_req_desc": "O Crater tem alguns requisitos de servidor. Verifique se o seu servidor possui a versão do PHP necessária e todas as extensões mencionadas abaixo."
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"migrate_failed": "Falha na migração",
|
||||||
|
"database_variables_save_error": "Não é possível gravar a configuração no arquivo .env. Por favor, verifique suas permissões de arquivo",
|
||||||
|
"mail_variables_save_error": "A configuração do email falhou.",
|
||||||
|
"connection_failed": "Falha na conexão com o banco de dados",
|
||||||
|
"database_should_be_empty": "O banco de dados deve estar vazio"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"mail_variables_save_successfully": "Email configurado com sucesso",
|
||||||
|
"database_variables_save_successfully": "Banco de dados configurado com sucesso."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"layout_login": {
|
||||||
|
"copyright_crater": "Copyright @ Crater - 2020",
|
||||||
|
"super_simple_invoicing": "Faturamento super simples",
|
||||||
|
"for_freelancer": "Para Freelancers &",
|
||||||
|
"small_businesses": "Pequenos Negócios ",
|
||||||
|
"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."
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"invalid_url": "url inválidas (ex: http://www.crater.com)",
|
||||||
|
"required": "Campo obrigatório",
|
||||||
|
"email_incorrect": "E-mail incorreto",
|
||||||
|
"email_already_taken": "O email já foi recebido.",
|
||||||
|
"email_does_not_exist": "O usuário com determinado email não existe",
|
||||||
|
"send_reset_link": "Enviar link de redefinição",
|
||||||
|
"not_yet": "Ainda não? Envie novamente",
|
||||||
|
"password_min_length": "A senha deve conter {count} caracteres",
|
||||||
|
"name_min_length": "O nome deve ter pelo menos {count} letras.",
|
||||||
|
"enter_valid_tax_rate": "Insira uma taxa de imposto válida",
|
||||||
|
"numbers_only": "Apenas Números.",
|
||||||
|
"characters_only": "Apenas Caracteres.",
|
||||||
|
"password_incorrect": "As senhas devem ser idênticas",
|
||||||
|
"password_length": "A senha deve ter {count} caracteres.",
|
||||||
|
"qty_must_greater_than_zero": "A quantidade deve ser maior que zero.",
|
||||||
|
"price_greater_than_zero": "O preço deve ser maior que zero.",
|
||||||
|
"payment_greater_than_zero": "O pagamento deve ser maior que zero.",
|
||||||
|
"payment_greater_than_due_amount": "O pagamento inserido é mais do que o valor devido desta fatura.",
|
||||||
|
"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_minvalue": "O preço deve ser maior que 0.",
|
||||||
|
"amount_maxlength": "Montante não deve ser superior a 20 dígitos.",
|
||||||
|
"amount_minvalue": "Montante deve ser maior que zero",
|
||||||
|
"description_maxlength": "A descrição 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.",
|
||||||
|
"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.",
|
||||||
|
"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."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -46,6 +46,7 @@ import InvoiceView from './views/invoices/View.vue'
|
|||||||
// Payments
|
// Payments
|
||||||
import PaymentsIndex from './views/payments/Index.vue'
|
import PaymentsIndex from './views/payments/Index.vue'
|
||||||
import PaymentCreate from './views/payments/Create.vue'
|
import PaymentCreate from './views/payments/Create.vue'
|
||||||
|
import PaymentView from './views/payments/View.vue'
|
||||||
|
|
||||||
// Estimates
|
// Estimates
|
||||||
import EstimateIndex from './views/estimates/Index.vue'
|
import EstimateIndex from './views/estimates/Index.vue'
|
||||||
@ -259,6 +260,11 @@ const routes = [
|
|||||||
name: 'payments.edit',
|
name: 'payments.edit',
|
||||||
component: PaymentCreate
|
component: PaymentCreate
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'payments/:id/view',
|
||||||
|
name: 'payments.view',
|
||||||
|
component: PaymentView
|
||||||
|
},
|
||||||
|
|
||||||
// Expenses
|
// Expenses
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,6 +4,8 @@ import * as userTypes from './modules/user/mutation-types'
|
|||||||
import * as companyTypes from './modules/company/mutation-types'
|
import * as companyTypes from './modules/company/mutation-types'
|
||||||
import * as preferencesTypes from './modules/settings/preferences/mutation-types'
|
import * as preferencesTypes from './modules/settings/preferences/mutation-types'
|
||||||
import * as taxTypeTypes from './modules/tax-type/mutation-types'
|
import * as taxTypeTypes from './modules/tax-type/mutation-types'
|
||||||
|
import * as itemTypes from './modules/item/mutation-types'
|
||||||
|
import * as paymentModes from './modules/payment/mutation-types'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
bootstrap ({ commit, dispatch, state }) {
|
bootstrap ({ commit, dispatch, state }) {
|
||||||
@ -17,6 +19,8 @@ export default {
|
|||||||
commit('taxType/' + taxTypeTypes.BOOTSTRAP_TAX_TYPES, response.data.taxTypes)
|
commit('taxType/' + taxTypeTypes.BOOTSTRAP_TAX_TYPES, response.data.taxTypes)
|
||||||
commit('preferences/' + preferencesTypes.SET_MOMENT_DATE_FORMAT, response.data.moment_date_format)
|
commit('preferences/' + preferencesTypes.SET_MOMENT_DATE_FORMAT, response.data.moment_date_format)
|
||||||
commit('preferences/' + preferencesTypes.SET_LANGUAGE_FORMAT, response.data.default_language)
|
commit('preferences/' + preferencesTypes.SET_LANGUAGE_FORMAT, response.data.default_language)
|
||||||
|
commit('item/' + itemTypes.SET_ITEM_UNITS, response.data.units)
|
||||||
|
commit('payment/' + paymentModes.SET_PAYMENT_MODES, response.data.paymentMethods)
|
||||||
commit(types.UPDATE_APP_LOADING_STATUS, true)
|
commit(types.UPDATE_APP_LOADING_STATUS, true)
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
|||||||
@ -21,13 +21,6 @@ export const login = ({ commit, dispatch, state }, data) => {
|
|||||||
window.toastr['success']('Login Successful')
|
window.toastr['success']('Login Successful')
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
if (err.response.data.error === 'invalid_credentials') {
|
|
||||||
window.toastr['error']('Invalid Credentials')
|
|
||||||
} else {
|
|
||||||
// Something happened in setting up the request that triggered an Error
|
|
||||||
console.log('Error', err.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
commit(types.AUTH_ERROR, err.response)
|
commit(types.AUTH_ERROR, err.response)
|
||||||
Ls.remove('auth.token')
|
Ls.remove('auth.token')
|
||||||
reject(err)
|
reject(err)
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import * as types from './mutation-types'
|
|||||||
|
|
||||||
export const fetchCategories = ({ commit, dispatch, state }, data) => {
|
export const fetchCategories = ({ commit, dispatch, state }, data) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.get(`/api/categories/`).then((response) => {
|
window.axios.get(`/api/categories`).then((response) => {
|
||||||
commit(types.SET_CATEGORIES, response.data)
|
commit(types.SET_CATEGORIES, response.data)
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
|
|||||||
@ -13,13 +13,13 @@ export const loadData = ({ commit, dispatch, state }, params) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getChart = ({ commit, dispatch, state }) => {
|
// export const getChart = ({ commit, dispatch, state }) => {
|
||||||
return new Promise((resolve, reject) => {
|
// return new Promise((resolve, reject) => {
|
||||||
window.axios.get(`/api/dashboard/expense/chart`).then((response) => {
|
// window.axios.get(`/api/dashboard/expense/chart`).then((response) => {
|
||||||
commit(types.SET_INITIAL_DATA, response.data)
|
// commit(types.SET_INITIAL_DATA, response.data)
|
||||||
resolve(response)
|
// resolve(response)
|
||||||
}).catch((err) => {
|
// }).catch((err) => {
|
||||||
reject(err)
|
// reject(err)
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
|
|||||||
@ -135,6 +135,16 @@ export const markAsSent = ({ commit, dispatch, state }, data) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const cloneInvoice = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.post(`/api/invoices/clone`, data).then((response) => {
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const searchInvoice = ({ commit, dispatch, state }, data) => {
|
export const searchInvoice = ({ commit, dispatch, state }, data) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.get(`/api/invoices?${data}`).then((response) => {
|
window.axios.get(`/api/invoices?${data}`).then((response) => {
|
||||||
|
|||||||
@ -26,7 +26,6 @@ export const addItem = ({ commit, dispatch, state }, data) => {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.post('/api/items', data).then((response) => {
|
window.axios.post('/api/items', data).then((response) => {
|
||||||
commit(types.ADD_ITEM, response.data)
|
commit(types.ADD_ITEM, response.data)
|
||||||
|
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
reject(err)
|
reject(err)
|
||||||
@ -90,3 +89,59 @@ export const selectItem = ({ commit, dispatch, state }, data) => {
|
|||||||
commit(types.SET_SELECT_ALL_STATE, false)
|
commit(types.SET_SELECT_ALL_STATE, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const addItemUnit = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.post(`/api/units`, data).then((response) => {
|
||||||
|
commit(types.ADD_ITEM_UNIT, response.data)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateItemUnit = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.put(`/api/units/${data.id}`, data).then((response) => {
|
||||||
|
commit(types.UPDATE_ITEM_UNIT, response.data)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fetchItemUnits = ({ commit, dispatch, state }) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/units`).then((response) => {
|
||||||
|
commit(types.SET_ITEM_UNITS, response.data.units)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fatchItemUnit = ({ commit, dispatch, state }, id) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/units/${id}`).then((response) => {
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const deleteItemUnit = ({ commit, dispatch, state }, id) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.delete(`/api/units/${id}`).then((response) => {
|
||||||
|
if (!response.data.error) {
|
||||||
|
commit(types.DELETE_ITEM_UNIT, id)
|
||||||
|
}
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@ -2,3 +2,4 @@ export const items = (state) => state.items
|
|||||||
export const selectAllField = (state) => state.selectAllField
|
export const selectAllField = (state) => state.selectAllField
|
||||||
export const selectedItems = (state) => state.selectedItems
|
export const selectedItems = (state) => state.selectedItems
|
||||||
export const totalItems = (state) => state.totalItems
|
export const totalItems = (state) => state.totalItems
|
||||||
|
export const itemUnits = (state) => state.itemUnits
|
||||||
|
|||||||
@ -6,7 +6,8 @@ const initialState = {
|
|||||||
items: [],
|
items: [],
|
||||||
totalItems: 0,
|
totalItems: 0,
|
||||||
selectAllField: false,
|
selectAllField: false,
|
||||||
selectedItems: []
|
selectedItems: [],
|
||||||
|
itemUnits: []
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@ -6,3 +6,7 @@ export const DELETE_MULTIPLE_ITEMS = 'DELETE_MULTIPLE_ITEMS'
|
|||||||
export const SET_SELECTED_ITEMS = 'SET_SELECTED_ITEMS'
|
export const SET_SELECTED_ITEMS = 'SET_SELECTED_ITEMS'
|
||||||
export const SET_TOTAL_ITEMS = 'SET_TOTAL_ITEMS'
|
export const SET_TOTAL_ITEMS = 'SET_TOTAL_ITEMS'
|
||||||
export const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'
|
export const SET_SELECT_ALL_STATE = 'SET_SELECT_ALL_STATE'
|
||||||
|
export const ADD_ITEM_UNIT = 'ADD_ITEM_UNIT'
|
||||||
|
export const SET_ITEM_UNITS = 'SET_ITEM_UNITS'
|
||||||
|
export const UPDATE_ITEM_UNIT = 'UPDATE_ITEM_UNIT'
|
||||||
|
export const DELETE_ITEM_UNIT = 'DELETE_ITEM_UNIT'
|
||||||
|
|||||||
@ -39,6 +39,24 @@ export default {
|
|||||||
|
|
||||||
[types.SET_SELECT_ALL_STATE] (state, data) {
|
[types.SET_SELECT_ALL_STATE] (state, data) {
|
||||||
state.selectAllField = data
|
state.selectAllField = data
|
||||||
}
|
},
|
||||||
|
|
||||||
|
[types.ADD_ITEM_UNIT] (state, data) {
|
||||||
|
state.itemUnits = [data.unit, ...state.itemUnits]
|
||||||
|
},
|
||||||
|
|
||||||
|
[types.SET_ITEM_UNITS] (state, data) {
|
||||||
|
state.itemUnits = data
|
||||||
|
},
|
||||||
|
|
||||||
|
[types.DELETE_ITEM_UNIT] (state, id) {
|
||||||
|
let index = state.itemUnits.findIndex(unit => unit.id === id)
|
||||||
|
state.itemUnits.splice(index, 1)
|
||||||
|
},
|
||||||
|
|
||||||
|
[types.UPDATE_ITEM_UNIT] (state, data) {
|
||||||
|
let pos = state.itemUnits.findIndex(unit => unit.id === data.unit.id)
|
||||||
|
state.itemUnits.splice(pos, 1)
|
||||||
|
state.itemUnits = [data.unit, ...state.itemUnits]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,9 +12,9 @@ export const fetchPayments = ({ commit, dispatch, state }, params) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const fetchCreatePayment = ({ commit, dispatch }, page) => {
|
export const fetchPayment = ({ commit, dispatch }, id) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.get(`/api/payments/create`).then((response) => {
|
window.axios.get(`/api/payments/${id}`).then((response) => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
reject(err)
|
reject(err)
|
||||||
@ -22,7 +22,7 @@ export const fetchCreatePayment = ({ commit, dispatch }, page) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const fetchPayment = ({ commit, dispatch }, id) => {
|
export const fetchEditPaymentData = ({ commit, dispatch }, id) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.get(`/api/payments/${id}/edit`).then((response) => {
|
window.axios.get(`/api/payments/${id}/edit`).then((response) => {
|
||||||
resolve(response)
|
resolve(response)
|
||||||
@ -32,6 +32,16 @@ export const fetchPayment = ({ commit, dispatch }, id) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const fetchCreatePayment = ({ commit, dispatch }, page) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/payments/create`).then((response) => {
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const addPayment = ({ commit, dispatch, state }, data) => {
|
export const addPayment = ({ commit, dispatch, state }, data) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
window.axios.post('/api/payments', data).then((response) => {
|
window.axios.post('/api/payments', data).then((response) => {
|
||||||
@ -97,3 +107,80 @@ export const selectAllPayments = ({ commit, dispatch, state }) => {
|
|||||||
commit(types.SET_SELECT_ALL_STATE, true)
|
commit(types.SET_SELECT_ALL_STATE, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const addPaymentMode = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.post(`/api/payment-methods`, data).then((response) => {
|
||||||
|
commit(types.ADD_PAYMENT_MODE, response.data)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updatePaymentMode = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.put(`/api/payment-methods/${data.id}`, data).then((response) => {
|
||||||
|
commit(types.UPDATE_PAYMENT_MODE, response.data)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fetchPaymentModes = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/payment-methods`, data).then((response) => {
|
||||||
|
commit(types.SET_PAYMENT_MODES, response.data.paymentMethods)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fetchPaymentMode = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/payment-methods/${data.id}`, data).then((response) => {
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const deletePaymentMode = ({ commit, dispatch, state }, id) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.delete(`/api/payment-methods/${id}`).then((response) => {
|
||||||
|
if (!response.data.error) {
|
||||||
|
commit(types.DELETE_PAYMENT_MODE, id)
|
||||||
|
}
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const sendEmail = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.post(`/api/payments/send`, data).then((response) => {
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const searchPayment = ({ commit, dispatch, state }, data) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
window.axios.get(`/api/payments?${data}`).then((response) => {
|
||||||
|
// commit(types.UPDATE_INVOICE, response.data)
|
||||||
|
resolve(response)
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@ -2,3 +2,4 @@ export const payments = (state) => state.payments
|
|||||||
export const selectedPayments = (state) => state.selectedPayments
|
export const selectedPayments = (state) => state.selectedPayments
|
||||||
export const selectAllField = (state) => state.selectAllField
|
export const selectAllField = (state) => state.selectAllField
|
||||||
export const totalPayments = (state) => state.totalPayments
|
export const totalPayments = (state) => state.totalPayments
|
||||||
|
export const paymentModes = (state) => state.paymentModes
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user