progress in sell and some bug fix for version 0.21.29
This commit is contained in:
parent
7a799be9aa
commit
1d11dbc085
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PublishConfigData" serverName="hesabix" />
|
||||
<component name="PublishConfigData" serverName="Local or mounted folder" />
|
||||
</project>
|
|
@ -2,11 +2,8 @@
|
|||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="App\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="App\Tests\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/hesabixCore/src" isTestSource="false" packagePrefix="App" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/hesabixCore/var/cache/dev" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/hesabixCore/src" isTestSource="false" packagePrefix="App\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/hesabixCore/tests" isTestSource="true" packagePrefix="App\Tests\" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/var" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/maker-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
|
||||
|
@ -45,6 +42,156 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/composer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/annotations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/collections" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/common" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/dbal" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/deprecations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/doctrine-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/doctrine-migrations-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/event-manager" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/inflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/instantiator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/lexer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/migrations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/orm" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/persistence" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/doctrine/sql-formatter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/dompdf/dompdf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/egulias/email-validator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/ezyang/htmlpurifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/friendsofsymfony/ckeditor-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/gregwar/captcha" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/gregwar/captcha-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/maennchen/zipstream-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/markbaker/complex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/markbaker/matrix" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/masterminds/html5" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/melipayamak/php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/monolog/monolog" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/mpdf/mpdf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/mpdf/psr-http-message-shim" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/mpdf/psr-log-aware-trait" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/myclabs/deep-copy" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/nelmio/cors-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/nikic/php-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/paragonie/random_compat" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phar-io/manifest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phar-io/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phenx/php-font-lib" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phenx/php-svg-lib" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpdocumentor/reflection-common" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpdocumentor/reflection-docblock" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpdocumentor/type-resolver" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpoffice/phpspreadsheet" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpstan/phpdoc-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/php-code-coverage" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/php-file-iterator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/php-invoker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/php-text-template" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/php-timer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/phpunit/phpunit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/container" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/http-client" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/http-factory" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/http-message" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/link" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/log" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/psr/simple-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sabberworm/php-css-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/cli-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/code-unit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/comparator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/complexity" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/diff" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/environment" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/exporter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/global-state" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/lines-of-code" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/object-enumerator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/object-reflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/recursion-context" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/resource-operations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/sebastian/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/setasign/fpdi" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/apache-pack" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/asset" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/browser-kit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/cache-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/config" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/console" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/css-selector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/debug-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/dependency-injection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/deprecation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/doctrine-bridge" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/doctrine-messenger" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/dom-crawler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/dotenv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/error-handler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/event-dispatcher-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/expression-language" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/filesystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/finder" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/flex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/form" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/framework-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/http-client" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/http-client-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/http-foundation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/http-kernel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/mailer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/maker-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/messenger" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/mime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/monolog-bridge" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/monolog-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/notifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/options-resolver" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/password-hasher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/phpunit-bridge" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/polyfill-intl-icu" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/polyfill-intl-idn" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/polyfill-mbstring" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/process" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/property-access" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/property-info" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/routing" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/runtime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/security-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/security-core" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/security-csrf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/security-http" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/serializer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/service-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/stopwatch" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/string" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/translation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/translation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/twig-bridge" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/twig-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/validator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/var-dumper" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/var-exporter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/web-link" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/web-profiler-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfony/yaml" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/symfonycasts/verify-email-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/tecnickcom/tcpdf" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/theseer/tokenizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/twig/extra-bundle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/twig/twig" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/hesabixCore/vendor/webmozart/assert" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
|
152
.idea/php.xml
152
.idea/php.xml
|
@ -80,6 +80,156 @@
|
|||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/myclabs/deep-copy" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/ezyang/htmlpurifier" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpdocumentor/reflection-docblock" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpdocumentor/type-resolver" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpdocumentor/reflection-common" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/twig/twig" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/twig/extra-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phenx/php-svg-lib" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phenx/php-font-lib" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/tecnickcom/tcpdf" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/gregwar/captcha-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/gregwar/captcha" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/markbaker/complex" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/markbaker/matrix" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phar-io/manifest" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phar-io/version" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/deprecation-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/dependency-injection" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/security-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/mime" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/validator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/browser-kit" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/theseer/tokenizer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/dom-crawler" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/http-client-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/css-selector" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/composer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/property-access" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/monolog-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/event-dispatcher-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/paragonie/random_compat" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/yaml" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/polyfill-intl-icu" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/cache" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/doctrine-bridge" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/options-resolver" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/twig-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/doctrine-messenger" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/runtime" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/http-kernel" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/mailer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/phpunit-bridge" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpoffice/phpspreadsheet" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/security-csrf" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/finder" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/expression-language" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/maker-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/security-core" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/security-http" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/web-link" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/var-exporter" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/web-profiler-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/cache" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/container" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/string" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/event-manager" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/http-message" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/service-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/dbal" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/http-client" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/var-dumper" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/annotations" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/http-factory" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/serializer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/orm" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/cache" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/polyfill-intl-idn" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/deprecations" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/lexer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/log" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/debug-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/sql-formatter" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/simple-cache" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/routing" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/doctrine-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/psr/link" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/common" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/error-handler" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/migrations" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/flex" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/collections" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/notifier" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/instantiator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/cache-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/doctrine-migrations-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/property-info" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/inflector" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/console" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/doctrine/persistence" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/framework-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/process" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/apache-pack" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/password-hasher" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/filesystem" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/twig-bridge" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/monolog/monolog" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/http-client" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/dotenv" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/form" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/messenger" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/translation" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/polyfill-mbstring" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/dompdf/dompdf" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/monolog-bridge" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/asset" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/http-foundation" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/config" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/translation-contracts" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfony/stopwatch" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/friendsofsymfony/ckeditor-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpstan/phpdoc-parser" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/setasign/fpdi" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/masterminds/html5" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/nelmio/cors-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/egulias/email-validator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/melipayamak/php" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/mpdf/mpdf" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/mpdf/psr-http-message-shim" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/mpdf/psr-log-aware-trait" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/symfonycasts/verify-email-bundle" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/maennchen/zipstream-php" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/webmozart/assert" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sabberworm/php-css-parser" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/global-state" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/complexity" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/recursion-context" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/object-enumerator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/object-reflector" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/cli-parser" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/php-file-iterator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/diff" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/php-timer" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/lines-of-code" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/php-text-template" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/type" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/php-invoker" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/version" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/php-code-coverage" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/comparator" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/phpunit/phpunit" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/exporter" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/environment" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/code-unit" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/nikic/php-parser" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/resource-operations" />
|
||||
<path value="$PROJECT_DIR$/hesabixCore/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.1">
|
||||
|
@ -90,7 +240,7 @@
|
|||
</component>
|
||||
<component name="PhpUnit">
|
||||
<phpunit_settings>
|
||||
<PhpUnitSettings custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
|
||||
<PhpUnitSettings configuration_file_path="$PROJECT_DIR$/hesabixCore/phpunit.xml.dist" custom_loader_path="$PROJECT_DIR$/hesabixCore/vendor/autoload.php" use_configuration_file="true" />
|
||||
</phpunit_settings>
|
||||
</component>
|
||||
<component name="PsalmOptionsConfiguration">
|
||||
|
|
10
.idea/phpunit.xml
Normal file
10
.idea/phpunit.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PHPUnit">
|
||||
<option name="directories">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/hesabixCore/tests" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
11
.project
Normal file
11
.project
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>html</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -24,5 +24,5 @@ CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
|
|||
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
|
||||
###< symfony/messenger ###
|
||||
###> symfony/mailer ###
|
||||
# MAILER_DSN=null://null
|
||||
MAILER_DSN=null://null
|
||||
###< symfony/mailer ###
|
||||
|
|
BIN
hesabixCore/.gitignore
vendored
BIN
hesabixCore/.gitignore
vendored
Binary file not shown.
22
hesabixCore/.project
Normal file
22
hesabixCore/.project
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>hesabixCore</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.dltk.core.scriptbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.php.core.PHPNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -1,41 +0,0 @@
|
|||
import './bootstrap.js';
|
||||
/*
|
||||
* Welcome to your app's main JavaScript file!
|
||||
*
|
||||
* We recommend including the built version of this JavaScript file
|
||||
* (and its CSS file) in your base layout (base.html.twig).
|
||||
*/
|
||||
import { createApp } from 'vue'
|
||||
import router from './vue/router/router.js'
|
||||
import {createRouter, createWebHashHistory, createWebHistory} from 'vue-router'
|
||||
|
||||
|
||||
// any CSS you import will output into a single css file (app.css in this case)
|
||||
import './styles/app.css';
|
||||
|
||||
// start the Stimulus application
|
||||
import './bootstrap';
|
||||
|
||||
// assets/app.js
|
||||
import { registerVueControllerComponents } from '@symfony/ux-vue';
|
||||
import App from "./vue/views/App.vue";
|
||||
|
||||
// Registers Vue.js controller components to allow loading them from Twig
|
||||
//
|
||||
// Vue.js controller components are components that are meant to be rendered
|
||||
// from Twig. These component can then rely on other components that won't be
|
||||
// called directly from Twig.
|
||||
//
|
||||
// By putting only controller components in `vue/controllers`, you ensure that
|
||||
// internal components won't be automatically included in your JS built file if
|
||||
// they are not necessary.
|
||||
registerVueControllerComponents(require.context('./vue/views', true, /\.vue$/));
|
||||
|
||||
// If you prefer to lazy-load your Vue.js controller components, in order to keep the JavaScript bundle the smallest as possible,
|
||||
// and improve performance, you can use the following line instead:
|
||||
//registerVueControllerComponents(require.context('./vue/controllers', true, /\.vue$/, 'lazy'));
|
||||
const app = createApp(App);
|
||||
app.use(router);
|
||||
app.mount('#page-container')
|
||||
|
||||
registerVueControllerComponents(require.context('./vue/controllers', true, /\.vue$/));
|
11
hesabixCore/assets/bootstrap.js
vendored
11
hesabixCore/assets/bootstrap.js
vendored
|
@ -1,11 +0,0 @@
|
|||
import { startStimulusApp } from '@symfony/stimulus-bridge';
|
||||
|
||||
// Registers Stimulus controllers from controllers.json and in the controllers/ directory
|
||||
export const app = startStimulusApp(require.context(
|
||||
'@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
|
||||
true,
|
||||
/\.[jt]sx?$/
|
||||
));
|
||||
|
||||
// register any custom, 3rd party controllers here
|
||||
// app.register('some_controller_name', SomeImportedController);
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"controllers": {
|
||||
"@symfony/ux-vue": {
|
||||
"vue": {
|
||||
"enabled": true,
|
||||
"fetch": "eager"
|
||||
}
|
||||
}
|
||||
},
|
||||
"entrypoints": []
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
import { Controller } from '@hotwired/stimulus';
|
||||
|
||||
/*
|
||||
* This is an example Stimulus controller!
|
||||
*
|
||||
* Any element with a data-controller="hello" attribute will cause
|
||||
* this controller to be executed. The name "hello" comes from the filename:
|
||||
* hello_controller.js -> "hello"
|
||||
*
|
||||
* Delete this file or adapt it for your use!
|
||||
*/
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.element.textContent = 'Hello Stimulus! Edit me in assets/controllers/hello_controller.js';
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
body {
|
||||
background-color: lightgray;
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
<template>
|
||||
<div>Hello {{ name }}!</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineProps({
|
||||
name: String
|
||||
});
|
||||
</script>
|
|
@ -1,21 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
This is test component
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "test",
|
||||
data: ()=>{return {
|
||||
searchValue: '',
|
||||
}},
|
||||
mounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -1,14 +0,0 @@
|
|||
import {createRouter, createWebHashHistory, createWebHistory} from 'vue-router'
|
||||
import test from '../controllers/test.vue'
|
||||
const router = createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: [
|
||||
{
|
||||
path: '/tms',
|
||||
name: 'app_home',
|
||||
component: test
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
export default router
|
|
@ -1,43 +0,0 @@
|
|||
<script>
|
||||
|
||||
export default {
|
||||
data(){
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
alert();
|
||||
},
|
||||
created() {
|
||||
|
||||
},
|
||||
methods:{
|
||||
|
||||
},
|
||||
async mounted() {
|
||||
|
||||
},
|
||||
components:{
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
This is From App view
|
||||
</div>
|
||||
<RouterView />
|
||||
</template>
|
||||
|
||||
<style>
|
||||
|
||||
.customize-table {
|
||||
--easy-table-header-font-color: #e1e1e1;
|
||||
--easy-table-header-background-color: #055bbb;
|
||||
}
|
||||
.form-control ,.form-select{
|
||||
font-family: 'vazir', sans-serif;
|
||||
}
|
||||
</style>
|
|
@ -1,35 +0,0 @@
|
|||
<template>
|
||||
<!-- Your Block -->
|
||||
<div class="block block-content-full">
|
||||
<div class="block-header block-header-default" style="background-color: #0E2231">
|
||||
<h3 class="block-title text-white"> پیشخوان </h3>
|
||||
<div class="block-options">
|
||||
<button class="btn-block-option" data-action="fullscreen_toggle" data-toggle="block-option" type="button"></button>
|
||||
<button class="btn-block-option" data-action="pinned_toggle" data-toggle="block-option" type="button">
|
||||
<i class="si si-pin"></i>
|
||||
</button>
|
||||
<button class="btn-block-option" data-action="state_toggle" data-action-mode="demo" data-toggle="block-option" type="button">
|
||||
<i class="si si-refresh"></i>
|
||||
</button>
|
||||
<button class="btn-block-option" data-action="content_toggle" data-toggle="block-option" type="button"></button>
|
||||
<button class="btn-block-option" data-action="close" data-toggle="block-option" type="button">
|
||||
<i class="si si-close"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="block-content">
|
||||
<p>پیشخوان</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Your Block -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "base"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -1,78 +0,0 @@
|
|||
<template>
|
||||
<div class="container-fluid mt-3">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="row items-push">
|
||||
<div class="col-6 col-lg-3">
|
||||
<router-link class="block block-rounded block-link-shadow text-center h-100 mb-0" to="/acc/persons/list">
|
||||
<div class="block-content py-5">
|
||||
<div class="fs-3 fw-semibold text-primary mb-1">{{stat.personCount}}</div>
|
||||
<p class="fw-semibold fs-sm text-muted text-uppercase mb-0">
|
||||
<i class="fa fa-users"></i>
|
||||
<br>
|
||||
اشخاص و مشتریان
|
||||
</p>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<router-link class="block block-rounded block-link-shadow text-center h-100 mb-0" to="/acc/banks/list">
|
||||
<div class="block-content py-5">
|
||||
<div class="fs-3 fw-semibold text-primary mb-1">{{stat.bankCount}}</div>
|
||||
<p class="fw-semibold fs-sm text-muted text-uppercase mb-0">
|
||||
<i class="fa fa-bank"></i>
|
||||
<br>
|
||||
حسابهای بانکی
|
||||
</p>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<router-link class="block block-rounded block-link-shadow text-center h-100 mb-0" to="/acc/accounting/list">
|
||||
<div class="block-content py-5">
|
||||
<div class="fs-3 fw-semibold text-primary mb-1">{{ stat.docCount }}</div>
|
||||
<p class="fw-semibold fs-sm text-muted text-uppercase mb-0">
|
||||
<i class="fa fa-book-open-reader"></i>
|
||||
<br>
|
||||
لیست اسناد
|
||||
</p>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3">
|
||||
<router-link class="block block-rounded block-link-shadow text-center h-100 mb-0" to="/acc/reports/list">
|
||||
<div class="block-content py-5">
|
||||
<div class="fs-3 fw-semibold mb-1 text-primary">{{ this.$filters.formatNumber(stat.income) }}</div>
|
||||
<p class="fw-semibold fs-sm text-muted text-uppercase mb-0">
|
||||
<i class="fa fa-chart-line"></i>
|
||||
<br>
|
||||
گردش مالی
|
||||
</p>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "axios";
|
||||
|
||||
export default {
|
||||
name: "dashboard",
|
||||
data:()=>{return {
|
||||
stat:{}
|
||||
}},
|
||||
beforeMount() {
|
||||
axios.post('/api/business/stat').then((response)=>{
|
||||
this.stat = response.data
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -45,10 +45,8 @@
|
|||
"symfony/string": "6.2.*",
|
||||
"symfony/translation": "6.2.*",
|
||||
"symfony/twig-bundle": "6.2.*",
|
||||
"symfony/ux-vue": "^2.9",
|
||||
"symfony/validator": "6.2.*",
|
||||
"symfony/web-link": "6.2.*",
|
||||
"symfony/webpack-encore-bundle": "^2.0",
|
||||
"symfony/yaml": "6.2.*",
|
||||
"symfonycasts/verify-email-bundle": "^1.13",
|
||||
"tecnickcom/tcpdf": "^6.6",
|
||||
|
|
221
hesabixCore/composer.lock
generated
221
hesabixCore/composer.lock
generated
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "4283b361d2fc6c23d255821e9bea4da6",
|
||||
"content-hash": "4c8d0955f3c2cbf3cafa3f36b67a1c6a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "doctrine/annotations",
|
||||
|
@ -7477,74 +7477,6 @@
|
|||
],
|
||||
"time": "2023-05-23T14:45:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/stimulus-bundle",
|
||||
"version": "v2.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/stimulus-bundle.git",
|
||||
"reference": "e0e19de8df4d5b2bed57328ae69ef7904df660c7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/e0e19de8df4d5b2bed57328ae69ef7904df660c7",
|
||||
"reference": "e0e19de8df4d5b2bed57328ae69ef7904df660c7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"symfony/config": "^5.4|^6.0",
|
||||
"symfony/dependency-injection": "^5.4|^6.0",
|
||||
"symfony/finder": "^5.4|^6.0",
|
||||
"symfony/http-kernel": "^5.4|^6.0",
|
||||
"twig/twig": "^2.15.3|^3.4.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/asset-mapper": "^6.3",
|
||||
"symfony/framework-bundle": "^5.4|^6.0",
|
||||
"symfony/phpunit-bridge": "^5.4|^6.0",
|
||||
"symfony/twig-bundle": "^5.4|^6.0",
|
||||
"zenstruck/browser": "^1.4"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\UX\\StimulusBundle\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Integration with your Symfony app & Stimulus!",
|
||||
"keywords": [
|
||||
"symfony-ux"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/stimulus-bundle/tree/v2.12.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-28T18:00:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/stopwatch",
|
||||
"version": "v6.2.7",
|
||||
|
@ -8078,86 +8010,6 @@
|
|||
],
|
||||
"time": "2023-02-14T08:44:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/ux-vue",
|
||||
"version": "v2.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/ux-vue.git",
|
||||
"reference": "f2e77ed1a162d4888c13d200ee5ae6821b8ff5c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/ux-vue/zipball/f2e77ed1a162d4888c13d200ee5ae6821b8ff5c9",
|
||||
"reference": "f2e77ed1a162d4888c13d200ee5ae6821b8ff5c9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"symfony/stimulus-bundle": "^2.9.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/asset-mapper": "6.3.x-dev",
|
||||
"symfony/finder": "^5.4|^6.0",
|
||||
"symfony/framework-bundle": "^5.4|^6.0",
|
||||
"symfony/phpunit-bridge": "^5.4|^6.0",
|
||||
"symfony/twig-bundle": "^5.4|^6.0",
|
||||
"symfony/var-dumper": "^5.4|^6.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"name": "symfony/ux",
|
||||
"url": "https://github.com/symfony/ux"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\UX\\Vue\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Titouan Galopin",
|
||||
"email": "galopintitouan@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Thibault Richard",
|
||||
"email": "thibault.richard62@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Integration of Vue.js in Symfony",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"symfony-ux"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/ux-vue/tree/v2.12.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-07-09T15:31:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/validator",
|
||||
"version": "v6.2.13",
|
||||
|
@ -8513,77 +8365,6 @@
|
|||
],
|
||||
"time": "2023-02-14T08:44:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/webpack-encore-bundle",
|
||||
"version": "v2.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/webpack-encore-bundle.git",
|
||||
"reference": "50d4af5cca35dab66a51dfeeb63616937ba96f4a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/50d4af5cca35dab66a51dfeeb63616937ba96f4a",
|
||||
"reference": "50d4af5cca35dab66a51dfeeb63616937ba96f4a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1.0",
|
||||
"symfony/asset": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/config": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/http-kernel": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0",
|
||||
"symfony/web-link": "^5.4 || ^6.2 || ^7.0"
|
||||
},
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"name": "symfony/webpack-encore",
|
||||
"url": "https://github.com/symfony/webpack-encore"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\WebpackEncoreBundle\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Integration with your Symfony app & Webpack Encore!",
|
||||
"support": {
|
||||
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
|
||||
"source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.1.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-09-26T14:41:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v6.2.10",
|
||||
|
|
|
@ -14,8 +14,5 @@ return [
|
|||
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
|
||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||
Gregwar\CaptchaBundle\GregwarCaptchaBundle::class => ['all' => true],
|
||||
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
|
||||
Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true],
|
||||
Symfony\UX\Vue\VueBundle::class => ['all' => true],
|
||||
FOS\CKEditorBundle\FOSCKEditorBundle::class => ['all' => true],
|
||||
];
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
webpack_encore:
|
||||
# The path where Encore is building the assets - i.e. Encore.setOutputPath()
|
||||
output_path: '%kernel.project_dir%/public/build'
|
||||
# If multiple builds are defined (as shown below), you can disable the default build:
|
||||
# output_path: false
|
||||
|
||||
# Set attributes that will be rendered on all script and link tags
|
||||
script_attributes:
|
||||
defer: true
|
||||
# Uncomment (also under link_attributes) if using Turbo Drive
|
||||
# https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change
|
||||
# 'data-turbo-track': reload
|
||||
# link_attributes:
|
||||
# Uncomment if using Turbo Drive
|
||||
# 'data-turbo-track': reload
|
||||
|
||||
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
|
||||
# crossorigin: 'anonymous'
|
||||
|
||||
# Preload all rendered script and link tags automatically via the HTTP/2 Link header
|
||||
# preload: true
|
||||
|
||||
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
|
||||
# strict_mode: false
|
||||
|
||||
# If you have multiple builds:
|
||||
# builds:
|
||||
# frontend: '%kernel.project_dir%/public/frontend/build'
|
||||
|
||||
# pass the build name as the 3rd argument to the Twig functions
|
||||
# {{ encore_entry_script_tags('entry1', null, 'frontend') }}
|
||||
|
||||
framework:
|
||||
assets:
|
||||
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
|
||||
|
||||
#when@prod:
|
||||
# webpack_encore:
|
||||
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
|
||||
# # Available in version 1.2
|
||||
# cache: true
|
||||
|
||||
#when@test:
|
||||
# webpack_encore:
|
||||
# strict_mode: false
|
|
@ -39,6 +39,7 @@ services:
|
|||
arguments: [ "@doctrine.orm.entity_manager" ]
|
||||
twigFunctions:
|
||||
class: App\Service\twigFunctions
|
||||
arguments: [ "@doctrine.orm.entity_manager" ]
|
||||
Access:
|
||||
class: App\Service\Access
|
||||
arguments: [ "@doctrine.orm.entity_manager","@Symfony.Component.Security.Core.Authentication.Token.Storage.TokenStorageInterface","@Symfony.Component.HttpFoundation.RequestStack" ]
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.17.0",
|
||||
"@babel/preset-env": "^7.16.0",
|
||||
"@hotwired/stimulus": "^3.0.0",
|
||||
"@symfony/stimulus-bridge": "^3.2.0",
|
||||
"@symfony/stimulus-bundle": "file:vendor/symfony/stimulus-bundle/assets",
|
||||
"@symfony/ux-vue": "file:vendor/symfony/ux-vue/assets",
|
||||
"@symfony/webpack-encore": "^4.0.0",
|
||||
"core-js": "^3.23.0",
|
||||
"regenerator-runtime": "^0.13.9",
|
||||
"vue": "^3.0",
|
||||
"vue-loader": "^17.2.2",
|
||||
"webpack": "^5.74.0",
|
||||
"webpack-cli": "^4.10.0",
|
||||
"webpack-notifier": "^1.15.0"
|
||||
},
|
||||
"license": "UNLICENSED",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev-server": "encore dev-server",
|
||||
"dev": "encore dev",
|
||||
"watch": "encore dev --watch",
|
||||
"build": "encore production --progress"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.4.0",
|
||||
"sweetalert2": "^11.7.12",
|
||||
"vue-router": "^4.2.2"
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
"entrypoints": {
|
||||
"app": {
|
||||
"js": [
|
||||
"http://localhost:8080/build/runtime.js",
|
||||
"http://localhost:8080/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-728fb7.js",
|
||||
"http://localhost:8080/build/app.js"
|
||||
],
|
||||
"css": [
|
||||
"http://localhost:8080/build/app.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"build/app.css": "http://localhost:8080/build/app.css",
|
||||
"build/app.js": "http://localhost:8080/build/app.js",
|
||||
"build/runtime.js": "http://localhost:8080/build/runtime.js",
|
||||
"build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-d69614.js": "http://localhost:8080/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-d69614.js",
|
||||
"build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-20f0d6.js": "http://localhost:8080/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-20f0d6.js",
|
||||
"build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-728fb7.js": "http://localhost:8080/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-728fb7.js"
|
||||
}
|
|
@ -16,7 +16,7 @@ use Symfony\Component\Routing\Annotation\Route;
|
|||
class BankController extends AbstractController
|
||||
{
|
||||
#[Route('/api/bank/list', name: 'app_bank_list')]
|
||||
public function app_bank_list(Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse
|
||||
public function app_bank_list(Provider $provider,Request $request,Access $access,Log $log,EntityManagerInterface $entityManager): JsonResponse
|
||||
{
|
||||
if(!$access->hasRole('banks'))
|
||||
throw $this->createAccessDeniedException();
|
||||
|
@ -35,7 +35,7 @@ class BankController extends AbstractController
|
|||
}
|
||||
$data->setBalance($bd - $bs);
|
||||
}
|
||||
return $this->json($datas);
|
||||
return $this->json($provider->ArrayEntity2Array($datas,0));
|
||||
}
|
||||
|
||||
#[Route('/api/bank/info/{code}', name: 'app_bank_info')]
|
||||
|
@ -48,7 +48,7 @@ class BankController extends AbstractController
|
|||
'bid'=>$acc['bid'],
|
||||
'code'=>$code
|
||||
]);
|
||||
return $this->json($data);
|
||||
return $this->json($provider->Entity2Array($data,0));
|
||||
}
|
||||
|
||||
#[Route('/api/bank/mod/{code}', name: 'app_bank_mod')]
|
||||
|
|
|
@ -16,8 +16,10 @@ use App\Entity\Year;
|
|||
use App\Service\Access;
|
||||
use App\Service\Jdate;
|
||||
use App\Service\Log;
|
||||
use App\Service\Provider;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use ReflectionException;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
@ -45,8 +47,11 @@ class BusinessController extends AbstractController
|
|||
return $this->json($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ReflectionException
|
||||
*/
|
||||
#[Route('/api/business/get/info/{bid}', name: 'api_business_get_info')]
|
||||
public function api_business_get_info($bid,#[CurrentUser] ?User $user,EntityManagerInterface $entityManager): Response
|
||||
public function api_business_get_info($bid,#[CurrentUser] ?User $user,Provider $provider,EntityManagerInterface $entityManager): Response
|
||||
{
|
||||
$bus = $entityManager->getRepository(Business::class)->findOneBy(['id'=>$bid]);
|
||||
$response = [];
|
||||
|
@ -72,6 +77,11 @@ class BusinessController extends AbstractController
|
|||
$response['type'] = $bus->getType();
|
||||
$response['zarinpalCode'] = $bus->getZarinpalCode();
|
||||
$response['smsCharge'] = $bus->getSmsCharge();
|
||||
$response['shortlinks'] = $bus->isShortLinks();
|
||||
$response['walletEnabled'] = $bus->isWalletEnable();
|
||||
$response['walletMatchBank'] = null;
|
||||
if($bus->isWalletEnable())
|
||||
$response['walletMatchBank'] = $provider->Entity2Array($bus->getWalletMatchBank(),0);
|
||||
return $this->json($response);
|
||||
}
|
||||
|
||||
|
@ -95,65 +105,85 @@ class BusinessController extends AbstractController
|
|||
trim($params['name']) != '' &&
|
||||
trim($params['legal_name']) != '' &&
|
||||
trim($params['maliyatafzode']) != ''
|
||||
){
|
||||
) {
|
||||
//submit business
|
||||
$isNew = false;
|
||||
if(array_key_exists('bid',$params)){
|
||||
if (array_key_exists('bid', $params)) {
|
||||
$business = $entityManager->getRepository(Business::class)->find($params['bid']);
|
||||
if(! $business) {
|
||||
return $this->json(['result'=>-1]);
|
||||
if (!$business) {
|
||||
return $this->json(['result' => -1]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$business = new Business();
|
||||
$business->setPersonCode(1000);
|
||||
$business->setBankCode(1000);
|
||||
$business->setReceiveCode(1000);
|
||||
$isNew = true;
|
||||
}
|
||||
if(!$isNew && !$access->hasRole('settings'))
|
||||
if (!$isNew && !$access->hasRole('settings'))
|
||||
throw $this->createAccessDeniedException();
|
||||
//check for that user register business before
|
||||
$oldBid = $entityManager->getRepository(Business::class)->findOneBy(['owner'=>$this->getUser()],['id'=>'DESC']);
|
||||
if($oldBid && !$business->getId()){
|
||||
if($oldBid->getDateSubmit() > time()-86400){
|
||||
return $this->json(['result'=>3]);
|
||||
$oldBid = $entityManager->getRepository(Business::class)->findOneBy(['owner' => $this->getUser()], ['id' => 'DESC']);
|
||||
if ($oldBid && !$business->getId()) {
|
||||
if ($oldBid->getDateSubmit() > time() - 86400) {
|
||||
return $this->json(['result' => 3]);
|
||||
}
|
||||
}
|
||||
$business->setName($params['name']);
|
||||
$business->setOwner($this->getUser());
|
||||
$business->setLegalName($params['legal_name']);
|
||||
$business->setMaliyatafzode($params['maliyatafzode']);
|
||||
if($params['field'])
|
||||
if ($params['field'])
|
||||
$business->setField($params['field']);
|
||||
if($params['type'])
|
||||
if ($params['type'])
|
||||
$business->setType($params['type']);
|
||||
if($params['shenasemeli'])
|
||||
if ($params['shenasemeli'])
|
||||
$business->setShenasemeli($params['shenasemeli']);
|
||||
if($params['codeeqtesadi'])
|
||||
if ($params['codeeqtesadi'])
|
||||
$business->setCodeeghtesadi($params['codeeqtesadi']);
|
||||
if($params['shomaresabt'])
|
||||
if ($params['shomaresabt'])
|
||||
$business->setShomaresabt($params['shomaresabt']);
|
||||
if($params['country'])
|
||||
if ($params['country'])
|
||||
$business->setCountry($params['country']);
|
||||
if($params['ostan'])
|
||||
if ($params['ostan'])
|
||||
$business->setOstan($params['ostan']);
|
||||
if($params['shahrestan'])
|
||||
if ($params['shahrestan'])
|
||||
$business->setShahrestan($params['shahrestan']);
|
||||
if($params['postalcode'])
|
||||
if ($params['postalcode'])
|
||||
$business->setPostalcode($params['postalcode']);
|
||||
if(array_key_exists('zarinpalCode',$params))
|
||||
if (array_key_exists('zarinpalCode', $params))
|
||||
$business->setZarinpalCode($params['zarinpalCode']);
|
||||
if($params['tel'])
|
||||
if (array_key_exists('shortlinks', $params))
|
||||
$business->setShortlinks($params['shortlinks']);
|
||||
if ($params['tel'])
|
||||
$business->setTel($params['tel']);
|
||||
if($params['mobile'])
|
||||
if ($params['mobile'])
|
||||
$business->setMobile($params['mobile']);
|
||||
if($params['address'])
|
||||
if ($params['address'])
|
||||
$business->setAddress($params['address']);
|
||||
if($params['website'])
|
||||
if ($params['website'])
|
||||
$business->setWesite($params['website']);
|
||||
if($params['email'])
|
||||
if ($params['email'])
|
||||
$business->setEmail($params['email']);
|
||||
|
||||
if (array_key_exists('walletEnabled', $params)){
|
||||
if ($params['walletEnabled']) {
|
||||
if (array_key_exists('walletMatchBank', $params)) {
|
||||
$bank = $entityManager->getRepository(BankAccount::class)->findOneBy([
|
||||
'bid' => $business->getId(),
|
||||
'id' => $params['walletMatchBank']['id']
|
||||
]);
|
||||
if ($bank) {
|
||||
$business->setWalletEnable($params['walletEnabled']);
|
||||
$business->setWalletMatchBank($bank);
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
$business->setWalletEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
//get Money type
|
||||
if($params['arzmain']){
|
||||
$Arzmain = $entityManager->getRepository(Money::class)->findOneBy(['name'=>$params['arzmain']]);
|
||||
|
@ -190,6 +220,7 @@ class BusinessController extends AbstractController
|
|||
$perms->setPermission(true);
|
||||
$perms->setSalary(true);
|
||||
$perms->setCashdesk(true);
|
||||
$perms->setWallet(true);
|
||||
$entityManager->persist($perms);
|
||||
$entityManager->flush();
|
||||
//active Year
|
||||
|
@ -353,6 +384,7 @@ class BusinessController extends AbstractController
|
|||
'plugNoghreAdmin'=>true,
|
||||
'plugNoghreSell'=>true,
|
||||
'plugCCAdmin'=>true,
|
||||
'wallet'=>true,
|
||||
'owner'=> true,
|
||||
'active'=> $perm->getUser()->isActive()
|
||||
];
|
||||
|
@ -382,6 +414,7 @@ class BusinessController extends AbstractController
|
|||
'plugNoghreAdmin'=>$perm->isPlugNoghreAdmin(),
|
||||
'plugNoghreSell'=>$perm->isPlugNoghreSell(),
|
||||
'plugCCAdmin'=>$perm->isPlugCCAdmin(),
|
||||
'wallet'=>$perm->isWallet(),
|
||||
'owner'=> false,
|
||||
'active'=> $perm->getUser()->isActive()
|
||||
];
|
||||
|
@ -435,6 +468,7 @@ class BusinessController extends AbstractController
|
|||
$perm->setReport($params['report']);
|
||||
$perm->setPermission($params['permission']);
|
||||
$perm->setSalary($params['salary']);
|
||||
$perm->setWallet($params['wallet']);
|
||||
$perm->setCashdesk($params['cashdesk']);
|
||||
$perm->setPlugNoghreAdmin($params['plugNoghreAdmin']);
|
||||
$perm->setPlugNoghreSell($params['plugNoghreSell']);
|
||||
|
|
|
@ -41,6 +41,9 @@ class CommodityController extends AbstractController
|
|||
$temp['cat'] = null;
|
||||
if($item->getCat())
|
||||
$temp['cat'] = $item->getCat()->getName();
|
||||
$temp['khadamat'] = false;
|
||||
if($item->isKhadamat())
|
||||
$temp['khadamat'] = true;
|
||||
$res[] = $temp;
|
||||
}
|
||||
return $this->json($res);
|
||||
|
|
224
hesabixCore/src/Controller/Front/PayController.php
Normal file
224
hesabixCore/src/Controller/Front/PayController.php
Normal file
|
@ -0,0 +1,224 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller\Front;
|
||||
|
||||
use App\Entity\HesabdariDoc;
|
||||
use App\Entity\HesabdariRow;
|
||||
use App\Entity\HesabdariTable;
|
||||
use App\Entity\PayInfoTemp;
|
||||
use App\Entity\Settings;
|
||||
use App\Entity\User;
|
||||
use App\Entity\WalletTransaction;
|
||||
use App\Entity\Year;
|
||||
use App\Service\Jdate;
|
||||
use App\Service\Log;
|
||||
use App\Service\Notification;
|
||||
use App\Service\Provider;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
class PayController extends AbstractController
|
||||
{
|
||||
#[Route('/pay/sell/{id}', name: 'pay_sell')]
|
||||
public function pay_sell(String $id,EntityManagerInterface $entityManager,Log $log): Response
|
||||
{
|
||||
$doc = $entityManager->getRepository(HesabdariDoc::class)->find($id);
|
||||
if(!$doc)
|
||||
throw $this->createNotFoundException();
|
||||
|
||||
//calculate total pays
|
||||
$totalPays = 0;
|
||||
if($doc->getWalletTransaction())
|
||||
$totalPays += $doc->getWalletTransaction()->getAmount();
|
||||
foreach ($doc->getRelatedDocs() as $relatedDoc)
|
||||
$totalPays += $relatedDoc->getAmount();
|
||||
$amountPay = $doc->getAmount() - $totalPays;
|
||||
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(),
|
||||
"amount" => $amountPay,
|
||||
"callback_url" => $this->generateUrl('pay_sell_verify',['id'=>$doc->getId()],UrlGeneratorInterface::ABSOLUTE_URL),
|
||||
"description" => 'پرداخت فاکتور شماره ' . $doc->getCode() . ' کسب و کار ' .$doc->getBid()->getLegalName(),
|
||||
);
|
||||
$jsonData = json_encode($data);
|
||||
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/request.json');
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Content-Length: ' . strlen($jsonData)
|
||||
));
|
||||
|
||||
$result = curl_exec($ch);
|
||||
$err = curl_error($ch);
|
||||
$result = json_decode($result, true, JSON_PRETTY_PRINT);
|
||||
curl_close($ch);
|
||||
if ($err) {
|
||||
throw $this->createAccessDeniedException($err);
|
||||
} else {
|
||||
if (empty($result['errors'])) {
|
||||
if ($result['data']['code'] == 100) {
|
||||
$tempPay = new PayInfoTemp();
|
||||
$tempPay->setBid($doc->getBid());
|
||||
$tempPay->setDateSubmit(time());
|
||||
$tempPay->setDes('پرداخت فاکتور شماره ' . $doc->getCode() . ' کسب و کار ' .$doc->getBid()->getLegalName());
|
||||
$tempPay->setPrice($amountPay);
|
||||
$tempPay->setStatus(0);
|
||||
$tempPay->setDoc($doc);
|
||||
$tempPay->setVerifyCode($result['data']['authority']);
|
||||
$tempPay->setGatePay('zarinpal');
|
||||
$entityManager->persist($tempPay);
|
||||
$entityManager->flush();
|
||||
$log->insert('کیف پول','ایجاد تراکنش پرداخت برای فاکتور فروش ' . $doc->getCode() ,$this->getUser(),$doc->getBid());
|
||||
return $this->redirect('https://www.zarinpal.com/pg/StartPay/' . $result['data']["authority"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->render('pay/fail.html.twig',[
|
||||
'type'=>'sell',
|
||||
'doc'=>$doc
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('pay/sell/verify/{id}', name: 'pay_sell_verify')]
|
||||
public function pay_sell_verify(String $id, Notification $notification,Provider $provider,Jdate $jdate,Request $request,EntityManagerInterface $entityManager,Log $log): Response
|
||||
{
|
||||
$doc = $entityManager->getRepository(HesabdariDoc::class)->find($id);
|
||||
if(!$doc)
|
||||
throw $this->createNotFoundException();
|
||||
|
||||
$Authority = $request->get('Authority');
|
||||
$status = $request->get('Status');
|
||||
$req = $entityManager->getRepository(PayInfoTemp::class)->findOneBy(['verifyCode'=>$Authority]);
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(), "authority" => $Authority, "amount" => $req->getPrice());
|
||||
$jsonData = json_encode($data);
|
||||
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
||||
'Content-Type: application/json',
|
||||
'Content-Length: ' . strlen($jsonData)
|
||||
));
|
||||
|
||||
$result = curl_exec($ch);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
$result = json_decode($result, true);
|
||||
|
||||
//-----------------------------------
|
||||
$originalDoc = $req->getDoc();
|
||||
//-----------------------------------
|
||||
if ($err) {
|
||||
$log->insert('کیف پول','خطا در پرداخت فاکتور فروش ' . $doc->getCode() ,$this->getUser(),$doc->getBid());
|
||||
return $this->redirectToRoute('shortlinks_show',['type'=>'sell','bid'=>$originalDoc->getBid()->getId(),'link'=>$originalDoc->getId(),'msg'=>'fail']);
|
||||
} else {
|
||||
if(array_key_exists('code',$result['data'])){
|
||||
if ($result['data']['code'] == 100) {
|
||||
$req->setStatus(100);
|
||||
$req->setRefID($result['data']['ref_id']);
|
||||
$req->setCardPan($result['data']['card_pan']);
|
||||
$entityManager->persist($req);
|
||||
$entityManager->flush();
|
||||
|
||||
//create wallet transaction
|
||||
$wt = new WalletTransaction();
|
||||
$wt->setBid($req->getBid());
|
||||
$wt->setDes($req->getDes());
|
||||
$wt->setDateSubmit($req->getDateSubmit());
|
||||
$wt->setGatePay($req->getGatePay());
|
||||
$wt->setStatus($req->getStatus());
|
||||
$wt->setVerifyCode($req->getVerifyCode());
|
||||
$wt->setRefID($req->getRefID());
|
||||
$wt->setCardPan($req->getCardPan());
|
||||
$wt->setAmount($req->getPrice());
|
||||
$wt->setType('sell');
|
||||
$entityManager->persist($wt);
|
||||
$entityManager->flush();
|
||||
$doc->setWalletTransaction($wt);
|
||||
$entityManager->persist($doc);
|
||||
$entityManager->flush();
|
||||
$entityManager->persist($originalDoc);
|
||||
$entityManager->flush();
|
||||
|
||||
//create hesabdariDoc
|
||||
$doc = new HesabdariDoc();
|
||||
$doc->setBid($wt->getBid());
|
||||
$doc->setDateSubmit(time());
|
||||
$doc->setDate($jdate->jdate('Y/n/d',time()));
|
||||
$doc->setType('walletPay');
|
||||
$doc->setMoney($wt->getBid()->getMoney());
|
||||
//get default year
|
||||
$year = $entityManager->getRepository(Year::class)->findOneBy([
|
||||
'bid'=>$originalDoc->getBid(),
|
||||
'head'=>true
|
||||
]);
|
||||
$doc->setYear($year);
|
||||
$doc->setDes($wt->getDes());
|
||||
$doc->setAmount($wt->getAmount());
|
||||
$doc->setCode($provider->getAccountingCode($wt->getBid(),'accounting'));
|
||||
$doc->setSubmitter($entityManager->getRepository(User::class)->findOneBy(['email'=>'wallet@hesabix.ir']));
|
||||
$entityManager->persist($doc);
|
||||
$entityManager->flush();
|
||||
$originalDoc->addRelatedDoc($doc);
|
||||
$originalDoc->setWalletTransaction($wt);
|
||||
$entityManager->persist($originalDoc);
|
||||
$entityManager->flush();
|
||||
|
||||
//create rows bank
|
||||
$row = new HesabdariRow();
|
||||
$row->setBid($originalDoc->getBid());
|
||||
$row->setDoc($doc);
|
||||
$row->setBank($doc->getBid()->getWalletMatchBank());
|
||||
$row->setBd($doc->getAmount());
|
||||
$row->setBs(0);
|
||||
$row->setDes('دریافت وجه فاکتور آنلاین شماره ' . $doc->getCode());
|
||||
//get table ref
|
||||
$table = $entityManager->getRepository(HesabdariTable::class)->findOneBy(['code'=>5]);
|
||||
$row->setRef($table);
|
||||
$row->setYear($year);
|
||||
$entityManager->persist($row);
|
||||
$entityManager->flush();
|
||||
|
||||
|
||||
//create rows person
|
||||
//get person
|
||||
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy(['doc' => $originalDoc]);
|
||||
$person = null;
|
||||
foreach ($rows as $oldRow) {
|
||||
if ($row->getPerson())
|
||||
$person = $row->getPerson();
|
||||
}
|
||||
$row = new HesabdariRow();
|
||||
$row->setBid($originalDoc->getBid());
|
||||
$row->setDoc($doc);
|
||||
$row->setPerson($person);
|
||||
$row->setBs($doc->getAmount());
|
||||
$row->setBd(0);
|
||||
$row->setDes('پرداخت وجه فاکتور آنلاین شماره ' . $doc->getCode());
|
||||
//get table ref
|
||||
$table = $entityManager->getRepository(HesabdariTable::class)->findOneBy(['code'=>3]);
|
||||
$row->setRef($table);
|
||||
$row->setYear($year);
|
||||
$entityManager->persist($row);
|
||||
$entityManager->flush();
|
||||
|
||||
$log->insert('کیف پول','پرداخت موفق فاکتور فروش ' . $originalDoc->getCode() ,$this->getUser(),$doc->getBid());
|
||||
return $this->redirectToRoute('shortlinks_show',['type'=>'sell','bid'=>$originalDoc->getBid()->getId(),'link'=>$originalDoc->getId(),'msg'=>'success']);
|
||||
}
|
||||
}
|
||||
$log->insert('کیف پول','خطا در پرداخت فاکتور فروش ' . $originalDoc->getCode() ,$this->getUser(),$doc->getBid());
|
||||
return $this->redirectToRoute('shortlinks_show',['type'=>'sell','bid'=>$originalDoc->getBid()->getId(),'link'=>$originalDoc->getId(),'msg'=>'fail']);
|
||||
}
|
||||
}
|
||||
}
|
61
hesabixCore/src/Controller/Front/ShortlinksController.php
Normal file
61
hesabixCore/src/Controller/Front/ShortlinksController.php
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller\Front;
|
||||
|
||||
use App\Entity\Business;
|
||||
use App\Entity\HesabdariDoc;
|
||||
use App\Entity\HesabdariRow;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class ShortlinksController extends AbstractController
|
||||
{
|
||||
#[Route('/sl/{type}/{bid}/{link}/{msg}', name: 'shortlinks_show')]
|
||||
public function shortlinks_show(string $bid, string $type, string $link, EntityManagerInterface $entityManager, String $msg = 'default'): Response
|
||||
{
|
||||
$bus = $entityManager->getRepository(Business::class)->find($bid);
|
||||
if (!$bus)
|
||||
throw $this->createNotFoundException();
|
||||
if (!$bus->isShortlinks())
|
||||
throw $this->createNotFoundException();
|
||||
if ($type == 'sell') {
|
||||
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
|
||||
'type' => 'sell',
|
||||
'shortlink' => $link
|
||||
]);
|
||||
if (!$doc) {
|
||||
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
|
||||
'type' => 'sell',
|
||||
'id' => $link,
|
||||
'bid'=>$bus
|
||||
]);
|
||||
if (!$doc)
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
||||
$rows = $entityManager->getRepository(HesabdariRow::class)->findBy(['doc' => $doc]);
|
||||
$items = [];
|
||||
$person = null;
|
||||
foreach ($rows as $row) {
|
||||
if (!$row->getPerson())
|
||||
$items[] = $row;
|
||||
else
|
||||
$person = $row->getPerson();
|
||||
}
|
||||
//calculate total pays
|
||||
$totalPays = 0;
|
||||
foreach ($doc->getRelatedDocs() as $relatedDoc)
|
||||
$totalPays += $relatedDoc->getAmount();
|
||||
}
|
||||
return $this->render('shortlinks/sell.html.twig', [
|
||||
'bid' => $doc->getBid(),
|
||||
'doc' => $doc,
|
||||
'rows' => $items,
|
||||
'person'=> $person,
|
||||
'totalPays'=>$totalPays,
|
||||
'msg'=>$msg
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -2,9 +2,12 @@
|
|||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\ChangeReport;
|
||||
use App\Entity\HesabdariDoc;
|
||||
use App\Entity\Statment;
|
||||
use App\Entity\User;
|
||||
use App\Service\Access;
|
||||
use App\Service\Jdate;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
@ -18,21 +21,40 @@ use App\Service\Provider;
|
|||
class GeneralController extends AbstractController
|
||||
{
|
||||
#[Route('/api/general/stat', name: 'general_stat')]
|
||||
public function general_stat(EntityManagerInterface $entityManager): JsonResponse
|
||||
public function general_stat(EntityManagerInterface $entityManager,Jdate $jdate): JsonResponse
|
||||
{
|
||||
$busCount = count($entityManager->getRepository(Business::class)->findAll());
|
||||
$users = count($entityManager->getRepository(User::class)->findAll());
|
||||
$docs = count($entityManager->getRepository(HesabdariDoc::class)->findAll());
|
||||
$lastBusiness = $entityManager->getRepository(Business::class)->findLast();
|
||||
//get last version number
|
||||
$version = '0.0.1';
|
||||
$lastUpdateDate = '1399';
|
||||
$lastUpdateDes = '';
|
||||
$last = $entityManager->getRepository(ChangeReport::class)->findOneBy([],['id'=>'DESC']);
|
||||
if($last){
|
||||
$version = $last->getVersion();
|
||||
$lastUpdateDate = $jdate->jdate('Y/n/d',$last->getDateSubmit());
|
||||
$lastUpdateDes = $last->getBody();
|
||||
}
|
||||
|
||||
return $this->json([
|
||||
'business' => $busCount,
|
||||
'users'=> $users,
|
||||
'docs'=> $docs,
|
||||
'version'=>$version,
|
||||
'lastUpdateDate'=>$lastUpdateDate,
|
||||
'lastUpdateDes'=>$lastUpdateDes,
|
||||
'lastBusinessName'=> $lastBusiness->getname(),
|
||||
'lastBusinessOwner'=>$lastBusiness->getOwner()->getFullName()
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/api/general/statements', name: 'general_statement')]
|
||||
public function general_statement(EntityManagerInterface $entityManager,Jdate $jdate): JsonResponse
|
||||
{
|
||||
return $this->json($entityManager->getRepository(Statment::class)->findBy([],['id'=>'DESC']));
|
||||
}
|
||||
#[Route('/front/print/{id}', name: 'app_front_print')]
|
||||
public function app_front_print(Provider $provider,EntityManagerInterface $entityManager,pdfMGR $pdfMGR,String $id)
|
||||
{
|
||||
|
|
|
@ -71,6 +71,9 @@ class HesabdariController extends AbstractController
|
|||
'mobile' => $item->getPerson()->getMobile(),
|
||||
'address' => $item->getPerson()->getAddress(),
|
||||
'des' => $item->getPerson()->getDes(),
|
||||
'shomaresabt' => $item->getperson()->getSabt(),
|
||||
'codeeghtesadi' =>$item->getPerson()->getCodeeghtesadi(),
|
||||
'postalcode' => $item->getPerson()->getPostalCode()
|
||||
];
|
||||
}
|
||||
elseif($item->getBank()){
|
||||
|
@ -97,11 +100,14 @@ class HesabdariController extends AbstractController
|
|||
$temp['type'] = 'commodity';
|
||||
$temp['ref'] = $item->getCommodity()->getName();
|
||||
$temp['refCode'] = $item->getCommodity()->getCode();
|
||||
$temp['count'] = $item->getCommdityCount();
|
||||
$temp['unitPrice'] = $item->getBs()/$item->getCommdityCount();
|
||||
$temp['commodity'] = [
|
||||
'id' => $item->getCommodity()->getId(),
|
||||
'name' => $item->getCommodity()->getName(),
|
||||
'des' => $item->getCommodity()->getDes(),
|
||||
'code' => $item->getCommodity()->getCode(),
|
||||
'unit' => $item->getCommodity()->getUnit()->getName(),
|
||||
];
|
||||
}
|
||||
elseif($item->getSalary()){
|
||||
|
@ -136,9 +142,21 @@ class HesabdariController extends AbstractController
|
|||
}
|
||||
$rows[] = $temp;
|
||||
}
|
||||
//get related docs
|
||||
$rds = [];
|
||||
foreach ($doc->getRelatedDocs() as $relatedDoc){
|
||||
$temp = [];
|
||||
$temp['amount'] = $relatedDoc->getAmount();
|
||||
$temp['des'] = $relatedDoc->getDes();
|
||||
$temp['date'] = $relatedDoc->getDate();
|
||||
$temp['type'] = $relatedDoc->getType();
|
||||
$temp['code'] = $relatedDoc->getCode();
|
||||
$rds[] = $temp;
|
||||
}
|
||||
return $this->json([
|
||||
'doc'=>$doc,
|
||||
'rows'=>$rows
|
||||
'rows'=>$rows,
|
||||
'relatedDocs'=>$rds
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -157,6 +175,7 @@ class HesabdariController extends AbstractController
|
|||
elseif($params['type'] == 'income') $roll='income';
|
||||
elseif($params['type'] == 'buy') $roll='buy';
|
||||
elseif($params['type'] == 'transfer') $roll='transfer';
|
||||
elseif($params['type'] == 'sell') $roll='sell';
|
||||
elseif($params['type'] == 'all') $roll='accounting';
|
||||
else
|
||||
$this->createNotFoundException();
|
||||
|
@ -193,10 +212,21 @@ class HesabdariController extends AbstractController
|
|||
'amount'=>$item->getAmount(),
|
||||
'submitter'=> $item->getSubmitter()->getFullName(),
|
||||
];
|
||||
if($params['type'] == 'buy'){
|
||||
if($params['type'] == 'buy' || $params['type'] == 'sell'){
|
||||
$mainRow = $entityManager->getRepository(HesabdariRow::class)->getNotEqual($item,'person');
|
||||
$temp['person'] = $mainRow->getPerson()->getNikename();
|
||||
}
|
||||
|
||||
//get status of doc
|
||||
$temp['status'] = 'تسویه نشده';
|
||||
$pays = 0;
|
||||
foreach ($item->getRelatedDocs() as $relatedDoc){
|
||||
$pays += $relatedDoc->getAmount();
|
||||
|
||||
}
|
||||
if($item->getAmount() <= $pays)
|
||||
$temp['status'] = 'تسویه شده';
|
||||
|
||||
$dataTemp[] = $temp;
|
||||
}
|
||||
return $this->json($dataTemp);
|
||||
|
@ -266,6 +296,15 @@ class HesabdariController extends AbstractController
|
|||
$entityManager->flush();
|
||||
}
|
||||
|
||||
//add document to related docs
|
||||
if(array_key_exists('related',$params)){
|
||||
$relatedDoc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy(['code'=>$params['related'],'bid'=>$doc->getBid()]);
|
||||
if($relatedDoc){
|
||||
$relatedDoc->addRelatedDoc($doc);
|
||||
$entityManager->persist($relatedDoc);
|
||||
$entityManager->flush();
|
||||
}
|
||||
}
|
||||
|
||||
$amount = 0;
|
||||
foreach ($params['rows'] as $row){
|
||||
|
|
|
@ -30,7 +30,8 @@ class LogController extends AbstractController
|
|||
if(array_key_exists('type',$params)){
|
||||
if($params['type'] == 'sms')
|
||||
$logs = $entityManager->getRepository(\App\Entity\Log::class)->findBy(['bid'=>$business,'part'=>'پیامک']);
|
||||
|
||||
elseif($params['type'] == 'wallet')
|
||||
$logs = $entityManager->getRepository(\App\Entity\Log::class)->findBy(['bid'=>$business,'part'=>'کیف پول']);
|
||||
}
|
||||
else{
|
||||
$logs = $entityManager->getRepository(\App\Entity\Log::class)->findBy(['bid'=>$business]);
|
||||
|
@ -45,6 +46,7 @@ class LogController extends AbstractController
|
|||
$temp['des'] = $log->getDes();
|
||||
$temp['part'] = $log->getPart();
|
||||
$temp['date'] = $jdate->jdate('Y/n/d H:i',$log->getDateSubmit());
|
||||
$temp['ipaddress'] = $log->getIpaddress();
|
||||
$temps[] = $temp;
|
||||
}
|
||||
return $this->json(array_reverse($temps));
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace App\Controller;
|
|||
use App\Entity\Business;
|
||||
use App\Entity\Plugin;
|
||||
use App\Entity\PluginProdect;
|
||||
use App\Entity\Settings;
|
||||
use App\Service\Access;
|
||||
use App\Service\Jdate;
|
||||
use App\Service\Log;
|
||||
|
@ -13,6 +14,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
class PluginController extends AbstractController
|
||||
{
|
||||
|
@ -37,9 +39,11 @@ class PluginController extends AbstractController
|
|||
$pp = $entityManager->getRepository(PluginProdect::class)->find($id);
|
||||
if(!$pp)
|
||||
throw $this->createNotFoundException('plugin not found');
|
||||
$data = array("merchant_id" => "a7804652-1fb9-4b43-911c-0a1046e61be1",
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(),
|
||||
"amount" => ($pp->getPrice() * 109)/10,
|
||||
"callback_url" => "https://hesabix.ir/api/plugin/buy/verify",
|
||||
"callback_url" => $this->generateUrl('api_plugin_buy_verify',[],UrlGeneratorInterface::ABSOLUTE_URL),
|
||||
"description" => $pp->getName(),
|
||||
);
|
||||
$jsonData = json_encode($data);
|
||||
|
@ -90,7 +94,9 @@ class PluginController extends AbstractController
|
|||
$Authority = $request->get('Authority');
|
||||
$status = $request->get('Status');
|
||||
$req = $entityManager->getRepository(Plugin::class)->findOneBy(['verifyCode'=>$Authority]);
|
||||
$data = array("merchant_id" => "a7804652-1fb9-4b43-911c-0a1046e61be1", "authority" => $Authority, "amount" => $req->getPrice());
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(), "authority" => $Authority, "amount" => $req->getPrice());
|
||||
$jsonData = json_encode($data);
|
||||
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Business;
|
||||
use App\Entity\HesabdariDoc;
|
||||
use App\Entity\Settings;
|
||||
use App\Entity\SMSPays;
|
||||
use App\Entity\SMSSettings;
|
||||
use App\Service\Access;
|
||||
|
@ -10,12 +12,14 @@ use App\Service\Jdate;
|
|||
use App\Service\Log;
|
||||
use App\Service\Notification;
|
||||
use App\Service\Provider;
|
||||
use App\Service\SMS;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
|
||||
class SMSController extends AbstractController
|
||||
{
|
||||
|
@ -110,9 +114,11 @@ class SMSController extends AbstractController
|
|||
if(!array_key_exists('price',$params))
|
||||
throw $this->createAccessDeniedException('price not set');
|
||||
|
||||
$data = array("merchant_id" => "a7804652-1fb9-4b43-911c-0a1046e61be1",
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(),
|
||||
"amount" => $params['price'],
|
||||
"callback_url" => "http://hesabix.local/api/sms/buy/verify",
|
||||
"callback_url" => $this->generateUrl('api_sms_buy_verify',[],UrlGeneratorInterface::ABSOLUTE_URL),
|
||||
"description" => 'افزایش اعتبار سرویس پیامک',
|
||||
);
|
||||
$jsonData = json_encode($data);
|
||||
|
@ -162,7 +168,9 @@ class SMSController extends AbstractController
|
|||
$Authority = $request->get('Authority');
|
||||
$status = $request->get('Status');
|
||||
$req = $entityManager->getRepository(SMSPays::class)->findOneBy(['verifyCode'=>$Authority]);
|
||||
$data = array("merchant_id" => "a7804652-1fb9-4b43-911c-0a1046e61be1", "authority" => $Authority, "amount" => $req->getPrice());
|
||||
//get system settings
|
||||
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
$data = array("merchant_id" => $settings->getZarinpalMerchant(), "authority" => $Authority, "amount" => $req->getPrice());
|
||||
$jsonData = json_encode($data);
|
||||
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
|
||||
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
|
||||
|
@ -200,7 +208,6 @@ class SMSController extends AbstractController
|
|||
$req->getSubmitter(),
|
||||
$req->getBid()
|
||||
);
|
||||
$log->insert('سرویس پیامک','پرداخت ناموفق شارژ سرویس پیامک' ,$this->getUser(),$req->getBid());
|
||||
$notification->insert(' سرویس پیامک شارژ شد.','/acc/sms/panel',$req->getBid(),$req->getSubmitter());
|
||||
return $this->render('buy/success.html.twig',['req'=>$req]);
|
||||
}
|
||||
|
@ -210,4 +217,37 @@ class SMSController extends AbstractController
|
|||
return $this->render('buy/fail.html.twig', ['results'=>$result]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
#[Route('/api/sms/send/sell-invoice/{id}/{num}', name: 'api_sms_send_invoice')]
|
||||
public function api_sms_send_invoice(SMS $SMS,String $id,String $num,Provider $provider,Access $access,Log $log,Request $request,EntityManagerInterface $entityManager): Response
|
||||
{
|
||||
$acc = $access->hasRole('sell');
|
||||
if(!$acc)
|
||||
throw $this->createAccessDeniedException();
|
||||
|
||||
$bid = $acc['bid'];
|
||||
if($bid->getSmsCharge()<530)
|
||||
return $this->json(['result'=>'2']);
|
||||
$doc = $entityManager->getRepository(HesabdariDoc::class)->findOneBy([
|
||||
'id'=>$id,
|
||||
'bid'=>$bid,
|
||||
'type'=>'sell'
|
||||
]);
|
||||
if(!$doc)
|
||||
return $this->json(['result'=>3]);
|
||||
$shortLink = $doc->getId();
|
||||
if($doc->getShortlink())
|
||||
$shortLink = $doc->getShortlink();
|
||||
|
||||
return $this->json(['result'=>
|
||||
$SMS->sendByBalance(
|
||||
[$bid->getName(),'sell/' . $bid->getId() . '/' . $shortLink],
|
||||
168030,
|
||||
$num,$bid,$this->getUser(),3
|
||||
)]);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
53
hesabixCore/src/Controller/WalletController.php
Normal file
53
hesabixCore/src/Controller/WalletController.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\WalletTransaction;
|
||||
use App\Service\Access;
|
||||
use App\Service\Jdate;
|
||||
use App\Service\Provider;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class WalletController extends AbstractController
|
||||
{
|
||||
#[Route('/api/wallet/info', name: 'api_wallet_info')]
|
||||
public function api_wallet_info(EntityManagerInterface $entityManager,Access $access,Provider $provider): JsonResponse
|
||||
{
|
||||
$acc = $access->hasRole('wallet');
|
||||
if(!$acc)
|
||||
throw $this->createAccessDeniedException();
|
||||
$items = $entityManager->getRepository(WalletTransaction::class)->findBy([
|
||||
'bid' => $acc['bid'],
|
||||
'status'=>100
|
||||
]);
|
||||
$pays = 0;
|
||||
$gets = 0;
|
||||
foreach ($items as $item){
|
||||
if($item->getType() == 'pay') $pays += $item->getAmount();
|
||||
elseif ($item->getType() == 'get' || $item->getType() == 'sell') $gets += $item->getAmount();
|
||||
}
|
||||
return $this->json([
|
||||
'deposit' => $gets - $pays,
|
||||
'transactions'=>count($items),
|
||||
'turnover'=>$pays + $gets,
|
||||
]);
|
||||
}
|
||||
#[Route('/api/wallet/transactions', name: 'api_wallet_transactions')]
|
||||
public function api_wallet_transactions(Jdate $jdate,EntityManagerInterface $entityManager,Access $access,Provider $provider): JsonResponse
|
||||
{
|
||||
$acc = $access->hasRole('wallet');
|
||||
if(!$acc)
|
||||
throw $this->createAccessDeniedException();
|
||||
$items = $entityManager->getRepository(WalletTransaction::class)->findBy([
|
||||
'bid' => $acc['bid']
|
||||
],['id'=>'DESC']);
|
||||
foreach ($items as $item){
|
||||
$item->setDateSubmit($jdate->jdate('Y/n/d H:i',$item->getDateSubmit()));
|
||||
}
|
||||
return $this->json($provider->ArrayEntity2Array($items,0));
|
||||
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ use Doctrine\Common\Collections\ArrayCollection;
|
|||
use Doctrine\Common\Collections\Collection;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Serializer\Annotation\Ignore;
|
||||
|
||||
#[ORM\Entity(repositoryClass: BusinessRepository::class)]
|
||||
class Business
|
||||
|
@ -136,6 +137,7 @@ class Business
|
|||
|
||||
#[ORM\ManyToOne]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
#[Ignore]
|
||||
private ?User $owner = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
|
@ -159,6 +161,21 @@ class Business
|
|||
#[ORM\OneToMany(mappedBy: 'bid', targetEntity: Storeroom::class, orphanRemoval: true)]
|
||||
private Collection $storerooms;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?bool $shortlinks = false;
|
||||
|
||||
#[ORM\OneToMany(mappedBy: 'bid', targetEntity: WalletTransaction::class, orphanRemoval: true)]
|
||||
#[Ignore]
|
||||
private Collection $walletTransactions;
|
||||
|
||||
#[ORM\ManyToOne]
|
||||
#[Ignore]
|
||||
private ?BankAccount $WalletMatchBank = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
#[Ignore]
|
||||
private ?bool $walletEnable = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->logs = new ArrayCollection();
|
||||
|
@ -177,6 +194,7 @@ class Business
|
|||
$this->sMSSettings = new ArrayCollection();
|
||||
$this->commodityDrops = new ArrayCollection();
|
||||
$this->storerooms = new ArrayCollection();
|
||||
$this->walletTransactions = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
|
@ -1034,4 +1052,71 @@ class Business
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isShortlinks(): ?bool
|
||||
{
|
||||
if($this->shortlinks == true) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public function setShortlinks(?bool $shortlinks): static
|
||||
{
|
||||
$this->shortlinks = $shortlinks;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, WalletTransaction>
|
||||
*/
|
||||
public function getWalletTransactions(): Collection
|
||||
{
|
||||
return $this->walletTransactions;
|
||||
}
|
||||
|
||||
public function addWalletTransaction(WalletTransaction $walletTransaction): static
|
||||
{
|
||||
if (!$this->walletTransactions->contains($walletTransaction)) {
|
||||
$this->walletTransactions->add($walletTransaction);
|
||||
$walletTransaction->setBid($this);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeWalletTransaction(WalletTransaction $walletTransaction): static
|
||||
{
|
||||
if ($this->walletTransactions->removeElement($walletTransaction)) {
|
||||
// set the owning side to null (unless already changed)
|
||||
if ($walletTransaction->getBid() === $this) {
|
||||
$walletTransaction->setBid(null);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getWalletMatchBank(): ?BankAccount
|
||||
{
|
||||
return $this->WalletMatchBank;
|
||||
}
|
||||
|
||||
public function setWalletMatchBank(?BankAccount $WalletMatchBank): static
|
||||
{
|
||||
$this->WalletMatchBank = $WalletMatchBank;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isWalletEnable(): ?bool
|
||||
{
|
||||
return $this->walletEnable;
|
||||
}
|
||||
|
||||
public function setWalletEnable(?bool $walletEnable): static
|
||||
{
|
||||
$this->walletEnable = $walletEnable;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,10 +71,25 @@ class HesabdariDoc
|
|||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $refData = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $shortlink = null;
|
||||
|
||||
#[ORM\ManyToOne]
|
||||
#[Ignore]
|
||||
private ?WalletTransaction $walletTransaction = null;
|
||||
|
||||
#[ORM\ManyToMany(targetEntity: self::class)]
|
||||
#[Ignore]
|
||||
private Collection $relatedDocs;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $status = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->hesabdariRows = new ArrayCollection();
|
||||
$this->plugNoghreOrders = new ArrayCollection();
|
||||
$this->relatedDocs = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
|
@ -297,4 +312,64 @@ class HesabdariDoc
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getShortlink(): ?string
|
||||
{
|
||||
return $this->shortlink;
|
||||
}
|
||||
|
||||
public function setShortlink(?string $shortlink): static
|
||||
{
|
||||
$this->shortlink = $shortlink;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getWalletTransaction(): ?WalletTransaction
|
||||
{
|
||||
return $this->walletTransaction;
|
||||
}
|
||||
|
||||
public function setWalletTransaction(?WalletTransaction $walletTransaction): static
|
||||
{
|
||||
$this->walletTransaction = $walletTransaction;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, self>
|
||||
*/
|
||||
public function getRelatedDocs(): Collection
|
||||
{
|
||||
return $this->relatedDocs;
|
||||
}
|
||||
|
||||
public function addRelatedDoc(self $relatedDoc): static
|
||||
{
|
||||
if (!$this->relatedDocs->contains($relatedDoc)) {
|
||||
$this->relatedDocs->add($relatedDoc);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeRelatedDoc(self $relatedDoc): static
|
||||
{
|
||||
$this->relatedDocs->removeElement($relatedDoc);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStatus(): ?string
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function setStatus(?string $status): static
|
||||
{
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,6 +28,9 @@ class Log
|
|||
#[ORM\Column(length: 255)]
|
||||
private ?string $des = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $ipaddress = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
|
@ -92,4 +95,16 @@ class Log
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getIpaddress(): ?string
|
||||
{
|
||||
return $this->ipaddress;
|
||||
}
|
||||
|
||||
public function setIpaddress(?string $ipaddress): static
|
||||
{
|
||||
$this->ipaddress = $ipaddress;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
171
hesabixCore/src/Entity/PayInfoTemp.php
Normal file
171
hesabixCore/src/Entity/PayInfoTemp.php
Normal file
|
@ -0,0 +1,171 @@
|
|||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\PayInfoTempRepository;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: PayInfoTempRepository::class)]
|
||||
class PayInfoTemp
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
private ?Business $bid = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $dateSubmit = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $des = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $price = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $status = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $verifyCode = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $gatePay = null;
|
||||
|
||||
#[ORM\ManyToOne]
|
||||
private ?HesabdariDoc $doc = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $refID = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $cardPan = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getBid(): ?Business
|
||||
{
|
||||
return $this->bid;
|
||||
}
|
||||
|
||||
public function setBid(?Business $bid): static
|
||||
{
|
||||
$this->bid = $bid;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDateSubmit(): ?string
|
||||
{
|
||||
return $this->dateSubmit;
|
||||
}
|
||||
|
||||
public function setDateSubmit(string $dateSubmit): static
|
||||
{
|
||||
$this->dateSubmit = $dateSubmit;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDes(): ?string
|
||||
{
|
||||
return $this->des;
|
||||
}
|
||||
|
||||
public function setDes(?string $des): static
|
||||
{
|
||||
$this->des = $des;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPrice(): ?string
|
||||
{
|
||||
return $this->price;
|
||||
}
|
||||
|
||||
public function setPrice(string $price): static
|
||||
{
|
||||
$this->price = $price;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStatus(): ?string
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function setStatus(?string $status): static
|
||||
{
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getVerifyCode(): ?string
|
||||
{
|
||||
return $this->verifyCode;
|
||||
}
|
||||
|
||||
public function setVerifyCode(?string $verifyCode): static
|
||||
{
|
||||
$this->verifyCode = $verifyCode;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getGatePay(): ?string
|
||||
{
|
||||
return $this->gatePay;
|
||||
}
|
||||
|
||||
public function setGatePay(string $gatePay): static
|
||||
{
|
||||
$this->gatePay = $gatePay;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDoc(): ?HesabdariDoc
|
||||
{
|
||||
return $this->doc;
|
||||
}
|
||||
|
||||
public function setDoc(?HesabdariDoc $doc): static
|
||||
{
|
||||
$this->doc = $doc;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getRefID(): ?string
|
||||
{
|
||||
return $this->refID;
|
||||
}
|
||||
|
||||
public function setRefID(?string $refID): static
|
||||
{
|
||||
$this->refID = $refID;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCardPan(): ?string
|
||||
{
|
||||
return $this->cardPan;
|
||||
}
|
||||
|
||||
public function setCardPan(?string $cardPan): static
|
||||
{
|
||||
$this->cardPan = $cardPan;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
|
@ -84,6 +84,9 @@ class Permission
|
|||
#[ORM\Column(nullable: true)]
|
||||
private ?bool $store = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?bool $wallet = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
|
@ -364,4 +367,16 @@ class Permission
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isWallet(): ?bool
|
||||
{
|
||||
return $this->wallet;
|
||||
}
|
||||
|
||||
public function setWallet(?bool $wallet): static
|
||||
{
|
||||
$this->wallet = $wallet;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,9 @@ class Settings
|
|||
#[ORM\Column(nullable: true)]
|
||||
private ?bool $activeSendSms = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $zarinpalMerchant = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
|
@ -62,4 +65,16 @@ class Settings
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getZarinpalMerchant(): ?string
|
||||
{
|
||||
return $this->zarinpalMerchant;
|
||||
}
|
||||
|
||||
public function setZarinpalMerchant(?string $zarinpalMerchant): static
|
||||
{
|
||||
$this->zarinpalMerchant = $zarinpalMerchant;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
66
hesabixCore/src/Entity/Statment.php
Normal file
66
hesabixCore/src/Entity/Statment.php
Normal file
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\StatmentRepository;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: StatmentRepository::class)]
|
||||
class Statment
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $title = null;
|
||||
|
||||
#[ORM\Column(type: Types::TEXT)]
|
||||
private ?string $body = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $dateSubmit = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getTitle(): ?string
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
public function setTitle(?string $title): static
|
||||
{
|
||||
$this->title = $title;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getBody(): ?string
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
public function setBody(string $body): static
|
||||
{
|
||||
$this->body = $body;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDateSubmit(): ?string
|
||||
{
|
||||
return $this->dateSubmit;
|
||||
}
|
||||
|
||||
public function setDateSubmit(string $dateSubmit): static
|
||||
{
|
||||
$this->dateSubmit = $dateSubmit;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
|
@ -86,6 +86,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||
#[ORM\OneToMany(mappedBy: 'submitter', targetEntity: SMSPays::class, orphanRemoval: true)]
|
||||
private Collection $sMSPays;
|
||||
|
||||
#[ORM\OneToMany(mappedBy: 'submitter', targetEntity: WalletTransaction::class)]
|
||||
private Collection $walletTransactions;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->userTokens = new ArrayCollection();
|
||||
|
@ -101,6 +104,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||
$this->notifications = new ArrayCollection();
|
||||
$this->emailHistories = new ArrayCollection();
|
||||
$this->sMSPays = new ArrayCollection();
|
||||
$this->walletTransactions = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
|
@ -634,4 +638,34 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
|
|||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, WalletTransaction>
|
||||
*/
|
||||
public function getWalletTransactions(): Collection
|
||||
{
|
||||
return $this->walletTransactions;
|
||||
}
|
||||
|
||||
public function addWalletTransaction(WalletTransaction $walletTransaction): static
|
||||
{
|
||||
if (!$this->walletTransactions->contains($walletTransaction)) {
|
||||
$this->walletTransactions->add($walletTransaction);
|
||||
$walletTransaction->setSubmitter($this);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeWalletTransaction(WalletTransaction $walletTransaction): static
|
||||
{
|
||||
if ($this->walletTransactions->removeElement($walletTransaction)) {
|
||||
// set the owning side to null (unless already changed)
|
||||
if ($walletTransaction->getSubmitter() === $this) {
|
||||
$walletTransaction->setSubmitter(null);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
246
hesabixCore/src/Entity/WalletTransaction.php
Normal file
246
hesabixCore/src/Entity/WalletTransaction.php
Normal file
|
@ -0,0 +1,246 @@
|
|||
<?php
|
||||
|
||||
namespace App\Entity;
|
||||
|
||||
use App\Repository\WalletTransactionRepository;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: WalletTransactionRepository::class)]
|
||||
class WalletTransaction
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\ManyToOne(inversedBy: 'walletTransactions')]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
private ?Business $bid = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $dateSubmit = null;
|
||||
|
||||
#[ORM\ManyToOne(inversedBy: 'walletTransactions')]
|
||||
private ?User $submitter = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $type = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $amount = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $shaba = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $bank = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $cardNum = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $status = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $des = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $cardPan = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $refID = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $verifyCode = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $gatePay = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $transactionID = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getBid(): ?Business
|
||||
{
|
||||
return $this->bid;
|
||||
}
|
||||
|
||||
public function setBid(?Business $bid): static
|
||||
{
|
||||
$this->bid = $bid;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDateSubmit(): ?string
|
||||
{
|
||||
return $this->dateSubmit;
|
||||
}
|
||||
|
||||
public function setDateSubmit(string $dateSubmit): static
|
||||
{
|
||||
$this->dateSubmit = $dateSubmit;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getSubmitter(): ?User
|
||||
{
|
||||
return $this->submitter;
|
||||
}
|
||||
|
||||
public function setSubmitter(?User $submitter): static
|
||||
{
|
||||
$this->submitter = $submitter;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getType(): ?string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function setType(string $type): static
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getAmount(): ?string
|
||||
{
|
||||
return $this->amount;
|
||||
}
|
||||
|
||||
public function setAmount(string $amount): static
|
||||
{
|
||||
$this->amount = $amount;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getShaba(): ?string
|
||||
{
|
||||
return $this->shaba;
|
||||
}
|
||||
|
||||
public function setShaba(?string $shaba): static
|
||||
{
|
||||
$this->shaba = $shaba;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getBank(): ?string
|
||||
{
|
||||
return $this->bank;
|
||||
}
|
||||
|
||||
public function setBank(?string $bank): static
|
||||
{
|
||||
$this->bank = $bank;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCardNum(): ?string
|
||||
{
|
||||
return $this->cardNum;
|
||||
}
|
||||
|
||||
public function setCardNum(?string $cardNum): static
|
||||
{
|
||||
$this->cardNum = $cardNum;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getStatus(): ?string
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function setStatus(?string $status): static
|
||||
{
|
||||
$this->status = $status;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDes(): ?string
|
||||
{
|
||||
return $this->des;
|
||||
}
|
||||
|
||||
public function setDes(?string $des): static
|
||||
{
|
||||
$this->des = $des;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getCardPan(): ?string
|
||||
{
|
||||
return $this->cardPan;
|
||||
}
|
||||
|
||||
public function setCardPan(?string $cardPan): static
|
||||
{
|
||||
$this->cardPan = $cardPan;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getRefID(): ?string
|
||||
{
|
||||
return $this->refID;
|
||||
}
|
||||
|
||||
public function setRefID(?string $refID): static
|
||||
{
|
||||
$this->refID = $refID;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getVerifyCode(): ?string
|
||||
{
|
||||
return $this->verifyCode;
|
||||
}
|
||||
|
||||
public function setVerifyCode(?string $verifyCode): static
|
||||
{
|
||||
$this->verifyCode = $verifyCode;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getGatePay(): ?string
|
||||
{
|
||||
return $this->gatePay;
|
||||
}
|
||||
|
||||
public function setGatePay(?string $gatePay): static
|
||||
{
|
||||
$this->gatePay = $gatePay;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTransactionID(): ?string
|
||||
{
|
||||
return $this->transactionID;
|
||||
}
|
||||
|
||||
public function setTransactionID(?string $transactionID): static
|
||||
{
|
||||
$this->transactionID = $transactionID;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
95
hesabixCore/src/Module/RemoteAddress.php
Normal file
95
hesabixCore/src/Module/RemoteAddress.php
Normal file
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
namespace App\Module;
|
||||
|
||||
class RemoteAddress
|
||||
{
|
||||
/**
|
||||
* Whether to use proxy addresses or not.
|
||||
*
|
||||
* As default this setting is disabled - IP address is mostly needed to increase
|
||||
* security. HTTP_* are not reliable since can easily be spoofed. It can be enabled
|
||||
* just for more flexibility, but if user uses proxy to connect to trusted services
|
||||
* it's his/her own risk, only reliable field for IP address is $_SERVER['REMOTE_ADDR'].
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $useProxy = false;
|
||||
|
||||
/**
|
||||
* List of trusted proxy IP addresses
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $trustedProxies = array();
|
||||
|
||||
/**
|
||||
* HTTP header to introspect for proxies
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $proxyHeader = 'HTTP_X_FORWARDED_FOR';
|
||||
|
||||
// [...]
|
||||
|
||||
/**
|
||||
* Returns client IP address.
|
||||
*
|
||||
* @return string IP address.
|
||||
*/
|
||||
public function getIpAddress()
|
||||
{
|
||||
$ip = $this->getIpAddressFromProxy();
|
||||
if ($ip) {
|
||||
return $ip;
|
||||
}
|
||||
|
||||
// direct IP address
|
||||
if (isset($_SERVER['REMOTE_ADDR'])) {
|
||||
return $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to get the IP address for a proxied client
|
||||
*
|
||||
* @see http://tools.ietf.org/html/draft-ietf-appsawg-http-forwarded-10#section-5.2
|
||||
* @return false|string
|
||||
*/
|
||||
protected function getIpAddressFromProxy()
|
||||
{
|
||||
if (!$this->useProxy
|
||||
|| (isset($_SERVER['REMOTE_ADDR']) && !in_array($_SERVER['REMOTE_ADDR'], $this->trustedProxies))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$header = $this->proxyHeader;
|
||||
if (!isset($_SERVER[$header]) || empty($_SERVER[$header])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Extract IPs
|
||||
$ips = explode(',', $_SERVER[$header]);
|
||||
// trim, so we can compare against trusted proxies properly
|
||||
$ips = array_map('trim', $ips);
|
||||
// remove trusted proxy IPs
|
||||
$ips = array_diff($ips, $this->trustedProxies);
|
||||
|
||||
// Any left?
|
||||
if (empty($ips)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Since we've removed any known, trusted proxy servers, the right-most
|
||||
// address represents the first IP we do not know about -- i.e., we do
|
||||
// not know if it is a proxy server, or a client. As such, we treat it
|
||||
// as the originating IP.
|
||||
// @see http://en.wikipedia.org/wiki/X-Forwarded-For
|
||||
return array_pop($ips);
|
||||
}
|
||||
|
||||
// [...]
|
||||
}
|
48
hesabixCore/src/Repository/PayInfoTempRepository.php
Normal file
48
hesabixCore/src/Repository/PayInfoTempRepository.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\PayInfoTemp;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<PayInfoTemp>
|
||||
*
|
||||
* @method PayInfoTemp|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method PayInfoTemp|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method PayInfoTemp[] findAll()
|
||||
* @method PayInfoTemp[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class PayInfoTempRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, PayInfoTemp::class);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @return PayInfoTemp[] Returns an array of PayInfoTemp objects
|
||||
// */
|
||||
// public function findByExampleField($value): array
|
||||
// {
|
||||
// return $this->createQueryBuilder('p')
|
||||
// ->andWhere('p.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->orderBy('p.id', 'ASC')
|
||||
// ->setMaxResults(10)
|
||||
// ->getQuery()
|
||||
// ->getResult()
|
||||
// ;
|
||||
// }
|
||||
|
||||
// public function findOneBySomeField($value): ?PayInfoTemp
|
||||
// {
|
||||
// return $this->createQueryBuilder('p')
|
||||
// ->andWhere('p.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->getQuery()
|
||||
// ->getOneOrNullResult()
|
||||
// ;
|
||||
// }
|
||||
}
|
48
hesabixCore/src/Repository/StatmentRepository.php
Normal file
48
hesabixCore/src/Repository/StatmentRepository.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\Statment;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<Statment>
|
||||
*
|
||||
* @method Statment|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method Statment|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method Statment[] findAll()
|
||||
* @method Statment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class StatmentRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, Statment::class);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @return Statment[] Returns an array of Statment objects
|
||||
// */
|
||||
// public function findByExampleField($value): array
|
||||
// {
|
||||
// return $this->createQueryBuilder('s')
|
||||
// ->andWhere('s.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->orderBy('s.id', 'ASC')
|
||||
// ->setMaxResults(10)
|
||||
// ->getQuery()
|
||||
// ->getResult()
|
||||
// ;
|
||||
// }
|
||||
|
||||
// public function findOneBySomeField($value): ?Statment
|
||||
// {
|
||||
// return $this->createQueryBuilder('s')
|
||||
// ->andWhere('s.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->getQuery()
|
||||
// ->getOneOrNullResult()
|
||||
// ;
|
||||
// }
|
||||
}
|
48
hesabixCore/src/Repository/WalletTransactionRepository.php
Normal file
48
hesabixCore/src/Repository/WalletTransactionRepository.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\WalletTransaction;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<WalletTransaction>
|
||||
*
|
||||
* @method WalletTransaction|null find($id, $lockMode = null, $lockVersion = null)
|
||||
* @method WalletTransaction|null findOneBy(array $criteria, array $orderBy = null)
|
||||
* @method WalletTransaction[] findAll()
|
||||
* @method WalletTransaction[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
|
||||
*/
|
||||
class WalletTransactionRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, WalletTransaction::class);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * @return WalletTransaction[] Returns an array of WalletTransaction objects
|
||||
// */
|
||||
// public function findByExampleField($value): array
|
||||
// {
|
||||
// return $this->createQueryBuilder('w')
|
||||
// ->andWhere('w.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->orderBy('w.id', 'ASC')
|
||||
// ->setMaxResults(10)
|
||||
// ->getQuery()
|
||||
// ->getResult()
|
||||
// ;
|
||||
// }
|
||||
|
||||
// public function findOneBySomeField($value): ?WalletTransaction
|
||||
// {
|
||||
// return $this->createQueryBuilder('w')
|
||||
// ->andWhere('w.exampleField = :val')
|
||||
// ->setParameter('val', $value)
|
||||
// ->getQuery()
|
||||
// ->getOneOrNullResult()
|
||||
// ;
|
||||
// }
|
||||
}
|
|
@ -3,16 +3,18 @@
|
|||
namespace App\Service;
|
||||
|
||||
use App\Entity\Business;
|
||||
use App\Module\RemoteAddress;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class Log
|
||||
{
|
||||
|
||||
private $em;
|
||||
|
||||
private $remoteAddress;
|
||||
function __construct(EntityManagerInterface $entityManager)
|
||||
{
|
||||
$this->em = $entityManager;
|
||||
$this->remoteAddress = new RemoteAddress();
|
||||
}
|
||||
|
||||
public function insert($part,$des, $user = null, $bid = null): void
|
||||
|
@ -25,6 +27,7 @@ class Log
|
|||
$log->setDes($des);
|
||||
$log->setUser($user);
|
||||
$log->setBid($bid);
|
||||
$log->setIpaddress($this->remoteAddress->getIpAddress());
|
||||
$this->em->persist($log);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<?php
|
||||
namespace App\Service;
|
||||
use App\Entity\Business;
|
||||
use App\Entity\Settings;
|
||||
use App\Entity\User;
|
||||
use Melipayamak\MelipayamakApi;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
|
@ -8,6 +10,9 @@ class SMS
|
|||
{
|
||||
private EntityManagerInterface $entityManager;
|
||||
private Settings $settings;
|
||||
|
||||
private int $smsPrice = 2500;
|
||||
|
||||
/**
|
||||
* @param EntityManagerInterface $entityManager
|
||||
*/
|
||||
|
@ -17,7 +22,8 @@ class SMS
|
|||
$this->settings = $entityManager->getRepository(Settings::class)->findAll()[0];
|
||||
}
|
||||
|
||||
public function send(array $params,$bodyID,$to){
|
||||
public function send(array $params,$bodyID,$to): void
|
||||
{
|
||||
try{
|
||||
$username = $this->settings->getPayamakUsername();
|
||||
$password = $this->settings->getPayamakPassword();
|
||||
|
@ -31,4 +37,24 @@ class SMS
|
|||
}
|
||||
}
|
||||
|
||||
public function sendByBalance(array $params,$bodyID,$to,Business $business,User $user,$balance = 450): int
|
||||
{
|
||||
if($business->getSmsCharge() < ($balance * $this->smsPrice))
|
||||
return 2;
|
||||
$this->send($params,$bodyID,$to);
|
||||
$business->setSmsCharge($business->getSmsCharge() - ($balance * $this->smsPrice));
|
||||
$this->entityManager->persist($business);
|
||||
$this->entityManager->flush();
|
||||
//save logs
|
||||
$log = new \App\Entity\Log();
|
||||
$log->setBid($business);
|
||||
$log->setDateSubmit(time());
|
||||
$log->setPart('پیامک');
|
||||
$log->setUser($user);
|
||||
$log->setDes('ارسال پیامک به طول ' . $balance . ' پیامک به شماره ' . $to . ' با شماره الگو ' . $bodyID . ' هزینه: ' . ($this->smsPrice * $balance) . ' ریال ');
|
||||
$this->entityManager->persist($log);
|
||||
$this->entityManager->flush();
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
|
@ -4,8 +4,21 @@
|
|||
namespace App\Service;
|
||||
|
||||
|
||||
use App\Entity\ChangeReport;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class twigFunctions
|
||||
{
|
||||
private EntityManagerInterface $em;
|
||||
|
||||
/**
|
||||
* @param EntityManagerInterface $em
|
||||
*/
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
}
|
||||
|
||||
|
||||
public function md5($val){
|
||||
return md5($val);
|
||||
|
@ -64,5 +77,12 @@ class twigFunctions
|
|||
}
|
||||
}
|
||||
|
||||
public function getHesabixLastVersionNumber():string{
|
||||
$last = $this->em->getRepository(ChangeReport::class)->findOneBy([],['id'=>'DESC']);
|
||||
if($last)
|
||||
return $last->getVersion();
|
||||
return '0.0.1';
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -240,20 +240,6 @@
|
|||
"./config/packages/security.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/stimulus-bundle": {
|
||||
"version": "2.10",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "2.9",
|
||||
"ref": "05c45071c7ecacc1e48f94bc43c1f8d4405fb2b2"
|
||||
},
|
||||
"files": [
|
||||
"./assets/bootstrap.js",
|
||||
"./assets/controllers.json",
|
||||
"./assets/controllers/hello_controller.js"
|
||||
]
|
||||
},
|
||||
"symfony/translation": {
|
||||
"version": "6.2",
|
||||
"recipe": {
|
||||
|
@ -280,18 +266,6 @@
|
|||
"./templates/base.html.twig"
|
||||
]
|
||||
},
|
||||
"symfony/ux-vue": {
|
||||
"version": "2.10",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "2.9",
|
||||
"ref": "7a6b5e211acc7b10b7190e704b40f6d2bca01adf"
|
||||
},
|
||||
"files": [
|
||||
"./assets/vue/controllers/Hello.vue"
|
||||
]
|
||||
},
|
||||
"symfony/validator": {
|
||||
"version": "6.2",
|
||||
"recipe": {
|
||||
|
@ -317,22 +291,6 @@
|
|||
"./config/routes/web_profiler.yaml"
|
||||
]
|
||||
},
|
||||
"symfony/webpack-encore-bundle": {
|
||||
"version": "2.0",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "main",
|
||||
"version": "2.0",
|
||||
"ref": "082d754b3bd54b3fc669f278f1eea955cfd23cf5"
|
||||
},
|
||||
"files": [
|
||||
"./assets/app.js",
|
||||
"./assets/styles/app.css",
|
||||
"./config/packages/webpack_encore.yaml",
|
||||
"./package.json",
|
||||
"./webpack.config.js"
|
||||
]
|
||||
},
|
||||
"symfonycasts/verify-email-bundle": {
|
||||
"version": "v1.13.0"
|
||||
},
|
||||
|
|
|
@ -10,11 +10,9 @@
|
|||
<title>حسابیکس - {% block title %}{% endblock %}</title>
|
||||
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #}
|
||||
{% block stylesheets %}
|
||||
{{ encore_entry_link_tags('app') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ encore_entry_script_tags('app') }}
|
||||
{% endblock %}
|
||||
<!-- Icons -->
|
||||
<link rel="icon" href="{{ asset('/favicon.ico') }}">
|
||||
|
@ -253,7 +251,7 @@
|
|||
متن باز است.
|
||||
</div>
|
||||
<div class="col-sm-6 order-sm-1 text-center text-sm-start">
|
||||
<a class="fw-semibold" href="https://github.com/morrning/hesabixUI" target="_blank">Hesabix v 0.2.1</a> © <span>1402</span>
|
||||
<a class="fw-semibold" href="https://github.com/morrning/hesabixUI" target="_blank">حسابیکس : {{ twigFunctions.getHesabixLastVersionNumber() }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -16,10 +16,10 @@
|
|||
<i class="fa fa-door-open"></i>
|
||||
ورود | عضویت رایگان
|
||||
</a>
|
||||
<a href="http://insider.hesabix.ir" class="btn btn-outline-warning btn-lg px-4 gap-3">
|
||||
<button href="http://insider.hesabix.ir" disabled="disabled" class="btn btn-outline-warning btn-lg px-4 gap-3">
|
||||
<i class="fa fa-door-open"></i>
|
||||
دمو (نسخه در حال توسعه)
|
||||
</a>
|
||||
پیشنمایش (فعلا غیرفعال است)
|
||||
</button>
|
||||
{% if is_granted('ROLE_ADMIN')%}
|
||||
<a href="/app/dashboard" class="btn btn-alt-danger btn-lg px-4 gap-3">
|
||||
<i class="fa fa-door-open"></i>
|
||||
|
@ -85,58 +85,70 @@
|
|||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-8">
|
||||
<div class="block block-rounded row g-0 bg-info">
|
||||
<ul class="nav nav-tabs nav-tabs-block flex-md-column col-md-4" role="tablist">
|
||||
<li class="nav-item d-md-flex flex-md-column" role="presentation">
|
||||
<button aria-controls="btabs-vertical-home" aria-selected="false" class="nav-link text-md-start" data-bs-target="#btabs-vertical-home" data-bs-toggle="tab" id="btabs-vertical-home-tab" role="tab" tabindex="1">
|
||||
<i class="fa fa-fw fa-dot-circle opacity-50 me-1 d-none d-sm-inline-block"></i>حسابیکس چیست</button>
|
||||
</li>
|
||||
<li class="nav-item d-md-flex flex-md-column" role="presentation">
|
||||
<button aria-controls="btabs-vertical-profile" aria-selected="false" class="nav-link text-md-start" data-bs-target="#btabs-vertical-profile" data-bs-toggle="tab" id="btabs-vertical-profile-tab" role="tab" tabindex="2">
|
||||
<i class="fa fa-fw fa-dot-circle opacity-50 me-1 d-none d-sm-inline-block"></i>ساده و قدرتمند</button>
|
||||
</li>
|
||||
<li class="nav-item d-md-flex flex-md-column" role="presentation">
|
||||
<button aria-controls="btabs-vertical-settings" aria-selected="true" class="nav-link text-md-start active" data-bs-target="#btabs-vertical-settings" data-bs-toggle="tab" id="btabs-vertical-settings-tab" role="tab" tabindex="3">
|
||||
<i class="fa fa-fw fa-dot-circle opacity-50 me-1 d-none d-sm-inline-block"></i>سریع و بروز</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content col-md-8">
|
||||
<div aria-labelledby="btabs-vertical-home-tab" class="block-content tab-pane" id="btabs-vertical-home" role="tabpanel" tabindex="1">
|
||||
<h4 class="fw-semibold text-light">حسابیکس چیست</h4>
|
||||
<p class="fs-sm"> حسابیکس اولین نرم افزار کامل حسابداری تحت وب است. این نرم افزار بر اساس فناوری رایانش ابری ساخته شده است. یعنی کلیه اطلاعات شما بر روی سرورهای حسابیکس قرار می گیرد. ما امنیت اطلاعات و حریم خصوصی کلیه کاربران را به طور کامل تضمین می کنیم.
|
||||
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ.
|
||||
نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید. </p>
|
||||
<div class="col-sm-12 col-md-6 mb-2">
|
||||
<div class="col-12 mb-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-primary-dark">حسابیکس چیست؟</h5>
|
||||
<p class="card-text">
|
||||
حسابیکس اولین نرم افزار کامل حسابداری تحت وب است. این نرم افزار بر اساس فناوری رایانش ابری ساخته شده است. یعنی کلیه اطلاعات شما بر روی سرورهای حسابیکس قرار می گیرد. ما امنیت اطلاعات و حریم خصوصی کلیه کاربران را به طور کامل تضمین می کنیم. برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ. نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
|
||||
</p>
|
||||
</div>
|
||||
<div aria-labelledby="btabs-vertical-profile-tab" class="block-content tab-pane" id="btabs-vertical-profile" role="tabpanel" tabindex="2">
|
||||
<h4 class="fw-semibold text-light">حسابیکس ساده و قدرتمند</h4>
|
||||
<p class="fs-sm">بدون نیاز به دانش حسابداری می توانید از حسابیکس استفاده کنید. سعی کرده ایم محیط نرم افزار را ساده و کاربرپسند طراحی کنیم. پیچیدگی های معمول نرم افزارهای حسابداری را حذف کرده ایم و تلاش کرده ایم که عملیات های پیچیده حسابداری را به صورت اتوماتیک توسط نرم افزار انجام دهیم.
|
||||
با این حال، بر روی قدرتمندی و امکانات نرم افزاری نیز تمرکز ویژه ای داشته ایم. ما به عنوان شرکت پیشرو در زمینه حسابداری ابری، امکانات و قابلیت های منحصر به فردی را به کاربران ارائه می دهیم.</p>
|
||||
</div>
|
||||
<div aria-labelledby="btabs-vertical-settings-tab" class="block-content tab-pane active show" id="btabs-vertical-settings" role="tabpanel" tabindex="3">
|
||||
<h4 class="fw-semibold text-light">حسابیکس سریع و بروز</h4>
|
||||
<p class="fs-sm">با وجود اینکه حسابیکس بر روی بستر اینترنت ارائه می شود، این نرم افزار بسیار سریع است. تجربه کاربری ارائه شده در حسابیکس نه تنها از لحاظ سرعت با نرم افزارهای تحت ویندوز رقابت می کند بلکه در بسیاری از موارد عملیات را سریعتر انجام می دهد.
|
||||
به علاوه حسابیکس همیشه بروز است. هر زمان که به سیستم وارد می شوید، آخرین نسخه از نرم افزار در دسترس شما قرار می گیرد.
|
||||
تیم فنی حسابیکس به طور مرتب در حال بروز رسانی و ایجاد امکانات و قابلیت های جدید در نرم افزار است. این امکانات به رایگان در اختیار کلیه کاربران قرار می گیرد.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 mb-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-primary-dark">ساده و قدرتمند</h5>
|
||||
<p class="card-text">
|
||||
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، مهم نیست که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ.
|
||||
نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-4 text-light px-0">
|
||||
<div class="col-sm-12 col-md-6 mb-2">
|
||||
<div class="row">
|
||||
<div class="col-12 mb-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-primary-dark">نقاط قوت و تمایز</h5>
|
||||
<p class="card-text">
|
||||
در حسابیکس می توانید فاکتورهای مشتریان را به صورت آنلاین برای آنها ارسال کنید، مشتری نیز می تواند فاکتور یا حتی مانده بدهی خود را به صورت آنلاین پرداخت کند. کلیه اسناد مربوطه نیز توسط نرم افزار به صورت اتوماتیک صادر می شوند. از سوی دیگر ذینفعان کسب و کار شما، مانند مشتریان یا تامین کنندگان، می توانند به صورت آنلاین و بروز، کارت حساب خود را مشاهده کنند.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 mb-2">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title text-primary-dark">سریع و به روز</h5>
|
||||
<p class="card-text">
|
||||
با وجود اینکه حسابیکس بر روی بستر اینترنت ارائه می شود، این نرم افزار بسیار سریع است. تجربه کاربری ارائه شده در حسابیکس نه تنها از لحاظ سرعت با نرم افزارهای تحت ویندوز رقابت می کند بلکه در بسیاری از موارد عملیات را سریعتر انجام می دهد. به علاوه حسابیکس همیشه بروز است. هر زمان که به سیستم وارد می شوید، آخرین نسخه از نرم افزار در دسترس شما قرار می گیرد. این امکانات به رایگان در اختیار کلیه کاربران قرار می گیرد. </p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="block block-rounded block-transparent">
|
||||
<div class="bg-image">
|
||||
<div class="block-content block-content-full bg-secondary rounded-2">
|
||||
<div class="block-content block-content-full bg-white rounded-2">
|
||||
<div class="row px-0 justify-content-sm-between align-items-center">
|
||||
<div class="col-sm-12">
|
||||
<h4 class="mb-2">
|
||||
<h4 class="mb-2 text-primary-dark">
|
||||
<i class="fa fa-user-plus"></i>
|
||||
جدیدترین عضو حسابیکس...
|
||||
</h4>
|
||||
<p class=" mb-sm-0">
|
||||
به جدیدترین عضو حسابیکس
|
||||
<span class="text-primary-lighter">{{ lastBusinessOwner }}</span>
|
||||
<span class="text-primary">{{ lastBusinessOwner }}</span>
|
||||
که کسبوکار خود را با نام
|
||||
<span class="text-primary-lighter">{{ lastBusinessName }}</span>
|
||||
<span class="text-primary">{{ lastBusinessName }}</span>
|
||||
ایجاد کردهاند خوشآمد میگوییم.
|
||||
</p>
|
||||
</div>
|
||||
|
@ -147,8 +159,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content content-boxed">
|
||||
<h3>آخرین مطالب وبلاگ</h3>
|
||||
<div class="content content-boxed mt-0 pt-0">
|
||||
<h3>وبلاگ حسابیکس</h3>
|
||||
<div class="row items-push">
|
||||
{% for item in blogPosts %}
|
||||
<div class="col-sm-12 col-md-4">
|
||||
|
|
36
hesabixCore/templates/pay/fail.html.twig
Normal file
36
hesabixCore/templates/pay/fail.html.twig
Normal file
|
@ -0,0 +1,36 @@
|
|||
{% extends 'blank.html.twig' %}
|
||||
|
||||
{% block title %}خطا در پرداخت{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="album p-5 m-5 col-sm-12 col-md-7">
|
||||
<div class="block">
|
||||
<div class="block-header block-header-default">
|
||||
<div class="block-title text-primary-dark text-start">
|
||||
<img src="{{ asset('/img/logo-blue.png') }}" class="img-avatar img-avatar32" alt="حسابیکس"/>
|
||||
حسابیکس
|
||||
</div>
|
||||
</div>
|
||||
<div class="block-content p-3">
|
||||
<h2 class="text-danger">خطا در پردازش پرداخت</h2>
|
||||
<h5 class="mx-5">
|
||||
متاسفانه پردازش پرداخت ناموفق بود! به نظر میرسد خطای سیستمی رخ داده باشد.
|
||||
</h5>
|
||||
<a class="btn btn-lg btn-success mt-4" href="{{ path('shortlinks_show',{'type':type,'bid':doc.bid.id,'link':doc.id}) }}">
|
||||
<i class="bi bi-backward"></i>
|
||||
بازگشت به فاکتور
|
||||
</a>
|
||||
<a class="btn btn-lg btn-primary mt-4" href="/">
|
||||
<i class="bi bi-backward"></i>
|
||||
صفحه نخست
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
240
hesabixCore/templates/shortlinks/sell.html.twig
Normal file
240
hesabixCore/templates/shortlinks/sell.html.twig
Normal file
|
@ -0,0 +1,240 @@
|
|||
{% extends 'blank.html.twig' %}
|
||||
|
||||
{% block title %}مشاهده فاکتور فروش
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<main
|
||||
id="main-container">
|
||||
<!-- Hero -->
|
||||
<div class="bg-body-light d-print-none">
|
||||
<div class="content content-full">
|
||||
<div class="d-flex flex-column flex-sm-row justify-content-sm-between align-items-sm-center">
|
||||
<h2 class="flex-grow-1 fs-3 fw-semibold my-2 my-sm-3">
|
||||
مشاهده فاکتور
|
||||
</h2>
|
||||
<a class="btn btn-alt-primary my-2" href="https://hesabix.ir">
|
||||
<i class="fa fa-fw fa-door-open me-1"></i>
|
||||
ورود به حسابیکس
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Hero -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div
|
||||
class="content content-boxed">
|
||||
<!-- Invoice -->
|
||||
<div class="block block-rounded">
|
||||
<div class="block-header block-header-default">
|
||||
<h3 class="block-title">
|
||||
شماره فاکتور:
|
||||
<span class="text-primary">
|
||||
{{doc.code}}
|
||||
</span>
|
||||
</h3>
|
||||
<div class="block-options">
|
||||
<!-- Print Page functionality is initialized dmPrint() -->
|
||||
<button class="btn btn-sm btn-alt-secondary me-3" onclick="Dashmix.helpers('dm-print');" type="button">
|
||||
<i class="si si-printer me-1"></i>
|
||||
چاپ فاکتور
|
||||
</button>
|
||||
{% if (totalPays < doc.amount) and bid.walletEnable %}
|
||||
<a href="{{ path('pay_sell',{'id':doc.id}) }}" class="btn btn-sm btn-success">
|
||||
<i class="fa fa-credit-card"></i>
|
||||
پرداخت آنلاین مبلغ
|
||||
{{ (doc.amount - totalPays) | number_format }}
|
||||
ریال
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="block-content">
|
||||
{% if msg == 'success' %}
|
||||
<div class="alert alert-success alert-dismissible" role="alert">
|
||||
<h3 class="alert-heading fs-4 my-2">
|
||||
<i class="fa fa-check"></i>
|
||||
نتیجه پرداخت آنلاین</h3>
|
||||
<button aria-label="Close" class="btn-close" data-bs-dismiss="alert" type="button"></button>
|
||||
<p class="mb-0">پرداخت فاکتور با موفقیت انجام شد. هماکنون میتوانید شماره پیگیری را از بخش پرداختها مشاهده نمایید</p>
|
||||
</div>
|
||||
{% elseif msg == 'fail' %}
|
||||
<div class="alert alert-danger alert-dismissible" role="alert">
|
||||
<h3 class="alert-heading fs-4 my-2">
|
||||
<i class="fa fa-close"></i>
|
||||
نتیجه پرداخت آنلاین</h3>
|
||||
<button aria-label="Close" class="btn-close" data-bs-dismiss="alert" type="button"></button>
|
||||
<p class="mb-0">پرداخت فاکتور ناموفق بود. برای پرداخت مجدد میتوانید دوباره سعی نمایید.</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="p-sm-2 p-xl-1">
|
||||
<!-- Invoice Info -->
|
||||
<div
|
||||
class="row mb-5">
|
||||
<!-- Company Info -->
|
||||
<div class="col-6">
|
||||
<p class="h3">
|
||||
{{bid.type}}
|
||||
:
|
||||
{{bid.name}}
|
||||
</p>
|
||||
<address>آدرس :
|
||||
استان
|
||||
{{bid.ostan}}
|
||||
شهرستان
|
||||
{{bid.shahrestan}}
|
||||
{{bid.address}}
|
||||
|
||||
</address>
|
||||
<div>
|
||||
کد پستی:
|
||||
{{bid.postalcode}}
|
||||
</div>
|
||||
<div>
|
||||
تلفن :
|
||||
{{bid.tel}}
|
||||
</div>
|
||||
<div>
|
||||
موبایل :
|
||||
{{bid.mobile}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Company Info -->
|
||||
|
||||
<!-- Client Info -->
|
||||
<div class="col-6 text-end">
|
||||
<p class="h3">مشتری:
|
||||
{{ person.nikename }}
|
||||
</p>
|
||||
<address>آدرس :
|
||||
استان
|
||||
{{person.ostan}}
|
||||
شهرستان
|
||||
{{person.shahr}}
|
||||
{{person.address}}
|
||||
|
||||
</address>
|
||||
<div>
|
||||
کد پستی:
|
||||
{{person.postalcode}}
|
||||
</div>
|
||||
<div>
|
||||
تلفن :
|
||||
{{person.tel}}
|
||||
</div>
|
||||
<div>
|
||||
موبایل :
|
||||
{{person.mobile}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Client Info -->
|
||||
</div>
|
||||
<!-- END Invoice Info -->
|
||||
|
||||
<!-- Table -->
|
||||
<div class="table-responsive push text-center">
|
||||
<table class="table table-bordered">
|
||||
<thead class="bg-body">
|
||||
<tr>
|
||||
<th class="text-center" style="width: 60px;"></th>
|
||||
<th>کالا/خدمات</th>
|
||||
<th>شرح</th>
|
||||
<th class="text-center" style="width: 90px;">واحد</th>
|
||||
<th class="text-center" style="width: 120px;">تعداد</th>
|
||||
<th class="text-center" style="width: 120px;">جمع</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
<td class="text-center">{{loop.index}}</td>
|
||||
<td class="text-center">
|
||||
<p class="fw-semibold">{{ row.commodity.name }}</p>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<div class="">{{ row.des }}</div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{{row.commdityCount}}
|
||||
</td>
|
||||
<td class="text-center">{{(row.bs / row.commdityCount) | number_format}}</td>
|
||||
<td class="text-center">{{row.bs | number_format}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
<tr>
|
||||
<td class="fw-bold text-uppercase text-end bg-body-light" colspan="5">جمع کل</td>
|
||||
<td class="fw-bold text-end bg-body-light">{{doc.amount | number_format}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- END Table -->
|
||||
<div class="block block-rounded">
|
||||
<div class="block-header block-header-default">
|
||||
<h3 class="block-title">سوابق پرداختها</h3>
|
||||
<div class="block-options">
|
||||
<div class="block-options-item">
|
||||
وضعیت پرداختها:
|
||||
{% if totalPays < doc.amount %}
|
||||
<b class="text-danger">تسویه نشده</b>
|
||||
{% else %}
|
||||
<b class="text-success">تسویه شده</b>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="block-content p-0">
|
||||
<div class="table-responsive push text-center">
|
||||
<table class="table table-bordered">
|
||||
<thead class="bg-body">
|
||||
<tr>
|
||||
<th class="text-center" style="width: 60px;">ردیف</th>
|
||||
<th>روش پرداخت</th>
|
||||
<th>تاریخ</th>
|
||||
<th class="text-center">مبلغ</th>
|
||||
<th class="text-center">شماره پیگیری/سند</th>
|
||||
<th class="text-center">توضیحات</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in doc.relatedDocs %}
|
||||
<tr>
|
||||
<td>{{ loop.index }}</td>
|
||||
{% if item.type == 'walletPay' %}
|
||||
<td class="text-success"><i class="fa fa-wallet"></i>پرداخت آنلاین</td>
|
||||
{% else %}
|
||||
<td class="text-primary"><i class="fa fa-file"></i>سند حسابداری</td>
|
||||
{% endif %}
|
||||
<td>{{ item.date}}</td>
|
||||
<td>{{ item.amount | number_format }}</td>
|
||||
<td>{{ item.code }}</td>
|
||||
<td>{{ item.des }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr class="">
|
||||
<td class="fw-bold text-uppercase text-end bg-body-light" colspan="5">جمع کل</td>
|
||||
<td class="fw-bold text-end bg-body-light">{{ totalPays | number_format }}
|
||||
ریال
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Footer -->
|
||||
<a href="https://hesabix.ir" class="p-4 mb-3text-primary text-center my-5">
|
||||
حسابیکس
|
||||
<label class="text-muted">سامانه جامع مالی رایگان ، ابری و متن باز</label>
|
||||
</a>
|
||||
<!-- END Footer -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END Invoice -->
|
||||
</div>
|
||||
<!-- END Page Content -->
|
||||
</main>
|
||||
{% endblock %}
|
|
@ -1,79 +0,0 @@
|
|||
const Encore = require('@symfony/webpack-encore');
|
||||
|
||||
// Manually configure the runtime environment if not already configured yet by the "encore" command.
|
||||
// It's useful when you use tools that rely on webpack.config.js file.
|
||||
if (!Encore.isRuntimeEnvironmentConfigured()) {
|
||||
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
|
||||
}
|
||||
|
||||
Encore
|
||||
// directory where compiled assets will be stored
|
||||
.setOutputPath('../public_html/build/')
|
||||
// public path used by the web server to access the output path
|
||||
.setPublicPath('/build')
|
||||
// only needed for CDN's or subdirectory deploy
|
||||
//.setManifestKeyPrefix('build/')
|
||||
|
||||
/*
|
||||
* ENTRY CONFIG
|
||||
*
|
||||
* Each entry will result in one JavaScript file (e.g. app.js)
|
||||
* and one CSS file (e.g. app.css) if your JavaScript imports CSS.
|
||||
*/
|
||||
.addEntry('app', './assets/app.js')
|
||||
|
||||
// enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js)
|
||||
.enableStimulusBridge('./assets/controllers.json')
|
||||
|
||||
// When enabled, Webpack "splits" your files into smaller pieces for greater optimization.
|
||||
.splitEntryChunks()
|
||||
|
||||
.enableVueLoader()
|
||||
|
||||
// will require an extra script tag for runtime.js
|
||||
// but, you probably want this, unless you're building a single-page app
|
||||
.enableSingleRuntimeChunk()
|
||||
|
||||
/*
|
||||
* FEATURE CONFIG
|
||||
*
|
||||
* Enable & configure other features below. For a full
|
||||
* list of features, see:
|
||||
* https://symfony.com/doc/current/frontend.html#adding-more-features
|
||||
*/
|
||||
.cleanupOutputBeforeBuild()
|
||||
.enableBuildNotifications()
|
||||
.enableSourceMaps(!Encore.isProduction())
|
||||
// enables hashed filenames (e.g. app.abc123.css)
|
||||
.enableVersioning(Encore.isProduction())
|
||||
|
||||
// configure Babel
|
||||
// .configureBabel((config) => {
|
||||
// config.plugins.push('@babel/a-babel-plugin');
|
||||
// })
|
||||
|
||||
// enables and configure @babel/preset-env polyfills
|
||||
.configureBabelPresetEnv((config) => {
|
||||
config.useBuiltIns = 'usage';
|
||||
config.corejs = '3.23';
|
||||
})
|
||||
|
||||
// enables Sass/SCSS support
|
||||
//.enableSassLoader()
|
||||
|
||||
// uncomment if you use TypeScript
|
||||
//.enableTypeScriptLoader()
|
||||
|
||||
// uncomment if you use React
|
||||
//.enableReactPreset()
|
||||
|
||||
// uncomment to get integrity="..." attributes on your script & link tags
|
||||
// requires WebpackEncoreBundle 1.4 or higher
|
||||
//.enableIntegrityHashes(Encore.isProduction())
|
||||
|
||||
// uncomment if you're having problems with a jQuery plugin
|
||||
//.autoProvidejQuery()
|
||||
.enableVueLoader(() => {}, { runtimeCompilerBuild: false })
|
||||
;
|
||||
|
||||
module.exports = Encore.getWebpackConfig();
|
|
@ -1 +0,0 @@
|
|||
.*/**
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,82 +0,0 @@
|
|||
CKEditor 4 - Releases
|
||||
=====================
|
||||
|
||||
## Releases Code
|
||||
|
||||
This repository contains the official release versions of [CKEditor 4](https://ckeditor.com/ckeditor-4/).
|
||||
|
||||
There are four versions for each release — `standard-all`, `basic`, `standard`, and `full`.
|
||||
They differ in the number of plugins that are compiled into the main `ckeditor.js` file as well as the toolbar configuration.
|
||||
|
||||
See the [comparison](https://ckeditor.com/cke4/presets) of the `basic`, `standard`, and `full` installation presets for more details.
|
||||
|
||||
The `standard-all` build includes all official CKSource plugins with only those from the `standard` installation preset compiled into the `ckeditor.js` file and enabled in the configuration.
|
||||
|
||||
All versions available in this repository were built using [CKBuilder](https://ckeditor.com/cke4/builder), so they are optimized and ready to be used in a production environment.
|
||||
|
||||
## Documentation
|
||||
|
||||
Developer documentation for CKEditor is available online at: <https://ckeditor.com/docs/>.
|
||||
|
||||
## Installation
|
||||
|
||||
### Git clone
|
||||
|
||||
To install one of the available releases, just clone this repository and switch to the respective branch (see next section):
|
||||
|
||||
git clone -b <release branch> git://github.com/ckeditor/ckeditor4-releases.git
|
||||
|
||||
### Git submodule
|
||||
|
||||
If you are using git for your project and you want to integrate CKEditor, we recommend to add this repository as a
|
||||
[submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
|
||||
|
||||
git submodule add -b <release branch> git://github.com/ckeditor/ckeditor-releases.git <clone dir>
|
||||
git commit -m "Added CKEditor submodule in <clone dir> directory."
|
||||
|
||||
### Using Package Managers
|
||||
|
||||
See the [Installing CKEditor with Package Managers](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_package_managers.html) article for more details about installing CKEditor with [Bower](https://bower.io), [Composer](https://getcomposer.org/) and [npm](https://www.npmjs.com/).
|
||||
|
||||
## Repository Structure
|
||||
|
||||
### Branches
|
||||
|
||||
This repository contains the following branches:
|
||||
|
||||
- `master` and `latest` – the latest release of the `standard-all` preset (including betas).
|
||||
- `stable` – the latest stable release of the `standard-all` preset (non-beta).
|
||||
- `A.B.x` (e.g. `4.3.x`) – the latest release of the `standard-all` preset in the `A.B` branch.
|
||||
- `(basic|standard|full)/stable` – the latest stable release tag point (non-beta).
|
||||
- `(basic|standard|full)/latest` – the latest release tag point (including betas).
|
||||
- `(basic|standard|full)/A.B.x` (e.g. `basic/4.0.x`) – the latest releases in the `A.B` branch.
|
||||
|
||||
### Tags
|
||||
|
||||
**Since version 4.3.3** this repository uses the following tag naming rules:
|
||||
|
||||
- `x.y.z` – contains the `standard-all` editor build, e.g. `4.3.3`, `4.4.0` etc.
|
||||
- `(basic|standard|full)/x.y.z` – contains the editor build with a given preset, e.g. `basic/4.3.3`.
|
||||
|
||||
The version numbers follow the [Semantic Versioning 2.0.0](http://semver.org/) scheme.
|
||||
|
||||
Up to version **4.3.2** the tags were released in the following form `x.y[.z]/(basic|standard|full)`.
|
||||
For example: `4.0/basic`, `4.0.1/standard`. This convention was changed in CKEditor 4.3.3 to conform to the Semantic Versioning scheme.
|
||||
|
||||
## Checking Your Installation
|
||||
|
||||
The editor comes with a few sample pages that can be used to verify if the installation succeeded. Take a look at the `samples` directory.
|
||||
|
||||
To test your installation, just call the following page for your website:
|
||||
|
||||
http://<your site>/<CKEditor installation path>/samples/index.html
|
||||
|
||||
For example:
|
||||
|
||||
http://www.example.com/ckeditor/samples/index.html
|
||||
|
||||
### License
|
||||
|
||||
Licensed under the GPL, LGPL, and MPL licenses, at your choice.
|
||||
|
||||
Please check the `LICENSE.md` file for more information about the license.
|
|
@ -1,10 +0,0 @@
|
|||
# Reporting a security issues
|
||||
|
||||
If you believe you have found a security issue in the CKEditor 4 software, please contact us immediately.
|
||||
|
||||
When reporting a potential security problem, please bear this in mind:
|
||||
|
||||
* Make sure to provide as many details as possible about the vulnerability.
|
||||
* Please do not disclose publicly any security issues until we fix them and publish security releases.
|
||||
|
||||
Contact the security team at security@cksource.com. As soon as we receive the security report, we will work promptly to confirm the issue and then to provide a security fix.
|
|
@ -1,10 +0,0 @@
|
|||
/*
|
||||
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
CKEditor 4 LTS ("Long Term Support") is available under the terms of the Extended Support Model.
|
||||
*/
|
||||
(function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},
|
||||
ckeditor:function(g,e){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if("function"!==typeof g){var m=e;e=g;g=m}var k=[];e=e||{};this.each(function(){var b=a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,l=new a.Deferred;k.push(l.promise());if(c&&!f)g&&g.apply(c,[this]),l.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function d(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),l.resolve()):setTimeout(d,100)},0)},null,null,
|
||||
9999);else{if(e.autoUpdateElement||"undefined"==typeof e.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)e.autoUpdateElementJquery=!0;e.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",!0);c=a(this).is("textarea")?CKEDITOR.replace(h,e):CKEDITOR.inline(h,e);b.data("ckeditorInstance",c);c.on("instanceReady",function(e){var d=e.editor;setTimeout(function n(){if(d.element){e.removeListener();d.on("dataReady",function(){b.trigger("dataReady.ckeditor",[d])});d.on("setData",function(a){b.trigger("setData.ckeditor",
|
||||
[d,a.data])});d.on("getData",function(a){b.trigger("getData.ckeditor",[d,a.data])},999);d.on("destroy",function(){b.trigger("destroy.ckeditor",[d])});d.on("save",function(){a(h.form).trigger("submit");return!1},null,null,20);if(d.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){d.updateElement()})};a(h.form).on("submit",c);a(h.form).on("form-pre-serialize",c);b.on("destroy.ckeditor",function(){a(h.form).off("submit",c);a(h.form).off("form-pre-serialize",
|
||||
c)})}d.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[d]);g&&g.apply(d,[h]);l.resolve()}else setTimeout(n,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,k).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(e){if(arguments.length){var m=
|
||||
this,k=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(e,function(){f.resolve()});k.push(f.promise());return!0}return g.call(b,e)});if(k.length){var b=new a.Deferred;a.when.apply(this,k).done(function(){b.resolveWith(m)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}}))})(window.jQuery);
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"name": "ckeditor",
|
||||
"description": "JavaScript WYSIWYG web text editor.",
|
||||
"keywords": [ "ckeditor4", "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ],
|
||||
"authors": "CKSource (https://cksource.com/)",
|
||||
"license": "For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/.",
|
||||
"homepage": "https://ckeditor.com",
|
||||
"main": "./ckeditor.js",
|
||||
"moduleType": "globals"
|
||||
}
|
|
@ -1,195 +0,0 @@
|
|||
/**
|
||||
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
|
||||
*/
|
||||
|
||||
/**
|
||||
* This file was added automatically by CKEditor builder.
|
||||
* You may re-use it at any time to build CKEditor again.
|
||||
*
|
||||
* If you would like to build CKEditor online again
|
||||
* (for example to upgrade), visit one the following links:
|
||||
*
|
||||
* (1) https://ckeditor.com/cke4/builder
|
||||
* Visit online builder to build CKEditor from scratch.
|
||||
*
|
||||
* (2) https://ckeditor.com/cke4/builder/70ddaf4a7e7615cc69d1d00879c6f1d1
|
||||
* Visit online builder to build CKEditor, starting with the same setup as before.
|
||||
*
|
||||
* (3) https://ckeditor.com/cke4/builder/download/70ddaf4a7e7615cc69d1d00879c6f1d1
|
||||
* Straight download link to the latest version of CKEditor (Optimized) with the same setup as before.
|
||||
*
|
||||
* NOTE:
|
||||
* This file is not used by CKEditor, you may remove it.
|
||||
* Changing this file will not change your CKEditor configuration.
|
||||
*/
|
||||
|
||||
var CKBUILDER_CONFIG = {
|
||||
skin: 'moono-lisa',
|
||||
preset: 'full',
|
||||
ignore: [
|
||||
'.DS_Store',
|
||||
'.bender',
|
||||
'.editorconfig',
|
||||
'.gitattributes',
|
||||
'.gitignore',
|
||||
'.idea',
|
||||
'.jscsrc',
|
||||
'.jshintignore',
|
||||
'.jshintrc',
|
||||
'.mailmap',
|
||||
'.npm',
|
||||
'.nvmrc',
|
||||
'.travis.yml',
|
||||
'bender-err.log',
|
||||
'bender-out.log',
|
||||
'bender-runner.config.json',
|
||||
'bender.ci.js',
|
||||
'bender.js',
|
||||
'dev',
|
||||
'gruntfile.js',
|
||||
'less',
|
||||
'node_modules',
|
||||
'package-lock.json',
|
||||
'package.json',
|
||||
'tests'
|
||||
],
|
||||
plugins : {
|
||||
'a11yhelp' : 1,
|
||||
'about' : 1,
|
||||
'basicstyles' : 1,
|
||||
'bidi' : 1,
|
||||
'blockquote' : 1,
|
||||
'clipboard' : 1,
|
||||
'colorbutton' : 1,
|
||||
'colordialog' : 1,
|
||||
'contextmenu' : 1,
|
||||
'copyformatting' : 1,
|
||||
'dialogadvtab' : 1,
|
||||
'div' : 1,
|
||||
'editorplaceholder' : 1,
|
||||
'elementspath' : 1,
|
||||
'enterkey' : 1,
|
||||
'entities' : 1,
|
||||
'exportpdf' : 1,
|
||||
'filebrowser' : 1,
|
||||
'find' : 1,
|
||||
'floatingspace' : 1,
|
||||
'font' : 1,
|
||||
'format' : 1,
|
||||
'forms' : 1,
|
||||
'horizontalrule' : 1,
|
||||
'htmlwriter' : 1,
|
||||
'iframe' : 1,
|
||||
'image' : 1,
|
||||
'indentblock' : 1,
|
||||
'indentlist' : 1,
|
||||
'justify' : 1,
|
||||
'language' : 1,
|
||||
'link' : 1,
|
||||
'list' : 1,
|
||||
'liststyle' : 1,
|
||||
'magicline' : 1,
|
||||
'maximize' : 1,
|
||||
'newpage' : 1,
|
||||
'pagebreak' : 1,
|
||||
'pastefromgdocs' : 1,
|
||||
'pastefromlibreoffice' : 1,
|
||||
'pastefromword' : 1,
|
||||
'pastetext' : 1,
|
||||
'preview' : 1,
|
||||
'print' : 1,
|
||||
'removeformat' : 1,
|
||||
'resize' : 1,
|
||||
'save' : 1,
|
||||
'scayt' : 1,
|
||||
'selectall' : 1,
|
||||
'showblocks' : 1,
|
||||
'showborders' : 1,
|
||||
'smiley' : 1,
|
||||
'sourcearea' : 1,
|
||||
'specialchar' : 1,
|
||||
'stylescombo' : 1,
|
||||
'tab' : 1,
|
||||
'table' : 1,
|
||||
'tableselection' : 1,
|
||||
'tabletools' : 1,
|
||||
'templates' : 1,
|
||||
'toolbar' : 1,
|
||||
'undo' : 1,
|
||||
'uploadimage' : 1,
|
||||
'wysiwygarea' : 1
|
||||
},
|
||||
languages : {
|
||||
'af' : 1,
|
||||
'ar' : 1,
|
||||
'az' : 1,
|
||||
'bg' : 1,
|
||||
'bn' : 1,
|
||||
'bs' : 1,
|
||||
'ca' : 1,
|
||||
'cs' : 1,
|
||||
'cy' : 1,
|
||||
'da' : 1,
|
||||
'de' : 1,
|
||||
'de-ch' : 1,
|
||||
'el' : 1,
|
||||
'en' : 1,
|
||||
'en-au' : 1,
|
||||
'en-ca' : 1,
|
||||
'en-gb' : 1,
|
||||
'eo' : 1,
|
||||
'es' : 1,
|
||||
'es-mx' : 1,
|
||||
'et' : 1,
|
||||
'eu' : 1,
|
||||
'fa' : 1,
|
||||
'fi' : 1,
|
||||
'fo' : 1,
|
||||
'fr' : 1,
|
||||
'fr-ca' : 1,
|
||||
'gl' : 1,
|
||||
'gu' : 1,
|
||||
'he' : 1,
|
||||
'hi' : 1,
|
||||
'hr' : 1,
|
||||
'hu' : 1,
|
||||
'id' : 1,
|
||||
'is' : 1,
|
||||
'it' : 1,
|
||||
'ja' : 1,
|
||||
'ka' : 1,
|
||||
'km' : 1,
|
||||
'ko' : 1,
|
||||
'ku' : 1,
|
||||
'lt' : 1,
|
||||
'lv' : 1,
|
||||
'mk' : 1,
|
||||
'mn' : 1,
|
||||
'ms' : 1,
|
||||
'nb' : 1,
|
||||
'nl' : 1,
|
||||
'no' : 1,
|
||||
'oc' : 1,
|
||||
'pl' : 1,
|
||||
'pt' : 1,
|
||||
'pt-br' : 1,
|
||||
'ro' : 1,
|
||||
'ru' : 1,
|
||||
'si' : 1,
|
||||
'sk' : 1,
|
||||
'sl' : 1,
|
||||
'sq' : 1,
|
||||
'sr' : 1,
|
||||
'sr-latn' : 1,
|
||||
'sv' : 1,
|
||||
'th' : 1,
|
||||
'tr' : 1,
|
||||
'tt' : 1,
|
||||
'ug' : 1,
|
||||
'uk' : 1,
|
||||
'vi' : 1,
|
||||
'zh' : 1,
|
||||
'zh-cn' : 1
|
||||
}
|
||||
};
|
1451
public_html/bundles/fosckeditor/ckeditor.js
vendored
1451
public_html/bundles/fosckeditor/ckeditor.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"name": "ckeditor/ckeditor",
|
||||
"description": "JavaScript WYSIWYG web text editor.",
|
||||
"type": "library",
|
||||
"keywords": [ "ckeditor4", "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ],
|
||||
"homepage": "https://ckeditor.com/ckeditor-4/",
|
||||
"license": [ "GPL-2.0+", "LGPL-2.1+", "MPL-1.1+" ],
|
||||
"authors": [
|
||||
{
|
||||
"name": "CKSource",
|
||||
"homepage": "https://cksource.com"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/ckeditor/ckeditor4/issues",
|
||||
"forum": "https://stackoverflow.com/tags/ckeditor",
|
||||
"wiki": "https://ckeditor.com/docs/ckeditor4/latest/",
|
||||
"source": "https://github.com/ckeditor/ckeditor4"
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
/**
|
||||
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
* For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
|
||||
*/
|
||||
|
||||
CKEDITOR.editorConfig = function( config ) {
|
||||
// Define changes to default configuration here. For example:
|
||||
// config.language = 'fr';
|
||||
// config.uiColor = '#AADC6E';
|
||||
};
|
|
@ -1,208 +0,0 @@
|
|||
/*
|
||||
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||
CKEditor 4 LTS ("Long Term Support") is available under the terms of the Extended Support Model.
|
||||
*/
|
||||
|
||||
body
|
||||
{
|
||||
/* Font */
|
||||
/* Emoji fonts are added to visualise them nicely in Internet Explorer. */
|
||||
font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
font-size: 12px;
|
||||
|
||||
/* Text color */
|
||||
color: #333;
|
||||
|
||||
/* Remove the background color to make it transparent. */
|
||||
background-color: #fff;
|
||||
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.cke_editable
|
||||
{
|
||||
font-size: 13px;
|
||||
line-height: 1.6;
|
||||
|
||||
/* Fix for missing scrollbars with RTL texts. (#10488) */
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
blockquote
|
||||
{
|
||||
font-style: italic;
|
||||
font-family: Georgia, Times, "Times New Roman", serif;
|
||||
padding: 2px 0;
|
||||
border-style: solid;
|
||||
border-color: #ccc;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
.cke_contents_ltr blockquote
|
||||
{
|
||||
padding-left: 20px;
|
||||
padding-right: 8px;
|
||||
border-left-width: 5px;
|
||||
}
|
||||
|
||||
.cke_contents_rtl blockquote
|
||||
{
|
||||
padding-left: 8px;
|
||||
padding-right: 20px;
|
||||
border-right-width: 5px;
|
||||
}
|
||||
|
||||
a
|
||||
{
|
||||
color: #0782C1;
|
||||
}
|
||||
|
||||
ol,ul,dl
|
||||
{
|
||||
/* IE7: reset rtl list margin. (#7334) */
|
||||
*margin-right: 0px;
|
||||
/* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/
|
||||
padding: 0 40px;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5,h6
|
||||
{
|
||||
font-weight: normal;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
hr
|
||||
{
|
||||
border: 0px;
|
||||
border-top: 1px solid #ccc;
|
||||
}
|
||||
|
||||
img.right
|
||||
{
|
||||
border: 1px solid #ccc;
|
||||
float: right;
|
||||
margin-left: 15px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
img.left
|
||||
{
|
||||
border: 1px solid #ccc;
|
||||
float: left;
|
||||
margin-right: 15px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
pre
|
||||
{
|
||||
white-space: pre-wrap; /* CSS 2.1 */
|
||||
word-wrap: break-word; /* IE7 */
|
||||
-moz-tab-size: 4;
|
||||
tab-size: 4;
|
||||
}
|
||||
|
||||
.marker
|
||||
{
|
||||
background-color: Yellow;
|
||||
}
|
||||
|
||||
span[lang]
|
||||
{
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
figure
|
||||
{
|
||||
text-align: center;
|
||||
outline: solid 1px #ccc;
|
||||
background: rgba(0,0,0,0.05);
|
||||
padding: 10px;
|
||||
margin: 10px 20px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
figure > figcaption
|
||||
{
|
||||
text-align: center;
|
||||
display: block; /* For IE8 */
|
||||
}
|
||||
|
||||
a > img {
|
||||
padding: 1px;
|
||||
margin: 1px;
|
||||
border: none;
|
||||
outline: 1px solid #0782C1;
|
||||
}
|
||||
|
||||
/* Widget Styles */
|
||||
.code-featured
|
||||
{
|
||||
border: 5px solid red;
|
||||
}
|
||||
|
||||
.math-featured
|
||||
{
|
||||
padding: 20px;
|
||||
box-shadow: 0 0 2px rgba(200, 0, 0, 1);
|
||||
background-color: rgba(255, 0, 0, 0.05);
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.image-clean
|
||||
{
|
||||
border: 0;
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.image-clean > figcaption
|
||||
{
|
||||
font-size: .9em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.image-grayscale
|
||||
{
|
||||
background-color: white;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.image-grayscale img, img.image-grayscale
|
||||
{
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.embed-240p
|
||||
{
|
||||
max-width: 426px;
|
||||
max-height: 240px;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
.embed-360p
|
||||
{
|
||||
max-width: 640px;
|
||||
max-height: 360px;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
.embed-480p
|
||||
{
|
||||
max-width: 854px;
|
||||
max-height: 480px;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
.embed-720p
|
||||
{
|
||||
max-width: 1280px;
|
||||
max-height: 720px;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
.embed-1080p
|
||||
{
|
||||
max-width: 1920px;
|
||||
max-height: 1080px;
|
||||
margin:0 auto;
|
||||
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue