Merge branch 'master' of https://github.com/brkcvn/akaunting into form-elements
This commit is contained in:
commit
7fa6edbd9f
@ -14,6 +14,7 @@ use App\Exports\Common\Reports as Export;
|
||||
use App\Models\Common\Report as Model;
|
||||
use App\Models\Document\Document;
|
||||
use App\Models\Setting\Category;
|
||||
use App\Traits\Charts;
|
||||
use App\Traits\DateTime;
|
||||
use App\Traits\SearchString;
|
||||
use App\Traits\Translations;
|
||||
@ -23,7 +24,7 @@ use Illuminate\Support\Str;
|
||||
|
||||
abstract class Report
|
||||
{
|
||||
use DateTime, SearchString, Translations;
|
||||
use Charts, DateTime, SearchString, Translations;
|
||||
|
||||
public $model;
|
||||
|
||||
@ -60,9 +61,19 @@ abstract class Report
|
||||
'colors' => [
|
||||
'#6da252',
|
||||
],
|
||||
|
||||
'yaxis' => [
|
||||
'labels' => [
|
||||
'formatter' => '',
|
||||
],
|
||||
],
|
||||
],
|
||||
'donut' => [
|
||||
//
|
||||
'yaxis' => [
|
||||
'labels' => [
|
||||
'formatter' => '',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@ -100,6 +111,7 @@ abstract class Report
|
||||
$this->setRows();
|
||||
$this->loadData();
|
||||
$this->setColumnWidth();
|
||||
$this->setChartLabelFormatter();
|
||||
|
||||
$this->loaded = true;
|
||||
}
|
||||
@ -284,6 +296,12 @@ abstract class Report
|
||||
$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()
|
||||
{
|
||||
$this->year = $this->getSearchStringValue('year', Date::now()->year);
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace App\Traits;
|
||||
|
||||
use Akaunting\Apexcharts\Chart;
|
||||
use Balping\JsonRaw\Raw;
|
||||
|
||||
trait Charts
|
||||
{
|
||||
@ -89,4 +90,79 @@ trait Charts
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -5,13 +5,14 @@ namespace App\Widgets;
|
||||
use Akaunting\Apexcharts\Chart;
|
||||
use App\Abstracts\Widget;
|
||||
use App\Models\Banking\Transaction;
|
||||
use App\Traits\Charts;
|
||||
use App\Traits\Currencies;
|
||||
use App\Traits\DateTime;
|
||||
use App\Utilities\Date;
|
||||
|
||||
class CashFlow extends Widget
|
||||
{
|
||||
use Currencies, DateTime;
|
||||
use Charts, Currencies, DateTime;
|
||||
|
||||
public $default_name = 'widgets.cash_flow';
|
||||
|
||||
@ -53,6 +54,11 @@ class CashFlow extends Widget
|
||||
'legend' => [
|
||||
'position' => 'top',
|
||||
],
|
||||
'yaxis' => [
|
||||
'labels' => [
|
||||
'formatter' => $this->getFormatLabel(),
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$chart = new Chart();
|
||||
|
@ -48,6 +48,12 @@ class ProfitLoss extends Widget
|
||||
'radius' => '12',
|
||||
],
|
||||
],
|
||||
|
||||
'yaxis' => [
|
||||
'labels' => [
|
||||
'formatter' => $this->getFormatLabel(),
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$chart->setType('bar')
|
||||
|
97
composer.lock
generated
97
composer.lock
generated
@ -8,16 +8,16 @@
|
||||
"packages": [
|
||||
{
|
||||
"name": "akaunting/laravel-apexcharts",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/akaunting/laravel-apexcharts.git",
|
||||
"reference": "5d584f362afc080c5506abe13ac7d6ac3865d68f"
|
||||
"reference": "e21687886162efb3717efc5cab57943eed20b366"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/akaunting/laravel-apexcharts/zipball/5d584f362afc080c5506abe13ac7d6ac3865d68f",
|
||||
"reference": "5d584f362afc080c5506abe13ac7d6ac3865d68f",
|
||||
"url": "https://api.github.com/repos/akaunting/laravel-apexcharts/zipball/e21687886162efb3717efc5cab57943eed20b366",
|
||||
"reference": "e21687886162efb3717efc5cab57943eed20b366",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -71,9 +71,9 @@
|
||||
],
|
||||
"support": {
|
||||
"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",
|
||||
@ -907,16 +907,16 @@
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.227.0",
|
||||
"version": "3.228.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "88d803113ade68604ec03c591d65e1e44406ab8e"
|
||||
"reference": "4dad57c95c7ff1dfcea29a7877ce64720b3318c3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/88d803113ade68604ec03c591d65e1e44406ab8e",
|
||||
"reference": "88d803113ade68604ec03c591d65e1e44406ab8e",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4dad57c95c7ff1dfcea29a7877ce64720b3318c3",
|
||||
"reference": "4dad57c95c7ff1dfcea29a7877ce64720b3318c3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -924,7 +924,7 @@
|
||||
"ext-json": "*",
|
||||
"ext-pcre": "*",
|
||||
"ext-simplexml": "*",
|
||||
"guzzlehttp/guzzle": "^6.5.7 || ^7.4.4",
|
||||
"guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
|
||||
"guzzlehttp/promises": "^1.4.0",
|
||||
"guzzlehttp/psr7": "^1.8.5 || ^2.3",
|
||||
"mtdowling/jmespath.php": "^2.6",
|
||||
@ -992,9 +992,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.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",
|
||||
@ -2389,16 +2389,16 @@
|
||||
},
|
||||
{
|
||||
"name": "egulias/email-validator",
|
||||
"version": "3.2",
|
||||
"version": "3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/egulias/EmailValidator.git",
|
||||
"reference": "a5ed8d58ed0c340a7c2109f587951b1c84cf6286"
|
||||
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a5ed8d58ed0c340a7c2109f587951b1c84cf6286",
|
||||
"reference": "a5ed8d58ed0c340a7c2109f587951b1c84cf6286",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
|
||||
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2445,7 +2445,7 @@
|
||||
],
|
||||
"support": {
|
||||
"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": [
|
||||
{
|
||||
@ -2453,7 +2453,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-28T22:19:18+00:00"
|
||||
"time": "2022-06-18T20:57:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
@ -2925,22 +2925,22 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "7.4.4",
|
||||
"version": "7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8"
|
||||
"reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/e3ff079b22820c2029d4c2a87796b6a0b8716ad8",
|
||||
"reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
|
||||
"reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/promises": "^1.5",
|
||||
"guzzlehttp/psr7": "^1.8.3 || ^2.1",
|
||||
"guzzlehttp/psr7": "^1.9 || ^2.4",
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"psr/http-client": "^1.0",
|
||||
"symfony/deprecation-contracts": "^2.2 || ^3.0"
|
||||
@ -3029,7 +3029,7 @@
|
||||
],
|
||||
"support": {
|
||||
"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": [
|
||||
{
|
||||
@ -3045,7 +3045,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-09T21:39:15+00:00"
|
||||
"time": "2022-06-20T22:16:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
@ -3133,16 +3133,16 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "2.3.0",
|
||||
"version": "2.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee"
|
||||
"reference": "13388f00956b1503577598873fffb5ae994b5737"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/83260bb50b8fc753c72d14dc1621a2dac31877ee",
|
||||
"reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
|
||||
"reference": "13388f00956b1503577598873fffb5ae994b5737",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3166,7 +3166,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.3-dev"
|
||||
"dev-master": "2.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -3228,7 +3228,7 @@
|
||||
],
|
||||
"support": {
|
||||
"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": [
|
||||
{
|
||||
@ -3244,7 +3244,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-09T08:26:02+00:00"
|
||||
"time": "2022-06-20T21:43:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "hoa/compiler",
|
||||
@ -4473,16 +4473,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v9.17.0",
|
||||
"version": "v9.18.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "091e287678ac723c591509ca6374e4ded4a99b1c"
|
||||
"reference": "93a1296bca43c1ca8dcb5df8f97107e819a71499"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/091e287678ac723c591509ca6374e4ded4a99b1c",
|
||||
"reference": "091e287678ac723c591509ca6374e4ded4a99b1c",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/93a1296bca43c1ca8dcb5df8f97107e819a71499",
|
||||
"reference": "93a1296bca43c1ca8dcb5df8f97107e819a71499",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4494,7 +4494,7 @@
|
||||
"fruitcake/php-cors": "^1.2",
|
||||
"laravel/serializable-closure": "^1.0",
|
||||
"league/commonmark": "^2.2",
|
||||
"league/flysystem": "^3.0",
|
||||
"league/flysystem": "^3.0.16",
|
||||
"monolog/monolog": "^2.0",
|
||||
"nesbot/carbon": "^2.53.1",
|
||||
"php": "^8.0.2",
|
||||
@ -4570,7 +4570,7 @@
|
||||
"pda/pheanstalk": "^4.0",
|
||||
"phpstan/phpstan": "^1.4.7",
|
||||
"phpunit/phpunit": "^9.5.8",
|
||||
"predis/predis": "^1.1.9",
|
||||
"predis/predis": "^1.1.9|^2.0",
|
||||
"symfony/cache": "^6.0"
|
||||
},
|
||||
"suggest": {
|
||||
@ -4596,7 +4596,7 @@
|
||||
"nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).",
|
||||
"pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).",
|
||||
"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).",
|
||||
"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).",
|
||||
@ -4648,7 +4648,7 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"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",
|
||||
@ -12660,16 +12660,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.5.20",
|
||||
"version": "9.5.21",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
|
||||
"reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
|
||||
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1",
|
||||
"reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -12703,7 +12703,6 @@
|
||||
"sebastian/version": "^3.0.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-pdo": "*",
|
||||
"phpspec/prophecy-phpunit": "^2.0.1"
|
||||
},
|
||||
"suggest": {
|
||||
@ -12747,7 +12746,7 @@
|
||||
],
|
||||
"support": {
|
||||
"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": [
|
||||
{
|
||||
@ -12759,7 +12758,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-01T12:37:26+00:00"
|
||||
"time": "2022-06-19T12:14:25+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
@ -14179,5 +14178,5 @@
|
||||
"ext-zip": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"plugin-api-version": "2.2.0"
|
||||
}
|
||||
|
@ -10,15 +10,15 @@ return [
|
||||
|
||||
'minor' => '0',
|
||||
|
||||
'patch' => '2',
|
||||
'patch' => '3',
|
||||
|
||||
'build' => '',
|
||||
|
||||
'status' => 'Stable',
|
||||
|
||||
'date' => '18-June-2022',
|
||||
'date' => '25-June-2022',
|
||||
|
||||
'time' => '01:00',
|
||||
'time' => '10:00',
|
||||
|
||||
'zone' => 'GMT +3',
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
return [
|
||||
|
||||
'account_name' => 'اسم الحساب',
|
||||
'account_balance' => 'رصيد الحساب',
|
||||
'number' => 'الرقم',
|
||||
'opening_balance' => 'الرصيد الافتتاحي',
|
||||
'current_balance' => 'الرصيد الحالي',
|
||||
@ -14,5 +15,17 @@ return [
|
||||
'outgoing' => 'الصادر',
|
||||
'see_performance' => 'تصفح الأداء',
|
||||
'create_report' => 'إذا كنت ترغب في رؤية أداء الحساب. يمكنك إنشاء نموذج تقرير الدخل مقابل المصروفات.',
|
||||
'banks' => 'البنك|البنوك',
|
||||
'credit_cards' => 'بطاقة الائتمان|بطاقات الائتمان',
|
||||
|
||||
'form_description' => [
|
||||
'general' => 'استخدم نوع بطاقة الائتمان لرصيد الفتح السالب. الرقم ضروري لمطابقة الحسابات بشكل صحيح. الحساب الافتراضي سوف يسجل جميع المعاملات إذا لم يتم تحديد خلاف ذلك.',
|
||||
'bank' => 'قد يكون لديك حسابات مصرفية متعددة في أكثر من مصرف. تسجيل المعلومات حول المصرف الخاص بك سيسهل عملية مطابقة المعاملات داخل المصرف الخاص بك.',
|
||||
],
|
||||
|
||||
'no_records' => [
|
||||
'transactions' => 'لا توجد معاملات في هذا الحساب حتى الآن. أنشئ معاملة جديدة الآن.',
|
||||
'transfers' => 'لا يوجد أي تحويلات من أو إلى هذا الحساب حتى الآن. أنشئ تحويل جديد الآن.',
|
||||
],
|
||||
|
||||
];
|
||||
|
@ -9,4 +9,12 @@ return [
|
||||
'compound' => 'مُركب',
|
||||
'fixed' => 'ثابت',
|
||||
'withholding' => 'حجز',
|
||||
'no_taxes' => 'لا توجد ضرائب',
|
||||
'create_task' => 'إنشاء ضريبة جديدة ويمكن تحريرها في أي وقت من الإعدادات.',
|
||||
'new_tax' => 'ضريبة جديدة',
|
||||
|
||||
'form_description' => [
|
||||
'general' => 'يتم حساب الضريبة الشاملة إلى سعر العنصر. يتم حساب الضريبة المركبة فوق الضرائب الأخرى. يتم تطبيق الضريبة الثابتة كمبلغ وليس كنسبة مئوية.',
|
||||
],
|
||||
|
||||
];
|
||||
|
@ -270,6 +270,8 @@ return [
|
||||
'placeholder' => [
|
||||
'search' => 'Unesite pojam za pretragu',
|
||||
'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',
|
||||
'item_search' => 'Unesite naziv predmeta',
|
||||
],
|
||||
|
@ -270,6 +270,8 @@ return [
|
||||
'placeholder' => [
|
||||
'search' => 'Type to search..',
|
||||
'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',
|
||||
'item_search' => 'Type an item name',
|
||||
],
|
||||
|
@ -43,6 +43,11 @@ return [
|
||||
'apps_managing' => 'Check the most trending apps and start managing your finances professionally today.',
|
||||
'ready' => 'Ready',
|
||||
'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',
|
||||
|
||||
|
@ -270,6 +270,8 @@ return [
|
||||
'placeholder' => [
|
||||
'search' => 'Tapez pour rechercher..',
|
||||
'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',
|
||||
'item_search' => 'Tapez un nom d\'élément',
|
||||
],
|
||||
|
@ -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.',
|
||||
'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.',
|
||||
'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' => [
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
'AF' => 'Afganistāna',
|
||||
'AX' => 'Ālandu salas',
|
||||
'AL' => 'Albānija',
|
||||
@ -119,6 +120,7 @@ return [
|
||||
'KZ' => 'Kazahstāna',
|
||||
'KE' => 'Kenija',
|
||||
'KI' => 'Kiribati',
|
||||
'XK' => 'Kosova',
|
||||
'KW' => 'Kuveita',
|
||||
'KG' => 'Kirgizstāna',
|
||||
'LA' => 'Laosa',
|
||||
@ -250,4 +252,5 @@ return [
|
||||
'YE' => 'Jemena',
|
||||
'ZM' => 'Zambija',
|
||||
'ZW' => 'Zimbabve',
|
||||
|
||||
];
|
||||
|
@ -270,6 +270,8 @@ return [
|
||||
'placeholder' => [
|
||||
'search' => 'Ierakstiet, lai meklētu..',
|
||||
'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',
|
||||
'item_search' => 'Ierakstiet vienuma nosaukumu',
|
||||
],
|
||||
|
@ -43,6 +43,11 @@ return [
|
||||
'apps_managing' => 'Verifique os apps mais populares e comece a gerenciar suas finanças profissionalmente hoje.',
|
||||
'ready' => 'Disponível',
|
||||
'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',
|
||||
|
||||
|
@ -9,6 +9,7 @@ return [
|
||||
'mark_read' => 'Marcar como lido',
|
||||
'mark_read_all' => 'Marcar todos como lidos',
|
||||
'empty' => 'Woohoo, zero notificações!',
|
||||
'new_apps' => ':app está disponível. <a href=":url">Confira agora</a>!',
|
||||
|
||||
'update' => [
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
return [
|
||||
|
||||
'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' => 'اس اکائونٹ میں کوئی لین دین نہیں ہوا۔ ابھی ایک نیا لین دین بنائیں۔',
|
||||
],
|
||||
|
||||
];
|
||||
|
@ -1,45 +1,61 @@
|
||||
@props(['module', 'installed', 'enable'])
|
||||
|
||||
@if ($installed)
|
||||
@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">
|
||||
{{ trans('modules.button.uninstall') }}
|
||||
</a>
|
||||
@endcan
|
||||
@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')
|
||||
<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') }}
|
||||
</a>
|
||||
@endcan
|
||||
|
||||
@can('update-modules-item')
|
||||
@if ($enable)
|
||||
<a href="{{ route('apps.app.disable', $module->slug) }}" class="bg-orange rounded-md text-white w-1/2 text-center text-sm py-2 truncate">
|
||||
{{ trans('modules.button.disable') }}
|
||||
</a>
|
||||
@else
|
||||
<a href="{{ route('apps.app.enable', $module->slug) }}" class="bg-green rounded-md text-white text-sm text-center w-1/2 py-2 truncate">
|
||||
{{ trans('modules.button.enable') }}
|
||||
</a>
|
||||
@endif
|
||||
@endcan
|
||||
@else
|
||||
@can('create-modules-item')
|
||||
@if ($module->install)
|
||||
@if (! empty($module->isPurchase) && (! empty($module->purchase_type) && $module->purchase_type == 'monthly'))
|
||||
<x-tooltip message="{!! trans('modules.can_not_install', ['app' => $module->name]) !!}" placement="right">
|
||||
<x-button disabled="disabled">
|
||||
{{ trans('modules.install') }}
|
||||
</x-button>
|
||||
</x-tooltip>
|
||||
@can('update-modules-item')
|
||||
@if ($enable)
|
||||
<a href="{{ route('apps.app.disable', $module->slug) }}" class="bg-orange rounded-md text-white w-1/2 text-center text-sm py-2 truncate">
|
||||
{{ trans('modules.button.disable') }}
|
||||
</a>
|
||||
@else
|
||||
<button type="button"
|
||||
@click="onInstall('{{ $module->action_url }}', '{{ $module->slug }}', '{!! str_replace("'", "\'", $module->name) !!}', '{{ $module->version }}')"
|
||||
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
|
||||
id="install-module"
|
||||
>
|
||||
{{ trans('modules.install') }}
|
||||
</button>
|
||||
<a href="{{ route('apps.app.enable', $module->slug) }}" class="bg-green rounded-md text-white text-sm text-center w-1/2 py-2 truncate">
|
||||
{{ trans('modules.button.enable') }}
|
||||
</a>
|
||||
@endif
|
||||
@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.use_app') }}
|
||||
</a>
|
||||
@endif
|
||||
@endcan
|
||||
@endcan
|
||||
@else
|
||||
@can('create-modules-item')
|
||||
@if ($module->install)
|
||||
@if (! empty($module->isPurchase) && (! empty($module->purchase_type) && $module->purchase_type == 'monthly'))
|
||||
<x-tooltip message="{!! trans('modules.can_not_install', ['app' => $module->name]) !!}" placement="right">
|
||||
<x-button disabled="disabled">
|
||||
{{ trans('modules.install') }}
|
||||
</x-button>
|
||||
</x-tooltip>
|
||||
@else
|
||||
<button type="button"
|
||||
@click="onInstall('{{ $module->action_url }}', '{{ $module->slug }}', '{!! str_replace("'", "\'", $module->name) !!}', '{{ $module->version }}')"
|
||||
class="bg-green hover:bg-green-700 rounded-md text-white text-sm text-center w-full py-2 truncate"
|
||||
id="install-module"
|
||||
>
|
||||
{{ trans('modules.install') }}
|
||||
</button>
|
||||
@endif
|
||||
@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.use_app') }}
|
||||
</a>
|
||||
@endif
|
||||
@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
|
||||
|
@ -1,11 +1,25 @@
|
||||
@props(['module'])
|
||||
|
||||
<div x-show="price_type == true" class="text-center text-sm mt-3 mb--2">
|
||||
<span style="height: 21px;display: block;"></span>
|
||||
</div>
|
||||
@if (! empty($module->plan))
|
||||
<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_premium_plan') !!}
|
||||
</span>
|
||||
</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-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>
|
||||
</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
|
||||
|
@ -1,23 +1,21 @@
|
||||
<x-form>
|
||||
<div class="lg:absolute lg:ltr:right-0 lg:rtl:left-0 top-4">
|
||||
<label for="priceToggle" class="flex items-center cursor-pointer" x-on:click="price_type = ! price_type">
|
||||
<div class="relative">
|
||||
<input type="checkbox" id="priceToggle" class="sr-only" x-model="price_type">
|
||||
<div class="lg:absolute lg:ltr:right-0 lg:rtl:left-0 top-4" x-on:click="price_type = ! price_type">
|
||||
<div class="relative" x-model="price_type">
|
||||
<div class="w-36 flex items-center bg-gray-200 p-1 ltr:mr-2 rtl:ml-2 rounded-lg">
|
||||
<button type="button"
|
||||
class="w-18 flex justify-center px-2"
|
||||
x-bind:class="price_type == true ? 'btn-outline-primary' : 'bg-white rounded-lg'"
|
||||
>
|
||||
{{ trans('general.monthly') }}
|
||||
</button>
|
||||
|
||||
<div class="bg-purple-300 w-24 h-7 rounded-full">
|
||||
<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') }}
|
||||
</span>
|
||||
|
||||
<span id="apps-toggle-yearly" class="yearly-badge text-xs text-white float-right mr-3 mt-1.5" x-show="price_type == false">
|
||||
{{ trans('general.yearly') }}
|
||||
</span>
|
||||
</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>
|
||||
<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') }}
|
||||
</button>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</x-form>
|
||||
|
@ -41,7 +41,9 @@
|
||||
<div class="flex justify-between">
|
||||
<span>
|
||||
@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
|
||||
</span>
|
||||
</div>
|
||||
@ -63,6 +65,7 @@
|
||||
<i class="material-icons text-sm">star_border</i>
|
||||
@endfor
|
||||
</div>
|
||||
|
||||
<p class="text-xs">
|
||||
@if ($module->total_review)
|
||||
( {{ $module->total_review }} {{ trans('modules.tab.reviews') }} )
|
||||
@ -73,10 +76,16 @@
|
||||
|
||||
<div class="flex flex-col gap-1">
|
||||
<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)
|
||||
<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
|
||||
</div>
|
||||
|
||||
|
@ -42,7 +42,9 @@
|
||||
<div class="flex justify-between">
|
||||
<span>
|
||||
@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
|
||||
</span>
|
||||
</div>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user