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\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);

View File

@ -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;
}
}

View File

@ -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();

View File

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

97
composer.lock generated
View File

@ -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"
}

View File

@ -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',

View File

@ -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' => 'لا يوجد أي تحويلات من أو إلى هذا الحساب حتى الآن. أنشئ تحويل جديد الآن.',
],
];

View File

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

View File

@ -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',
],

View File

@ -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',
],

View File

@ -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',

View File

@ -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',
],

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.',
'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' => [

View File

@ -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',
];

View File

@ -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',
],

View File

@ -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',

View File

@ -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' => [

View File

@ -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' => 'اس اکائونٹ میں کوئی لین دین نہیں ہوا۔ ابھی ایک نیا لین دین بنائیں۔',
],
];

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);