Merge branch 'master' of https://github.com/brkcvn/akaunting into form-elements

This commit is contained in:
Burak Civan 2022-06-27 10:10:50 +03:00
commit 7fa6edbd9f
24 changed files with 330 additions and 126 deletions

View File

@ -14,6 +14,7 @@ use App\Exports\Common\Reports as Export;
use App\Models\Common\Report as Model; use App\Models\Common\Report as Model;
use App\Models\Document\Document; use App\Models\Document\Document;
use App\Models\Setting\Category; use App\Models\Setting\Category;
use App\Traits\Charts;
use App\Traits\DateTime; use App\Traits\DateTime;
use App\Traits\SearchString; use App\Traits\SearchString;
use App\Traits\Translations; use App\Traits\Translations;
@ -23,7 +24,7 @@ use Illuminate\Support\Str;
abstract class Report abstract class Report
{ {
use DateTime, SearchString, Translations; use Charts, DateTime, SearchString, Translations;
public $model; public $model;
@ -60,9 +61,19 @@ abstract class Report
'colors' => [ 'colors' => [
'#6da252', '#6da252',
], ],
'yaxis' => [
'labels' => [
'formatter' => '',
],
],
], ],
'donut' => [ 'donut' => [
// 'yaxis' => [
'labels' => [
'formatter' => '',
],
],
], ],
]; ];
@ -100,6 +111,7 @@ abstract class Report
$this->setRows(); $this->setRows();
$this->loadData(); $this->loadData();
$this->setColumnWidth(); $this->setColumnWidth();
$this->setChartLabelFormatter();
$this->loaded = true; $this->loaded = true;
} }
@ -284,6 +296,12 @@ abstract class Report
$this->column_name_width = $this->column_value_width = $width; $this->column_name_width = $this->column_value_width = $width;
} }
public function setChartLabelFormatter()
{
$this->chart['bar']['yaxis']['labels']['formatter'] = $this->getFormatLabel();
$this->chart['donut']['yaxis']['labels']['formatter'] = $this->getFormatLabel('percent');
}
public function setYear() public function setYear()
{ {
$this->year = $this->getSearchStringValue('year', Date::now()->year); $this->year = $this->getSearchStringValue('year', Date::now()->year);

View File

@ -3,6 +3,7 @@
namespace App\Traits; namespace App\Traits;
use Akaunting\Apexcharts\Chart; use Akaunting\Apexcharts\Chart;
use Balping\JsonRaw\Raw;
trait Charts trait Charts
{ {
@ -89,4 +90,79 @@ trait Charts
return $chart; return $chart;
} }
public function getFormatLabel($type = 'money', $position = null)
{
$label = '';
$decimal_mark = str_replace("'", "\\'", config('money.' . setting('default.currency') . '.decimal_mark'));
$thousands_separator = str_replace("'", "\\'", config('money.' . setting('default.currency') . '.thousands_separator'));
$symbol = str_replace("'", "\\'", config('money.' . setting('default.currency') . '.symbol'));
$symbol_first = str_replace("'", "\\'", config('money.' . setting('default.currency') . '.symbol_first'));
$precision = str_replace("'", "\\'", config('money.' . setting('default.currency') . '.precision'));
$percent_position = $position ?: setting('localisation.percent_position');
switch ($type) {
case 'percent':
$label = new Raw("function(value) {
" . ($percent_position == 'right' ? "return value + '%';" : "return '%' + value;") . "
}");
break;
default:
$label = new Raw("function(value) {
const moneySettings = {
decimal: '" . $decimal_mark . "',
thousands: '". $thousands_separator . "',
symbol: '" . $symbol . "',
isPrefix: '" . $symbol_first . "',
precision: '" . $precision . "',
};
const formattedCurrency = function (input, opt = moneySettings) {
if (typeof input === 'number') {
input = input.toFixed(fixed(opt.precision))
}
function fixed (precision) {
return Math.max(0, Math.min(precision, 20));
};
function toStr(value) {
return value ? value.toString() : '';
};
function numbersToCurrency(numbers, precision) {
var exp = Math.pow(10, precision);
var float = parseFloat(numbers) / exp;
return float.toFixed(fixed(precision));
};
function joinIntegerAndDecimal (integer, decimal, separator) {
return decimal ? integer + separator + decimal : integer;
};
if (typeof input === 'number') {
input = input.toFixed(fixed(opt.precision));
};
var negative = input.indexOf('-') >= 0 ? '-' : '';
var numbers = toStr(input).replace(/\D+/g, '') || '0';
var currency = numbersToCurrency(numbers, opt.precision);
var parts = toStr(currency).split('.');
var integer = parts[0].replace(/(\d)(?=(?:\d{3})+\b)/gm, ('$1' + opt.thousands));
var decimal = parts[1];
if (opt.isPrefix == 1) {
return opt.symbol + negative + joinIntegerAndDecimal(integer, decimal, opt.decimal);
}
return negative + joinIntegerAndDecimal(integer, decimal, opt.decimal) + opt.symbol;
};
return formattedCurrency(value, moneySettings);
}");
}
return $label;
}
} }

