Merge branch 'master' of https://github.com/brkcvn/akaunting into new-plans

This commit is contained in:
Burak Civan 2022-11-07 17:46:54 +03:00
commit 50d30db994
221 changed files with 10135 additions and 6474 deletions

View File

@ -369,8 +369,8 @@ abstract class Index extends Component
$buttons[] = [
'permission' => $this->permissionCreate,
'url' => route($this->importRoute, $this->importRouteParameters),
'text' => trans('import.title', ['type' => trans_choice($this->textPage ?? 'general.' . $prefix, 1)]),
'description' => trans('general.empty.actions.import', ['type' => strtolower(trans_choice($this->textPage ?? 'general.' . $prefix, 1))]),
'text' => trans('import.title', ['type' => trans_choice($this->textPage ?? 'general.' . $prefix, 2)]),
'description' => trans('general.empty.actions.import', ['type' => strtolower(trans_choice($this->textPage ?? 'general.' . $prefix, 2))]),
];
}

View File

@ -459,9 +459,9 @@ abstract class Show extends Component
// Attachment data..
$this->attachment = '';
if (!empty($attachment)) {
if (! empty($attachment)) {
$this->attachment = $attachment;
} else if (!empty($transaction)) {
} else if (! empty($transaction)) {
$this->attachment = $transaction->attachment;
}
@ -475,7 +475,7 @@ abstract class Show extends Component
protected function getTransactionTemplate($type, $transactionTemplate)
{
if (!empty($transactionTemplate)) {
if (! empty($transactionTemplate)) {
return $transactionTemplate;
}
@ -490,7 +490,7 @@ abstract class Show extends Component
protected function getLogo($logo)
{
if (!empty($logo)) {
if (! empty($logo)) {
return $logo;
}
@ -498,7 +498,7 @@ abstract class Show extends Component
$media = Media::find($media_id);
if (!empty($media)) {
if (! empty($media)) {
$path = $media->getDiskPath();
if (Storage::missing($path)) {
@ -544,7 +544,7 @@ abstract class Show extends Component
protected function getRouteButtonAddNew($type, $routeButtonAddNew)
{
if (!empty($routeButtonAddNew)) {
if (! empty($routeButtonAddNew)) {
return $routeButtonAddNew;
}
@ -553,7 +553,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'create', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -562,7 +562,7 @@ abstract class Show extends Component
protected function getRouteButtonEdit($type, $routeButtonEdit)
{
if (!empty($routeButtonEdit)) {
if (! empty($routeButtonEdit)) {
return $routeButtonEdit;
}
@ -571,7 +571,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'edit', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -580,7 +580,7 @@ abstract class Show extends Component
protected function getRouteButtonDuplicate($type, $routeButtonDuplicate)
{
if (!empty($routeButtonDuplicate)) {
if (! empty($routeButtonDuplicate)) {
return $routeButtonDuplicate;
}
@ -589,7 +589,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'duplicate', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -598,7 +598,7 @@ abstract class Show extends Component
protected function getRouteButtonPrint($type, $routeButtonPrint)
{
if (!empty($routeButtonPrint)) {
if (! empty($routeButtonPrint)) {
return $routeButtonPrint;
}
@ -607,7 +607,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'print', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -634,7 +634,7 @@ abstract class Show extends Component
protected function getSignedUrl($type, $signedUrl)
{
if (!empty($signedUrl)) {
if (! empty($signedUrl)) {
return $signedUrl;
}
@ -643,7 +643,7 @@ abstract class Show extends Component
$route = '';
if (!empty($alias)) {
if (! empty($alias)) {
$route .= $alias . '.';
}
@ -662,7 +662,7 @@ abstract class Show extends Component
protected function getRouteButtonEmail($type, $routeButtonEmail)
{
if (! empty($routeButtonEmail)) {
if (! empty($routeButtonEmail)) {
return $routeButtonEmail;
}
@ -680,7 +680,7 @@ abstract class Show extends Component
protected function getRouteButtonPdf($type, $routeButtonPdf)
{
if (!empty($routeButtonPdf)) {
if (! empty($routeButtonPdf)) {
return $routeButtonPdf;
}
@ -689,7 +689,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'pdf', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -698,7 +698,7 @@ abstract class Show extends Component
protected function getRouteButtonEnd($type, $routeButtonEnd)
{
if (!empty($routeButtonEnd)) {
if (! empty($routeButtonEnd)) {
return $routeButtonEnd;
}
@ -707,7 +707,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'end', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -716,7 +716,7 @@ abstract class Show extends Component
protected function getRouteButtonDelete($type, $routeButtonDelete)
{
if (!empty($routeButtonDelete)) {
if (! empty($routeButtonDelete)) {
return $routeButtonDelete;
}
@ -725,7 +725,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($type, 'destroy', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -734,7 +734,7 @@ abstract class Show extends Component
protected function getRouteContactShow($type, $routeContactShow)
{
if (!empty($routeContactShow)) {
if (! empty($routeContactShow)) {
return $routeContactShow;
}
@ -755,7 +755,7 @@ abstract class Show extends Component
}
}
if (!empty($route)) {
if (! empty($route)) {
return $route;
}
@ -764,13 +764,13 @@ abstract class Show extends Component
protected function getTextButtonAddNew($type, $textButtonAddNew)
{
if (!empty($textButtonAddNew)) {
if (! empty($textButtonAddNew)) {
return $textButtonAddNew;
}
$translation = $this->getTextFromConfig($type, 'transactions');
if (!empty($translation)) {
if (! empty($translation)) {
return trans('general.title.new', ['type' => trans_choice($translation, 1)]);
}
@ -779,7 +779,7 @@ abstract class Show extends Component
protected function getTextContentTitle($type, $textContentTitle)
{
if (!empty($textContentTitle)) {
if (! empty($textContentTitle)) {
return $textContentTitle;
}
@ -796,7 +796,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, $type . '_made', $default_key);
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -805,7 +805,7 @@ abstract class Show extends Component
protected function getTextNumber($type, $textNumber)
{
if (!empty($textNumber)) {
if (! empty($textNumber)) {
return $textNumber;
}
@ -814,13 +814,13 @@ abstract class Show extends Component
protected function getTextPaidAt($type, $textPaidAt)
{
if (!empty($textPaidAt)) {
if (! empty($textPaidAt)) {
return $textPaidAt;
}
$translation = $this->getTextFromConfig($type, 'paid_at', 'date');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -829,13 +829,13 @@ abstract class Show extends Component
protected function getTextAccount($type, $textAccount)
{
if (!empty($textAccount)) {
if (! empty($textAccount)) {
return $textAccount;
}
$translation = $this->getTextFromConfig($type, 'accounts', 'accounts', 'trans_choice');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -844,13 +844,13 @@ abstract class Show extends Component
protected function getTextCategory($type, $textCategory)
{
if (!empty($textCategory)) {
if (! empty($textCategory)) {
return $textCategory;
}
$translation = $this->getTextFromConfig($type, 'categories', 'categories', 'trans_choice');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -859,13 +859,13 @@ abstract class Show extends Component
protected function getTextPaymentMethods($type, $textPaymentMethods)
{
if (!empty($textPaymentMethods)) {
if (! empty($textPaymentMethods)) {
return $textPaymentMethods;
}
$translation = $this->getTextFromConfig($type, 'payment_methods', 'payment_methods', 'trans_choice');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -874,13 +874,13 @@ abstract class Show extends Component
protected function getTextReference($type, $textReference)
{
if (!empty($textReference)) {
if (! empty($textReference)) {
return $textReference;
}
$translation = $this->getTextFromConfig($type, 'reference', 'reference');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -889,13 +889,13 @@ abstract class Show extends Component
protected function getTextDescription($type, $textDescription)
{
if (!empty($textDescription)) {
if (! empty($textDescription)) {
return $textDescription;
}
$translation = $this->getTextFromConfig($type, 'description', 'description');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -904,13 +904,13 @@ abstract class Show extends Component
protected function getTextAmount($type, $textAmount)
{
if (!empty($textAmount)) {
if (! empty($textAmount)) {
return $textAmount;
}
$translation = $this->getTextFromConfig($type, 'amount', 'amount');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -919,7 +919,7 @@ abstract class Show extends Component
protected function getTextPaidBy($type, $textPaidBy)
{
if (!empty($textPaidBy)) {
if (! empty($textPaidBy)) {
return $textPaidBy;
}
@ -936,7 +936,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, 'paid_to_by', $default_key);
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -945,7 +945,7 @@ abstract class Show extends Component
protected function getTextRelatedTransansaction($type, $textRelatedTransansaction)
{
if (!empty($textRelatedTransansaction)) {
if (! empty($textRelatedTransansaction)) {
return $textRelatedTransansaction;
}
@ -962,7 +962,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, 'related_type', $default_key);
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -971,13 +971,13 @@ abstract class Show extends Component
protected function getTextRelatedDocumentNumber($type, $textRelatedDocumentNumber)
{
if (!empty($textRelatedDocumentNumber)) {
if (! empty($textRelatedDocumentNumber)) {
return $textRelatedDocumentNumber;
}
$translation = $this->getTextFromConfig($type, 'related_document_number', 'numbers');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -986,7 +986,7 @@ abstract class Show extends Component
protected function getTextRelatedContact($type, $textRelatedContact)
{
if (!empty($textRelatedContact)) {
if (! empty($textRelatedContact)) {
return $textRelatedContact;
}
@ -994,7 +994,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, 'related_contact', $default_key, 'trans_choice');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -1003,7 +1003,7 @@ abstract class Show extends Component
protected function getTextRelatedDocumentDate($type, $textRelatedDocumentDate)
{
if (!empty($textRelatedDocumentDate)) {
if (! empty($textRelatedDocumentDate)) {
return $textRelatedDocumentDate;
}
@ -1020,7 +1020,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, 'related_document_date', $default_key);
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -1029,7 +1029,7 @@ abstract class Show extends Component
protected function getTextRelatedDocumentAmount($type, $textRelatedDocumentAmount)
{
if (!empty($textRelatedDocumentAmount)) {
if (! empty($textRelatedDocumentAmount)) {
return $textRelatedDocumentAmount;
}
@ -1046,7 +1046,7 @@ abstract class Show extends Component
$translation = $this->getTextFromConfig($type, 'related_document_amount', $default_key);
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -1055,13 +1055,13 @@ abstract class Show extends Component
protected function getTextRelatedAmount($type, $textRelatedAmount)
{
if (!empty($textRelatedAmount)) {
if (! empty($textRelatedAmount)) {
return $textRelatedAmount;
}
$translation = $this->getTextFromConfig($type, 'related_amount', 'amount');
if (!empty($translation)) {
if (! empty($translation)) {
return $translation;
}
@ -1070,11 +1070,11 @@ abstract class Show extends Component
protected function routeDocumentShow($type, $routeDocumentShow)
{
if (!empty($routeDocumentShow)) {
if (! empty($routeDocumentShow)) {
return $routeDocumentShow;
}
if (!$this->transaction->document) {
if (! $this->transaction->document) {
return $routeDocumentShow;
}
@ -1083,7 +1083,7 @@ abstract class Show extends Component
$route = $this->getRouteFromConfig($this->transaction->document->type, 'show', $parameter);
if (!empty($route)) {
if (! empty($route)) {
return $route;
}

View File

@ -119,6 +119,7 @@ class Users extends Controller
}
$u = new \stdClass();
$u->role = $user->roles()->first();
$u->landing_pages = [];
event(new LandingPageShowing($u));
@ -354,4 +355,35 @@ class Users extends Controller
return response()->json($response);
}
/**
* Process request for reinviting the specified resource.
*
* @param Role $role
*
* @return Response
*/
public function landingPages(BaseRequest $request)
{
$role = false;
if ($request->has('role_id')) {
$role = Role::find($request->get('role_id'));
}
$u = new \stdClass();
$u->role = $role;
$u->landing_pages = [];
event(new LandingPageShowing($u));
$landing_pages = $u->landing_pages;
return response()->json([
'success' => true,
'error' => false,
'data' => $landing_pages,
'message' => 'Get role by landing pages..',
]);
}
}

View File

@ -86,8 +86,9 @@ class Transactions extends Controller
public function show(Transaction $transaction)
{
$title = $transaction->isIncome() ? trans_choice('general.receipts', 1) : trans('transactions.payment_made');
$real_type = $this->getRealTypeTransaction($transaction->type);
return view('banking.transactions.show', compact('transaction', 'title'));
return view('banking.transactions.show', compact('transaction', 'title', 'real_type'));
}
/**
@ -98,6 +99,7 @@ class Transactions extends Controller
public function create()
{
$type = request()->get('type', 'income');
$real_type = $this->getRealTypeTransaction($type);
$number = $this->getNextTransactionNumber();
@ -109,6 +111,7 @@ class Transactions extends Controller
return view('banking.transactions.create', compact(
'type',
'real_type',
'number',
'contact_type',
'account_currency_code',

View File

@ -16,14 +16,14 @@ class Dropzone
*/
public function handle($request, Closure $next)
{
if (!in_array($request->method(), ['POST', 'PATCH'])) {
if (! in_array($request->method(), ['POST', 'PATCH'])) {
return $next($request);
}
$multiple = false;
foreach ($request->all() as $key => $value) {
if (!is_array($value)) {
if (! is_array($value)) {
continue;
}
@ -36,8 +36,8 @@ class Dropzone
foreach ($value as $index => $parameter) {
// single file uploaded..
if (!is_array($parameter) && !$multiple) {
if (!Arr::has($value, 'dropzone')) {
if (! is_array($parameter) && !$multiple) {
if (! Arr::has($value, 'dropzone')) {
continue;
}
@ -49,15 +49,15 @@ class Dropzone
// multiple file uploaded..
if (is_array($parameter)) {
if (!Arr::has($parameter, 'dropzone')) {
if (! Arr::has($parameter, 'dropzone')) {
$files[] = $parameter;
continue;
}
} else if (is_object($parameter)) {
if (empty($parameter->dropzone)) {
$files[] = $parameter;
continue;
}
}

View File

@ -30,9 +30,13 @@ class UpdateUser extends Job implements ShouldUpdate
// Upload picture
if ($this->request->file('picture')) {
$this->deleteMediaModel($this->model, 'picture', $this->request);
$media = $this->getMedia($this->request->file('picture'), 'users');
$this->model->attachMedia($media, 'picture');
} elseif (! $this->request->file('picture') && $this->model->picture) {
$this->deleteMediaModel($this->model, 'picture', $this->request);
}
if ($this->request->has('roles')) {

View File

@ -26,7 +26,7 @@ class UpdateTransfer extends Job implements ShouldUpdate
$this->model->attachMedia($media, 'attachment');
}
} elseif (!$this->request->file('attachment') && $this->model->attachment) {
} elseif (! $this->request->file('attachment') && $this->model->attachment) {
$this->deleteMediaModel($this->model, 'attachment', $this->request);
}

View File

@ -34,7 +34,7 @@ class UpdateDocument extends Job implements ShouldUpdate
$this->model->attachMedia($media, 'attachment');
}
} elseif (!$this->request->file('attachment') && $this->model->attachment) {
} elseif (! $this->request->file('attachment') && $this->model->attachment) {
$this->deleteMediaModel($this->model, 'attachment', $this->request);
}

View File

@ -15,6 +15,8 @@ class AddLandingPages
public function handle(Event $event)
{
$user = user();
$role = ! empty($event->user->role) ? $event->user->role : false;
$routes = [
'dashboard' => [
'permission' => 'read-common-dashboards',
@ -79,7 +81,9 @@ class AddLandingPages
];
foreach($routes as $key => $route) {
if (!$user->can($route['permission'])) {
if ($role && ! $role->hasPermission($route['permission'])) {
continue;
} else if (! $user->can($route['permission'])) {
continue;
}

View File

@ -24,13 +24,18 @@ class SettingFieldCreated
$request = $event->request;
$document = $event->document;
if (!$request->has('setting')) {
if (! $request->has('setting')) {
return;
}
$type = $request->get('type');
$fields = $request->get('setting', []);
// remove company logo
if (! in_array('company_logo', $fields)) {
setting()->forget('company.logo');
}
foreach ($fields as $key => $value) {
if ($key == 'company_logo') {
if (Arr::has($value, 'dropzone')) {

View File

@ -24,13 +24,18 @@ class SettingFieldUpdated
$request = $event->request;
$document = $event->document;
if (!$request->has('setting')) {
if (! $request->has('setting')) {
return;
}
$type = $request->get('type');
$fields = $request->get('setting', []);
// remove company logo
if (! in_array('company_logo', $fields)) {
setting()->forget('company.logo');
}
foreach ($fields as $key => $value) {
if ($key == 'company_logo') {
if (Arr::has($value, 'dropzone')) {

View File

@ -0,0 +1,63 @@
<?php
namespace App\Listeners\Update\V30;
use App\Abstracts\Listeners\Update as Listener;
use App\Events\Install\UpdateFinished as Event;
use App\Traits\Permissions;
use Illuminate\Support\Facades\Log;
class Version309 extends Listener
{
use Permissions;
const ALIAS = 'core';
const VERSION = '3.0.9';
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(Event $event)
{
if ($this->skipThisUpdate($event)) {
return;
}
Log::channel('stdout')->info('Updating to 3.0.9 version...');
$this->updatePermissions();
Log::channel('stdout')->info('Done!');
}
public function updatePermissions(): void
{
Log::channel('stdout')->info('Updating permissions...');
$rows = [
'accountant' => [
'auth-profile' => 'r,u',
'common-reports' => 'r',
'widgets-account-balance' => 'r',
'widgets-bank-feeds' => 'r',
'widgets-cash-flow' => 'r',
'widgets-currencies' => 'r',
'widgets-expenses-by-category' => 'r',
'widgets-payables' => 'r',
'widgets-profit-loss' => 'r',
'widgets-receivables' => 'r',
],
];
Log::channel('stdout')->info('Attaching new permissions...');
// c=create, r=read, u=update, d=delete
$this->attachPermissionsByRoleNames($rows);
Log::channel('stdout')->info('Permissions updated.');
}
}

View File

@ -134,7 +134,7 @@ class User extends Authenticatable implements HasLocalePreference
if (!empty($value)) {
return $value;
} elseif (!$this->hasMedia('picture')) {
} elseif (! $this->hasMedia('picture')) {
return false;
}

View File

@ -364,6 +364,7 @@ class Transaction extends Model
{
$type = $this->getRealTypeOfRecurringTransaction($this->type);
$type = $this->getRealTypeOfTransferTransaction($type);
$type = $this->getRealTypeOfSplitTransaction($type);
$type = str_replace('-', '_', $type);

View File

@ -20,6 +20,7 @@ class Event extends Provider
'App\Listeners\Update\V30\Version304',
'App\Listeners\Update\V30\Version305',
'App\Listeners\Update\V30\Version307',
'App\Listeners\Update\V30\Version309',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\Auth\Login',

View File

@ -51,6 +51,23 @@ trait Transactions
return Str::endsWith($type, '-transfer');
}
public function isNotTransferTransaction(): bool
{
return ! $this->isTransferTransaction();
}
public function isSplitTransaction(): bool
{
$type = $this->type ?? $this->transaction->type ?? $this->model->type ?? Transaction::INCOME_TYPE;
return Str::endsWith($type, '-split');
}
public function isNotSplitTransaction(): bool
{
return ! $this->isSplitTransaction();
}
public function isDocumentTransaction(): bool
{
$document_id = $this->document_id ?? $this->transaction->document_id ?? $this->model->document_id ?? null;
@ -63,11 +80,6 @@ trait Transactions
return ! $this->isDocumentTransaction();
}
public function isNotTransferTransaction(): bool
{
return ! $this->isTransferTransaction();
}
public function getIncomeTypes(string $return = 'array'): string|array
{
return $this->getTransactionTypes(Transaction::INCOME_TYPE, $return);
@ -192,6 +204,15 @@ trait Transactions
];
}
public function getRealTypeTransaction(string $type): string
{
$type = $this->getRealTypeOfRecurringTransaction($type);
$type = $this->getRealTypeOfTransferTransaction($type);
$type = $this->getRealTypeOfSplitTransaction($type);
return $type;
}
public function getRealTypeOfRecurringTransaction(string $recurring_type): string
{
return Str::replace('-recurring', '', $recurring_type);
@ -202,6 +223,11 @@ trait Transactions
return Str::replace('-transfer', '', $transfer_type);
}
public function getRealTypeOfSplitTransaction(string $transfer_type): string
{
return Str::replace('-split', '', $transfer_type);
}
public function getNextTransactionNumber($suffix = ''): string
{
$prefix = setting('transaction' . $suffix . '.number_prefix');

View File

@ -14,7 +14,7 @@ trait Uploads
{
$path = '';
if (!$file || !$file->isValid()) {
if (! $file || ! $file->isValid()) {
return $path;
}
@ -38,7 +38,7 @@ trait Uploads
{
$path = '';
if (!$disk) {
if (! $disk) {
$disk = config('mediable.default_disk');
}
@ -61,10 +61,18 @@ trait Uploads
return;
}
$multiple = true;
if ($medias instanceof \App\Models\Common\Media) {
$multiple = false;
$medias = [$medias];
}
$already_uploaded = [];
if ($request && isset($request['uploaded_' . $parameter])) {
$uploaded = $request['uploaded_' . $parameter];
$uploaded = ($multiple) ? $request['uploaded_' . $parameter] : [$request['uploaded_' . $parameter]];
if (count($medias) == count($uploaded)) {
return;

View File

@ -26,6 +26,12 @@ class EmptyPage extends Component
/** @var string */
public $title;
/** @var string */
public $createButtonTitle;
/** @var string */
public $importButtonTitle;
/** @var string */
public $description;
@ -75,9 +81,9 @@ class EmptyPage extends Component
*/
public function __construct(
string $alias = '', string $group = '', string $page = '',
string $title = '', string $description = '', string $docsCategory = 'accounting',
string $image = '', string $imageEmptyPage = '',
bool $checkPermissionCreate = true, string $permissionCreate = '',
string $title = '', string $createButtonTitle = '', string $importButtonTitle = '',
string $description = '', string $docsCategory = 'accounting', string $image = '',
string $imageEmptyPage = '', bool $checkPermissionCreate = true, string $permissionCreate = '',
array $buttons = [], bool $hideButtonCreate = false, bool $hideButtonImport = false,
bool $hideDocsDescription = false, string $importRoute = '', array $importRouteParameters = []
) {
@ -91,6 +97,9 @@ class EmptyPage extends Component
$this->docsCategory = $docsCategory;
$this->title = $this->getTitle($title);
$this->createButtonTitle = $createButtonTitle;
$this->importButtonTitle = $importButtonTitle;
$this->description = $this->getDescription($description);
$this->imageEmptyPage = $imageEmptyPage;
@ -276,7 +285,11 @@ class EmptyPage extends Component
$route = route($page . '.create');
}
$title = $this->getTitle(null, 1);
$title = $this->createButtonTitle;
if (! $title) {
$title = $this->getTitle(null, 1);
}
return [
'url' => $route,
@ -292,7 +305,11 @@ class EmptyPage extends Component
$importRoute = $this->getImportRoute($this->importRoute);
$importRouteParameters = $this->getImportRouteParameters($this->importRouteParameters);
$title = $this->getTitle();
$title = $this->importButtonTitle;
if (! $title) {
$title = $this->getTitle();
}
return [
'url' => route($importRoute, $importRouteParameters),

View File

@ -15,6 +15,14 @@ class Country extends Form
*/
public function render()
{
if (empty($this->name)) {
$this->name = 'country';
}
if (empty($this->selected) && empty($this->getParentData('model'))) {
$this->selected = setting('company.country');
}
return view('components.form.group.country');
}
}

View File

@ -11,7 +11,7 @@ class File extends Form
public $formGroupClass = 'sm:col-span-3';
public $custom_attributes = [
'dropzone-class' => 'form-file dropzone-column w-1/2 h-32.5',
'dropzone-class' => 'form-file dropzone-column sm:w-1/2 h-32.5',
];
/**

View File

@ -18,6 +18,10 @@ class PaymentMethod extends Form
*/
public function render()
{
if (empty($this->name)) {
$this->name = 'payment_method';
}
$this->payment_methods = Modules::getPaymentMethods();
if (empty($this->selected) && empty($this->getParentData('model'))) {

View File

@ -5,6 +5,7 @@ namespace App\View\Components;
use App\Abstracts\View\Component;
use App\Traits\Modules;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
class Suggestions extends Component
@ -71,6 +72,10 @@ class Suggestions extends Component
return [];
}
return $modules;
if (count($modules) < 3) {
return $modules;
}
return Arr::random($modules, 2);
}
}

View File

@ -52,35 +52,53 @@ class Tips extends Component
$view = 'components.tips.relative';
}
if ($this->tips->count() > 1) {
$view = 'components.tips.relative';
}
return view($view);
}
protected function setTips($tips)
{
if (!empty($tips)) {
if (! empty($tips)) {
$this->tips = $tips;
}
if (!$path = Route::current()->uri()) {
if (! $path = Route::current()->uri()) {
return;
}
$path = Str::replace('{company_id}/', '', $path);
if (!$tips = $this->getTips($path)) {
if (! $tips = $this->getTips($path)) {
return;
}
$rows = collect();
shuffle($tips);
foreach ($tips as $tip) {
if ($tip->position != $this->position) {
continue;
}
if (!empty($tip->alias) && $this->moduleIsEnabled($tip->alias)) {
if (! empty($tip->alias) && $this->moduleIsEnabled($tip->alias)) {
continue;
}
$this->tips->push($tip);
if (Str::contains($tip->action, '{company_id}')) {
$tip->action = Str::replace('{company_id}', company_id(), $tip->action);
}
$rows->push($tip);
}
if ($rows->count()) {
$row = $rows->shuffle()->first();
$this->tips->push($row);
}
}
}

View File

@ -14,7 +14,7 @@ class Menu extends Presenter
{
return PHP_EOL . '<div class="navbar-inner">
<!-- Collapse -->
<div class="collapse" id="sidenav-collapse-main">
<div id="sidenav-collapse-main">
<!-- Nav items -->
<ul class="flex flex-col justify-center">' . PHP_EOL;
}

268
composer.lock generated
View File

@ -907,16 +907,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.240.1",
"version": "3.240.8",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "34c6bf82f337cadf31475c88ca70e8302afc624b"
"reference": "72a4381a59f42720b033865d265aa64c3190cc13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/34c6bf82f337cadf31475c88ca70e8302afc624b",
"reference": "34c6bf82f337cadf31475c88ca70e8302afc624b",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/72a4381a59f42720b033865d265aa64c3190cc13",
"reference": "72a4381a59f42720b033865d265aa64c3190cc13",
"shasum": ""
},
"require": {
@ -995,9 +995,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.240.1"
"source": "https://github.com/aws/aws-sdk-php/tree/3.240.8"
},
"time": "2022-10-24T19:03:23+00:00"
"time": "2022-11-02T18:44:20+00:00"
},
{
"name": "balping/json-raw-encoder",
@ -1302,23 +1302,23 @@
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.0.6",
"version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16"
"reference": "bf44b757feb8ba1734659029357646466ded673e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16",
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/bf44b757feb8ba1734659029357646466ded673e",
"reference": "bf44b757feb8ba1734659029357646466ded673e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0,<4.5"
"phpunit/phpunit": "^8.5.14|^9"
},
"suggest": {
"dflydev/markdown": "~1.0",
@ -1348,9 +1348,9 @@
}
],
"support": {
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.0.6"
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.0"
},
"time": "2018-12-13T10:34:14+00:00"
"time": "2022-10-31T15:35:43+00:00"
},
{
"name": "bkwld/cloner",
@ -1865,16 +1865,16 @@
},
{
"name": "dflydev/dot-access-data",
"version": "v3.0.1",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
"reference": "0992cc19268b259a39e86f296da5f0677841f42c"
"reference": "f41715465d65213d644d3141a6a93081be5d3549"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c",
"reference": "0992cc19268b259a39e86f296da5f0677841f42c",
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549",
"reference": "f41715465d65213d644d3141a6a93081be5d3549",
"shasum": ""
},
"require": {
@ -1885,7 +1885,7 @@
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
"scrutinizer/ocular": "1.6.0",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^3.14"
"vimeo/psalm": "^4.0.0"
},
"type": "library",
"extra": {
@ -1934,9 +1934,9 @@
],
"support": {
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1"
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2"
},
"time": "2021-08-13T13:06:58+00:00"
"time": "2022-10-27T11:44:00+00:00"
},
{
"name": "doctrine/cache",
@ -3397,16 +3397,16 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.2",
"version": "2.4.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "3148458748274be1546f8f2809a6c09fe66f44aa"
"reference": "67c26b443f348a51926030c83481b85718457d3d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/3148458748274be1546f8f2809a6c09fe66f44aa",
"reference": "3148458748274be1546f8f2809a6c09fe66f44aa",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"shasum": ""
},
"require": {
@ -3496,7 +3496,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.2"
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
},
"funding": [
{
@ -3512,7 +3512,7 @@
"type": "tidelift"
}
],
"time": "2022-10-25T13:49:28+00:00"
"time": "2022-10-26T14:07:24+00:00"
},
{
"name": "hoa/compiler",
@ -4858,16 +4858,16 @@
},
{
"name": "laravel/framework",
"version": "v9.36.4",
"version": "v9.38.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "15ce569fd93124e8e2257c24e3ed85b9ef9951d6"
"reference": "abf198e443e06696af3f356b44de67c0fa516107"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/15ce569fd93124e8e2257c24e3ed85b9ef9951d6",
"reference": "15ce569fd93124e8e2257c24e3ed85b9ef9951d6",
"url": "https://api.github.com/repos/laravel/framework/zipball/abf198e443e06696af3f356b44de67c0fa516107",
"reference": "abf198e443e06696af3f356b44de67c0fa516107",
"shasum": ""
},
"require": {
@ -5040,7 +5040,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2022-10-20T16:11:03+00:00"
"time": "2022-11-01T14:05:55+00:00"
},
{
"name": "laravel/sanctum",
@ -5431,16 +5431,16 @@
},
{
"name": "league/commonmark",
"version": "2.3.5",
"version": "2.3.6",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257"
"reference": "857afc47ce113454bd629037213378ba3219dd40"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257",
"reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/857afc47ce113454bd629037213378ba3219dd40",
"reference": "857afc47ce113454bd629037213378ba3219dd40",
"shasum": ""
},
"require": {
@ -5460,7 +5460,7 @@
"erusev/parsedown": "^1.0",
"ext-json": "*",
"github/gfm": "0.29.0",
"michelf/php-markdown": "^1.4",
"michelf/php-markdown": "^1.4 || ^2.0",
"nyholm/psr7": "^1.5",
"phpstan/phpstan": "^1.8.2",
"phpunit/phpunit": "^9.5.21",
@ -5533,7 +5533,7 @@
"type": "tidelift"
}
],
"time": "2022-07-29T10:59:45+00:00"
"time": "2022-10-30T16:45:38+00:00"
},
{
"name": "league/config",
@ -7225,16 +7225,16 @@
},
{
"name": "nunomaduro/termwind",
"version": "v1.14.1",
"version": "v1.14.2",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
"reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b"
"reference": "9a8218511eb1a0965629ff820dda25985440aefc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/termwind/zipball/86fc30eace93b9b6d4c844ba6de76db84184e01b",
"reference": "86fc30eace93b9b6d4c844ba6de76db84184e01b",
"url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc",
"reference": "9a8218511eb1a0965629ff820dda25985440aefc",
"shasum": ""
},
"require": {
@ -7291,7 +7291,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
"source": "https://github.com/nunomaduro/termwind/tree/v1.14.1"
"source": "https://github.com/nunomaduro/termwind/tree/v1.14.2"
},
"funding": [
{
@ -7307,7 +7307,7 @@
"type": "github"
}
],
"time": "2022-10-17T15:20:29+00:00"
"time": "2022-10-28T22:51:32+00:00"
},
{
"name": "nyholm/psr7",
@ -9524,16 +9524,16 @@
},
{
"name": "sentry/sentry",
"version": "3.10.0",
"version": "3.11.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "2fdbda9b3569df08dd4a300db8a563d0ec7241f9"
"reference": "91bd6e54d9352754bbdd1d800d2b88618f8130d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2fdbda9b3569df08dd4a300db8a563d0ec7241f9",
"reference": "2fdbda9b3569df08dd4a300db8a563d0ec7241f9",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/91bd6e54d9352754bbdd1d800d2b88618f8130d4",
"reference": "91bd6e54d9352754bbdd1d800d2b88618f8130d4",
"shasum": ""
},
"require": {
@ -9578,7 +9578,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.10.x-dev"
"dev-master": "3.11.x-dev"
}
},
"autoload": {
@ -9612,7 +9612,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
"source": "https://github.com/getsentry/sentry-php/tree/3.10.0"
"source": "https://github.com/getsentry/sentry-php/tree/3.11.0"
},
"funding": [
{
@ -9624,28 +9624,28 @@
"type": "custom"
}
],
"time": "2022-10-19T09:28:02+00:00"
"time": "2022-10-25T14:36:50+00:00"
},
{
"name": "sentry/sentry-laravel",
"version": "3.0.0",
"version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
"reference": "1b4458396b6f4cd0e8a63cfb9f8fc38240da1c86"
"reference": "09d936531a934688b74bd605487c8a79ffe784be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1b4458396b6f4cd0e8a63cfb9f8fc38240da1c86",
"reference": "1b4458396b6f4cd0e8a63cfb9f8fc38240da1c86",
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/09d936531a934688b74bd605487c8a79ffe784be",
"reference": "09d936531a934688b74bd605487c8a79ffe784be",
"shasum": ""
},
"require": {
"illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0",
"nyholm/psr7": "^1.0",
"php": "^7.2 | ^8.0",
"sentry/sdk": "^3.1",
"sentry/sentry": "^3.9",
"sentry/sdk": "^3.3",
"sentry/sentry": "^3.10",
"symfony/psr-http-message-bridge": "^1.0 | ^2.0"
},
"conflict": {
@ -9705,7 +9705,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-laravel/issues",
"source": "https://github.com/getsentry/sentry-laravel/tree/3.0.0"
"source": "https://github.com/getsentry/sentry-laravel/tree/3.0.1"
},
"funding": [
{
@ -9717,7 +9717,7 @@
"type": "custom"
}
],
"time": "2022-10-19T08:46:34+00:00"
"time": "2022-10-27T11:40:07+00:00"
},
{
"name": "simple-icons/simple-icons",
@ -9925,16 +9925,16 @@
},
{
"name": "symfony/console",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "1f89cab8d52c84424f798495b3f10342a7b1a070"
"reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/1f89cab8d52c84424f798495b3f10342a7b1a070",
"reference": "1f89cab8d52c84424f798495b3f10342a7b1a070",
"url": "https://api.github.com/repos/symfony/console/zipball/b0b910724a0a0326b4481e4f8a30abb2dd442efb",
"reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb",
"shasum": ""
},
"require": {
@ -10000,7 +10000,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v6.0.14"
"source": "https://github.com/symfony/console/tree/v6.0.15"
},
"funding": [
{
@ -10016,7 +10016,7 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:02:12+00:00"
"time": "2022-10-26T21:42:20+00:00"
},
{
"name": "symfony/css-selector",
@ -10152,16 +10152,16 @@
},
{
"name": "symfony/error-handler",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "81e57c793d9a573f29f8b5296d5d8ee4602badcb"
"reference": "f000c166cb3ee32c4c822831a79260a135cd59b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/81e57c793d9a573f29f8b5296d5d8ee4602badcb",
"reference": "81e57c793d9a573f29f8b5296d5d8ee4602badcb",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/f000c166cb3ee32c4c822831a79260a135cd59b5",
"reference": "f000c166cb3ee32c4c822831a79260a135cd59b5",
"shasum": ""
},
"require": {
@ -10203,7 +10203,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v6.0.14"
"source": "https://github.com/symfony/error-handler/tree/v6.0.15"
},
"funding": [
{
@ -10219,7 +10219,7 @@
"type": "tidelift"
}
],
"time": "2022-10-07T08:02:12+00:00"
"time": "2022-10-28T16:22:58+00:00"
},
{
"name": "symfony/event-dispatcher",
@ -10446,16 +10446,16 @@
},
{
"name": "symfony/http-client",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "ec183a587e3ad47f03cf1572d4b8437e0fc3e923"
"reference": "af84893895ce7637a4b60fd3de87fe9e44286a21"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/ec183a587e3ad47f03cf1572d4b8437e0fc3e923",
"reference": "ec183a587e3ad47f03cf1572d4b8437e0fc3e923",
"url": "https://api.github.com/repos/symfony/http-client/zipball/af84893895ce7637a4b60fd3de87fe9e44286a21",
"reference": "af84893895ce7637a4b60fd3de87fe9e44286a21",
"shasum": ""
},
"require": {
@ -10510,7 +10510,7 @@
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-client/tree/v6.0.14"
"source": "https://github.com/symfony/http-client/tree/v6.0.15"
},
"funding": [
{
@ -10526,7 +10526,7 @@
"type": "tidelift"
}
],
"time": "2022-10-11T15:20:43+00:00"
"time": "2022-10-28T16:22:58+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -10608,16 +10608,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "e8aa505d35660877e6695d68be53df2ceac7cf57"
"reference": "a93829f4043fdcddebabd8433bdb46c2dcaefe06"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8aa505d35660877e6695d68be53df2ceac7cf57",
"reference": "e8aa505d35660877e6695d68be53df2ceac7cf57",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/a93829f4043fdcddebabd8433bdb46c2dcaefe06",
"reference": "a93829f4043fdcddebabd8433bdb46c2dcaefe06",
"shasum": ""
},
"require": {
@ -10663,7 +10663,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v6.0.14"
"source": "https://github.com/symfony/http-foundation/tree/v6.0.15"
},
"funding": [
{
@ -10679,20 +10679,20 @@
"type": "tidelift"
}
],
"time": "2022-10-02T08:16:40+00:00"
"time": "2022-10-12T09:44:26+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc"
"reference": "22c820abe601e7328b56cec86626617139266f48"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc",
"reference": "f9fc93c4f12e2fd7dea37f7b5840deb34e9037fc",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/22c820abe601e7328b56cec86626617139266f48",
"reference": "22c820abe601e7328b56cec86626617139266f48",
"shasum": ""
},
"require": {
@ -10772,7 +10772,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v6.0.14"
"source": "https://github.com/symfony/http-kernel/tree/v6.0.15"
},
"funding": [
{
@ -10788,20 +10788,20 @@
"type": "tidelift"
}
],
"time": "2022-10-12T07:43:45+00:00"
"time": "2022-10-28T18:00:40+00:00"
},
{
"name": "symfony/mailer",
"version": "v6.0.13",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "6269c872ab4792e8facbf8af27a2fbee8429f217"
"reference": "5eaa3f1404cafa842e953ae16c35757b7356fb32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/6269c872ab4792e8facbf8af27a2fbee8429f217",
"reference": "6269c872ab4792e8facbf8af27a2fbee8429f217",
"url": "https://api.github.com/repos/symfony/mailer/zipball/5eaa3f1404cafa842e953ae16c35757b7356fb32",
"reference": "5eaa3f1404cafa842e953ae16c35757b7356fb32",
"shasum": ""
},
"require": {
@ -10846,7 +10846,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/mailer/tree/v6.0.13"
"source": "https://github.com/symfony/mailer/tree/v6.0.15"
},
"funding": [
{
@ -10862,7 +10862,7 @@
"type": "tidelift"
}
],
"time": "2022-08-29T06:49:22+00:00"
"time": "2022-10-28T16:22:58+00:00"
},
{
"name": "symfony/mailgun-mailer",
@ -12031,16 +12031,16 @@
},
{
"name": "symfony/routing",
"version": "v6.0.11",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "434b64f7d3a582ec33fcf69baaf085473e67d639"
"reference": "3b7384fad32c6d0e1919b5bd18a69fbcfc383508"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/434b64f7d3a582ec33fcf69baaf085473e67d639",
"reference": "434b64f7d3a582ec33fcf69baaf085473e67d639",
"url": "https://api.github.com/repos/symfony/routing/zipball/3b7384fad32c6d0e1919b5bd18a69fbcfc383508",
"reference": "3b7384fad32c6d0e1919b5bd18a69fbcfc383508",
"shasum": ""
},
"require": {
@ -12099,7 +12099,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v6.0.11"
"source": "https://github.com/symfony/routing/tree/v6.0.15"
},
"funding": [
{
@ -12115,7 +12115,7 @@
"type": "tidelift"
}
],
"time": "2022-07-20T13:45:53+00:00"
"time": "2022-10-18T13:11:57+00:00"
},
{
"name": "symfony/sendgrid-mailer",
@ -12266,16 +12266,16 @@
},
{
"name": "symfony/string",
"version": "v6.0.14",
"version": "v6.0.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "3db7da820a6e4a584b714b3933c34c6a7db4d86c"
"reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/3db7da820a6e4a584b714b3933c34c6a7db4d86c",
"reference": "3db7da820a6e4a584b714b3933c34c6a7db4d86c",
"url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771",
"reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771",
"shasum": ""
},
"require": {
@ -12331,7 +12331,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v6.0.14"
"source": "https://github.com/symfony/string/tree/v6.0.15"
},
"funding": [
{
@ -13247,16 +13247,16 @@
},
{
"name": "filp/whoops",
"version": "2.14.5",
"version": "2.14.6",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
"reference": "f7948baaa0330277c729714910336383286305da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
"reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
"url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da",
"reference": "f7948baaa0330277c729714910336383286305da",
"shasum": ""
},
"require": {
@ -13306,7 +13306,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.14.5"
"source": "https://github.com/filp/whoops/tree/2.14.6"
},
"funding": [
{
@ -13314,7 +13314,7 @@
"type": "github"
}
],
"time": "2022-01-07T12:00:00+00:00"
"time": "2022-11-02T16:23:29+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@ -13760,16 +13760,16 @@
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.17",
"version": "9.2.18",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
"reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
"reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a",
"shasum": ""
},
"require": {
@ -13825,7 +13825,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18"
},
"funding": [
{
@ -13833,7 +13833,7 @@
"type": "github"
}
],
"time": "2022-08-30T12:24:04+00:00"
"time": "2022-10-27T13:35:33+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -14078,16 +14078,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.5.25",
"version": "9.5.26",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
"reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"shasum": ""
},
"require": {
@ -14160,7 +14160,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26"
},
"funding": [
{
@ -14176,7 +14176,7 @@
"type": "tidelift"
}
],
"time": "2022-09-25T03:44:45+00:00"
"time": "2022-10-28T06:00:21+00:00"
},
{
"name": "sebastian/cli-parser",
@ -15350,16 +15350,16 @@
},
{
"name": "spatie/laravel-ignition",
"version": "1.6.0",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
"reference": "c21309ebf6657e0c38083afac8af9baa12885676"
"reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/c21309ebf6657e0c38083afac8af9baa12885676",
"reference": "c21309ebf6657e0c38083afac8af9baa12885676",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b",
"reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b",
"shasum": ""
},
"require": {
@ -15436,7 +15436,7 @@
"type": "github"
}
],
"time": "2022-10-25T08:38:04+00:00"
"time": "2022-10-26T17:39:54+00:00"
},
{
"name": "theseer/tokenizer",
@ -15490,16 +15490,16 @@
},
{
"name": "wnx/laravel-stats",
"version": "v2.9.2",
"version": "v2.10.0",
"source": {
"type": "git",
"url": "https://github.com/stefanzweifel/laravel-stats.git",
"reference": "6ddbc57bfe1ee2b8155e9c6ea14c9a501c110d57"
"reference": "70004fd7bdb2eaebb69c419c5ea9ec292627c074"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/stefanzweifel/laravel-stats/zipball/6ddbc57bfe1ee2b8155e9c6ea14c9a501c110d57",
"reference": "6ddbc57bfe1ee2b8155e9c6ea14c9a501c110d57",
"url": "https://api.github.com/repos/stefanzweifel/laravel-stats/zipball/70004fd7bdb2eaebb69c419c5ea9ec292627c074",
"reference": "70004fd7bdb2eaebb69c419c5ea9ec292627c074",
"shasum": ""
},
"require": {
@ -15557,7 +15557,7 @@
],
"support": {
"issues": "https://github.com/stefanzweifel/laravel-stats/issues",
"source": "https://github.com/stefanzweifel/laravel-stats/tree/v2.9.2"
"source": "https://github.com/stefanzweifel/laravel-stats/tree/v2.10.0"
},
"funding": [
{
@ -15569,7 +15569,7 @@
"type": "github"
}
],
"time": "2022-07-05T19:28:39+00:00"
"time": "2022-10-29T05:48:56+00:00"
}
],
"aliases": [],

View File

@ -10,15 +10,15 @@ return [
'minor' => '0',
'patch' => '7',
'patch' => '9',
'build' => '',
'status' => 'Stable',
'date' => '11-October-2022',
'date' => '03-November-2022',
'time' => '12:00',
'time' => '17:00',
'zone' => 'GMT +3',

View File

@ -134,8 +134,10 @@ class Permissions extends Seeder
'accountant' => [
'admin-panel' => 'r',
'api' => 'r',
'auth-profile' => 'r,u',
'common-dashboards' => 'r',
'common-items' => 'r',
'common-reports' => 'r',
'purchases-bills' => 'r',
'purchases-vendors' => 'r',
'sales-customers' => 'r',
@ -153,6 +155,14 @@ class Permissions extends Seeder
'modules-item' => 'r',
'modules-my' => 'r',
'modules-tiles' => 'r',
'widgets-account-balance' => 'r',
'widgets-bank-feeds' => 'r',
'widgets-cash-flow' => 'r',
'widgets-currencies' => 'r',
'widgets-expenses-by-category' => 'r',
'widgets-payables' => 'r',
'widgets-profit-loss' => 'r',
'widgets-receivables' => 'r',
],
];

7293
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -37,7 +37,7 @@
"popper.js": "^1.16.1",
"swiper": "^7.3.1",
"tailwind": "^4.0.0",
"tailwindcss": "^3.0.23",
"tailwindcss": "^3.2.1",
"v-money": "^0.8.1",
"vee-validate": "^2.2.15",
"vue": "^2.6.10",

7
presets.js vendored
View File

@ -20,7 +20,7 @@ module.exports = {
safelist: [
{
pattern: /./,
pattern: /^[^/&]*$/,
},
{
pattern: /^p-/,
@ -244,6 +244,7 @@ module.exports = {
spacing: {
'modal': '610px',
'500': '500px',
'5.5': '1.30rem',
'9.5': '2.45rem',
'12.5': '3.2rem',
@ -323,6 +324,10 @@ module.exports = {
backgroundPosition: {
'0-full': ' 0 100%'
},
minHeight: {
'500': '500px',
}
},

View File

@ -426,14 +426,16 @@ document.querySelectorAll('[data-truncate-marquee]').forEach((truncate) => {
//disable/enable icons ejected from data-truncate-marquee, HTML of icons ejected from parent element (data-truncate-marquee)
document.querySelectorAll('[data-index-icon]').forEach((defaultText) => {
let icon_parents_element = defaultText.parentElement.parentElement.parentElement;
if (icon_parents_element.classList.contains('flex')) {
icon_parents_element.appendChild(defaultText);
} else {
icon_parents_element.parentElement.appendChild(defaultText);
if (icon_parents_element.classList.contains('overflow-x-hidden')) {
icon_parents_element.parentElement.appendChild(defaultText);
} else {
defaultText.parentElement.appendChild(defaultText);
}
}
// defaultText.parentElement.parentElement.parentElement.parentElement.appendChild(defaultText);
});
//disable/enable icons ejected from data-truncate-marquee

4585
public/css/app.css vendored

File diff suppressed because it is too large Load Diff

112
public/css/print.css vendored
View File

@ -379,48 +379,6 @@ html[dir='rtl'] .text-right
/*--General Finish--*/
/*--Print Template Default Start--*/
.col-60
{
display: inline-block;
width: 60%;
vertical-align: top;
}
.col-58
{
display: inline-block;
width: 58%;
vertical-align: top;
}
.col-50
{
display: inline-block;
width: 50%;
vertical-align: top;
}
.col-42
{
display: inline-block;
width: 42%;
vertical-align: top;
}
.col-40
{
display: inline-block;
width: 40%;
vertical-align: top;
}
.col-16
{
display: inline-block;
max-width: 16%;
vertical-align: top;
}
.col-100
{
display: inline-block;
@ -805,8 +763,78 @@ html[dir='rtl'] .print-heading {
.custom-product-hunt {
display: none;
}
.classic-invoice {
margin-top: 10px;
}
.col-60
{
display: inline-block;
width: 100%;
vertical-align: top;
}
.col-50
{
display: inline-block;
width: 100%;
vertical-align: top;
}
.col-40
{
display: inline-block;
width: 100%;
vertical-align: top;
}
.col-58
{
display: inline-block;
width: 58%;
vertical-align: top;
}
.col-42
{
display: inline-block;
width: 42%;
vertical-align: top;
}
.col-16
{
display: inline-block;
max-width: 16%;
vertical-align: top;
}
/*--Print --*/
@media (min-width: 991px) {
.col-60
{
display: inline-block;
width: 60%;
vertical-align: top;
}
.col-50
{
display: inline-block;
width: 50%;
vertical-align: top;
}
.col-40
{
display: inline-block;
width: 40%;
vertical-align: top;
}
.classic-invoice {
margin-top: unset;
}
}
@media (max-width: 1600px) {
.p-index-right {
padding: 0;

View File

@ -520,8 +520,27 @@ export default {
this.add_new.html = '';
this.add_new_html = null;
this.contact_list.push({
key: contact.id,
value: (contact.title) ? contact.title : (contact.display_name) ? contact.display_name : contact.name,
type: (contact.type) ? contact.type : 'customer',
id: contact.id,
name: (contact.title) ? contact.title : (contact.display_name) ? contact.display_name : contact.name,
email: (contact.email) ? contact.email : '',
tax_number: (contact.tax_number) ? contact.tax_number : '',
currency_code: (contact.currency_code) ? contact.currency_code : '',
phone: (contact.phone) ? contact.phone : '',
website: (contact.website) ? contact.website : '',
address: (contact.address) ? contact.address : '',
city: (contact.city) ? contact.city : '',
zip_code: (contact.zip_code) ? contact.zip_code : '',
state: (contact.state) ? contact.state : '',
country: (contact.country) ? contact.country : '',
location: (contact.location) ? contact.location : '',
reference: (contact.reference) ? contact.reference : ''
});
this.$emit('new', contact);
this.$emit('change', this.contact);
let documentClasses = document.body.classList;

View File

@ -1,5 +1,5 @@
<template>
<div :id="'dropzone-' + _uid" class="dropzone dz-clickable" :class="[preview == 'single' ? 'dropzone-single': 'dropzone-multiple', singleWidthClasses ? 'w-full': 'w-37']">
<div :id="'dropzone-' + _uid" class="dropzone dz-clickable" :class="[preview == 'single' ? 'dropzone-single': 'dropzone-multiple', singleWidthClasses ? 'w-full': 'sm:w-37']">
<div class="fallback">
<div class="custom-file">
<input type="file" class="custom-file-input" :id="'projectCoverUploads' + _uid" :multiple="multiple">

View File

@ -7,7 +7,7 @@
tabindex="-1"
role="dialog"
:aria-hidden="!show">
<div class="w-full my-10 m-auto flex flex-col" :class="modalDialogClass ? modalDialogClass : 'max-w-md'">
<div class="w-full my-10 m-auto flex flex-col px-2 sm:px-0" :class="modalDialogClass ? modalDialogClass : 'max-w-md'">
<slot name="modal-content">
<div class="modal-content">
<div class="p-5 bg-body rounded-tl-lg rounded-tr-lg">

View File

@ -7,7 +7,7 @@
tabindex="-1"
role="dialog"
:aria-hidden="!show">
<div class="w-full my-10 m-auto flex flex-col" :class="modalDialogClass ? modalDialogClass : 'max-w-md'">
<div class="w-full my-10 m-auto flex flex-col px-2 sm:px-0" :class="modalDialogClass ? modalDialogClass : 'max-w-md'">
<slot name="modal-content">
<div class="modal-content">
<div class="p-5 bg-body rounded-tl-lg rounded-tr-lg">

View File

@ -1,7 +1,7 @@
<template>
<div class="sm:col-span-6 space-y-8 sm:space-y-2">
<div class="flex flex-wrap lg:flex-nowrap items-center space-y-3 lg:space-y-0" :class="{ 'justify-between sm:justify-start': frequency == 'custom' }">
<div class="w-60 px-2 text-sm">
<div class="sm:col-span-6 space-y-6 sm:space-y-2">
<div class="flex flex-wrap lg:flex-nowrap items-center space-y-1 lg:space-y-0" :class="{ 'justify-start': frequency == 'custom' }">
<div class="w-24 sm:w-60 px-0 sm:px-2 text-sm">
{{ frequencyText }}
</div>
@ -14,7 +14,7 @@
</el-option>
</el-select>
<div class="w-20 px-2 text-sm text-center" v-if="frequency == 'custom'">
<div class="w-20 sm:w-auto px-2 text-sm text-center" v-if="frequency == 'custom'">
{{ frequencyEveryText }}
</div>
@ -30,8 +30,8 @@
</el-select>
</div>
<div class="flex flex-wrap lg:flex-nowrap items-center space-y-3 lg:space-y-0" :class="{ 'justify-between sm:justify-start': limit !== 'never' }">
<div class="w-60 px-2 text-sm">
<div class="flex flex-wrap lg:flex-nowrap items-center space-y-3 lg:space-y-0" :class="{ 'justify-start': limit !== 'never' }">
<div class="w-24 sm:w-60 px-0 sm:px-2 text-sm">
{{ startText }}
</div>

View File

@ -2,8 +2,7 @@
<div
@click="tryClose"
data-notify="container"
class="alert alert-notify fixed flex items-center justify-between ltr:right-4 rtl:left-4 p-4 text-black font-bold rounded-lg z-30"
style="width: 500px;"
class="alert alert-notify fixed w-full sm:w-500 flex items-center justify-between ltr:right-0 rtl:left-0 sm:ltr:right-4 sm:rtl:left-4 p-4 text-black font-bold rounded-lg z-30"
:class="[
{ 'alert-with-icon': icon },
verticalAlign,

View File

@ -30,6 +30,7 @@ const app = new Vue({
form: new Form('user'),
bulk_action: new BulkAction('users'),
show_password: false,
landing_pages: null,
}
},
@ -51,5 +52,25 @@ const app = new Vue({
this.show_password = false;
}
},
onChangeRole(role_id) {
if (! role_id) {
return;
}
let role_promise = Promise.resolve(window.axios.get(url + '/auth/users/landingpages', {
params: {
role_id: role_id
}
}));
role_promise.then(response => {
if (response.data.success) {
this.landing_pages = response.data.data;
}
})
.catch(error => {
});
},
}
});

View File

@ -70,7 +70,7 @@
</div>
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<button type="submit" @click="onSubmit($event)" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
@ -106,7 +106,8 @@
methods: {
// Form Submit
onSubmit() {
onSubmit(event) {
event.preventDefault();
this.form.submit();
},

View File

@ -11,7 +11,7 @@
</select>
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<button type="submit" @click="onSubmit($event)" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
@ -58,7 +58,8 @@
},
methods: {
// Form Submit
onSubmit() {
onSubmit(event) {
event.preventDefault();
this.form.submit();
},

View File

@ -41,7 +41,7 @@
</div>
<div class="sm:col-span-6 flex items-center justify-end mt-3.5">
<button type="submit" @click="onSubmit" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<button type="submit" @click="onSubmit($event)" :disabled="form.loading" id="next-button" class="relative flex items-center justify-center bg-green hover:bg-green-700 text-white px-6 py-1.5 text-base rounded-lg disabled:bg-green-100">
<i v-if="form.loading" class="animate-submit delay-[0.28s] absolute w-2 h-2 rounded-full left-0 right-0 -top-3.5 m-auto before:absolute before:w-2 before:h-2 before:rounded-full before:animate-submit before:delay-[0.14s] after:absolute after:w-2 after:h-2 after:rounded-full after:animate-submit before:-left-3.5 after:-right-3.5 after:delay-[0.42s]"></i>
<span :class="[{'opacity-0': form.loading}]">
Next
@ -77,7 +77,8 @@
},
methods: {
// Form Submit
onSubmit() {
onSubmit(event) {
event.preventDefault();
this.form.submit();
},

View File

@ -66,6 +66,33 @@ const app = new Vue({
if (typeof this.form.password !== 'undefined') {
this.form.password = '';
}
if (document.querySelector('[data-tabs-swiper]').childElementCount > 2) {
document.querySelectorAll('[data-tabs-slide]').forEach((item) => {
item.classList.add('swiper-slide');
});
document.querySelector('[data-tabs-swiper]').classList.add('swiper', 'swiper-links');
let html = `
<div class="swiper-wrapper">
${document.querySelector('[data-tabs-swiper]').innerHTML}
</div>
<div class="swiper-button-next top-3 right-0">
<span class="material-icons">chevron_right</span>
</div>
<div class="swiper-button-prev top-3 left-0">
<span class="material-icons">chevron_left</span>
</div>
`;
document.querySelector('[data-tabs-swiper]').innerHTML = html;
}
new Swiper(".swiper-links", {
loop: false,

View File

@ -50,7 +50,7 @@ const app = new Vue({
},
item_name_input: false,
price_name_input: false,
quantity_name_input: false
quantity_name_input: false,
}
},
@ -141,24 +141,41 @@ const app = new Vue({
});
},
onSmallWidthColumn(item) {
this.$refs[item].$el.classList.remove('sm:col-span-6');
this.$refs[item].$el.classList.add('sm:col-span-3');
},
onFullWidthColumn(item) {
this.$refs[item].$el.classList.add('sm:col-span-6');
this.$refs[item].$el.classList.remove('sm:col-span-3');
},
settingsInvoice() {
if (this.form.item_name == 'custom') {
this.item_name_input = true;
this.onSmallWidthColumn("item_name");
} else {
this.item_name_input = false;
this.onFullWidthColumn("item_name");
}
if (this.form.price_name == 'custom') {
this.price_name_input = true;
this.onSmallWidthColumn("price_name");
} else {
this.price_name_input = false;
this.onFullWidthColumn("price_name");
}
if (this.form.quantity_name == 'custom') {
this.quantity_name_input = true;
this.onSmallWidthColumn("quantity_name");
} else {
this.quantity_name_input = false;
this.onFullWidthColumn("quantity_name");
}
},
// Change currency get money

View File

@ -61,7 +61,7 @@
></akaunting-date>
</div>
<div class="sm:col-span-3 grid gap-10">
<div class="sm:col-span-3 grid gap-y-4">
<div class="sm:col-span-3">
<base-input not-required :label="translations.company.address" :error="onFailErrorGet('address')">
<textarea class="w-full text-sm px-3 py-2.5 mt-1 rounded-lg border border-light-gray text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple" name="address" data-name="address" rows="3" :placeholder="translations.company.address" v-model="company.address"></textarea>
@ -90,7 +90,7 @@
{{ translations.company.logo }}
</label>
<akaunting-dropzone-file-upload ref="dropzoneWizard" class="form-file dropzone-column w-2/5" style="height:12.2rem" preview-classes="single" :attachments="logo" :v-model="logo">
<akaunting-dropzone-file-upload ref="dropzoneWizard" class="form-file dropzone-column" style="width: 10.8rem; height: 10.8rem;" preview-classes="single" :attachments="logo" :v-model="logo">
</akaunting-dropzone-file-upload>
<div v-if="onFailErrorGet('logo')" class="text-red text-sm mt-1 block" v-html="onFailErrorGet('logo')"></div>

View File

@ -27,7 +27,7 @@
</thead>
<tbody data-table-body>
<tr v-for="(item, index) in currencies" :key="index" data-table-list class="relative flex items-center border-b hover:bg-gray-100 px-1 flex-wrap group">
<tr v-for="(item, index) in currencies" :key="index" data-table-list class="relative flex items-center border-b hover:bg-gray-100 px-1 flex-wrap group/actions">
<td :class="current_tab == index ? 'hidden' : ''" class="w-4/12 ltr:pr-6 rtl:pl-6 py-4 ltr:text-left rtl:text-right whitespace-nowrap text-sm font-medium text-black">
{{ item.name }}
@ -37,7 +37,7 @@
</span>
<div id="wizard-currency-default" role="tooltip"
class="inline-block absolute z-20 py-1 px-2 text-sm font-medium rounded-lg bg-white text-gray-900 w-auto border border-gray-200 shadow-sm tooltip-content whitespace-normal opacity-0 invisible"
class="inline-block absolute z-20 py-1 px-2 text-sm font-medium rounded-lg bg-white text-gray-900 w-auto border border-gray-200 shadow-sm whitespace-normal opacity-0 invisible"
>
{{ translations.currencies.default }}
<div
@ -56,20 +56,20 @@
<td :class="current_tab == index ? 'hidden' : ''" class="w-4/12 relative ltr:pr-6 rtl:pl-6 py-4 ltr:text-right rtl:text-left whitespace-nowrap text-sm font-medium text-black">
{{ item.rate }}
<div class="absolute ltr:right-12 rtl:left-12 -top-4 hidden items-center group-hover:flex">
<button type="button" class="relative bg-white hover:bg-gray-100 border py-0.5 px-1 cursor-pointer index-actions " @click="onEditItem(item, index)">
<div class="absolute ltr:right-12 rtl:left-12 -top-4 hidden items-center group-hover/actions:flex">
<button type="button" class="relative bg-white hover:bg-gray-100 border py-0.5 px-1 cursor-pointer group/tooltip index-actions" @click="onEditItem(item, index)">
<span class="material-icons-outlined text-purple text-lg">edit</span>
<div class="inline-block absolute invisible z-20 py-1 px-2 text-sm font-medium text-gray-900 bg-white rounded-lg border border-gray-200 shadow-sm opacity-0 whitespace-nowrap tooltip-content -top-10 -left-2" data-tooltip-placement="top">
<div class="inline-block absolute invisible z-20 py-1 px-2 text-sm font-medium text-gray-900 bg-white rounded-lg border border-gray-200 shadow-sm opacity-0 whitespace-nowrap -top-10 -left-2 group-hover/tooltip:opacity-100 group-hover/tooltip:visible" data-tooltip-placement="top">
<span>{{ translations.currencies.edit }}</span>
<div class="absolute w-2 h-2 -bottom-1 before:content-[' '] before:absolute before:w-2 before:h-2 before:bg-white before:border-gray-200 before:transform before:rotate-45 before:border before:border-t-0 before:border-l-0" data-popper-arrow></div>
</div>
</button>
<button type="button" class="relative bg-white hover:bg-gray-100 border py-0.5 px-1 cursor-pointer index-actions " @click="onClickDelete(item)">
<button type="button" class="relative bg-white hover:bg-gray-100 border py-0.5 px-1 cursor-pointer group/tooltip index-actions" @click="onClickDelete(item)">
<span class="material-icons-outlined text-purple text-lg">delete</span>
<div class="inline-block absolute invisible z-20 py-1 px-2 text-sm font-medium text-gray-900 bg-white rounded-lg border border-gray-200 shadow-sm opacity-0 whitespace-nowrap tooltip-content -top-10 -left-2" data-tooltip-placement="top">
<div class="inline-block absolute invisible z-20 py-1 px-2 text-sm font-medium text-gray-900 bg-white rounded-lg border border-gray-200 shadow-sm opacity-0 whitespace-nowrap -top-10 -left-2 group-hover/tooltip:opacity-100 group-hover/tooltip:visible" data-tooltip-placement="top">
<span>{{ translations.currencies.delete }}</span>
<div class="absolute w-2 h-2 -bottom-1 before:content-[' '] before:absolute before:w-2 before:h-2 before:bg-white before:border-gray-200 before:transform before:rotate-45 before:border before:border-t-0 before:border-l-0" data-popper-arrow></div>
</div>

View File

@ -6,75 +6,21 @@
@tailwind utilities;
@layer base {
/* form */
.has-error input, .has-error select, .has-error textarea {
border: 1px solid #cc0000 !important;
}
.input-money {
@apply w-full text-sm px-3 py-2.5 mt-1 rounded-lg border border-light-gray text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple;
}
.disabled-money input, .disabled-money {
background-color:transparent !important;
border: none;
}
[type="radio"] {
@apply text-purple focus:outline-none focus:ring-purple focus:border-purple;
}
@layer container {
.container {
@apply px-4 lg:px-0;
}
}
@layer utilities {
.max-h-0 {
max-height: 0;
}
.h-0 {
height: auto;
}
/* form */
/* index */
.index-actions:hover .tooltip-content {
@apply opacity-100 visible;
.index-actions {
@apply ltr:[&:nth-child(2)]:border-l ltr:[&:nth-child(3)]:border-l-0 rtl:[&:nth-child(2)]:border-r rtl:[&:nth-child(3)]:border-r-0 ltr:[&:first-child]:rounded-tl-lg ltr:[&:first-child]:rounded-bl-lg ltr:[&:first-child]:border-r-0 rtl:[&:first-child]:rounded-tr-lg rtl:[&:first-child]:rounded-br-lg rtl:[&:first-child]:border-l-0 ltr:[&:last-child]:rounded-tr-lg ltr:[&:last-child]:rounded-br-lg ltr:[&:last-child]:border-l-0 rtl:[&:last-child]:rounded-tl-lg rtl:[&:last-child]:rounded-bl-lg rtl:[&:last-child]:border-r-0;
}
html[dir='ltr'] .index-actions:first-child {
@apply rounded-tl-lg rounded-bl-lg border-r-0;
}
html[dir='rtl'] .index-actions:first-child {
@apply rounded-tr-lg rounded-br-lg border-l-0;
}
html[dir='ltr'] .index-actions:last-child {
@apply rounded-tr-lg rounded-br-lg border-l-0;
}
html[dir='rtl'] .index-actions:last-child {
@apply rounded-tl-lg rounded-bl-lg border-r-0;
}
html[dir='ltr'] .index-actions:nth-child(2) {
@apply border-l;
}
html[dir='rtl'] .index-actions:nth-child(2) {
@apply border-r;
}
html[dir='ltr'] .index-actions:nth-child(3) {
@apply border-l-0;
}
html[dir='rtl'] .index-actions:nth-child(3) {
@apply border-r-0;
}
[data-dropdown-actions] {
transform: unset !important;
}
@ -95,7 +41,34 @@
.tabs-link:hover::before {
@apply opacity-100 visible;
}
/* index */
}
@layer base {
/* form */
.has-error input, .has-error select, .has-error textarea {
border: 1px solid #cc0000 !important;
}
.has-error .el-select__tags input {
border: transparent !important;
}
.input-money {
@apply w-full text-sm px-3 py-2.5 mt-1 rounded-lg border border-light-gray text-black placeholder-light-gray bg-white disabled:bg-gray-200 focus:outline-none focus:ring-transparent focus:border-purple;
}
.disabled-money input, .disabled-money {
background-color:transparent !important;
border: none;
}
[type="radio"] {
@apply text-purple focus:outline-none focus:ring-purple focus:border-purple;
}
/* form */
/* index */
.active-tabs {
border-color: transparent !important;
}
@ -212,6 +185,42 @@
@apply px-0 lg:pl-6 lg:pr-6;
}
/* widget container name will change as lg:px-12 on database. When container class name change on database, this code will clean */
/* after the upgrade tailwind 3.2.1, this tags font-weight changed. Added this block for now */
button, input, optgroup, select, textarea {
@apply font-normal;
}
/* after the upgrade tailwind 3.2.1, this tags font-weight changed. Added this block for now */
/* changelog modal styling for update center */
.change-log-modal .badge {
@apply px-3 py-2 rounded-3xl text-xs font-medium bg-green text-white;
}
.change-log-modal h2 {
@apply text-2xl font-bold text-purple mb-2;
}
.change-log-modal h3 {
@apply text-lg font-bold text-purple mb-2;
}
.change-log-modal ul {
@apply list-disc list-inside mb-2;
}
.change-log-modal li {
@apply text-base text-purple;
}
.change-log-modal a {
@apply text-green underline;
}
/* changelog modal styling for update center */
#button-monthly {
margin-left: unset !important;
}
}
/* menu */
@ -422,11 +431,16 @@ html[dir='rtl'] .el-picker-panel__sidebar {
right: unset !important;
}
.flatpickr-day.selected {
background-color: #55588B !important;
.flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange, .flatpickr-day.selected.inRange, .flatpickr-day.startRange.inRange, .flatpickr-day.endRange.inRange, .flatpickr-day.selected:focus, .flatpickr-day.startRange:focus, .flatpickr-day.endRange:focus, .flatpickr-day.selected:hover, .flatpickr-day.startRange:hover, .flatpickr-day.endRange:hover, .flatpickr-day.selected.prevMonthDay, .flatpickr-day.startRange.prevMonthDay, .flatpickr-day.endRange.prevMonthDay, .flatpickr-day.selected.nextMonthDay, .flatpickr-day.startRange.nextMonthDay, .flatpickr-day.endRange.nextMonthDay {
background: #55588B !important;
border-color: #55588B !important;
}
.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)), .flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)), .flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
-webkit-box-shadow: -10px 0 0 #888aae !important;
box-shadow: -10px 0 0 #888aae !important;
}
.el-date-editor .el-range-input, .el-date-editor .el-range-input::placeholder {
color: #424242;
}
@ -470,9 +484,16 @@ html[dir='rtl'] .el-scrollbar__wrap {
}
/* apex-chart cash-flow */
.apex-chart-cash-flow .apexcharts-legend {
width: 24rem !important;
width: 100% !important;
justify-content: space-around !important;
padding: 0;
flex-wrap: nowrap !important;
}
.apex-chart-cash-flow .apexcharts-legend-series {
width: 8rem;
text-align: center;
margin: 0 !important;
}
.apex-chart-cash-flow .apexcharts-toolbar {
@ -592,6 +613,17 @@ html[dir="rtl"] .lines-radius-border thead td:last-child {
}
}
@media only screen and (max-width: 480px) {
.dashboard-picker .el-picker-panel__body {
width: 100% !important;
margin-left: unset !important;
}
.dashboard-picker.el-date-range-picker.el-popper.has-sidebar {
width: 100% !important;
}
}
#nprogress .bar {
background: #A6A8C9 !important;
height: 5px !important;
@ -620,6 +652,17 @@ html[dir="rtl"] .lines-radius-border thead td:last-child {
padding: 4px 15px;
}
/* document body selected */
::-moz-selection {
background: #55588B;
color: #FFFFFF;
}
::selection {
background: #55588B;
color: #FFFFFF;
}
/* document body selected */
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button {
-webkit-appearance: none;

View File

@ -4,13 +4,30 @@ return [
'change_language' => 'تغيير اللغة',
'last_login' => 'آخر تسجيل دخول :time',
'notifications' => [
'counter' => '{0} ليس لديك تنبيهات|{1} لديك :count تنبيهات|[2,*] لديك :count تنبيهات',
'counter' => '{0} ليس لديك تنبيهات|{1} لديك :count تنبيه جديد|[2,*] لديك :count تنبيهات جديدة',
'new_apps' => '{1} :count تطبيق جديد تم نشره<unk> [2,*] :count تطبيقات جديدة تم نشرها',
'overdue_invoices' => '{1} :count فاتورة متأخرة|[2,*] :count فواتير متأخرة',
'upcoming_bills' => '{1} :count فاتورة قادمة|[2,*] :count فواتير قادمة',
'view_all' => 'عرض الكل'
'view_all' => 'عرض الكل',
'exports' => [
'completed' => '{1} :count انتهى التصدير <unk> [2,*] :count تم الانتهاء من الصادرات',
'failed' => '{1} :count فشل التصدير <unk> [2,*] :count فشل الصادرات',
],
'imports' => [
'completed' => '{1} :count الاستيراد النهائي <unk> [2,*] :count الواردات النهائية',
'failed' => '{1} :count فشل استيراد <unk> [2,*] :count فشل الواردات',
],
],
'docs_link' => 'https://akaunting.com/docs',
'support_link' => 'https://akaunting.com/support',
'favorite' => [
'added_favorite' => 'تمت الإضافة إلى المفضلة',
'add_favorite' => 'إضافة إلى المفضلة',
],
];

View File

@ -4,10 +4,12 @@ return [
'invoice_number' => 'رقم فاتورة البيع',
'invoice_date' => 'تاريخ فاتورة البيع',
'invoice_amount' => 'مبلغ الفاتورة',
'total_price' => 'السعر الإجمالي',
'due_date' => 'تاريخ الاستحقاق',
'order_number' => 'رقم الطلب',
'bill_to' => 'فاتورة الشراء إلى',
'cancel_date' => 'تاريخ الإلغاء',
'quantity' => 'الكمية',
'price' => 'السعر',
@ -18,6 +20,7 @@ return [
'total' => 'الإجمالي',
'item_name' => 'اسم الصنف|أسماء الأصناف',
'recurring_invoices' => 'فاتورة متكررة|الفواتير المتكررة',
'show_discount' => 'خصم :discount%',
'add_discount' => 'إضافة خصم',
@ -31,7 +34,7 @@ return [
'mark_paid' => 'التحديد كمدفوع',
'mark_sent' => 'التحديد كمرسل',
'mark_viewed' => 'وضع علامة مشاهدة',
'mark_cancelled' => 'العلامه ألغيت',
'mark_cancelled' => 'تعيين كملغي',
'download_pdf' => 'تحميل PDF',
'send_mail' => 'إرسال بريد إلكتروني',
'all_invoices' => 'سجّل الدخول لعرض جميع الفواتير',
@ -39,6 +42,11 @@ return [
'send_invoice' => 'أرسل فاتورة',
'get_paid' => 'إحصل عالمبلغ',
'accept_payments' => 'قبول المدفوعات اﻹلكترونية',
'payment_received' => 'تم استلام الدفع',
'form_description' => [
'billing' => 'تظهر تفاصيل الفواتير في الفاتورة. يتم استخدام تاريخ الفاتورة في لوحة التحكم والتقارير. حدد التاريخ الذي تتوقع الحصول عليه كتاريخ الاستحقاق.',
],
'messages' => [
'email_required' => 'لا يوجد عنوان البريد إلكتروني لهذا العميل!',
@ -57,4 +65,21 @@ return [
],
],
'slider' => [
'create' => ':user أنشأ هذه الفاتورة في :date',
'create_recurring' => ':user أنشأ هذا القالب المتكرر في :date',
'schedule' => 'كرر كل :interval :frequency منذ :date',
'children' => 'تم إنشاء :count فواتير تلقائياً',
],
'share' => [
'show_link' => 'يمكن لعميلك عرض الفاتورة على هذا الرابط',
'copy_link' => 'انسخ الرابط وشاركه مع عميلك.',
'success_message' => 'تم نسخ رابط المشاركة إلى الحافظة!',
],
'sticky' => [
'description' => 'أنت تقوم بمعاينة كيف سيرى العميل نسخة الويب من الفاتورة الخاصة بك.',
],
];

View File

@ -0,0 +1,52 @@
<?php
return [
'profile' => 'الملف الشخصي',
'invoices' => 'الفواتير',
'payments' => 'المدفوعات',
'payment_received' => 'تم استلام الدفع، شكراً لك!',
'create_your_invoice' => 'أنشئ الآن الفاتورة الخاصة بك - إنها مجانية',
'get_started' => 'ابدأ مجاناً',
'billing_address' => 'عنوان الفوترة',
'see_all_details' => 'شاهد جميع تفاصيل الحساب',
'all_payments' => 'تسجيل الدخول لعرض جميع الدفعات',
'received_date' => 'تاريخ الاستلام',
'last_payment' => [
'title' => 'آخر دفع تم',
'description' => 'لقد قمت بدفع هذه الدفعة في :date',
'not_payment' => 'لم تقم بدفع أي دفعة حتى الآن.',
],
'outstanding_balance' => [
'title' => 'الرصيد المستحق',
'description' => 'رصيدك المستحق هو:',
'not_payment' => 'ليس لديك رصيد مستحق حتى الآن.',
],
'latest_invoices' => [
'title' => 'أحدث الفواتير',
'description' => ':date - لقد فوترت برقم الفاتورة :invoice_number.',
'no_data' => 'ليس لديك أي فواتير، حتى الآن.',
],
'invoice_history' => [
'title' => 'تاريخ الفاتورة',
'description' => ':date - لقد فوترت برقم الفاتورة :invoice_number.',
'no_data' => 'ليس لديك سجل فواتير، حتى الآن.',
],
'payment_history' => [
'title' => 'سجل الدفع',
'description' => ':date - قمت بدفع مبلغ :amount.',
'invoice_description'=> ':date - قمت بدفع مبلغ :amount مقابل الفاتورة رقم :invoice_number.',
'no_data' => 'ليس لديك سجل مدفوعات، حتى الآن.',
],
'payment_detail' => [
'description' => 'لقد قمت بدفع :amount في :date لهذه الفاتورة.'
],
];

View File

@ -12,7 +12,7 @@ return [
'invoiced_at' => 'تاريخ الفاتورة',
'issued_at' => 'تاريخ الإصدار',
'symbol_first' => 'موضع الرمز',
'reconciled' => 'التسوية',
'reconciled' => 'تمت التسوية',
'expense_account' => 'من حساب',
'income_account' => 'إلى حساب',
'recurring' => 'متكرر',

View File

@ -0,0 +1,16 @@
<?php
return [
'form_description' => [
'general' => 'ستظهر معلومات الاتصال للبائع في الفواتير و صفحاتهم الشخصية. يمكنك إضافة معلومات الاتصال الخاصة بهم وشعاراتهم لاستخدامها في الفواتير.',
'billing' => 'يظهر رقم الضريبة في كل فاتورة تم اصدارها لك. العملة المحددة تصبح العملة الافتراضية لهذا البائع.',
'address' => 'العنوان مطلوب للفواتير، لذا تحتاج إلى إضافة تفاصيل عنوان الفوترة للمورد الخاص بك.',
],
'no_records' => [
'bills' => 'لا توجد فاتورة لهذا المورد حتى الآن. قم بإنشاء واحدة جديدة الآن.',
'transactions' => 'لا توجد معاملة لهذا المورد حتى الآن. أنشئ معاملة جديدة الآن.',
],
];

View File

@ -2,7 +2,8 @@
return [
'account_name' => 'Oрганизация',
'account_name' => 'Име на сметка',
'account_balance' => 'Салдо',
'number' => 'Номер',
'opening_balance' => 'Начално салдо',
'current_balance' => 'Текущо салдо',
@ -10,5 +11,21 @@ return [
'bank_phone' => 'Телефон на банката',
'bank_address' => 'Адрес на банката',
'default_account' => 'Акаунт по подразбиране',
'incoming' => 'Входящ',
'outgoing' => 'Изходящ',
'see_performance' => 'Ефективност',
'create_report' => 'Ако желаете да разгледате ефективността. Можете да създадете нова справка, Приходи срещу Разходи например.',
'banks' => 'Банка|Банки',
'credit_cards' => 'Кредитна карта|Кредитни карти',
'form_description' => [
'general' => 'Използвайте типа кредитна карта за отрицателен начален баланс. Номерът е от съществено значение за правилното съгласуване на сметките. Акаунтът по подразбиране ще записва всички транзакции, ако не е избрано друго.',
'bank' => 'Може да имате няколко банкови сметки в повече от една банка. Записването на информация за вашата банка ще улесни съпоставянето на транзакциите във вашата банка.',
],
'no_records' => [
'transactions' => 'Все още няма транзакция в тази сметка. Създайте нова сега.',
'transfers' => 'Все още няма трансфер към/от тази сметка. Създайте нов сега.',
],
];

View File

@ -2,20 +2,34 @@
return [
'auth' => 'Удостоверяване',
'profile' => 'Профил',
'logout' => 'Изход',
'login' => 'Вход',
'forgot' => 'Забравен',
'login_to' => 'Влезте, за да стартирате сесия',
'remember_me' => 'Запомни ме',
'forgot_password' => 'Забравих си паролата',
'reset_password' => 'Възстановяване на парола',
'change_password' => 'Смяна на паролата',
'enter_email' => 'Въведете е-мейл адрес',
'current_email' => 'Текущ имейл адрес',
'reset' => 'Възстановяване',
'never' => 'никога',
'landing_page' => 'Главна страница',
'personal_information' => 'Лична информация',
'register_user' => 'Регистриране на потребители',
'register' => 'Регистриране',
'form_description' => [
'personal' => 'Линк ще бъде изпратен на новия потребител, така че се уверете, че имейл адресът е правилен. Те ще могат да въведат своята парола.',
'assign' => 'Потребителят ще има достъп до избраните компании. Можете да ограничите разрешенията от страницата <a href=":url" class="border-b border-black">роли</a>.',
'preferences' => 'Изберете езика по подразбиране на потребителя. Можете също да зададете целевата страница, след като потребителят влезе.',
],
'password' => [
'pass' => 'Парола',
'pass_confirm' => 'Потвърждение на паролата',
'current' => 'Парола',
'current_confirm' => 'Потвърждение на паролата',
'new' => 'Нова парола',
@ -25,17 +39,55 @@ return [
'error' => [
'self_delete' => 'Грешка: Не може да изтриете себе си!',
'self_disable' => 'Грешка: Не може да деактивирате себе си!',
'unassigned' => 'Грешка: Не може да бъде отменена фирмата! Компанията :company трябва да има поне един потребител.',
'no_company' => 'Грешка: Няма компания, добавена към вашия акаунт. Моля, обърнете се към системния администратор.',
],
'login_redirect' => 'Проверката е извършена! Вие сте пренасочени ...',
'failed' => 'Неуспешно удостоверяване на потребител.',
'throttle' => 'Твърде много опити за логин. Моля, опитайте отново след :seconds секунди.',
'disabled' => 'Този акаунт е забранен. Моля обърнете се към системния администратор.',
'notification' => [
'message_1' => 'Вие получавате този имейл, защото сме получили искане за нулиране на паролата за вашия акаунт.',
'message_2' => 'Ако не сте поискали възстановяване на паролата, не са необходими по-нататъшни действия.',
'button' => 'Възстановяване на парола',
'message_1' => 'Вие получавате този имейл, защото сме получили искане за нулиране на паролата за вашия акаунт.',
'message_2' => 'Ако не сте поискали възстановяване на паролата, не са необходими по-нататъшни действия.',
'button' => 'Възстановяване на парола',
],
'invitation' => [
'message_1' => 'Получавате този имейл, защото сте поканени да се присъедините към Akaunting.',
'message_2' => 'Ако не искате да се присъедините, не са необходими допълнителни действия.',
'button' => 'Да започнем',
],
'information' => [
'invoice' => 'Създавайте фактури лесно',
'reports' => 'Получавайте подробни отчети',
'expense' => 'Следете всички разходи',
'customize' => 'Персонализирайте вашия Akaunting',
],
'roles' => [
'admin' => [
'name' => 'Администратор',
'description' => 'Те получават пълен достъп до вашия Akaunting, включително клиенти, фактури, отчети, настройки и приложения.',
],
'manager' => [
'name' => 'Мениджър',
'description' => 'Те получават пълен достъп до вашия Akaunting, но не могат да управляват потребители и приложения.',
],
'customer' => [
'name' => 'Клиент',
'description' => 'Те могат да имат достъп до портала за клиенти и да плащат своите фактури онлайн чрез методите на плащане, които сте задали.',
],
'accountant' => [
'name' => 'Счетоводител',
'description' => 'Те имат достъп до фактури, транзакции, отчети и създават записи в дневника.',
],
'employee' => [
'name' => 'Служител',
'description' => 'Те могат да създават искания за разходи и да проследяват времето за възложените проекти, но могат да виждат само собствената си информация.',
],
],
];

View File

@ -4,6 +4,7 @@ return [
'bill_number' => 'Номер на фактурата',
'bill_date' => 'Дата фактура',
'bill_amount' => 'Сума на сметката',
'total_price' => 'Обща цена',
'due_date' => 'Падежна дата',
'order_number' => 'Номер на поръчка',
@ -18,11 +19,13 @@ return [
'total' => 'Общо',
'item_name' => 'Име на артикул | Имена на артикули',
'recurring_bills' => 'Периодична фактура|Периодични фактури',
'show_discount' => ':discount% отстъпка',
'add_discount' => 'Добави отстъпка',
'discount_desc' => 'на междинна сума',
'payment_made' => 'Извършено плащане',
'payment_due' => 'Дължимото плащане',
'amount_due' => 'Дължимата сума',
'paid' => 'Платени',
@ -38,6 +41,10 @@ return [
'receive_bill' => 'Приеми фактура',
'make_payment' => 'Направи плащане',
'form_description' => [
'billing' => 'Данните за плащане се появяват в сметката ви. Датата на фактурата се използва в таблото и отчетите. Изберете датата, на която очаквате да платите, като дата на падеж.',
],
'messages' => [
'draft' => 'Това е <b>ЧЕРНОВА</b> фактура и няма да бъде отразена в графиките след като бъде получена.',

View File

@ -20,4 +20,7 @@ return [
'unreconcile' => 'Наистина ли искате да <b>деконсолидирате</b> избрания запис?|Наистина ли искате да <b>деконсолидирате</b> избраните записи?',
],
'success' => [
'general' => ':count запис :type.',
],
];

View File

@ -0,0 +1,11 @@
<?php
return [
'collapse' => 'Свий',
'form_description' => [
'general' => 'Категорията ви помага да класифицирате вашите артикули, приходи, разходи и други записи.',
],
];

View File

@ -11,4 +11,12 @@ return [
'disable_active' => 'Грешка: Невъзможно деактивиране на активна компания, моля, първо я променете!',
],
'form_description' => [
'general' => 'Тази информация се вижда в записите, които създавате.',
'billing' => 'Данъчният номер се появява във всяка фактура. Таблото за управление и отчетите се показват във валутата по подразбиране.',
'address' => 'Адресът ще бъде използван във фактурите, сметките и другите записи, които издавате.',
],
'skip_step' => 'Пропусни тази стъпка',
];

View File

@ -1,6 +1,7 @@
<?php
return [
'AF' => 'Афганистан',
'AX' => 'Оландски острови',
'AL' => 'Албания',
@ -119,6 +120,7 @@ return [
'KZ' => 'Казахстан',
'KE' => 'Кения',
'KI' => 'Кирибати',
'XK' => 'Косово',
'KW' => 'Кувейт',
'KG' => 'Киргизстан',
'LA' => 'Лаос',
@ -250,4 +252,5 @@ return [
'YE' => 'Йемен',
'ZM' => 'Замбия',
'ZW' => 'Зимбабве',
];

View File

@ -8,11 +8,20 @@ return [
'decimal_mark' => 'Десетичен знак',
'thousands_separator' => 'Разделител за хилядни',
'precision' => 'Точност',
'conversion' => 'Преобразуване на валута: :price (:currency_code) при :currency_rate',
'symbol' => [
'symbol' => 'Символ',
'position' => 'Символ позиция',
'before' => 'Преди сума',
'after' => 'След сума',
]
],
'form_description' => [
'general' => 'Валутата по подразбиране се използва в таблото за управление и отчетите. За други валути курсът трябва да е по-нисък от 1 за по-слаби валути и по-висок от 1 за по-силни валути.',
],
'no_currency' => 'Без валута',
'create_currency' => 'Създайте нова валута и редактирайте по всяко време от настройките.',
'new_currency' => 'Нова валута',
];

View File

@ -2,11 +2,29 @@
return [
'can_login' => 'Вход?',
'user_created' => 'Създаден потребител',
'can_login' => 'Вход?',
'can_login_description' => 'Изпратете покана до този потребител да влезе в клиентския портал.',
'user_created' => 'Създаден потребител',
'client_portal_description' => 'Порталът за клиенти е среда, в която можете да споделяте транзакции и фактури с вашите клиенти, където те проследяват взаимоотношенията си с вашия бизнес и плащат, и влизат, когато пожелаят; с тяхната парола',
'error' => [
'email' => 'Този имейл вече е бил регистриран.',
'email' => 'Този имейл вече е бил регистриран.',
],
'client_portal_text' => [
'can' => 'Този клиент може да влезе в клиентския портал.',
'cant' => 'Този клиент не може да влезе в клиентския портал.',
],
'form_description' => [
'general' => 'Информацията за контакт на вашия клиент ще се показва във фактурите и техните профили. Можете също така да позволите на вашите клиенти да влизат, за да проследяват фактурите, които им изпращате, като поставите отметка в квадратчето по-долу.',
'billing' => 'Данъчният номер фигурира във всяка фактура, издадена на клиента. Избраната валута става валута по подразбиране за този клиент.',
'address' => 'Адресът се изисква за фактурите, така че трябва да добавите подробности за адреса за фактуриране на вашия клиент.',
],
'no_records' => [
'invoices' => 'Все още няма фактура за този клиент. Създайте нов сега.',
'transactions' => 'Все още няма превод от този клиент. Създайте нов сега.',
],
];

View File

@ -8,4 +8,8 @@ return [
'disable_last' => 'Грешка: Не ви е позволено да деактивирате това табло! Моля, първо създайте ново!',
],
'form_description' => [
'general' => 'Изберете потребителите, които искате да имат достъп до новото табло.',
],
];

View File

@ -8,7 +8,7 @@ return [
'categories' => [
'deposit' => 'Депозит',
'sales' => 'Продажби',
'sales' => 'Приходи',
],
'currencies' => [

View File

@ -0,0 +1,87 @@
<?php
return [
'edit_columns' => 'Редактиране на колона',
'empty_items' => 'Не сте добавили продукт',
'grand_total' => 'Обща сума',
'accept_payment_online' => 'Приеми плащания онлайн',
'transaction' => 'Плащане за :amount е направено от :account.
',
'billing' => 'Фактуриране',
'advanced' => 'Разширени',
'invoice_detail' => [
'marked' => '<b>Вие</b> отбелязохте фактурата като',
'services' => 'Услуги',
'another_item' => 'Друга услуга',
'another_description' => 'и друго описание',
'more_item' => '+:count повече продукти',
],
'statuses' => [
'draft' => 'Чернова',
'sent' => 'Изпратен',
'expired' => 'Изтекъл',
'viewed' => 'Разгледан',
'approved' => 'Одобрен',
'received' => 'Приет',
'refused' => 'Отказан',
'restored' => 'Възстановен',
'reversed' => 'Върнат',
'partial' => 'Частичен',
'paid' => 'Платен',
'pending' => 'Предстоящ',
'invoiced' => 'Фактуриран',
'overdue' => 'Просрочен',
'unpaid' => 'Неплатен',
'cancelled' => 'Отменен',
'voided' => 'Анулиран',
'completed' => 'Завършен',
'shipped' => 'Изпратен',
'refunded' => 'Върнати пари',
'failed' => 'Неуспешен',
'denied' => 'Отказан',
'processed' => 'Обработен',
'open' => 'Отворен',
'closed' => 'Затворен',
'billed' => 'Фактуриран',
'delivered' => 'Доставен',
'returned' => 'Върнат',
'drawn' => 'Начертан',
'not_billed' => 'Не фактуриран',
'issued' => 'Издаден',
'not_invoiced' => 'Не фактуриран',
'confirmed' => 'Потвърден',
'not_confirmed' => 'Не потвърден',
'active' => 'Активен',
'ended' => 'Приключил',
],
'form_description' => [
'companies' => 'Променете адреса, логото и друга информация за вашата компания.',
'billing' => 'Данните за плащане се показват във вашия документ.',
'advanced' => 'Изберете категорията, добавете или редактирайте долния колонтитул и добавете прикачени файлове към вашия :type.',
'attachment' => 'Изтеглете прикачените файлове към този :type',
],
'messages' => [
'email_sent' => ':type имейлът е изпратен!',
'marked_as' => ':type е маркиран като :status!',
'marked_sent' => ':type е маркиран като изпратен!',
'marked_paid' => ':type е маркиран като платен!',
'marked_viewed' => ':type е маркиран като прегледан!',
'marked_cancelled' => ':type е маркиран като отменен!',
'marked_received' => ':type е маркиран като получен!',
],
'recurring' => [
'auto_generated' => 'Автоматично генериране',
'tooltip' => [
'document_date' => 'Датата :type ще бъде зададена автоматично въз основа на графика и честотата на :type.',
'document_number' => 'Номерът :type ще бъде присвоен автоматично, когато се генерира всеки повтарящ се :type.',
],
],
];

View File

@ -27,6 +27,11 @@ return [
'body' => 'Здравейте,<br /><br /> За клиент {customer_name} има зададено циклично издаване на фактури, като автоматично беше генериран документ с номер <strong>{invoice_number}</strong>.<br /><br />Може да разгледате детайлите на фактурата на следния линк: <a href="{invoice_admin_link}">{invoice_number}</a>.<br /><br />С уважение,<br />{company_name}',
],
'invoice_view_admin' => [
'subject' => 'Фактура {invoice_number} е прегледана',
'body' => 'Здравейте,<br /><br />{customer_name} прегледа фактурата <strong>{invoice_number}</strong>.<br /><br />Можете да видите подробностите за фактурата от следната връзка: <a href ="{invoice_admin_link}">{invoice_number}</a>.<br /><br />С най-добри пожелания,<br />{company_name}',
],
'invoice_payment_customer' => [
'subject' => 'Получено плащане по фактура {invoice_number}',
'body' => 'Уважаеми {customer_name},<br /><br />Благодарим Ви за направеното плащане. Детайли за плащането:<br /><br />-------------------------------------------------<br /><br />Сума: <strong>{transaction_total}<br /></strong>Дата: <strong>{transaction_paid_date}</strong><br />Фактура: <strong>{invoice_number}<br /><br /></strong>-------------------------------------------------<br /><br />Винаги можете да разгледате детайлите по фактурата на следния линк: <a href="{invoice_guest_link}">{invoice_number}</a>.<br /><br />Свържете се с нас при възникнали въпроси.<br /><br />С уважение,<br />{company_name}',
@ -47,4 +52,13 @@ return [
'body' => 'Здравейте,<br /><br />За клиент {vendor_name} има зададено циклично издаване на фактури, като автомотично беше генериран документ с номер <strong>{bill_number}</strong>.<br /><br />Може да разгледате детайли по докумнта тук: <a href="{bill_admin_link}">{bill_number}</a>.<br /><br />С уважение,<br />{company_name}',
],
'payment_received_customer' => [
'subject' => 'Вашата разписка от {company_name}',
'body' => 'Уважаеми {contact_name},<br /><br />Благодарим Ви за плащането. <br /><br />Можете да видите подробностите за плащането от следната връзка: <a href="{payment_guest_link}">{payment_date}</a>.<br /><br />Чувствайте се свободни да се свържете с нас с всякакви въпроси.<br /><br />С най-добри пожелания,<br />{company_name}',
],
'payment_made_vendor' => [
'subject' => 'Плащане, извършено от {company_name}',
'body' => 'Уважаеми {contact_name},<br /><br />Направихме следното плащане. <br /><br />Можете да видите подробностите за плащането от следната връзка: <a href="{payment_guest_link}">{payment_date}</a>.<br /><br />Чувствайте се свободни да се свържете с нас с всякакви въпроси.<br /><br />С най-добри пожелания,<br />{company_name}',
],
];

View File

@ -3,21 +3,23 @@
return [
'title' => [
'403' => 'Забранен достъп',
'404' => 'Страницата не е намерена',
'500' => 'Нещо се обърка',
'403' => 'Забранен достъп',
'404' => 'Страницата не е намерена',
'500' => 'Нещо се обърка',
],
'header' => [
'403' => '403 Forbidden',
'404' => '404 Страницата не е намерена',
'500' => '500 Вътрешна грешка в сървъра',
'403' => '403 Forbidden',
'404' => '404 Страницата не е намерена',
'500' => '500 Вътрешна грешка в сървъра',
],
'message' => [
'403' => 'Нямате достъп до тази страница.',
'404' => 'Не открихме страницата, която търсите.',
'500' => 'Ще работим по отстраняването на проблема.',
'403' => 'Нямате достъп до тази страница.',
'404' => 'Не открихме страницата, която търсите.',
'500' => 'Ще работим по отстраняването на проблема.',
'record' => 'Не открихме записа, който търсите.',
'amount' => 'Тази страница съдържа невалидни суми! Моля, свържете се със системния администратор.',
],
];

View File

@ -6,5 +6,8 @@ return [
'powered' => 'С подкрепата на Akaunting',
'link' => 'https://akaunting.com',
'software' => 'Безплатен счетоводен софтуер',
'powered_by' => 'С подкрепата на',
'tag_line' => 'Изпращайте фактури, проследявайте разходите и автоматизирайте счетоводството с Akaunting. :get_started_url',
'get_started' => 'Да започваме',
];

View File

@ -4,17 +4,23 @@ return [
'dashboards' => 'Табло | Табла',
'items' => 'Стока | Стоки',
'incomes' => 'Приход | Приходи',
'invoices' => 'Фактура | Фактури',
'revenues' => 'Приход | Приходи',
'recurring_invoices' => 'Повтаряща се фактура|Повтарящи се фактури',
'customers' => 'Клиент | Клиенти',
'incomes' => 'Приход | Приходи',
'recurring_incomes' => 'Повтарящ се приход|Повтарящи се приходи',
'expenses' => 'Разход| Разходи',
'recurring_expenses' => 'Повтарящ се разход|Повтарящи се разходи',
'bills' => 'Фактура| Фактура',
'payments' => 'Плащане | Плащания',
'recurring_bills' => 'Повтаряща се сметка|Повтарящи се сметки',
'vendors' => 'Доставчик | Доставчици',
'accounts' => 'Сметка | Сметки',
'transfers' => 'Трансфер | Трансфери',
'income_transfers' => 'Трансфер на приход|Трансфери на приходи',
'expense_transfers' => 'Трансфер на разход|Трансфери на разходи',
'transactions' => 'Транзакция | Транзакции',
'payments' => 'Плащане | Плащания',
'recurring_transactions'=> 'Повтаряща се транзакция|Повтарящи се транзакции',
'reports' => 'Доклад | Доклади',
'settings' => 'Настройка | Настройки',
'categories' => 'Категория | Категории',
@ -40,6 +46,7 @@ return [
'statuses' => 'Статус | Статуси',
'others' => 'Други|други',
'contacts' => 'Контакт|Контакти',
'documents' => 'Документ|Документи',
'reconciliations' => 'Съгласуване|Съгласувания',
'developers' => 'Разработчик|Разработчици',
'schedules' => 'График | Графици',
@ -49,8 +56,28 @@ return [
'defaults' => 'По подразбиране | По подразбиране',
'widgets' => 'Добавка | Добавки',
'templates' => 'Образец | Образци',
'sales' => 'Продажба|Продажби',
'purchases' => 'Покупка|Покупки',
'sales' => 'Приход|Приходи',
'purchases' => 'Разход|Разходи',
'notifications' => 'Известие|Известия',
'countries' => 'Държава|Държави',
'cities' => 'Град|Градове',
'email_services' => 'Email Service|Email Services',
'email_templates' => 'Имейл шаблон|Имейл шаблони',
'bank_transactions' => 'Банкова транзакция|Банкови транзакции',
'recurring_templates' => 'Повтарящ се шаблон|Повтарящи се шаблон',
'receipts' => 'Разписка|Разписки',
'products' => 'Продукт|Продукти
',
'services' => 'Услуга|Услуги
',
'invitations' => 'Покана|Покани
',
'attachments' => 'Прикачен файл|Прикачени файлове
',
'histories' => 'История|Истории
',
'your_notifications' => 'Вашето известие|Вашите известия
',
'welcome' => 'Добре дошли',
'banking' => 'Банкиране',
@ -60,6 +87,7 @@ return [
'amount' => 'Сума',
'enabled' => 'Включен',
'disabled' => 'Изключен',
'disabled_type' => 'Този :type е деактивиран',
'yes' => 'Да',
'no' => 'Не',
'na' => 'Не е достъпно',
@ -72,12 +100,19 @@ return [
'add_new' => 'Добави нов',
'add_income' => 'Добави приход',
'add_expense' => 'Добави разход',
'add_transfer' => 'Добави трансфер',
'show' => 'Покажи',
'create' => 'Създай',
'edit' => 'Редактиране',
'delete' => 'Изтрий',
'send' => 'Изпрати',
'send_to' => 'Изпрати до',
'receive' => 'Получаване',
'share' => 'Сподели',
'share_link' => 'Споделяне на връзка',
'copy_link' => 'Копиране на връзката',
'download' => 'Изтегли',
'restore' => 'Възстанови',
'delete_confirm' => 'Потвърждаване на изтриване :name :type?',
'name' => 'Име',
'email' => 'Имейл',
@ -103,8 +138,13 @@ return [
'loading' => 'Зареждане...',
'from' => 'От',
'to' => 'До',
'subject' => 'Тема',
'body' => 'Текст',
'print' => 'Печат',
'download_pdf' => 'Изтегляне на PDF',
'customize' => 'Персонализирай',
'search' => 'Търси',
'search_text' => 'Търсене на текст',
'search_placeholder' => 'Пиши да търсиш..',
'filter' => 'Филтър',
'help' => 'Помощ',
@ -152,15 +192,59 @@ return [
'no_matching_data' => 'Няма съвпадение',
'clear_cache' => 'Изчистване на кеша',
'go_to_dashboard' => 'Отиди към таблото',
'create_first_invoice' => 'Създайте своята първа фактура',
'is' => 'е',
'isnot' => 'не е',
'recurring_and_more' => 'Повтарящи и повече ...',
'due' => 'Падеж',
'due_on' => 'Дължим на',
'amount_due' => 'Дължимата сума',
'financial_year' => 'Фискална година',
'created' => 'Създаден',
'state' => 'Област',
'zip_code' => 'Пощенски код',
'parent' => 'Родител',
'split' => 'Разделяне',
'email_send_me' => 'Изпрати копие до мен на :email',
'connect' => 'Свържи',
'assign' => 'Възлагане',
'new' => 'Нов',
'new_more' => 'Нов ...',
'number' => 'Номер',
'client_portal' => 'Клиентски портал',
'issue_date' => 'Дата на издаване',
'due_date' => 'Падежна дата',
'open' => 'Отворен',
'invite' => 'Покани',
'common' => 'Общи',
'api' => 'API',
'admin_panel' => 'Администраторски панел',
'special' => 'Специален',
'distribution' => 'Разпределение',
'timeline' => 'Времева линия',
'incoming' => 'Входящи',
'outgoing' => 'Изходящи',
'none' => 'Няма',
'preferences' => 'Предпочитания',
'resend' => 'Изпрати наново',
'last_sent' => 'Дата на последно изпращане :date',
'preview_in_window' => 'Прегледай в нов прозорец',
'copied' => 'Копирано',
'preview_mode' => 'Предварително визуализиране',
'go_back' => 'Върни се към :type',
'validation_error' => 'Грешка при валидиране',
'card' => [
'cards' => 'Карта|Карти',
'name' => 'Име на Картата',
'number' => 'Номер на карта',
'expiration_date' => 'Срок на валидност',
'cvv' => 'CVV номер',
'save' => 'Запази карта',
],
'title' => [
'show' => 'Покажи :type',
'new' => 'Нов :type',
'edit' => 'Редактирай :type',
'delete' => 'Изтрий :type',
@ -169,6 +253,8 @@ return [
'get' => 'Получи :type',
'add' => 'Добави :type',
'manage' => 'Управлявай :type',
'invite' => 'Покани :type',
'closed' => 'Затворен :type',
],
'form' => [
@ -177,16 +263,34 @@ return [
'field' => '- Избери :field -',
'file' => 'Изберете файл',
],
'add' => 'Добави :field',
'add_an' => 'Добави :field',
'add_new' => 'Добави нов :field',
'edit' => 'Редактирай :field',
'contact_edit' => 'Редактирай :contact_name :field',
'drop_file' => 'Пуснете файл(ове) за качване',
'choose' => 'Избери :field',
'choose_different' => 'Избери друг :field',
'choose_file' => 'Избери файл',
'no_file_selected' => 'Не е избран файл...',
],
'placeholder' => [
'search' => 'Пиши да търсиш ...',
'search_and_filter' => 'Търси или приложи филтър на търсенето ...',
'select_and_filter' => 'Изберете една от следните възможности',
'enter_and_filter' => 'Натиснете Enter, за да филтрирате резултатите, или задайте нов филтър',
'contact_search' => 'Впишете име на :type',
'item_search' => 'Впишете име на продукта',
],
'date_range' => [
'today' => 'Днес',
'yesterday' => 'Вчера',
'last_days' => 'Последни :day дни',
'this_month' => 'Този месец',
'last_month' => 'Последния месец',
'today' => 'Днес',
'yesterday' => 'Вчера',
'week_ago' => 'Преди седмица',
'last_days' => 'Последни :day дни',
'this_month' => 'Този месец',
'last_month' => 'Последния месец',
],
'empty' => [
@ -199,8 +303,15 @@ return [
'payments' => 'Плащането е транзакция с платен разход. Той може да бъде независим запис (т.е. разписка за храна) или приложен към сметката.',
'vendors' => 'Доставчиците са задължителни, ако искате да създадете фактура. Можете да видите баланса, който дължите, и да филтрирате отчети от доставчика.',
'transfers' => 'Трансферите ви позволяват да премествате пари от една сметка в друга, независимо дали използват една и съща валута или не.',
'transactions' => 'Транзакциите ви позволяват да създавате записи на вашите приходи или разходи. Плащанията на фактури/сметки също са изброени тук.',
'taxes' => 'Данъците се използват за прилагане на допълнителни такси към фактури и сметки. Вашите финансови средства се влияят от тези регулаторни данъци.',
'reconciliations' => 'Банковото съгласуване е процес, с който се гарантира, че банковите записи на вашата компания също са правилни.',
'recurring_templates' => 'Повтарящият се шаблон е приход или разход.',
'actions' => [
'new' => 'Въведете подробностите и създайте своя първи :type',
'import' => 'Импортирайте ваш съществуващ :type с едно кликване',
],
],
];

View File

@ -4,13 +4,31 @@ return [
'change_language' => 'Промяна на езика',
'last_login' => 'Последно влизане :time',
'notifications' => [
'counter' => '{0} Нямате известия|{1} Имате :count ново известие|[2,*] Имате :count нови известия',
'new_apps' => '{1} :count ново приложение е публикувано|[2,*] :count нови приложения са публикувани
',
'overdue_invoices' => '{1} :count просрочено вземане|[2,*] :count просрочени вземания',
'upcoming_bills' => '{1} :count наближаваща фактура|[2,*] :count наближаващи фактури',
'view_all' => 'Вижте всички'
'view_all' => 'Вижте всички',
'exports' => [
'completed' => '{1} :count експорт е приключен|[2,*] :count експорта са приключени',
'failed' => '{1} :count експорт е провален|[2,*] :count експорта са провалени',
],
'imports' => [
'completed' => '{1} :count импорта е приключен|[2,*] :count импорта са приключени',
'failed' => '{1} :count импорт е провален|[2,*] :count импорта са провалени',
],
],
'docs_link' => 'https://akaunting.com/docs',
'support_link' => 'https://akaunting.com/support',
'favorite' => [
'added_favorite' => 'Добавено в любими',
'add_favorite' => 'Добави в любими',
],
];

View File

@ -4,6 +4,7 @@ return [
'import' => 'Импортиране',
'title' => 'Импортиране :type',
'message' => 'Разрешени формати: CSV, XLS. Моля, <a target="_blank" href=":link"><strong>изтегли</strong></a> примерен файл.',
'limitations' => 'Позволени типове файлове: :extensions<br>Позволени максимални редове: :row_limit',
'sample_file' => 'Можете да <a target="_blank" href=":download_link"><strong>изтеглите</strong></a> примерния файл и да го попълните с вашите данни.',
];

View File

@ -22,6 +22,7 @@ return [
'extension' => ':extension разширението трябва да бъде заредено!',
'directory' => ':directory директорията трябва да е с разрешение за промяна!',
'executable' => 'The PHP CLI executable file is not working! Please, ask your hosting company to set PHP_BINARY or PHP_PATH environment variable correctly.',
'npm' => '<b>Missing JavaScript files !</b> <br><br><span>You should run <em class="underline">npm install</em> and <em class="underline">npm run dev</em> commands.</span>',
],
'database' => [
@ -43,4 +44,8 @@ return [
'connection' => 'Грешка: Не можа да се свърже с базата данни! Моля, уверете се, че данните са правилни.',
],
'update' => [
'core' => 'Нова версия на Akaunting е налична! Моля, актуализирайте вашата инсталация.',
'module' => 'Нова версия на :module е налична! Моля, актуализирайте вашата инсталация.',
],
];

View File

@ -4,10 +4,12 @@ return [
'invoice_number' => 'Номер на фактура',
'invoice_date' => 'Дата на фактура',
'invoice_amount' => 'Сума на фактурата',
'total_price' => 'Обща цена',
'due_date' => 'Падежна дата',
'order_number' => 'Номер на поръчка',
'bill_to' => 'Издадена на',
'cancel_date' => 'Дата на анулиране',
'quantity' => 'Количество',
'price' => 'Цена',
@ -18,6 +20,7 @@ return [
'total' => 'Общо',
'item_name' => 'Име на артикул | Имена на артикули',
'recurring_invoices' => 'Повтаряща се фактура|Повтарящи се фактури',
'show_discount' => ':discount% отстъпка',
'add_discount' => 'Добави отстъпка',
@ -39,6 +42,11 @@ return [
'send_invoice' => 'Изпрати фактура',
'get_paid' => 'Получи плащане',
'accept_payments' => 'Приеми на онлайн плащане',
'payment_received' => 'Получено плащане',
'form_description' => [
'billing' => 'Данните се появяват във фактурата. Датата на фактурата се използва в таблото и отчетите. Изберете датата, на която очаквате да бъде платена фактура като Дължима дата.',
],
'messages' => [
'email_required' => 'Няма имейл адрес за този клиент!',
@ -57,4 +65,22 @@ return [
],
],
'slider' => [
'create' => ':user създаде тази фактура на :date',
'create_recurring' => ':user създаде този шаблон за повтарящи се фактури на :date',
'schedule' => 'Повтори на всеки :interval :frequency от :date
',
'children' => ':count фактури бяха автоматично създадени',
],
'share' => [
'show_link' => 'Вашият клиент може да прегледа фактурата на този линк',
'copy_link' => 'Копирайте връзката и я споделете с вашия клиент.',
'success_message' => 'Връзката за споделяне е копирана в клипборда!',
],
'sticky' => [
'description' => 'Преглеждате как вашият клиент ще види уеб версията на вашата фактура.',
],
];

View File

@ -2,7 +2,16 @@
return [
'sale_price' => 'Продажна цена',
'purchase_price' => 'Покупна цена',
'sale_price' => 'Продажна цена',
'purchase_price' => 'Покупна цена',
'enter_item_description' => 'Въведете описание',
'billing' => 'Фактуриране',
'sale_information' => 'Информация',
'purchase_information' => 'Подробности за поръчката',
'form_description' => [
'general' => 'Изберете категория, за да направите отчетите си по-подробни. Описанието ще бъде попълнено, когато артикулът бъде избран във фактура или сметка.',
'billing' => 'Информацията за продажбата се използва във фактурите, а информацията за покупката се използва в рамките на сметките. Данъкът ще се прилага както към фактурите, така и към сметките.',
],
];

View File

@ -6,4 +6,6 @@ return [
'message' => 'За съжаление сме в процес на обновяване. Моля, опитайте отново по-късно!',
'read_only' => 'Режимът само за четене е активиран. Имате право да преглеждате, но не и да променяте нищо!',
];

View File

@ -8,9 +8,16 @@ return [
'deleted' => ':type е изтрит/а!',
'duplicated' => ':type дублиран!',
'imported' => ':type импортиран!',
'import_queued' => ':type импортиране е насрочено! Ще получите имейл, когато приключи.',
'exported' => ':type е експортиран!',
'export_queued' => ':type експортиране на текущата страница е насрочено! Ще получите имейл, когато е готово за изтегляне.',
'enabled' => ':type включен!',
'disabled' => ':type изключен!',
'connected' => ':type свързан!',
'invited' => ':type поканен!',
'ended' => ':type приключил!',
'clear_all' => 'Страхотно! Изчистихте всичките си :type.',
],
'error' => [
@ -23,6 +30,8 @@ return [
'invalid_apikey' => 'Грешка: Невалиден код!',
'import_column' => 'Грешк: :message Sheet name: :sheet. Line number: :line.',
'import_sheet' => 'Грешка: Невалидно име. Моля, прегледайте примерния файл.',
'same_amount' => 'Грешка: Общата сума на разделянето трябва да е точно същата като :transaction: :amount',
'over_match' => 'Грешка: :type не е свързан! Сумата, която сте въвели, не може да надвишава общата сума на плащането: :amount',
],
'warning' => [
@ -32,6 +41,7 @@ return [
'reconciled_doc' => 'Внимание: Промени/Изтриване не е позволено, защото същото има съгласувани транзакции.',
'disable_code' => 'Предупреждение: Не ви е позволено да деактивирате или променяте валутата на <b>:name</b>, защото има :text свързан.',
'payment_cancel' => 'Предупреждение: Премахнахте следния метод за плащане :method!',
'missing_transfer' => 'Предупреждение: Преводът, свързан с тази транзакция, липсва. Трябва да обмислите изтриването на тази транзакция.',
],
];

View File

@ -4,17 +4,54 @@ return [
'api_key' => 'API Key',
'my_apps' => 'Моите приложения',
'checkout' => 'Поръчка',
'documentation' => 'Документация',
'home' => 'Начален екран',
'tiles' => 'Списък',
'item' => 'Детайли за приложението',
'pre_sale' => 'Предварителна продажба',
'no_apps' => 'Вижте най-професионалните приложения за вашия бизнес и ги вземете на най-добра цена.',
'learn_more' => 'Научете повече',
'see_apps' => 'Разгледайте приложенията',
'no_apps_marketing' => 'Направете своя бизнес професионално',
'premium_banner' => 'ПРЕМИНЕТЕ КЪМ PREMIUM ДНЕС',
'see_all' => 'Вижте всички',
'see_all_type' => 'Вижте всички :type',
'saving' => 'Вие спестявате :saved-price на година!',
'top_paid' => 'Топ платени',
'new' => 'Нов',
'top_free' => 'Топ безплатни',
'free' => 'БЕЗПЛАТНО',
'monthly' => 'Месечно',
'yearly' => 'Годишно',
'yearly_pricing' => 'Цена на година',
'monthly_price' => 'от :price',
'per_month' => 'на месец',
'billed_yearly' => 'Фактурирано на година',
'billed_monthly' => 'Месечна фактура',
'save_year' => 'Спестявате <strong>:price</strong> на година!',
'if_paid_year' => 'Или <strong>:price/mo</strong> ако се плаща годишно',
'information_monthly' => 'Тази опция е валидна само за <strong>Cloud Service</strong>',
'install' => 'Инсталирай',
'buy_now' => 'Купете сега',
'get_api_key' => '<a href=":url" target="_blank">Натиснете тук</a> за да получите вашия API ключ.',
'no_apps' => 'Все още няма приложения в тази категория.',
'no_apps' => 'Вижте най-професионалните приложения за вашия бизнес и ги вземете на най-добра цена.',
'become_developer' => 'Вие сте разработчик? <a href=":url" target="_blank">Тук</a> може да научите как да създадете приложение и да стартирате продажби днес!',
'recommended_apps' => 'Препоръчани Добавки',
'can_not_install' => 'Месечните абонаменти са налични само за Cloud service. <a href="https://akaunting.com/upgrade-to-yearly" target="_blank">Научете повече.</a>',
'apps_managing' => 'Вижте най-актуалните приложения и започнете да управлявате финансите си професионално днес.',
'ready' => 'Готово',
'popular_this_week' => 'Популярно тази седмица',
'install_cloud' => 'Използвайте в Cloud Service',
'get_cloud' => 'Вземи Cloud Service',
'get_premium_cloud' => 'Вземи Premium Cloud
',
'switch_to_cloud' => 'Преминете към Cloud',
'hosted_on_akaunting' => 'Хоствано на akaunting.com',
'only_works_cloud' => 'Това приложение е достъпно само в <strong>Cloud</strong>.',
'only_premium_plan' => 'Това приложение е достъпно само в <strong>Premium Cloud</strong>.',
'not_found' => 'Не е открито приложение',
'about' => 'Относно',
@ -25,13 +62,22 @@ return [
'view' => 'Преглед',
'back' => 'Назад',
'use_app' => 'Започнете да използвате приложението сега',
'see_more' => 'Вижте повече',
'installed' => ':module инсталиран',
'uninstalled' => ':module деинсталиран',
//'updated' => ':module updated',
'updated_2' => ':module е обновен',
'enabled' => ':module включен',
'disabled' => ':module изключен',
'per_month' => 'на месец',
'pre_sale_uninstall' => 'Не пропускайте намалената цена за предварителната продажба!',
'pre_sale_install' => 'Ще имате приложението след края на предварителната продажба.',
'tab' => [
'features' => 'Възможности',
'screenshots' => 'Екранни снимки',
'installation' => 'Инсталация',
'faq' => 'ЧЗВ',
'changelog' => 'Списък на промените',
@ -49,6 +95,7 @@ return [
],
'errors' => [
'purchase' => 'Трябва да закупите/подновите :module!',
'download' => 'Не е възможно да се изтегли :module',
'zip' => 'Не е възможно да се създаде :module zip файл',
'unzip' => 'Не е възможно да се разархивира :module',

View File

@ -6,5 +6,183 @@ return [
'hello' => 'Здравейте!',
'salutation' => 'Поздрави,<br> :company_name',
'subcopy' => 'Ако срещате проблеми при щракване върху бутона ":text", копирайте и поставете URL-долу във вашия уеб браузър: [: url](:url)',
'mark_read' => 'Маркирай като прочетено',
'mark_read_all' => 'Маркирай всички като прочетени',
'empty' => 'Уау, няма известия!',
'new_apps' => ':app е налично. <a href=":url">Вижте сега</a>!',
'update' => [
'mail' => [
'title' => '⚠️ Неуспешна актуализация на :domain',
'description' => 'Актуализацията на :alias от :current_version на :new_version се провали в стъпка <strong>:step</strong> със следното съобщение: :error_message',
],
'slack' => [
'description' => 'Неуспешна актуализация на :domain',
],
],
'import' => [
'completed' => [
'title' => 'Импортирането завърши',
'description' => 'Импортирането е завършено и записите са налични във вашия панел.',
],
'failed' => [
'title' => 'Грешка при импорт',
'description' => 'Файлът не може да се импортира поради следните проблеми:',
],
],
'export' => [
'completed' => [
'title' => 'Експортът е готов',
'description' => 'Експортираният файл е готов за изтегляне от следната връзка:',
],
'failed' => [
'title' => 'Грешка при експорт',
'description' => 'Файлът не може да се експортира поради следните проблеми:',
],
],
'menu' => [
'export_completed' => [
'title' => 'Експортът е готов',
'description' => 'Вашият <strong>:type</strong> експортиран файл е готов за <a href=":url" target="_blank"><strong>изтегляне</strong></a>.',
],
'export_failed' => [
'title' => 'Грешка при експорт',
'description' => 'Не може да се създаде експортиран файл поради няколко проблема. Проверете имейла си за подробности.',
],
'import_completed' => [
'title' => 'Импортирането завърши',
'description' => 'Вашите <strong>:type</strong> данни на <strong>:count</strong> реда са импортирани успешно.',
],
'import_failed' => [
'subject' => 'Грешка при импорт',
'description' => 'Не може да се импортира файл поради няколко проблема. Проверете имейла си за подробности.',
],
'new_apps' => [
'title' => 'Ново приложение',
'description' => 'Илязло ново е приложение <strong>:name</strong>. Можете да <a href=":url">щракнете тук</a>, за да видите подробностите.',
],
'invoice_new_customer' => [
'title' => 'Нова фактура',
'description' => '<strong>:invoice_number</strong> фактурата е създадена. Можете да <a href=":invoice_portal_link">щракнете тук</a>, за да видите подробностите и да продължите с плащането.',
],
'invoice_remind_customer' => [
'title' => 'Просрочена фактура',
'description' => '<strong>:invoice_number</strong> фактурата беше дължима <strong>:invoice_due_date</strong>. Можете да <a href=":invoice_portal_link">щракнете тук</a>, за да видите подробностите и да продължите с плащането.',
],
'invoice_remind_admin' => [
'title' => 'Просрочена фактура',
'description' => '<strong>:invoice_number</strong> фактурата беше дължима <strong>:invoice_due_date</strong>. Можете да <a href=":invoice_admin_link">щракнете тук</a>, за да видите подробностите.',
],
'invoice_recur_customer' => [
'title' => 'Нова повтаряща се фактура',
'description' => 'Фактура <strong>:invoice_number</strong> е създадена въз основа на вашия повтарящ се цикъл. Можете да <a href=":invoice_portal_link">щракнете тук</a>, за да видите подробностите и да продължите с плащането.',
],
'invoice_recur_admin' => [
'title' => 'Нова повтаряща се фактура',
'description' => 'Фактура <strong>:invoice_number</strong> е създадена въз основа на повтарящ се цикъл <strong>:customer_name</strong>. Можете да <a href=":invoice_admin_link">щракнете тук</a>, за да видите подробностите.',
],
'invoice_view_admin' => [
'title' => 'Прегледана фактура',
'description' => '<strong>:customer_name</strong> е прегледал фактурата <strong>:invoice_number</strong>. Можете да <a href=":invoice_admin_link">щракнете тук</a>, за да видите подробностите.',
],
'revenue_new_customer' => [
'title' => 'Получено плащане',
'description' => 'Благодарим ви за плащането за фактура <strong>:invoice_number</strong>. Можете да <a href=":invoice_portal_link">щракнете тук</a>, за да видите подробностите.',
],
'invoice_payment_customer' => [
'title' => 'Получено плащане',
'description' => 'Благодарим ви за плащането за фактура <strong>:invoice_number</strong>. Можете да <a href=":invoice_portal_link">щракнете тук</a>, за да видите подробностите.',
],
'invoice_payment_admin' => [
'title' => 'Получено плащане',
'description' => ':customer_name записа плащане за <strong>:invoice_number</strong> фактура. Можете да <a href=":invoice_admin_link">щракнете тук</a>, за да видите подробностите.',
],
'bill_remind_admin' => [
'title' => 'Просрочена фактура',
'description' => 'Фактура <strong>:bill_number</strong> е била дължима до <strong>:bill_due_date</strong>. Можете да <a href=":bill_admin_link">щракнете тук</a>, за да видите подробностите.',
],
'bill_recur_admin' => [
'title' => 'Нова повтаряща се фактура',
'description' => 'Фактура <strong>:bill_number</strong> е създадена въз основа на <strong>:vendor_name</strong> повтарящ се цикъл. Можете да <a href=":bill_admin_link">щракнете тук</a>, за да видите подробностите.',
],
],
'messages' => [
'mark_read' => ':type чете това известие!',
'mark_read_all' => ':type чете това известие!',
],
];

View File

@ -13,11 +13,10 @@ return [
|
*/
'password' => 'Паролата трябва да бъде поне шест знака и да съвпада.',
'reset' => 'Паролата е ресетната!',
'sent' => 'Изпратено е напомняне за вашата парола!',
'throttled' => 'Моля изчакайте, преди да опитате отново.',
'token' => 'Този токен за ресет на парола е невалиден.',
'user' => "Потребител с такъв e-mail адрес не може да бъде открит.",
'throttle' => 'Моля изчакайте, преди да опитате отново.',
];

View File

@ -0,0 +1,52 @@
<?php
return [
'profile' => 'Профил',
'invoices' => 'Фактури',
'payments' => 'Плащания',
'payment_received' => 'Плащането е получено, благодаря!',
'create_your_invoice' => 'Сега създайте своя собствена фактура — безплатно е',
'get_started' => 'Започенете безплатно',
'billing_address' => 'Данъчен адрес',
'see_all_details' => 'Вижте всички подробности за акаунта',
'all_payments' => 'Вход за да видите всички плащания',
'received_date' => 'Дата на приемане',
'last_payment' => [
'title' => 'Последна дата на плащане',
'description' => 'Вие сте направили това плащане на :date',
'not_payment' => 'Все още не сте извършили плащане.',
],
'outstanding_balance' => [
'title' => 'Неизплатен баланс',
'description' => 'Вашето неплатено салдо е:',
'not_payment' => 'Все още нямате неплатено салдо.',
],
'latest_invoices' => [
'title' => 'Последни фактури',
'description' => ':date - Таксувани сте с номер на фактура :invoice_number.',
'no_data' => 'Все още нямате фактура.',
],
'invoice_history' => [
'title' => 'История на фактури',
'description' => ':date - Таксувани сте с номер на фактура :invoice_number.',
'no_data' => 'Все още нямате история на фактурите.',
],
'payment_history' => [
'title' => 'История на плащанията',
'description' => ':date - Направихте плащане на :amount.',
'invoice_description'=> ':date - Направихте плащане на :amount по номер на фактура :invoice_number.',
'no_data' => 'Все още нямате история на плащанията.',
],
'payment_detail' => [
'description' => 'Вие извършихте :amount плащане на :date по тази фактура.'
],
];

View File

@ -14,5 +14,9 @@ return [
'cleared_amount' => 'Изчистена Сума',
'deposit' => 'Депозит',
'withdrawal' => 'Теглене',
'reconciled_amount' => 'Оспорен',
'in_progress' => 'В процес на изпълнение',
'save_draft' => 'Запази като чернова',
'irreconcilable' => 'Не подлежи на оспорване',
];

View File

@ -15,6 +15,27 @@ return [
'weeks' => 'Седмица(и)',
'months' => 'Месец(и)',
'years' => 'Година(и)',
'frequency' => 'Честота',
'duration' => 'Времетраене',
'last_issued' => 'Последно издадено',
'after' => 'След',
'on' => 'На',
'never' => 'Никога',
'ends_after' => 'Завършва след :times пъти',
'ends_never' => 'Никога да не приключва',
'ends_date' => 'Приключва на :date',
'next_date' => 'Следващо на :date',
'end' => 'Край на повторението',
'child' => ':url е създаден автоматично на :date',
'message' => 'Това е повтарящ се :type и следващия :type ще се генерира автоматично на :date',
'message_parent' => 'Този :type е автоматично генериран от :link',
'frequency_type' => 'Повтори този :type',
'limit_date' => 'Създай първи :type на',
'limit_middle' => 'добави край',
'form_description' => [
'schedule' => 'Изберете условията и началния/крайния час, за да сте сигурни, че вашият клиент ще получи вашия :type в правилния ден.',
],
];

View File

@ -2,26 +2,42 @@
return [
'this_year' => 'Текущата година',
'previous_year' => 'Миналата година',
'this_quarter' => 'Текущото тримесечие',
'previous_quarter' => 'Предходното тримесечие',
'last_12_months' => 'Последните 12 месеца',
'profit_loss' => 'Печалба & загуба',
'gross_profit' => 'Брутна печалба',
'net_profit' => 'Нетна печалба',
'total_expenses' => 'Общо разходи',
'net' => 'НЕТНО',
'income_expense' => 'Приходи & Разходи',
'income_summary' => 'Приходи',
'expense_summary' => 'Разходи',
'income_expense_summary' => 'Приходи срещу разходи',
'tax_summary' => 'Данъчни Резюме',
'years' => 'Година|Години',
'preferences' => 'Предпочитание|Предпочитания',
'this_year' => 'Текущата година',
'previous_year' => 'Миналата година',
'this_quarter' => 'Текущото тримесечие',
'previous_quarter' => 'Предходното тримесечие',
'last_12_months' => 'Последните 12 месеца',
'profit_loss' => 'Печалба & загуба',
'income_summary' => 'Приходи',
'expense_summary' => 'Разходи',
'income_expense_summary' => 'Приходи срещу разходи',
'tax_summary' => 'Данъчни Резюме',
'gross_profit' => 'Брутна печалба',
'net_profit' => 'Нетна печалба',
'total_expenses' => 'Общо разходи',
'net' => 'НЕТНО',
'income_expense' => 'Приходи & Разходи',
'pin' => 'Закачете отчета си',
'charts' => [
'line' => 'Линейна',
'bar' => 'Стълбове',
'pie' => 'Пай',
'income_expense_description' => 'Получете преглед на вашите приходи и разходи.',
'accounting_description' => 'Получете ясна картина за това как върви вашият бизнес.',
'form_description' => [
'general' => 'Тук можете да въведете общата информация за отчета като име, тип, описание и др.',
'preferences' => 'Предпочитанията ви помагат да персонализирате отчетите си.'
],
'charts' => [
'line' => 'Линейна',
'bar' => 'Стълбове',
'pie' => 'Пай',
],
'pin_text' => [
'unpin_report' => 'Откачете отчета си',
'pin_report' => 'Закачете отчета си',
]
];

View File

@ -0,0 +1,21 @@
<?php
return [
'columns' => [
'last_logged_in_at' => 'Последно влизане',
'paid_at' => 'Платено на',
'started_at' => 'Начална дата',
'ended_at' => 'Крайна дата',
'billed_at' => 'Дата фактура',
'due_at' => 'Падежна дата',
'invoiced_at' => 'Дата на фактура',
'issued_at' => 'Дата на издаване',
'symbol_first' => 'Символ позиция',
'reconciled' => 'Оспорен',
'expense_account' => 'От сметка',
'income_account' => 'Към сметка',
'recurring' => 'Повтарящи се',
],
];

View File

@ -3,91 +3,153 @@
return [
'company' => [
'description' => 'Промени име на компанията, имейл, адрес, номер и др',
'name' => 'Име',
'email' => 'Имейл',
'phone' => 'Телефон',
'address' => 'Адрес',
'logo' => 'Лого',
'description' => 'Промени име на компанията, имейл, адрес, номер и др',
'search_keywords' => 'фирма, име, имейл, телефон, адрес, държава, данъчен номер, лого, град, град, щат, провинция, пощенски код',
'name' => 'Име',
'email' => 'Имейл',
'phone' => 'Телефон',
'address' => 'Адрес',
'edit_your_business_address' => 'Редактирай адреса на компанията',
'logo' => 'Лого',
'form_description' => [
'general' => 'Тази информация се вижда в записите, които създавате.',
'address' => 'Адресът ще бъде използван във фактурите, сметките и другите записи, които издавате.',
],
],
'localisation' => [
'description' => 'Задай фискална година, времева зона, формат на датата и други',
'financial_start' => 'Начало на фискална година',
'timezone' => 'Часова зона',
'description' => 'Задай фискална година, времева зона, формат на датата и други',
'search_keywords' => 'финансова, година, начало, обозначаване, часова, зона, дата, формат, разделител, отстъпка, процент',
'financial_start' => 'Начало на фискална година',
'timezone' => 'Часова зона',
'financial_denote' => [
'title' => 'Начало на фискална година',
'begins' => 'До годината, в която започва',
'ends' => 'До годината, в която приключва',
],
'preferred_date' => 'Предпочитан формат на дата',
'date' => [
'format' => 'Формат на датата',
'separator' => 'Разделител за дата',
'dash' => 'Тире (-)',
'dot' => 'Точка (.)',
'comma' => 'Запетая (,)',
'slash' => 'Наклонена черта (/)',
'space' => 'Празно място ( )',
'format' => 'Формат на датата',
'separator' => 'Разделител за дата',
'dash' => 'Тире (-)',
'dot' => 'Точка (.)',
'comma' => 'Запетая (,)',
'slash' => 'Наклонена черта (/)',
'space' => 'Празно място ( )',
],
'percent' => [
'title' => 'Процент (%) Позиция',
'before' => 'Преди номер',
'after' => 'След номер',
'title' => 'Процент (%) Позиция',
'before' => 'Преди номер',
'after' => 'След номер',
],
'discount_location' => [
'name' => 'Опции за отстъпка',
'item' => 'На ред',
'total' => 'Общо',
'both' => 'Заедно( продукт и общо )',
'name' => 'Опции за отстъпка',
'item' => 'На ред',
'total' => 'Общо',
'both' => 'Заедно( продукт и общо )',
],
'form_description' => [
'fiscal' => 'Задайте периода на финансовата година, който вашата компания използва за данъчно облагане и отчитане.',
'date' => 'Изберете формата на датата, който искате да виждате навсякъде в интерфейса.',
'other' => 'Изберете къде да се показва знакът за процент за данъци. Можете да активирате отстъпки за редови позиции и обща сума за фактури и сметки.',
],
],
'invoice' => [
'description' => 'Задай префикс на документите, номера и футър',
'prefix' => 'Префикс',
'digit' => 'Брой цифри',
'next' => 'Следващия номер',
'logo' => 'Лого',
'custom' => 'По избор',
'item_name' => 'Име',
'item' => 'Продукти',
'product' => 'Продукти',
'service' => 'Услуги',
'price_name' => 'Цена Име',
'price' => 'Цена',
'rate' => 'Данък',
'quantity_name' => 'Количество Име',
'quantity' => 'Количество',
'payment_terms' => 'Условия за плащане',
'title' => 'Заглавие',
'subheading' => 'Подзаглавие',
'due_receipt' => 'Дължима до получаване',
'due_days' => 'Дължима след :days дни',
'choose_template' => 'Изберете дизайн на документите',
'default' => 'По подразбиране',
'classic' => 'Класически',
'modern' => 'Модерен',
'description' => 'Задай префикс на документите, номера и футър',
'search_keywords' => 'персонализиране, фактура, номер, префикс, цифра, следващ, лого, име, цена, количество, шаблон, заглавие, подзаглавие, долен колонтитул, бележка, скрий, дължимо, цвят, плащане, условия, колона',
'prefix' => 'Префикс',
'digit' => 'Брой цифри',
'next' => 'Следващия номер',
'logo' => 'Лого',
'custom' => 'По избор',
'item_name' => 'Име',
'item' => 'Продукти',
'product' => 'Продукти',
'service' => 'Услуги',
'price_name' => 'Цена Име',
'price' => 'Цена',
'rate' => 'Данък',
'quantity_name' => 'Количество Име',
'quantity' => 'Количество',
'payment_terms' => 'Условия за плащане',
'title' => 'Заглавие',
'subheading' => 'Подзаглавие',
'due_receipt' => 'Дължима до получаване',
'due_days' => 'Дължима след :days дни',
'choose_template' => 'Изберете дизайн на документите',
'default' => 'По подразбиране',
'classic' => 'Класически',
'modern' => 'Модерен',
'hide' => [
'item_name' => 'Скрий името на продукта',
'item_description' => 'Скрий описанието на продукта',
'quantity' => 'Скрий количеството',
'price' => 'Скрий цената',
'amount' => 'Скрий сумата',
],
'column' => 'Колона|Колони',
'form_description' => [
'general' => 'Задайте настройките по подразбиране за форматиране на вашите номера на фактури и условия за плащане.',
'template' => 'Изберете един от шаблоните по-долу за вашите фактури.',
'default' => 'Избирането на настройки по подразбиране за фактури ще попълни предварително заглавия, подзаглавия, бележки и долни колонтитули. Така че не е необходимо да редактирате фактури всеки път, за да изглеждате по-професионално.',
'column' => 'Персонализирайте начина на именуване на колоните във фактурата. Ако искате да скриете описанията на артикулите и сумите в редове, можете да го промените тук.',
]
],
'transfer' => [
'choose_template' => 'Изберете шаблон за трансфери',
'second' => 'Второ',
'third' => 'Трето',
],
'default' => [
'description' => 'По подразбиране - валута, език на компанията',
'list_limit' => 'Резултати на страница',
'use_gravatar' => 'Използвай Gravatar',
'description' => 'По подразбиране - валута, език на компанията',
'search_keywords' => 'акаунт, валута, език, данък, плащане, метод, пагинация',
'list_limit' => 'Резултати на страница',
'use_gravatar' => 'Използвай Gravatar',
'income_category' => 'Категория Приход',
'expense_category' => 'Категория Разход',
'form_description' => [
'general' => 'Изберете акаунта, данъка и метода на плащане по подразбиране, за да създавате записи бързо. Таблото за управление и отчетите се показват във валутата по подразбиране.',
'category' => 'Изберете категориите по подразбиране, за да ускорите създаването на запис.',
'other' => 'Персонализирайте настройките по подразбиране на фирмения език и как работи страницирането.',
],
],
'email' => [
'description' => 'Промени протокола при изпращане и имейл бланките',
'protocol' => 'Протокол',
'php' => 'PHP Mail',
'description' => 'Промени протокола при изпращане и имейл бланките',
'search_keywords' => 'email, send, protocol, smtp, host, password
',
'protocol' => 'Протокол',
'php' => 'PHP Mail',
'smtp' => [
'name' => 'SMTP',
'host' => 'SMTP хост',
'port' => 'SMTP порт',
'username' => 'SMTP потребител',
'password' => 'SMTP парола',
'encryption' => 'SMTP сигурност',
'none' => 'Няма',
'name' => 'SMTP',
'host' => 'SMTP хост',
'port' => 'SMTP порт',
'username' => 'SMTP потребител',
'password' => 'SMTP парола',
'encryption' => 'SMTP сигурност',
'none' => 'Няма',
],
'sendmail' => 'Sendmail',
'sendmail_path' => 'Път към Sendmail',
'log' => 'Лог имейли',
'email_service' => 'Email Service',
'email_templates' => 'Имейл шаблони',
'form_description' => [
'general' => 'Изпращайте редовни имейли до вашия екип и контакти. Можете да зададете настройките на протокола и SMTP.',
],
'sendmail' => 'Sendmail',
'sendmail_path' => 'Път към Sendmail',
'log' => 'Лог имейли',
'templates' => [
'description' => 'Променете email шаблоните',
'search_keywords' => 'имейл, шаблон, относно, тяло, tag
',
'subject' => 'Тема',
'body' => 'Текст',
'tags' => '<strong>Възможни тагове:</strong> :tag_list',
@ -96,34 +158,49 @@ return [
'invoice_remind_admin' => 'Ново Напомняне Образец (към администратор)',
'invoice_recur_customer' => 'Ново Повтарящо Плащане Образец (към клиента)',
'invoice_recur_admin' => 'Ново Повтарящо Плащане Образец (към администратор)',
'invoice_view_admin' => 'Фактура шаблон (към администратор)',
'invoice_payment_customer' => 'Получено Плащане Образец (към клиента)',
'invoice_payment_admin' => 'Получено Плащане Образец (към администратор)',
'bill_remind_admin' => 'Ново Напомняне Образец (към администратор)',
'bill_recur_admin' => 'Ново Повтарящо Плащане Образец (към администратор)',
'payment_received_customer' => 'Получено Плащане Шаблон (към клиента)',
'payment_made_vendor' => 'Направено плащане Шаблон (към доставчик)',
],
],
'scheduling' => [
'name' => 'График на дейностите',
'description' => 'Автоматични напомняния и повтарящи се плащания',
'send_invoice' => 'Изпрати напомняне за фактура',
'invoice_days' => 'Изпрати след забавени дни',
'send_bill' => 'Изпрати напомняне за фактура',
'bill_days' => 'Изпрати преди забавени дни',
'cron_command' => 'Грешна команда',
'schedule_time' => 'Час за стартиране',
'name' => 'График на дейностите',
'description' => 'Автоматични напомняния и повтарящи се плащания',
'search_keywords' => 'automatic, reminder, recurring, cron, command
',
'send_invoice' => 'Изпрати напомняне за фактура',
'invoice_days' => 'Изпрати след забавени дни',
'send_bill' => 'Изпрати напомняне за фактура',
'bill_days' => 'Изпрати преди забавени дни',
'cron_command' => 'Грешна команда',
'command' => 'Команда',
'schedule_time' => 'Час за стартиране',
'form_description' => [
'invoice' => 'Активирайте или деактивирайте и задайте напомняния за вашите фактури, когато са просрочени.',
'bill' => 'Активирайте или деактивирайте и задайте напомняния за вашите сметки, преди да са просрочени.',
'cron' => 'Копирайте командата cron, която вашият сървър трябва да изпълнява. Задайте времето за задействане на събитието.',
]
],
'categories' => [
'description' => 'Неограничени категории за приходи, разходи и артикули',
'description' => 'Неограничени категории за приходи, разходи и артикули',
'search_keywords' => 'категория, приход, разход, продукт',
],
'currencies' => [
'description' => 'Създайте и управлявайте валути и задайте техните курсове',
'description' => 'Създайте и управлявайте валути и задайте техните курсове',
'search_keywords' => 'по подразбиране, валута, валути, код, курс, символ, точност, позиция, десетичен знак, хиляди, знак, разделител',
],
'taxes' => [
'description' => 'Фиксирани, нормални, включващи и сложни данъчни ставки',
'description' => 'Фиксирани, нормални, включващи и сложни данъчни ставки',
'search_keywords' => 'данък, ставка, тип, фиксиран, включен, комбиниран, удържане',
],
];

View File

@ -9,4 +9,12 @@ return [
'compound' => 'С натрупване',
'fixed' => 'Фиксиран',
'withholding' => 'Удържан',
'no_taxes' => 'Без данък',
'create_task' => 'Създайте нов данък и редактирайте по всяко време от настройките.',
'new_tax' => 'Нов данък',
'form_description' => [
'general' => 'Включеният данък се калкулира в цената на артикула. Сложният данък се изчислява върху другите данъци. Фиксираният данък се прилага като сума, а не като процент.',
],
];

View File

@ -2,11 +2,34 @@
return [
'details' => 'Детайл|Детайли',
'from_account' => 'От сметка',
'to_account' => 'Към сметка',
'from_rate' => 'От курс',
'to_rate' => 'Към курс',
'from_account_rate' => 'От курс',
'to_account_rate' => 'Към курс',
'from_amount' => 'От сума',
'to_amount' => 'Към сума',
'issued_at' => 'Дата на издаване',
'rate' => 'Курс',
'form_description' => [
'general' => 'Прехвърляйте пари между сметки с различни валути и обвържете валутата с всеки курс, който желаете.',
'other' => 'Изберете метода на превод като начин на плащане, за да направите отчетите си по-подробни.',
],
'messages' => [
'delete' => ':from до :to (:amount)',
],
'slider' => [
'create' => ':user създаде този трансфер на :date',
'transactions' => 'Списък на транзакциите, свързани с този трансфер',
'transactions_desc' => ':number транзакции за :account
',
'attachments' => 'Изтеглете файлове, приложени към този трансфер',
],
];

View File

@ -13,79 +13,129 @@ return [
|
*/
'accepted' => 'Трябва да приемете :attribute.',
'active_url' => 'Полето :attribute не е валиден URL адрес.',
'after' => 'Полето :attribute трябва да бъде дата след :date.',
'after_or_equal' => 'Полето :attribute трябва да бъде дата след или равна на :date.',
'alpha' => 'Полето :attribute трябва да съдържа само букви.',
'alpha_dash' => 'Полето :attribute трябва да съдържа само букви, цифри, долна черта и тире.',
'alpha_num' => 'Полето :attribute трябва да съдържа само букви и цифри.',
'array' => 'Полето :attribute трябва да бъде масив.',
'before' => 'Полето :attribute трябва да бъде дата преди :date.',
'before_or_equal' => 'Полето :attribute трябва да бъде дата преди или равна на :date.',
'between' => [
'accepted' => 'Трябва да приемете :attribute.',
'accepted_if' => 'Полето :attribute се изисква, когато :other е :value.',
'active_url' => 'Полето :attribute не е валиден URL адрес.',
'after' => 'Полето :attribute трябва да бъде дата след :date.',
'after_or_equal' => 'Полето :attribute трябва да бъде дата след или равна на :date.',
'alpha' => 'Полето :attribute трябва да съдържа само букви.',
'alpha_dash' => 'Полето :attribute трябва да съдържа само букви, цифри, долна черта и тире.',
'alpha_num' => 'Полето :attribute трябва да съдържа само букви и цифри.',
'array' => 'Полето :attribute трябва да бъде масив.',
'before' => 'Полето :attribute трябва да бъде дата преди :date.',
'before_or_equal' => 'Полето :attribute трябва да бъде дата преди или равна на :date.',
'between' => [
'array' => 'Полето :attribute трябва да има между :min - :max елемента.',
'file' => 'Полето :attribute трябва да бъде между :min и :max килобайта.',
'numeric' => 'Полето :attribute трябва да бъде между :min и :max.',
'file' => 'Полето :attribute трябва да бъде между :min и :max килобайта.',
'string' => 'Полето :attribute трябва да бъде между :min и :max знака.',
'array' => 'Полето :attribute трябва да има между :min - :max елемента.',
'string' => 'Полето :attribute трябва да бъде между :min и :max знака.',
],
'boolean' => 'Полето :attribute трябва да съдържа Да или Не',
'confirmed' => 'Полето :attribute не е потвърдено.',
'date' => 'Полето :attribute не е валидна дата.',
'date_format' => 'Полето :attribute не е във формат :format.',
'different' => ':attribute и :other трябва да са <strong>различни</strong>.',
'digits' => 'Полето :attribute трябва да има :digits цифри.',
'digits_between' => 'Полето :attribute трябва да има между :min и :max цифри.',
'dimensions' => 'Невалидни размери за снимка :attribute.',
'distinct' => 'Данните в полето :attribute се дублират.',
'email' => ':attribute трябва да е валиден <strong>имейл адрес</strong>.',
'ends_with' => ':attribute трябва да завършва на един от следните: :values',
'exists' => 'Избранато поле :attribute вече съществува.',
'file' => ':attribute трябва да е <strong>файл</strong>.',
'filled' => ':attribute трябва да има <strong>стойност</strong>.',
'image' => ':attribute трябва да е <strong>снимка</strong>.',
'in' => 'Избраното поле :attribute е невалидно.',
'in_array' => 'Полето :attribute не съществува в :other.',
'integer' => ':attribute трябва да е <strong>число</strong>.',
'ip' => 'Полето :attribute трябва да бъде IP адрес.',
'json' => 'Полето :attribute трябва да бъде JSON низ.',
'max' => [
'boolean' => 'Полето :attribute трябва да съдържа Да или Не',
'confirmed' => 'Полето :attribute не е потвърдено.',
'current_password' => 'Грешна парола.',
'date' => 'Полето :attribute не е валидна дата.',
'date_equals' => 'Полето :attribute трябва да бъде дата равна на :date.',
'date_format' => 'Полето :attribute не е във формат :format.',
'declined' => 'Трябва да откажете :attribute.',
'declined_if' => 'Полето :attribute трябва да бъде отказано, когато :other е :value.',
'different' => ':attribute и :other трябва да са <strong>различни</strong>.',
'digits' => 'Полето :attribute трябва да има :digits цифри.',
'digits_between' => 'Полето :attribute трябва да има между :min и :max цифри.',
'dimensions' => 'Невалидни размери за снимка :attribute.',
'distinct' => 'Данните в полето :attribute се дублират.',
'doesnt_start_with' => ':attribute не трябва да започва с един от следните: :values',
'email' => ':attribute трябва да е валиден <strong>имейл адрес</strong>.',
'ends_with' => ':attribute трябва да завършва на един от следните: :values',
'enum' => 'Избраният :attribute е невалиден.',
'exists' => 'Избранато поле :attribute вече съществува.',
'file' => ':attribute трябва да е <strong>файл</strong>.',
'filled' => ':attribute трябва да има <strong>стойност</strong>.',
'gt' => [
'array' => ':attribute трябва да има повече от :value продукта.',
'file' => ':attribute трябва да е по-голям от :value килобайта.',
'numeric' => ':attribute трябва да е по-голям от :value.',
'string' => ':attribute трябва да е по-голямо от :value знака.',
],
'gte' => [
'array' => ':attribute трябва да има :value продукта или повече.',
'file' => ':attribute трябва да е по-голям или равен на :value килобайта.',
'numeric' => ':attribute трябва да е по-голям или равен на :value.',
'string' => ':attribute трябва да е по-голямо или равно на :value знака.',
],
'image' => ':attribute трябва да е <strong>снимка</strong>.',
'in' => 'Избраното поле :attribute е невалидно.',
'in_array' => 'Полето :attribute не съществува в :other.',
'integer' => ':attribute трябва да е <strong>число</strong>.',
'ip' => 'Полето :attribute трябва да бъде IP адрес.',
'ipv4' => ':attribute трябва да е валиден IPv4 адрес.',
'ipv6' => ':attribute трябва да е валиден IPv6 адрес.',
'json' => 'Полето :attribute трябва да бъде JSON низ.',
'lt' => [
'array' => ':attribute трябва да има по-малко от :value продукта.',
'file' => ':attribute трябва да е по-малко от :value килобайта.',
'numeric' => ':attribute трябва да е по-малко от :value.',
'string' => ':attribute трябва да е по-малко от :value знака.',
],
'lte' => [
'array' => ':attribute не трябва да има повече от :value продукта.',
'file' => ':attribute трябва да е по-малък или равен на :value килобайта.',
'numeric' => ':attribute трябва да е по-малък или равен на :value.',
'string' => ':attribute трябва да е по-малко или равно на :value знака.',
],
'mac_address' => ':attribute трябва да е валиден MAC адрес.',
'max' => [
'array' => 'Полето :attribute трябва да има по-малко от :max елемента.',
'file' => 'Полето :attribute трябва да бъде по-малко от :max килобайта.',
'numeric' => 'Полето :attribute трябва да бъде по-малко от :max.',
'file' => 'Полето :attribute трябва да бъде по-малко от :max килобайта.',
'string' => 'Полето :attribute трябва да бъде по-малко от :max знака.',
'array' => 'Полето :attribute трябва да има по-малко от :max елемента.',
'string' => 'Полето :attribute трябва да бъде по-малко от :max знака.',
],
'mimes' => 'Полето :attribute трябва да бъде файл от тип: :values.',
'mimetypes' => 'Полето :attribute трябва да бъде файл от тип: :values.',
'min' => [
'mimes' => 'Полето :attribute трябва да бъде файл от тип: :values.',
'mimetypes' => 'Полето :attribute трябва да бъде файл от тип: :values.',
'min' => [
'array' => 'Полето :attribute трябва има минимум :min елемента.',
'file' => 'Полето :attribute трябва да бъде минимум :min килобайта.',
'numeric' => 'Полето :attribute трябва да бъде минимум :min.',
'file' => 'Полето :attribute трябва да бъде минимум :min килобайта.',
'string' => 'Полето :attribute трябва да бъде минимум :min знака.',
'array' => 'Полето :attribute трябва има минимум :min елемента.',
'string' => 'Полето :attribute трябва да бъде минимум :min знака.',
],
'not_in' => 'Избраното поле :attribute е невалидно.',
'numeric' => 'Полето :attribute трябва да бъде число.',
'present' => ':attribute трябва да <strong>съществува</strong>.',
'regex' => 'Форматът на :attribute и <strong>невалиден</strong>.',
'required' => 'Полето на :attribute е <strong>задължително</strong>.',
'required_if' => 'Полето :attribute се изисква, когато :other е :value.',
'required_unless' => 'Полето :attribute е задължително освен ако :other е в :values.',
'required_with' => 'Полето :attribute се изисква, когато :values има стойност.',
'required_with_all' => 'Полето :attribute е задължително, когато :values имат стойност.',
'required_without' => 'Полето :attribute се изисква, когато :values няма стойност.',
'multiple_of' => ':attribute трябва да е кратно на :value.',
'not_in' => 'Избраното поле :attribute е невалидно.',
'not_regex' => 'Форматът на :attribute е невалиден.',
'numeric' => 'Полето :attribute трябва да бъде число.',
'password' => [
'letters' => ':attribute трябва да съдържа поне една буква.',
'mixed' => ':attribute трябва да съдържа поне една главна и една малка буква.',
'numbers' => ':attribute трябва да съдържа поне една цифра.',
'symbols' => ':attribute трябва да съдържа поне един символ.',
'uncompromised' => 'Даденият :attribute се появи при изтичане на данни. Моля, изберете различен :attribute.',
],
'present' => ':attribute трябва да <strong>съществува</strong>.',
'prohibited' => 'Полето :attribute е забранено.',
'prohibited_if' => 'Полето :attribute е забранено, когато :other е :value.',
'prohibited_unless' => 'Полето :attribute е забранено, освен ако :other е в :values.',
'prohibits' => 'Полето :attribute забранява присъствието на :other.',
'regex' => 'Форматът на :attribute и <strong>невалиден</strong>.',
'required' => 'Полето на :attribute е <strong>задължително</strong>.',
'required_array_keys' => 'Полето :attribute трябва да съдържа записи за: :values.',
'required_if' => 'Полето :attribute се изисква, когато :other е :value.',
'required_unless' => 'Полето :attribute е задължително освен ако :other е в :values.',
'required_with' => 'Полето :attribute се изисква, когато :values има стойност.',
'required_with_all' => 'Полето :attribute е задължително, когато :values имат стойност.',
'required_without' => 'Полето :attribute се изисква, когато :values няма стойност.',
'required_without_all' => 'Полето :attribute се изисква, когато никое от полетата :values няма стойност.',
'same' => 'Полетата :attribute и :other трябва да съвпадат.',
'size' => [
'same' => 'Полетата :attribute и :other трябва да съвпадат.',
'size' => [
'array' => 'Полето :attribute трябва да има :size елемента.',
'file' => 'Полето :attribute трябва да бъде :size килобайта.',
'numeric' => 'Полето :attribute трябва да бъде :size.',
'file' => 'Полето :attribute трябва да бъде :size килобайта.',
'string' => ':attribute трябва да е <strong>:size знаци</strong>.',
'array' => 'Полето :attribute трябва да има :size елемента.',
'string' => ':attribute трябва да е <strong>:size знаци</strong>.',
],
'string' => ':attribute трябва да е <strong>дума</strong>.',
'timezone' => 'Полето :attribute трябва да съдържа валидна часова зона.',
'unique' => ':attribute е вече <strong>зает</strong>.',
'uploaded' => ':attribute <strong>не успя</strong> да се качи.',
'url' => 'Форматът на :attribute не е <strong>валиден</strong>.',
'starts_with' => ':attribute трябва да започва с един от следните: :values.',
'string' => ':attribute трябва да е <strong>дума</strong>.',
'timezone' => 'Полето :attribute трябва да съдържа валидна часова зона.',
'unique' => ':attribute е вече <strong>зает</strong>.',
'uploaded' => ':attribute <strong>не успя</strong> да се качи.',
'url' => 'Форматът на :attribute не е <strong>валиден</strong>.',
'uuid' => ':attribute трябва да е валиден UUID.',
/*
|--------------------------------------------------------------------------
@ -100,11 +150,12 @@ return [
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
'rule-name' => 'custom-message',
],
'invalid_currency' => ':attribute код е невалиден.',
'invalid_amount' => 'Сумата :attribute е невалидна.',
'invalid_extension' => 'Това файлово разширение е невалидно.',
'invalid_dimension' => 'Размерите :attribute трябва да бъдат макс. :width x :height px.',
],
/*
@ -112,9 +163,9 @@ return [
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/

View File

@ -0,0 +1,16 @@
<?php
return [
'form_description' => [
'general' => 'Информацията за контакт на вашия доставчик ще се появи в сметките и техните профили. Можете да добавите тяхната информация за контакт и тяхното лого, което да се използва в сметките.',
'billing' => 'Данъчният номер фигурира във всяка фактура, издадена към вас. Избраната валута става валута по подразбиране за този доставчик.',
'address' => 'Адресът се изисква за фактурите, така че трябва да добавите подробности за адреса за фактуриране на вашия доставчик.',
],
'no_records' => [
'bills' => 'Все още няма фактура от този доставчик. Създайте нова сега.',
'transactions' => 'Все още няма транзакция към този доставчик. Създайте нова сега.',
],
];

View File

@ -2,22 +2,33 @@
return [
'total_income' => 'Общо приходи',
'receivables' => 'Вземания',
'open_invoices' => 'Отворени фактури',
'overdue_invoices' => 'Просрочени фактури',
'total_expenses' => 'Общо разходи',
'payables' => 'Задължения',
'open_bills' => 'Отворени задължения',
'overdue_bills' => 'Просрочени задължения',
'total_profit' => 'Обща печалба',
'open_profit' => 'Печалба',
'overdue_profit' => 'Закъсняла печалба',
'cash_flow' => 'Паричен поток',
'no_profit_loss' => 'Няма печалба загуба',
'income_by_category' => 'Приходи по категория',
'profit_loss' => 'Печалба & загуба',
'expenses_by_category' => 'Разходи по категория',
'account_balance' => 'Салдо',
'latest_income' => 'Последни приходи',
'latest_expenses' => 'Последни разходи',
'bank_feeds' => 'Свържете банкова сметка',
'currencies' => 'Валути',
'view_report' => 'Прегледай отчета',
'total_unpaid_invoices' => 'Общо неплатени фактури',
'total_unpaid_bills' => 'Общо неплатени фактури',
'description' => [
'receivables' => 'Сума, която тепърва ще получавате от клиентите си',
'payables' => 'Сума, която тепърва трябва да платите на доставчиците си',
'cash_flow' => 'Пари, които влизат и излизат от вашия бизнес',
'profit_loss' => 'Приходи и разходи, включително неплатени фактури и сметки',
'expenses_by_category' => 'Топ разходи в различни категории',
'account_balance' => 'Текущо салдо по вашите сметки',
'bank_feeds' => 'Импортирайте транзакциите си в Akaunting автоматично </br>чрез свързване на вашите банкови сметки',
],
'periods' => [
'overdue_1_30' => '1-30 дни просрочие',
'overdue_30_60' => '30-60 дни просрочие',
'overdue_60_90' => '60-90 дни просрочие',
'overdue_90_un' => '> 90 дни просрочие',
],
];

View File

@ -3,16 +3,29 @@
return [
'account_name' => 'Kontonavn',
'number' => 'Nummer',
'account_balance' => 'Kontobalance',
'number' => 'Kontonummer',
'opening_balance' => 'Åbningsbalance',
'current_balance' => 'Nuværende saldo',
'bank_name' => 'Banknavn',
'bank_phone' => 'Telefon bank',
'bank_phone' => 'Bank telefon',
'bank_address' => 'Bank adresse',
'default_account' => 'Standardkonto',
'incoming' => 'Indgående',
'outgoing' => 'Udgående',
'see_performance' => 'Oversigt',
'create_report' => 'Hvis du vil se oversigten over den enkelte konto, kan du oprette en indtægt- vs. udgiftsrapport.',
'banks' => 'Bank|Banker',
'credit_cards' => 'Kreditkort|Kreditkort',
'form_description' => [
'general' => 'Brug typen kreditkort til negativ åbningssaldo. Nummeret er vigtigt for at afstemme konti korrekt. En standard konto vil registrere alle transaktioner, hvis ikke valgt på anden måde.',
'bank' => 'Du kan have flere bankkonti i mere end én bank. Optagelse af oplysninger om din bank vil gøre det lettere at matche transaktioner i din bank.',
],
'no_records' => [
'transactions' => 'Der er endnu ingen transaktion på denne konto. Opret en ny nu.',
'transfers' => 'Der er endnu ingen transaktioner til/fra denne konto. Opret en ny nu.',
],
];

View File

@ -2,40 +2,92 @@
return [
'auth' => 'Godkendelse',
'profile' => 'Profil',
'logout' => 'Log ud',
'login' => 'Log ind',
'forgot' => 'Glemt',
'login_to' => 'Log ind for at starte din session',
'remember_me' => 'Husk mig',
'forgot_password' => 'Jeg har glemt min adgangskode',
'reset_password' => 'Nulstil adgangskode',
'change_password' => 'Skift adgangskode',
'enter_email' => 'Indtast din mailadresse',
'current_email' => 'Nuværende e-mail',
'reset' => 'Nulstil',
'never' => 'Aldrig',
'landing_page' => 'Startside',
'personal_information' => 'Personlig information',
'register_user' => 'Registrerer Bruger',
'register' => 'Registrer',
'form_description' => [
'personal' => 'Invitationslinket vil blive sendt til den nye bruger, så sørg for at e-mail-adressen er korrekt. De vil være i stand til at indtaste deres adgangskode.',
'assign' => 'Brugeren vil have adgang til de valgte virksomheder. Du kan begrænse tilladelserne fra siden <a href=":url" class="border-b border-black">roller</a>.',
'preferences' => 'Vælg brugerens standardsprog. Du kan også indstille startsiden efter at brugeren logger ind.',
],
'password' => [
'pass' => 'Adgangskode',
'pass_confirm' => 'Bekræft adgangskode',
'current' => 'Adgangskode',
'current_confirm' => 'Bekræft adgangskode',
'new' => 'Ny adgangskode',
'new_confirm' => 'Bekræftelse af ny adgangskode',
'new_confirm' => 'Bekræft ny adgangskode',
],
'error' => [
'self_delete' => 'Fejl: Du kan ikke slette dig selv!',
'self_disable' => 'Fejl: Du kan ikke deaktivere dig selv!',
'unassigned' => 'Fejl: Kan ikke fjerne tildelingen af virksomheden! Firmaet skal tildeles mindst én bruger.',
'no_company' => 'Fejl: Ingen enhed er tilknyttet din konto. Kontakt systemadministratoren.',
],
'login_redirect' => 'Godkendt! Du bliver omdirigeret...',
'failed' => 'Disse legitimationsoplysninger passer ikke med de gemte.',
'throttle' => 'For mange loginforsøg. Prøv igen om :seconds sekunder.',
'disabled' => 'Denne konto er deaktiveret. Kontakt systemadministratoren.',
'notification' => [
'message_1' => 'Du modtager denne e-mail, fordi vi har modtaget en anmodning om nulstilling af adgangskoden til din konto.',
'message_2' => 'Hvis du ikke har bedt om en nulstilling af adgangskoden, skal du ikke gøre yderligere.',
'button' => 'Nulstil adgangskode',
'message_1' => 'Du modtager denne e-mail, fordi vi har modtaget en anmodning om nulstilling af adgangskoden til din konto.',
'message_2' => 'Hvis du ikke har bedt om en nulstilling af adgangskoden, skal du ikke gøre yderligere.',
'button' => 'Nulstil adgangskode',
],
'invitation' => [
'message_1' => 'Du modtager denne e-mail, fordi du er inviteret til at deltage i Akaunting.',
'message_2' => 'Hvis du ikke ønsker at deltage, er der ikke behov for yderligere handling.',
'button' => 'Kom i gang',
],
'information' => [
'invoice' => 'Opret nemt fakturaer',
'reports' => 'Hent detaljerede rapporter',
'expense' => 'Spor enhver udgift',
'customize' => 'Tilpas din Akaunting',
],
'roles' => [
'admin' => [
'name' => 'Admin',
'description' => 'De får fuld adgang til din Akaunting herunder kunder, fakturaer, rapporter, indstillinger og apps.',
],
'manager' => [
'name' => 'Leder',
'description' => 'De får fuld adgang til din Akaunting, men kan ikke administrere brugere og apps.',
],
'customer' => [
'name' => 'Kunde',
'description' => 'De får adgang til kundeportalen og kan betale deres fakturaer online via de betalingsmetoder, du har opsat.',
],
'accountant' => [
'name' => 'Revisor',
'description' => 'De kan få adgang til fakturaer, transaktioner, rapporter og oprette journalposter.',
],
'employee' => [
'name' => 'Medarbejder',
'description' => 'De kan lave udgiftsfordringer og spore tid for tildelte projekter, men kan kun se deres egne oplysninger.',
],
],
];

View File

@ -19,11 +19,13 @@ return [
'total' => 'I alt',
'item_name' => 'Varenavn|Varenavne',
'recurring_bills' => 'Tilbagevendende Regninger|Tilbagevendende Regninger',
'show_discount' => ':discount% rabat',
'add_discount' => 'Tilføj rabat',
'discount_desc' => 'af subtotal',
'payment_made' => 'Betaling fortaget',
'payment_due' => 'Betalingsfrist',
'amount_due' => 'Forfaldent beløb',
'paid' => 'Betalt',
@ -39,8 +41,12 @@ return [
'receive_bill' => 'Modtag faktura',
'make_payment' => 'Opret betaling',
'form_description' => [
'billing' => 'Faktureringsoplysninger vises i din regning. Regningsdato bruges i skrivebordet og rapporter. Vælg den dato, du forventer at betale som forfaldsdato.',
],
'messages' => [
'draft' => 'Dette er et <b>UDKAST</b> til faktura og vil først blive vist i oversigten, når den er afsendt.',
'draft' => 'Dette er et <b>UDKAST</b> til en regning og vil først blive vist i oversigten, når den er markeret som modtaget.',
'status' => [
'created' => 'Oprettet den :date',

View File

@ -0,0 +1,11 @@
<?php
return [
'collapse' => 'Minimer',
'form_description' => [
'general' => 'Kategorien hjælper dig med at klassificere dine elementer, indtægter, udgifter og andre poster.',
],
];

View File

@ -11,4 +11,12 @@ return [
'disable_active' => 'Fejl: Kan ikke deaktivere det aktive selskab. Venligst, skift til et andet først!',
],
'form_description' => [
'general' => 'Denne information er synlig i de poster, du opretter.',
'billing' => 'Moms nummeret vises i hver faktura / regning. Skrivebordet og rapporter er vist i standard valuta.',
'address' => 'Adressen vil blive brugt i fakturaer, regninger og andre poster, som du sender.',
],
'skip_step' => 'Spring over',
];

View File

@ -1,6 +1,7 @@
<?php
return [
'AF' => 'Afghanistan',
'AX' => 'Åland',
'AL' => 'Albanien',
@ -119,6 +120,7 @@ return [
'KZ' => 'Kasakhstan',
'KE' => 'Kenya',
'KI' => 'Kiribati',
'XK' => 'Kosovo',
'KW' => 'Kuwait',
'KG' => 'Kirgisistan',
'LA' => 'Laos',
@ -250,4 +252,5 @@ return [
'YE' => 'Yemen',
'ZM' => 'Zambia',
'ZW' => 'Zimbabwe',
];

View File

@ -14,6 +14,14 @@ return [
'position' => 'Symbol position',
'before' => 'Før beløbet',
'after' => 'Efter beløb',
]
],
'form_description' => [
'general' => 'Standard valutaen bruges på skrivebordet og rapporter. For andre valutaer skal kursen være lavere end 1 for svagere valutaer og højere end 1 for stærkere valutaer.',
],
'no_currency' => 'Ingen Valuta',
'create_currency' => 'Opret en ny valuta og rediger når som helst fra indstillinger.',
'new_currency' => 'Ny valuta',
];

View File

@ -2,11 +2,29 @@
return [
'can_login' => 'Kan logge ind?',
'user_created' => 'Bruger oprettet',
'can_login' => 'Kan logge ind?',
'can_login_description' => 'Send en invitation til denne bruger, så de kan logge ind på klientportalen.',
'user_created' => 'Bruger oprettet',
'client_portal_description' => 'Kundeportalen er et miljø, hvor du kan dele transaktioner og fakturaer med dine kunder, hvor de registrerer deres forhold til din virksomhed og betaler over, og logger ind, når de vil; med deres adgangskode',
'error' => [
'email' => 'Denne mail er allerede registreret.',
'email' => 'Denne mail er allerede registreret.',
],
'client_portal_text' => [
'can' => 'Denne kunde kan logge ind på kundeportalen.',
'cant' => 'Denne kunde kan ikke logge ind på kundeportalen.',
],
'form_description' => [
'general' => 'Din kundes kontaktoplysninger vises på fakturaer og deres profiler. Du kan også tillade dine kunder at logge ind for at spore de fakturaer, du sender dem, ved at markere boksen nedenfor.',
'billing' => 'Moms nummeret vises i hver faktura, der er udstedt til kunden. Den valgte valuta bliver standard valuta for denne kunde.',
'address' => 'Adressen er nødvendig for fakturaerne, så du skal tilføje faktureringsadresseoplysninger for din kunde.',
],
'no_records' => [
'invoices' => 'Der er endnu ingen faktura for denne kunde. Opret en ny nu.',
'transactions' => 'Der er endnu ingen transaktion for denne kunde. Opret en ny nu.',
],
];

View File

@ -8,4 +8,8 @@ return [
'disable_last' => 'Fejl: Kan ikke deaktivere det sidste skrivebord. Venligst, opret et nyt først!',
],
'form_description' => [
'general' => 'Vælg de brugere du vil have, skal have adgang til det nye skrivebord.',
],
];

View File

@ -29,6 +29,11 @@ return [
'body' => 'Hej,<br /><br />Baseret på den tilbagevendende faktura til {customer_name} er fakturanr. <strong>{invoice_number}</strong> automatisk blevet genereret.<br /><br />Du kan se fakturaoplysningerne på følgende link: <a href="{invoice_admin_link}">{invoice_number}</a>.<br / ><br />Med venlig hilsen<br />{company_name}',
],
'invoice_view_admin' => [
'subject' => 'Faktura {invoice_number} set',
'body' => 'Hej,<br /><br />{customer_name} har set faktura <strong>{invoice_number}</strong>.<br /><br />Du kan se fakturaoplysninger fra følgende link: <a href="{invoice_admin_link}">{invoice_number}</a>.<br /><br />Venlig hilsen,<br />{company_name}',
],
'invoice_payment_customer' => [
'subject' => 'Betaling for faktura nr. {invoice_number} er modtaget',
'body' => 'Kære {customer_name},<br /><br />Tak for din betaling. Find betalingsdetaljerne herunder:<br /><br />-------------------------------------------------<br /><br />Antal: <strong>{transaction_total}<br /></strong>Dato: <strong>{transaction_paid_date}</strong><br />Fakturanummer: <strong>{invoice_number}<br /><br /></strong>-------------------------------------------------<br /><br />Du kan altid se betalingsdetaljerne på dette link: <a href="{invoice_guest_link}">{invoice_number}</a>.<br /><br />Har du spørgsmål, er du velkommen til at kontakte os.<br /><br />Med venlig hilsen,<br />{company_name}',
@ -49,13 +54,13 @@ return [
'body' => 'Hej,<br /><br /> Baseret på {vendor_name}\'s tilbagevendende betaling, er faktura nummer <strong>{bill_number}</strong> automatisk genereret.<br /><br />Du kan se fakturadetaljerne på dette link: <a href="{bill_admin_link}">{bill_number}</a>.<br /><br />Med venlig hilsen,<br />{company_name}',
],
'revenue_new_customer' => [
'subject' => '{revenue_date} betaling oprettet',
'body' => 'Kære {customer_name},<br /><br />Vi har forberedt følgende betaling. <br /><br />Du kan se betalingsdetaljerne på følgende link: <a href="{revenue_guest_link}">{revenue_date}</a>.<br /><br />Du er velkommen til at kontakte os, hvis du har spørgsmål til betalingen.<br /><br />Venlig hilsen,<br />{company_name}',
'payment_received_customer' => [
'subject' => 'Din kvittering fra {company_name}',
'body' => 'Kære {contact_name},<br /><br />Tak for betalingen. <br /><br />Du kan se betalingsoplysningerne fra følgende link: <a href="{payment_guest_link}">{payment_date}</a>.<br /><br />Du er velkommen til at kontakte os med spørgsmål.<br /><br />Med venlig hilsen,<br />{company_name}',
],
'payment_new_vendor' => [
'subject' => '{revenue_date} betaling oprettet',
'payment_made_vendor' => [
'subject' => 'Betaling foretaget af {company_name}',
'body' => 'Kære {vendor_name},<br /><br />Vi har forberedt følgende betaling. <br /><br />Du kan se betalingsdetaljerne følgende link: <a href="{payment_admin_link}">{payment_date}</a>.<br /><br />Du er velkommen til at kontakte os, hvis du har spørgsmål.<br /><br />Venlig hilsen,<br />{company_name}
',
],

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