View File

@ -5,13 +5,14 @@ namespace App\Widgets;
use Akaunting\Apexcharts\Chart; use Akaunting\Apexcharts\Chart;
use App\Abstracts\Widget; use App\Abstracts\Widget;
use App\Models\Banking\Transaction; use App\Models\Banking\Transaction;
use App\Traits\Charts;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use App\Utilities\Date; use App\Utilities\Date;
class CashFlow extends Widget class CashFlow extends Widget
{ {
use Currencies, DateTime; use Charts, Currencies, DateTime;
public $default_name = 'widgets.cash_flow'; public $default_name = 'widgets.cash_flow';
@ -53,6 +54,11 @@ class CashFlow extends Widget
'legend' => [ 'legend' => [
'position' => 'top', 'position' => 'top',
], ],
'yaxis' => [
'labels' => [
'formatter' => $this->getFormatLabel(),
],
],
]; ];
$chart = new Chart(); $chart = new Chart();

View File

@ -48,6 +48,12 @@ class ProfitLoss extends Widget
'radius' => '12', 'radius' => '12',
], ],
], ],
'yaxis' => [
'labels' => [
'formatter' => $this->getFormatLabel(),
],
],
]; ];
$chart->setType('bar') $chart->setType('bar')

97
composer.lock generated
View File

@ -8,16 +8,16 @@
"packages": [ "packages": [
{ {
"name": "akaunting/laravel-apexcharts", "name": "akaunting/laravel-apexcharts",
"version": "2.0.2", "version": "2.0.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/akaunting/laravel-apexcharts.git", "url": "https://github.com/akaunting/laravel-apexcharts.git",
"reference": "5d584f362afc080c5506abe13ac7d6ac3865d68f" "reference": "e21687886162efb3717efc5cab57943eed20b366"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/akaunting/laravel-apexcharts/zipball/5d584f362afc080c5506abe13ac7d6ac3865d68f", "url": "https://api.github.com/repos/akaunting/laravel-apexcharts/zipball/e21687886162efb3717efc5cab57943eed20b366",
"reference": "5d584f362afc080c5506abe13ac7d6ac3865d68f", "reference": "e21687886162efb3717efc5cab57943eed20b366",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -71,9 +71,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/akaunting/laravel-apexcharts/issues", "issues": "https://github.com/akaunting/laravel-apexcharts/issues",
"source": "https://github.com/akaunting/laravel-apexcharts/tree/2.0.2" "source": "https://github.com/akaunting/laravel-apexcharts/tree/2.0.3"
}, },
"time": "2022-06-16T20:42:18+00:00" "time": "2022-06-24T12:24:10+00:00"
}, },
{ {
"name": "akaunting/laravel-debugbar-collector", "name": "akaunting/laravel-debugbar-collector",
@ -907,16 +907,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.227.0", "version": "3.228.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "88d803113ade68604ec03c591d65e1e44406ab8e" "reference": "4dad57c95c7ff1dfcea29a7877ce64720b3318c3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/88d803113ade68604ec03c591d65e1e44406ab8e", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4dad57c95c7ff1dfcea29a7877ce64720b3318c3",
"reference": "88d803113ade68604ec03c591d65e1e44406ab8e", "reference": "4dad57c95c7ff1dfcea29a7877ce64720b3318c3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -924,7 +924,7 @@
"ext-json": "*", "ext-json": "*",
"ext-pcre": "*", "ext-pcre": "*",
"ext-simplexml": "*", "ext-simplexml": "*",
"guzzlehttp/guzzle": "^6.5.7 || ^7.4.4", "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
"guzzlehttp/promises": "^1.4.0", "guzzlehttp/promises": "^1.4.0",
"guzzlehttp/psr7": "^1.8.5 || ^2.3", "guzzlehttp/psr7": "^1.8.5 || ^2.3",
"mtdowling/jmespath.php": "^2.6", "mtdowling/jmespath.php": "^2.6",
@ -992,9 +992,9 @@
"support": { "support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues", "issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.227.0" "source": "https://github.com/aws/aws-sdk-php/tree/3.228.3"
}, },
"time": "2022-06-17T18:15:06+00:00" "time": "2022-06-24T20:24:09+00:00"
}, },
{ {
"name": "balping/json-raw-encoder", "name": "balping/json-raw-encoder",
@ -2389,16 +2389,16 @@
}, },
{ {
"name": "egulias/email-validator", "name": "egulias/email-validator",
"version": "3.2", "version": "3.2.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/egulias/EmailValidator.git", "url": "https://github.com/egulias/EmailValidator.git",
"reference": "a5ed8d58ed0c340a7c2109f587951b1c84cf6286" "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a5ed8d58ed0c340a7c2109f587951b1c84cf6286", "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
"reference": "a5ed8d58ed0c340a7c2109f587951b1c84cf6286", "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2445,7 +2445,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/egulias/EmailValidator/issues", "issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.2" "source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
}, },
"funding": [ "funding": [
{ {
@ -2453,7 +2453,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-05-28T22:19:18+00:00" "time": "2022-06-18T20:57:19+00:00"
}, },
{ {
"name": "ezyang/htmlpurifier", "name": "ezyang/htmlpurifier",
@ -2925,22 +2925,22 @@
}, },
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "7.4.4", "version": "7.4.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8" "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/e3ff079b22820c2029d4c2a87796b6a0b8716ad8", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
"reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8", "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-json": "*", "ext-json": "*",
"guzzlehttp/promises": "^1.5", "guzzlehttp/promises": "^1.5",
"guzzlehttp/psr7": "^1.8.3 || ^2.1", "guzzlehttp/psr7": "^1.9 || ^2.4",
"php": "^7.2.5 || ^8.0", "php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0", "psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0" "symfony/deprecation-contracts": "^2.2 || ^3.0"
@ -3029,7 +3029,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/guzzle/issues", "issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.4.4" "source": "https://github.com/guzzle/guzzle/tree/7.4.5"
}, },
"funding": [ "funding": [
{ {
@ -3045,7 +3045,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-06-09T21:39:15+00:00" "time": "2022-06-20T22:16:13+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
@ -3133,16 +3133,16 @@
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "2.3.0", "version": "2.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee" "reference": "13388f00956b1503577598873fffb5ae994b5737"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/83260bb50b8fc753c72d14dc1621a2dac31877ee", "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee", "reference": "13388f00956b1503577598873fffb5ae994b5737",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3166,7 +3166,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.3-dev" "dev-master": "2.4-dev"
} }
}, },
"autoload": { "autoload": {
@ -3228,7 +3228,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/guzzle/psr7/issues", "issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.3.0" "source": "https://github.com/guzzle/psr7/tree/2.4.0"
}, },
"funding": [ "funding": [
{ {
@ -3244,7 +3244,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-06-09T08:26:02+00:00" "time": "2022-06-20T21:43:11+00:00"
}, },
{ {
"name": "hoa/compiler", "name": "hoa/compiler",
@ -4473,16 +4473,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v9.17.0", "version": "v9.18.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "091e287678ac723c591509ca6374e4ded4a99b1c" "reference": "93a1296bca43c1ca8dcb5df8f97107e819a71499"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/091e287678ac723c591509ca6374e4ded4a99b1c", "url": "https://api.github.com/repos/laravel/framework/zipball/93a1296bca43c1ca8dcb5df8f97107e819a71499",
"reference": "091e287678ac723c591509ca6374e4ded4a99b1c", "reference": "93a1296bca43c1ca8dcb5df8f97107e819a71499",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4494,7 +4494,7 @@
"fruitcake/php-cors": "^1.2", "fruitcake/php-cors": "^1.2",
"laravel/serializable-closure": "^1.0", "laravel/serializable-closure": "^1.0",
"league/commonmark": "^2.2", "league/commonmark": "^2.2",
"league/flysystem": "^3.0", "league/flysystem": "^3.0.16",
"monolog/monolog": "^2.0", "monolog/monolog": "^2.0",
"nesbot/carbon": "^2.53.1", "nesbot/carbon": "^2.53.1",
"php": "^8.0.2", "php": "^8.0.2",
@ -4570,7 +4570,7 @@
"pda/pheanstalk": "^4.0", "pda/pheanstalk": "^4.0",
"phpstan/phpstan": "^1.4.7", "phpstan/phpstan": "^1.4.7",
"phpunit/phpunit": "^9.5.8", "phpunit/phpunit": "^9.5.8",
"predis/predis": "^1.1.9", "predis/predis": "^1.1.9|^2.0",
"symfony/cache": "^6.0" "symfony/cache": "^6.0"
}, },
"suggest": { "suggest": {
@ -4596,7 +4596,7 @@
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
"pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
"phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).",
"predis/predis": "Required to use the predis connector (^1.1.9).", "predis/predis": "Required to use the predis connector (^1.1.9|^2.0).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
"symfony/cache": "Required to PSR-6 cache bridge (^6.0).", "symfony/cache": "Required to PSR-6 cache bridge (^6.0).",
@ -4648,7 +4648,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2022-06-07T15:09:32+00:00" "time": "2022-06-21T14:40:11+00:00"
}, },
{ {
"name": "laravel/sanctum", "name": "laravel/sanctum",
@ -12660,16 +12660,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "9.5.20", "version": "9.5.21",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -12703,7 +12703,6 @@
"sebastian/version": "^3.0.2" "sebastian/version": "^3.0.2"
}, },
"require-dev": { "require-dev": {
"ext-pdo": "*",
"phpspec/prophecy-phpunit": "^2.0.1" "phpspec/prophecy-phpunit": "^2.0.1"
}, },
"suggest": { "suggest": {
@ -12747,7 +12746,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21"
}, },
"funding": [ "funding": [
{ {
@ -12759,7 +12758,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-04-01T12:37:26+00:00" "time": "2022-06-19T12:14:25+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@ -14179,5 +14178,5 @@
"ext-zip": "*" "ext-zip": "*"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.3.0" "plugin-api-version": "2.2.0"
} }

View File

@ -10,15 +10,15 @@ return [
'minor' => '0', 'minor' => '0',
'patch' => '2', 'patch' => '3',
'build' => '', 'build' => '',
'status' => 'Stable', 'status' => 'Stable',
'date' => '18-June-2022', 'date' => '25-June-2022',
'time' => '01:00', 'time' => '10:00',
'zone' => 'GMT +3', 'zone' => 'GMT +3',

View File

@ -3,6 +3,7 @@
return [ return [
'account_name' => 'اسم الحساب', 'account_name' => 'اسم الحساب',
'account_balance' => 'رصيد الحساب',
'number' => 'الرقم', 'number' => 'الرقم',
'opening_balance' => 'الرصيد الافتتاحي', 'opening_balance' => 'الرصيد الافتتاحي',
'current_balance' => 'الرصيد الحالي', 'current_balance' => 'الرصيد الحالي',
@ -14,5 +15,17 @@ return [
'outgoing' => 'الصادر', 'outgoing' => 'الصادر',
'see_performance' => 'تصفح الأداء', 'see_performance' => 'تصفح الأداء',
'create_report' => 'إذا كنت ترغب في رؤية أداء الحساب. يمكنك إنشاء نموذج تقرير الدخل مقابل المصروفات.', 'create_report' => 'إذا كنت ترغب في رؤية أداء الحساب. يمكنك إنشاء نموذج تقرير الدخل مقابل المصروفات.',
'banks' => 'البنك|البنوك',
'credit_cards' => 'بطاقة الائتمان|بطاقات الائتمان',
'form_description' => [
'general' => 'استخدم نوع بطاقة الائتمان لرصيد الفتح السالب. الرقم ضروري لمطابقة الحسابات بشكل صحيح. الحساب الافتراضي سوف يسجل جميع المعاملات إذا لم يتم تحديد خلاف ذلك.',
'bank' => 'قد يكون لديك حسابات مصرفية متعددة في أكثر من مصرف. تسجيل المعلومات حول المصرف الخاص بك سيسهل عملية مطابقة المعاملات داخل المصرف الخاص بك.',
],
'no_records' => [
'transactions' => 'لا توجد معاملات في هذا الحساب حتى الآن. أنشئ معاملة جديدة الآن.',
'transfers' => 'لا يوجد أي تحويلات من أو إلى هذا الحساب حتى الآن. أنشئ تحويل جديد الآن.',
],
]; ];

View File

@ -9,4 +9,12 @@ return [
'compound' => 'مُركب', 'compound' => 'مُركب',
'fixed' => 'ثابت', 'fixed' => 'ثابت',
'withholding' => 'حجز', 'withholding' => 'حجز',
'no_taxes' => 'لا توجد ضرائب',
'create_task' => 'إنشاء ضريبة جديدة ويمكن تحريرها في أي وقت من الإعدادات.',
'new_tax' => 'ضريبة جديدة',
'form_description' => [
'general' => 'يتم حساب الضريبة الشاملة إلى سعر العنصر. يتم حساب الضريبة المركبة فوق الضرائب الأخرى. يتم تطبيق الضريبة الثابتة كمبلغ وليس كنسبة مئوية.',
],
]; ];

View File

@ -270,6 +270,8 @@ return [
'placeholder' => [ 'placeholder' => [
'search' => 'Unesite pojam za pretragu', 'search' => 'Unesite pojam za pretragu',
'search_and_filter' => 'Pretraga ili filtriranje pretrage.', 'search_and_filter' => 'Pretraga ili filtriranje pretrage.',
'select_and_filter' => 'Odaberite jednu od dostupnih opcija u nastavku',
'enter_and_filter' => 'Pritisnite enter da filtrirate rezultate ili postavite novi filter',
'contact_search' => 'Unesite :type naziv', 'contact_search' => 'Unesite :type naziv',
'item_search' => 'Unesite naziv predmeta', 'item_search' => 'Unesite naziv predmeta',
], ],

View File

@ -270,6 +270,8 @@ return [
'placeholder' => [ 'placeholder' => [
'search' => 'Type to search..', 'search' => 'Type to search..',
'search_and_filter' => 'Search or filter results..', 'search_and_filter' => 'Search or filter results..',
'select_and_filter' => 'Select one of the available options below',
'enter_and_filter' => 'Hit enter to filter the results, or set a new filter',
'contact_search' => 'Type a :type name', 'contact_search' => 'Type a :type name',
'item_search' => 'Type an item name', 'item_search' => 'Type an item name',
], ],

View File

@ -43,6 +43,11 @@ return [
'apps_managing' => 'Check the most trending apps and start managing your finances professionally today.', 'apps_managing' => 'Check the most trending apps and start managing your finances professionally today.',
'ready' => 'Ready', 'ready' => 'Ready',
'popular_this_week' => 'Popular this week', 'popular_this_week' => 'Popular this week',
'install_cloud' => 'Use on Cloud Service',
'get_cloud' => 'Get Cloud Service',
'get_premium_cloud' => 'Get Premium Cloud',
'only_works_cloud' => 'This app only works on <strong>Cloud Service</strong>.',
'only_premium_plan' => 'This app only works on <strong>Cloud Premium Service</strong>.',
'about' => 'About', 'about' => 'About',

View File

@ -270,6 +270,8 @@ return [
'placeholder' => [ 'placeholder' => [
'search' => 'Tapez pour rechercher..', 'search' => 'Tapez pour rechercher..',
'search_and_filter' => 'Rechercher ou filtrer les résultats...', 'search_and_filter' => 'Rechercher ou filtrer les résultats...',
'select_and_filter' => 'Sélectionnez l\'une des options disponibles ci-dessous',
'enter_and_filter' => 'Appuyer sur entrée pour filtrer les résultats, ou définir un nouveau filtre',
'contact_search' => 'Tapez un nom de :type', 'contact_search' => 'Tapez un nom de :type',
'item_search' => 'Tapez un nom d\'élément', 'item_search' => 'Tapez un nom d\'élément',
], ],

View File

@ -15,7 +15,7 @@ return [
'general' => 'Ici, vous pouvez entrer les informations générales du journal manuel tels que la date, le numéro, la devise, la description, etc.', 'general' => 'Ici, vous pouvez entrer les informations générales du journal manuel tels que la date, le numéro, la devise, la description, etc.',
'assign_income' => 'Sélectionnez une catégorie et un client pour rendre vos rapports plus détaillés.', 'assign_income' => 'Sélectionnez une catégorie et un client pour rendre vos rapports plus détaillés.',
'assign_expense' => 'Sélectionnez une catégorie et un vendeur pour rendre vos rapports plus détaillés.', 'assign_expense' => 'Sélectionnez une catégorie et un vendeur pour rendre vos rapports plus détaillés.',
'other' => 'Entrez une référence pour conserver la transaction liée à vos dossiers.', 'other' => 'Entrez un numéro et une référence pour conserver la transaction liée à vos dossiers.',
], ],
'slider' => [ 'slider' => [

View File

@ -1,6 +1,7 @@
<?php <?php
return [ return [
'AF' => 'Afganistāna', 'AF' => 'Afganistāna',
'AX' => 'Ālandu salas', 'AX' => 'Ālandu salas',
'AL' => 'Albānija', 'AL' => 'Albānija',
@ -119,6 +120,7 @@ return [
'KZ' => 'Kazahstāna', 'KZ' => 'Kazahstāna',
'KE' => 'Kenija', 'KE' => 'Kenija',
'KI' => 'Kiribati', 'KI' => 'Kiribati',
'XK' => 'Kosova',
'KW' => 'Kuveita', 'KW' => 'Kuveita',
'KG' => 'Kirgizstāna', 'KG' => 'Kirgizstāna',
'LA' => 'Laosa', 'LA' => 'Laosa',
@ -250,4 +252,5 @@ return [
'YE' => 'Jemena', 'YE' => 'Jemena',
'ZM' => 'Zambija', 'ZM' => 'Zambija',
'ZW' => 'Zimbabve', 'ZW' => 'Zimbabve',
]; ];

View File

@ -270,6 +270,8 @@ return [
'placeholder' => [ 'placeholder' => [
'search' => 'Ierakstiet, lai meklētu..', 'search' => 'Ierakstiet, lai meklētu..',
'search_and_filter' => 'Meklēšanas vai filtrēšanas rezultāti..', 'search_and_filter' => 'Meklēšanas vai filtrēšanas rezultāti..',
'select_and_filter' => 'Tālāk atlasiet vienu no pieejamajām opcijām',
'enter_and_filter' => 'Nospiediet Enter, lai filtrētu rezultātus, vai iestatiet jaunu filtru',
'contact_search' => 'Ierakstiet :type nosaukumu', 'contact_search' => 'Ierakstiet :type nosaukumu',
'item_search' => 'Ierakstiet vienuma nosaukumu', 'item_search' => 'Ierakstiet vienuma nosaukumu',
], ],

View File

@ -43,6 +43,11 @@ return [
'apps_managing' => 'Verifique os apps mais populares e comece a gerenciar suas finanças profissionalmente hoje.', 'apps_managing' => 'Verifique os apps mais populares e comece a gerenciar suas finanças profissionalmente hoje.',
'ready' => 'Disponível', 'ready' => 'Disponível',
'popular_this_week' => 'Popular dessa semana', 'popular_this_week' => 'Popular dessa semana',
'install_cloud' => 'Usar Serviço na Nuvem',
'get_cloud' => 'Obter Serviço de Nuvem',
'get_premium_cloud' => 'Obter Nuvem Premium',
'only_works_cloud' => 'Este aplicativo só funciona no <strong>Serviço na Nuvem</strong>.',
'only_premium_plan' => 'Este aplicativo funciona apenas com o <strong>Serviço Premium na Nuvem</strong>.',
'about' => 'Sobre', 'about' => 'Sobre',

View File

@ -9,6 +9,7 @@ return [
'mark_read' => 'Marcar como lido', 'mark_read' => 'Marcar como lido',
'mark_read_all' => 'Marcar todos como lidos', 'mark_read_all' => 'Marcar todos como lidos',
'empty' => 'Woohoo, zero notificações!', 'empty' => 'Woohoo, zero notificações!',
'new_apps' => ':app está disponível. <a href=":url">Confira agora</a>!',
'update' => [ 'update' => [

View File

@ -3,6 +3,7 @@
return [ return [
'account_name' => 'اکاؤنٹ کا نام', 'account_name' => 'اکاؤنٹ کا نام',
'account_balance' => 'اکاؤنٹ بیلنس',
'number' => 'بینک میں اکائونٹ نمبر', 'number' => 'بینک میں اکائونٹ نمبر',
'opening_balance' => 'افتتاحی رقم', 'opening_balance' => 'افتتاحی رقم',
'current_balance' => 'موجودہ رقم', 'current_balance' => 'موجودہ رقم',
@ -10,5 +11,21 @@ return [
'bank_phone' => 'بینک کا فون', 'bank_phone' => 'بینک کا فون',
'bank_address' => 'بینک کا پتہ', 'bank_address' => 'بینک کا پتہ',
'default_account' => 'طے شدہ اکاؤنٹ', 'default_account' => 'طے شدہ اکاؤنٹ',
'incoming' => 'آمدہ رقم',
'outgoing' => 'خرچ',
'see_performance' => 'کارکردگی دیکھیں',
'create_report' => 'اگر آپ کھاتے کی کارکردگی دیکھنا چاہتے ہیں تو آپ آمدنی بمقابلہ خرچہ کی فرضی روپورٹ بنائیں۔',
'banks' => 'بینک | بینکوں',
'credit_cards' => 'کریڈٹ کارڈ | کریڈٹ کارڈز',
'form_description' => [
'general' => 'منفی اوپنیگ بیلینس کے لئے کریڈٹ کارڈ استعمال کریں۔کھاتے کودرست طریقے سے ملانے کیلئےنمبر ضروری ہیں۔اگر کوئی کھاتہ منتخب نہیں کیا گیا تو طے شدہ کھاتے میں لین دین ریکارڈ ہو گا۔',
'bank' => 'آپ کے ایک سے زیادہ بینکوں میں متعدد بینک اکاؤنٹس ہوسکتے ہیں۔ آپ کے بینک کے بارے میں معلومات کو ریکارڈ کرنے سے بینک کے اندر ہونے والی لین دین کو ملانا آسان ہو جائے گا۔',
],
'no_records' => [
'transactions' => 'اس اکائونٹ میں کوئی لین دین نہیں ہوا۔ ابھی ایک نیا لین دین بنائیں۔',
'transfers' => 'اس اکائونٹ میں کوئی لین دین نہیں ہوا۔ ابھی ایک نیا لین دین بنائیں۔',
],
]; ];

View File

@ -1,6 +1,11 @@
@props(['module', 'installed', 'enable']) @props(['module', 'installed', 'enable'])
@if ($installed) @if (! empty($module->plan))
<a href="{{ $module->action_url }}" class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
{{ trans('modules.get_premium_cloud') }}
</a>
@elseif (in_array('onprime', $module->where_to_use))
@if ($installed)
@can('delete-modules-item') @can('delete-modules-item')
<a href="{{ route('apps.app.uninstall', $module->slug) }}" class="bg-red text-white rounded-md text-sm text-center w-1/2 py-2 truncate"> <a href="{{ route('apps.app.uninstall', $module->slug) }}" class="bg-red text-white rounded-md text-sm text-center w-1/2 py-2 truncate">
{{ trans('modules.button.uninstall') }} {{ trans('modules.button.uninstall') }}
@ -18,7 +23,7 @@
</a> </a>
@endif @endif
@endcan @endcan
@else @else
@can('create-modules-item') @can('create-modules-item')
@if ($module->install) @if ($module->install)
@if (! empty($module->isPurchase) && (! empty($module->purchase_type) && $module->purchase_type == 'monthly')) @if (! empty($module->isPurchase) && (! empty($module->purchase_type) && $module->purchase_type == 'monthly'))
@ -42,4 +47,15 @@
</a> </a>
@endif @endif
@endcan @endcan
@endif
@else
@if ($module->install)
<a href="{{ $module->action_url }}" class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
{{ trans('modules.install_cloud') }}
</a>
@else
<a href="{{ $module->action_url }}" class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate" target="_blank">
{{ trans('modules.get_cloud') }}
</a>
@endif
@endif @endif

View File

@ -1,11 +1,25 @@
@props(['module']) @props(['module'])
<div x-show="price_type == true" class="text-center text-sm mt-3 mb--2"> @if (! empty($module->plan))
<span style="height: 21px;display: block;"></span> <div class="text-center text-sm mt-3 mb--2 bg-red-100 rounded-lg p-2 cursor-default">
</div> <span class="text-sm text-red-700">
{!! trans('modules.only_premium_plan') !!}
<div x-show="price_type == false" class="text-center text-sm mt-3 mb--2">
<span style="font-size: 12px;">
<span class="text-danger">*</span> <a href="https://akaunting.com/features/why-akaunting-cloud?utm_source=app_show&utm_medium=software&utm_campaign={{ str_replace('-', '', $module->slug) }}" target="_blank">{!! trans('modules.information_monthly') !!}</a>
</span> </span>
</div> </div>
@if (in_array('onprime', $module->where_to_use))
<div x-show="price_type == true" class="text-center text-sm mt-3 mb--2">
<span style="height: 21px;display: block;"></span>
</div>
<div x-show="price_type == false" class="text-center text-sm mt-3 mb--2">
<span style="font-size: 12px;">
<span class="text-red">*</span> <a href="https://akaunting.com/features/why-akaunting-cloud?utm_source=app_show&utm_medium=software&utm_campaign={{ str_replace('-', '', $module->slug) }}" target="_blank">{!! trans('modules.information_monthly') !!}</a>
</span>
</div>
@else
<div class="text-center text-sm mt-3 mb--2 bg-red-100 rounded-lg p-2 cursor-default">
<span class="text-sm text-red-700">
{!! trans('modules.only_works_cloud') !!}
</span>
</div>
@endif

View File

@ -1,23 +1,21 @@
<x-form> <x-form>
<div class="lg:absolute lg:ltr:right-0 lg:rtl:left-0 top-4"> <div class="lg:absolute lg:ltr:right-0 lg:rtl:left-0 top-4" x-on:click="price_type = ! price_type">
<label for="priceToggle" class="flex items-center cursor-pointer" x-on:click="price_type = ! price_type"> <div class="relative" x-model="price_type">
<div class="relative"> <div class="w-36 flex items-center bg-gray-200 p-1 ltr:mr-2 rtl:ml-2 rounded-lg">
<input type="checkbox" id="priceToggle" class="sr-only" x-model="price_type"> <button type="button"
class="w-18 flex justify-center px-2"
<div class="bg-purple-300 w-24 h-7 rounded-full"> x-bind:class="price_type == true ? 'btn-outline-primary' : 'bg-white rounded-lg'"
<span id="apps-toggle-monthly" class="monthly-badge text-xs text-white float-left ml-3 mt-1.5" x-show="price_type == true"> >
{{ trans('general.monthly') }} {{ trans('general.monthly') }}
</span> </button>
<span id="apps-toggle-yearly" class="yearly-badge text-xs text-white float-right mr-3 mt-1.5" x-show="price_type == false"> <button type="button"
class="w-18 flex justify-center px-2"
x-bind:class="price_type == false ? 'btn-outline-primary' : 'bg-white rounded-lg'"
>
{{ trans('general.yearly') }} {{ trans('general.yearly') }}
</span> </button>
</div> </div>
<div class="dot absolute left-1 top-1 bg-white w-5 h-5 rounded-full transition"
x-bind:style="price_type == true ? 'transform: translateX(333%)' : ' transform: translateX(0) '"
></div>
</div> </div>
</label>
</div> </div>
</x-form> </x-form>

View File

@ -41,7 +41,9 @@
<div class="flex justify-between"> <div class="flex justify-between">
<span> <span>
@foreach ($module->categories as $module_category) @foreach ($module->categories as $module_category)
<a href="{{ route('apps.categories.show', $module_category->slug) }}">{{ $module_category->name }}</a> </br> <a href="{{ route('apps.categories.show', $module_category->slug) }}" class="text-sm">
{{ $module_category->name }}
</a>
@endforeach @endforeach
</span> </span>
</div> </div>
@ -63,6 +65,7 @@
<i class="material-icons text-sm">star_border</i> <i class="material-icons text-sm">star_border</i>
@endfor @endfor
</div> </div>
<p class="text-xs"> <p class="text-xs">
@if ($module->total_review) @if ($module->total_review)
( {{ $module->total_review }} {{ trans('modules.tab.reviews') }} ) ( {{ $module->total_review }} {{ trans('modules.tab.reviews') }} )
@ -73,10 +76,16 @@
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<div class="flex gap-4 items-baseline"> <div class="flex gap-4 items-baseline">
<h3 class="text-4xl font-semibold text-black">{{ $module->name }}</h3> <h3 class="text-4xl font-semibold text-black">
{{ $module->name }}
</h3>
@if ($module->vendor_name) @if ($module->vendor_name)
<span class="text-sm"> by <a class="border-b border-dashed border-black transition-all hover:font-semibold" href="{{ route('apps.vendors.show', $module->vendor->slug) }}">{{ $module->vendor_name }}</a></span> <span class="text-sm">
by <a class="border-b border-dashed border-black transition-all hover:font-semibold" href="{{ route('apps.vendors.show', $module->vendor->slug) }}">
{{ $module->vendor_name }}
</a>
</span>
@endif @endif
</div> </div>

View File

@ -42,7 +42,9 @@
<div class="flex justify-between"> <div class="flex justify-between">
<span> <span>
@foreach ($module->categories as $module_category) @foreach ($module->categories as $module_category)
<a href="{{ route('apps.categories.show', $module_category->slug) }}">{{ $module_category->name }}</a> </br> <a href="{{ route('apps.categories.show', $module_category->slug) }}" class="text-sm">
{{ $module_category->name }}
</a>
@endforeach @endforeach
</span> </span>
</div> </div>

View File

@ -1,5 +1,5 @@
<script type="text/javascript"><!-- <script type="text/javascript"><!--
var options = {!! json_encode($chart->getOptions()) !!}; var options = {!! $chart->getOptions() !!};
var chart_{{ $chart->getId() }} = new ApexCharts(document.querySelector("#{!! $chart->getId() !!}"), options); var chart_{{ $chart->getId() }} = new ApexCharts(document.querySelector("#{!! $chart->getId() !!}"), options);