diff --git a/hesabixCore/composer.json b/hesabixCore/composer.json index 9140ee64..9d3e9cdf 100644 --- a/hesabixCore/composer.json +++ b/hesabixCore/composer.json @@ -109,7 +109,7 @@ "symfony/browser-kit": "7.2.*", "symfony/css-selector": "7.2.*", "symfony/debug-bundle": "7.2.*", - "symfony/maker-bundle": "^1.62", + "symfony/maker-bundle": "^1.64", "symfony/phpunit-bridge": "^7.2", "symfony/stopwatch": "7.2.*", "symfony/web-profiler-bundle": "7.2.*" diff --git a/hesabixCore/composer.lock b/hesabixCore/composer.lock index 95cb481d..b8798bcf 100644 --- a/hesabixCore/composer.lock +++ b/hesabixCore/composer.lock @@ -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": "389f897ebd1e0befdd15876e5d6a43a7", + "content-hash": "fc8e55a0f3d505b2453542a73030d32c", "packages": [ { "name": "brick/math", @@ -11063,21 +11063,21 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.62.1", + "version": "v1.64.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590" + "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/468ff2708200c95ebc0d85d3174b6c6711b8a590", - "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c86da84640b0586e92aee2b276ee3638ef2f425a", + "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a", "shasum": "" }, "require": { "doctrine/inflector": "^2.0", - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "php": ">=8.1", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", @@ -11100,6 +11100,7 @@ "symfony/http-client": "^6.4|^7.0", "symfony/phpunit-bridge": "^6.4.1|^7.0", "symfony/security-core": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", "symfony/yaml": "^6.4|^7.0", "twig/twig": "^3.0|^4.x-dev" }, @@ -11135,7 +11136,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.62.1" + "source": "https://github.com/symfony/maker-bundle/tree/v1.64.0" }, "funding": [ { @@ -11151,7 +11152,7 @@ "type": "tidelift" } ], - "time": "2025-01-15T00:21:40+00:00" + "time": "2025-06-23T16:12:08+00:00" }, { "name": "symfony/phpunit-bridge", @@ -11370,7 +11371,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -11380,6 +11381,6 @@ "ext-fileinfo": "*", "ext-iconv": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/hesabixCore/src/Controller/BusinessController.php b/hesabixCore/src/Controller/BusinessController.php index b04d04d2..76b63ee9 100644 --- a/hesabixCore/src/Controller/BusinessController.php +++ b/hesabixCore/src/Controller/BusinessController.php @@ -544,6 +544,7 @@ class BusinessController extends AbstractController 'plugRepservice' => true, 'plugHrmDocs' => true, 'plugGhestaManager' => true, + 'plugTaxSettings' => true, ]; } elseif ($perm) { $result = [ @@ -587,6 +588,7 @@ class BusinessController extends AbstractController 'plugAccproPresell' => $perm->isPlugAccproPresell(), 'plugHrmDocs' => $perm->isPlugHrmDocs(), 'plugGhestaManager' => $perm->isPlugGhestaManager(), + 'plugTaxSettings' => $perm->isPlugTaxSettings(), ]; } return $this->json($result); diff --git a/hesabixCore/src/Controller/Plugins/TaxSettingsController.php b/hesabixCore/src/Controller/Plugins/TaxSettingsController.php new file mode 100644 index 00000000..2109d9bb --- /dev/null +++ b/hesabixCore/src/Controller/Plugins/TaxSettingsController.php @@ -0,0 +1,484 @@ +hasRole('plugTaxSettings'); + if (!$acc) { + throw $this->createAccessDeniedException('شما دسترسی لازم را ندارید.'); + } + + $businessId = is_object($acc['bid']) ? $acc['bid']->getId() : $acc['bid']; + $userId = $this->getUser()->getId(); + + // دریافت تنظیمات از جدول اختصاصی + $repo = $em->getRepository(PluginTaxsettingsKey::class); + $entity = $repo->findOneBy(['business_id' => $businessId, 'user_id' => $userId]); + + $settings = [ + 'taxMemoryId' => $entity ? $entity->getTaxMemoryId() : '', + 'economicCode' => $entity ? $entity->getEconomicCode() : '', + 'privateKey' => $entity ? $entity->getPrivateKey() : '', + ]; + + return $this->json($settings); + } + + #[Route('/api/plugins/tax/settings/save', name: 'plugin_tax_settings_save', methods: ['POST'])] + public function plugin_tax_settings_save(Request $request, registryMGR $registryMGR, Access $access, Log $log, EntityManagerInterface $em): JsonResponse + { + $acc = $access->hasRole('plugTaxSettings'); + if (!$acc) { + throw $this->createAccessDeniedException('شما دسترسی لازم را ندارید.'); + } + + $params = $request->getPayload()->all(); + $businessId = is_object($acc['bid']) ? $acc['bid']->getId() : $acc['bid']; + $userId = $this->getUser()->getId(); + + // بررسی وجود رکورد قبلی + $repo = $em->getRepository(PluginTaxsettingsKey::class); + $entity = $repo->findOneBy(['business_id' => $businessId, 'user_id' => $userId]); + if (!$entity) { + $entity = new PluginTaxsettingsKey(); + $entity->setBusinessId($businessId); + $entity->setUserId($userId); + $entity->setCreatedAt(new \DateTime()); + } + $entity->setPrivateKey($params['privateKey'] ?? ''); + $entity->setTaxMemoryId($params['taxMemoryId'] ?? null); + $entity->setEconomicCode($params['economicCode'] ?? null); + $entity->setUpdatedAt(new \DateTime()); + + $em->persist($entity); + $em->flush(); + + $log->insert('تنظیمات مالیاتی', 'تنظیمات مالیاتی ذخیره شد (در جدول اختصاصی)', $this->getUser(), $businessId); + + return $this->json(['success' => true, 'message' => 'تنظیمات با موفقیت ذخیره شد']); + } + + private function generatePrivateKey(): string + { + // تولید کلید خصوصی واقعی با OpenSSL + $config = [ + "private_key_bits" => 2048, + "private_key_type" => OPENSSL_KEYTYPE_RSA, + ]; + + $res = openssl_pkey_new($config); + if (!$res) { + throw new \Exception('خطا در تولید کلید خصوصی: ' . openssl_error_string()); + } + + $privateKey = ''; + if (!openssl_pkey_export($res, $privateKey)) { + throw new \Exception('خطا در استخراج کلید خصوصی: ' . openssl_error_string()); + } + + openssl_pkey_free($res); + return $privateKey; + } + + private function generatePublicKey(string $privateKey): string + { + // استخراج کلید عمومی از کلید خصوصی + $res = openssl_pkey_get_private($privateKey); + if (!$res) { + throw new \Exception('خطا در خواندن کلید خصوصی: ' . openssl_error_string()); + } + + $keyDetails = openssl_pkey_get_details($res); + if (!$keyDetails) { + throw new \Exception('خطا در استخراج جزئیات کلید: ' . openssl_error_string()); + } + + openssl_pkey_free($res); + return $keyDetails['key']; + } + + #[Route('/api/plugins/tax/settings/generate-csr', name: 'plugin_tax_settings_generate_csr', methods: ['POST'])] + public function plugin_tax_settings_generate_csr(Request $request, registryMGR $registryMGR, Access $access, Log $log): JsonResponse + { + $acc = $access->hasRole('plugTaxSettings'); + if (!$acc) { + throw $this->createAccessDeniedException('شما دسترسی لازم را ندارید.'); + } + + $params = $request->getPayload()->all(); + + // بررسی فیلدهای اجباری + if (empty($params['nationalId']) || empty($params['nameFa']) || empty($params['nameEn']) || empty($params['email'])) { + return $this->json([ + 'success' => false, + 'message' => 'تمام فیلدها الزامی هستند' + ]); + } + + try { + $privateKey = $this->generatePrivateKey(); + $publicKey = $this->generatePublicKey($privateKey); + $csr = $this->generateCSR($privateKey, $params); + + // هیچ ذخیره‌ای در دیتابیس انجام نمی‌شود + $businessId = is_object($acc['bid']) ? $acc['bid']->getId() : $acc['bid']; + $log->insert('تنظیمات مالیاتی', 'کلید و CSR تولید شد (بدون ذخیره)', $this->getUser(), $businessId); + + return $this->json([ + 'success' => true, + 'message' => 'کلید و CSR با موفقیت تولید شد', + 'privateKey' => $privateKey, + 'publicKey' => $publicKey, + 'csr' => $csr + ]); + } catch (\Exception $e) { + return $this->json([ + 'success' => false, + 'message' => 'خطا در تولید کلید و CSR: ' . $e->getMessage() + ]); + } + } + + private function generateCSR(string $privateKey, array $params): string + { + // تولید CSR واقعی با OpenSSL + $dn = [ + "countryName" => "IR", + "stateOrProvinceName" => "Tehran", + "localityName" => "Tehran", + "organizationName" => $params['nameEn'], + "organizationalUnitName" => "Tax Department", + "commonName" => $params['nameFa'], + "emailAddress" => $params['email'] + ]; + + // اضافه کردن شناسه ملی به عنوان extension + $config = [ + "req" => [ + "distinguished_name" => $dn, + "req_extensions" => "v3_req", + "x509_extensions" => "v3_req" + ], + "v3_req" => [ + "subjectAltName" => "email:" . $params['email'], + "subjectKeyIdentifier" => "hash" + ] + ]; + + // ایجاد CSR + $res = openssl_csr_new($dn, $privateKey, [ + 'config' => $config, + 'digest_alg' => 'sha256', + 'req_extensions' => 'v3_req' + ]); + + if (!$res) { + throw new \Exception('خطا در تولید CSR: ' . openssl_error_string()); + } + + $csr = ''; + if (!openssl_csr_export($res, $csr)) { + throw new \Exception('خطا در استخراج CSR: ' . openssl_error_string()); + } + + return $csr; + } + + #[Route('/api/plugins/tax/settings/send-invoice', name: 'plugin_tax_settings_send_invoice', methods: ['POST'])] + public function plugin_tax_settings_send_invoice(Request $request, Access $access, Log $log, EntityManagerInterface $em): JsonResponse + { + $acc = $access->hasRole('plugTaxSettings'); + if (!$acc) { + throw $this->createAccessDeniedException('شما دسترسی لازم را ندارید.'); + } + + $params = $request->getPayload()->all(); + $invoiceCode = $params['code'] ?? null; + + if (!$invoiceCode) { + return $this->json([ + 'success' => false, + 'message' => 'کد فاکتور الزامی است' + ]); + } + + $businessId = is_object($acc['bid']) ? $acc['bid']->getId() : $acc['bid']; + $userId = $this->getUser()->getId(); + + try { + // دریافت اطلاعات فاکتور از دیتابیس + $invoiceRepo = $em->getRepository(HesabdariDoc::class); + $invoice = $invoiceRepo->findOneBy([ + 'code' => $invoiceCode, + 'bid' => $businessId, + 'type' => 'sell' + ]); + + if (!$invoice) { + return $this->json([ + 'success' => false, + 'message' => 'فاکتور مورد نظر یافت نشد' + ]); + } + + // دریافت تنظیمات مالیاتی + $taxRepo = $em->getRepository(PluginTaxsettingsKey::class); + $taxSettings = $taxRepo->findOneBy([ + 'business_id' => $businessId, + 'user_id' => $userId + ]); + + if (!$taxSettings || !$taxSettings->getPrivateKey()) { + return $this->json([ + 'success' => false, + 'message' => 'تنظیمات مالیاتی تکمیل نشده است. لطفاً ابتدا تنظیمات را تکمیل کنید.' + ]); + } + + // اینجا کد ارسال به سامانه مودیان قرار می‌گیرد + // فعلاً فقط پیام موفقیت برمی‌گردانیم + $result = $this->sendInvoiceToTaxSystem($invoice, $taxSettings, $em, $businessId, $userId); + + if ($result['success']) { + $log->insert('ارسال به سامانه مودیان', 'فاکتور ' . $invoiceCode . ' به سامانه مودیان ارسال شد', $this->getUser(), $businessId); + + return $this->json([ + 'success' => true, + 'message' => 'فاکتور با موفقیت به سامانه مودیان ارسال شد', + 'data' => $result['data'] ?? null + ]); + } else { + return $this->json([ + 'success' => false, + 'message' => $result['message'] ?? 'خطا در ارسال به سامانه مودیان' + ]); + } + + } catch (\Exception $e) { + $log->insert('خطا در ارسال به سامانه مودیان', 'خطا در ارسال فاکتور ' . $invoiceCode . ': ' . $e->getMessage(), $this->getUser(), $businessId); + + return $this->json([ + 'success' => false, + 'message' => 'خطا در ارسال به سامانه مودیان: ' . $e->getMessage() + ]); + } + } + + private function sendInvoiceToTaxSystem($invoice, $taxSettings, $em, $businessId, $userId): array + { + try { + // بررسی اینکه آیا این فاکتور قبلاً ارسال شده یا نه + $taxInvoiceRepo = $em->getRepository(PluginTaxInvoice::class); + $existingRecord = $taxInvoiceRepo->findByInvoiceCodeAndBusiness($invoice->getCode(), $businessId); + + if ($existingRecord) { + return [ + 'success' => false, + 'message' => 'این فاکتور قبلاً به سامانه مودیان ارسال شده است.' + ]; + } + + // ایجاد رکورد جدید + $taxInvoice = new PluginTaxInvoice(); + $taxInvoice->setBusiness($em->getRepository(\App\Entity\Business::class)->find($businessId)); + $taxInvoice->setUser($em->getRepository(\App\Entity\User::class)->find($userId)); + $taxInvoice->setInvoice($invoice); + $taxInvoice->setInvoiceCode($invoice->getCode()); + $taxInvoice->setAmount($invoice->getAmount()); + $taxInvoice->setStatus('pending'); + + // دریافت اطلاعات مشتری + $customerName = null; + $customerId = null; + $rows = $invoice->getHesabdariRows(); + foreach ($rows as $row) { + if ($row->getPerson()) { + $customerName = $row->getPerson()->getNikename(); + $customerId = $row->getPerson()->getCode(); + break; + } + } + $taxInvoice->setCustomerName($customerName); + $taxInvoice->setCustomerId($customerId); + + // ذخیره رکورد + $em->persist($taxInvoice); + $em->flush(); + + // اینجا کد واقعی ارسال به سامانه مودیان قرار می‌گیرد + // فعلاً یک پیام موفقیت برمی‌گردانیم + + // مثال کد ارسال به API سامانه مودیان: + /* + $invoiceData = + invoiceNumber => $invoice->getCode(), + date => $invoice->getDate(), + totalAmount => $invoice->getAmount(), + customerName=> $customerName, + customerNationalId' => $customerNationalId, + // سایر اطلاعات فاکتور + ]; + + $response = $this->callTaxSystemAPI($invoiceData, $taxSettings); + + if ($response['success']) { + // به‌روزرسانی وضعیت به sent + $taxInvoice->setStatus('sent'); + $taxInvoice->setSentAt(new \DateTimeImmutable()); + $taxInvoice->setTaxSystemInvoiceNumber($response['data']['invoiceNumber'] ?? null); + $taxInvoice->setTaxSystemReferenceNumber($response['data']['referenceNumber'] ?? null); + $taxInvoice->setResponseData(json_encode($response['data'])); + $em->flush(); + + return [ + success' => true, + data' => $response['data] ]; + } else { + // به‌روزرسانی وضعیت به failed + $taxInvoice->setStatus('failed'); + $taxInvoice->setErrorMessage($response['message']); + $em->flush(); + + return [ + success' => false, + message' => $response['message] ]; + } + */ + + // فعلاً برای تست، پیام موفقیت برمی‌گردانیم + $taxInvoice->setStatus('sent'); + $taxInvoice->setSentAt(new \DateTimeImmutable()); + $taxInvoice->setTaxSystemInvoiceNumber('TAX-' . $invoice->getCode()); + $taxInvoice->setTaxSystemReferenceNumber('REF-' . $invoice->getCode()); + $taxInvoice->setResponseData(json_encode(['status' => 'success', 'message' => 'Test response'])); + $em->flush(); + + return [ + 'success' => true, + 'data' => [ + 'invoiceNumber' => $invoice->getCode(), + 'taxSystemInvoiceNumber' => $taxInvoice->getTaxSystemInvoiceNumber(), + 'taxSystemReferenceNumber' => $taxInvoice->getTaxSystemReferenceNumber(), + 'sentAt' => $taxInvoice->getSentAt()->format('Y-m-d H:i:s') + ] + ]; + + } catch (\Exception $e) { + // در صورت خطا، وضعیت را به failed تغییر دهید + if (isset($taxInvoice)) { + $taxInvoice->setStatus('failed'); + $taxInvoice->setErrorMessage($e->getMessage()); + $em->flush(); + } + + return [ + 'success' => false, + 'message' => 'خطا در ارسال به سامانه مودیان: ' . $e->getMessage() + ]; + } + } + + #[Route('/api/plugins/tax/invoices/list', name: 'plugin_tax_settings_invoices_list', methods: ['GET'])] + public function plugin_tax_settings_invoices_list(Request $request, Access $access, EntityManagerInterface $em): JsonResponse + { + $acc = $access->hasRole('plugTaxSettings'); + if (!$acc) { + throw $this->createAccessDeniedException('شما دسترسی لازم را ندارید.'); + } + + $businessId = is_object($acc['bid']) ? $acc['bid']->getId() : $acc['bid']; + + try { + $taxInvoiceRepo = $em->getRepository(PluginTaxInvoice::class); + $invoices = $taxInvoiceRepo->findByBusiness($businessId); + + $result = []; + foreach ($invoices as $taxInvoice) { + $invoice = $taxInvoice->getInvoice(); + + // دریافت اطلاعات کامل فاکتور اصلی + $invoiceDetails = null; + if ($invoice) { + $invoiceDetails = [ + 'id' => $invoice->getId(), + 'code' => $invoice->getCode(), + 'date' => $invoice->getDate(), + 'des' => $invoice->getDes(), + 'amount' => $invoice->getAmount(), + 'type' => $invoice->getType(), + 'status' => $invoice->getStatus(), + 'shortlink' => $invoice->getShortlink(), + 'taxPercent' => $invoice->getTaxPercent(), + 'discountType' => $invoice->getDiscountType(), + 'discountPercent' => $invoice->getDiscountPercent() + ]; + } + + $result[] = [ + 'id' => $taxInvoice->getId(), + 'invoiceNumber' => $taxInvoice->getInvoiceCode(), + 'date' => $invoice ? $invoice->getDate() : null, + 'customerName' => $taxInvoice->getCustomerName(), + 'customerId' => $taxInvoice->getCustomerId(), + 'totalAmount' => $taxInvoice->getAmount(), + 'status' => $taxInvoice->getStatus(), + 'sentDate' => $taxInvoice->getSentAt() ? $taxInvoice->getSentAt()->format('Y-m-d H:i:s') : null, + 'errorMessage' => $taxInvoice->getErrorMessage(), + 'createdAt' => $taxInvoice->getCreatedAt()->format('Y-m-d H:i:s'), + 'uniqueTaxNumber' => $taxInvoice->getTaxSystemInvoiceNumber(), + 'referenceUniqueTaxNumber' => $taxInvoice->getTaxSystemReferenceNumber(), + 'invoiceType' => $this->getInvoiceType($invoice), + 'invoiceDetails' => $invoiceDetails + ]; + } + + return $this->json([ + 'success' => true, + 'data' => $result + ]); + + } catch (\Exception $e) { + return $this->json([ + 'success' => false, + 'message' => 'خطا در دریافت لیست فاکتورها: ' . $e->getMessage() + ]); + } + } + + private function getInvoiceType($invoice): string + { + if (!$invoice) { + return 'اصلی'; + } + + switch ($invoice->getType()) { + case 'sell': + return 'اصلی'; + case 'return_sell': + return 'برگشت از فروش'; + case 'correction': + return 'اصلاحی'; + case 'cancel': + return 'ابطالی'; + default: + return 'اصلی'; + } + } +} \ No newline at end of file diff --git a/hesabixCore/src/Entity/Permission.php b/hesabixCore/src/Entity/Permission.php index e5631356..47aedd1b 100644 --- a/hesabixCore/src/Entity/Permission.php +++ b/hesabixCore/src/Entity/Permission.php @@ -129,6 +129,9 @@ class Permission #[ORM\Column(nullable: true)] private ?bool $plugGhestaManager = null; + #[ORM\Column(nullable: true)] + private ?bool $plugTaxSettings = null; + public function getId(): ?int { return $this->id; @@ -590,4 +593,16 @@ class Permission return $this; } + public function isPlugTaxSettings(): ?bool + { + return $this->plugTaxSettings; + } + + public function setPlugTaxSettings(?bool $plugTaxSettings): static + { + $this->plugTaxSettings = $plugTaxSettings; + + return $this; + } + } diff --git a/hesabixCore/src/Entity/PluginTaxInvoice.php b/hesabixCore/src/Entity/PluginTaxInvoice.php new file mode 100644 index 00000000..737f8308 --- /dev/null +++ b/hesabixCore/src/Entity/PluginTaxInvoice.php @@ -0,0 +1,239 @@ +createdAt = new \DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getBusiness(): ?Business + { + return $this->business; + } + + public function setBusiness(?Business $business): static + { + $this->business = $business; + return $this; + } + + public function getUser(): ?User + { + return $this->user; + } + + public function setUser(?User $user): static + { + $this->user = $user; + return $this; + } + + public function getInvoice(): ?HesabdariDoc + { + return $this->invoice; + } + + public function setInvoice(?HesabdariDoc $invoice): static + { + $this->invoice = $invoice; + return $this; + } + + public function getInvoiceCode(): ?string + { + return $this->invoiceCode; + } + + public function setInvoiceCode(string $invoiceCode): static + { + $this->invoiceCode = $invoiceCode; + return $this; + } + + public function getTaxSystemInvoiceNumber(): ?string + { + return $this->taxSystemInvoiceNumber; + } + + public function setTaxSystemInvoiceNumber(?string $taxSystemInvoiceNumber): static + { + $this->taxSystemInvoiceNumber = $taxSystemInvoiceNumber; + return $this; + } + + public function getTaxSystemReferenceNumber(): ?string + { + return $this->taxSystemReferenceNumber; + } + + public function setTaxSystemReferenceNumber(?string $taxSystemReferenceNumber): static + { + $this->taxSystemReferenceNumber = $taxSystemReferenceNumber; + return $this; + } + + public function getStatus(): ?string + { + return $this->status; + } + + public function setStatus(string $status): static + { + $this->status = $status; + return $this; + } + + public function getResponseData(): ?string + { + return $this->responseData; + } + + public function setResponseData(?string $responseData): static + { + $this->responseData = $responseData; + return $this; + } + + public function getErrorMessage(): ?string + { + return $this->errorMessage; + } + + public function setErrorMessage(?string $errorMessage): static + { + $this->errorMessage = $errorMessage; + return $this; + } + + public function getCreatedAt(): ?\DateTimeImmutable + { + return $this->createdAt; + } + + public function setCreatedAt(\DateTimeImmutable $createdAt): static + { + $this->createdAt = $createdAt; + return $this; + } + + public function getSentAt(): ?\DateTimeImmutable + { + return $this->sentAt; + } + + public function setSentAt(?\DateTimeImmutable $sentAt): static + { + $this->sentAt = $sentAt; + return $this; + } + + public function getConfirmedAt(): ?\DateTimeImmutable + { + return $this->confirmedAt; + } + + public function setConfirmedAt(?\DateTimeImmutable $confirmedAt): static + { + $this->confirmedAt = $confirmedAt; + return $this; + } + + public function getAmount(): ?string + { + return $this->amount; + } + + public function setAmount(string $amount): static + { + $this->amount = $amount; + return $this; + } + + public function getCustomerName(): ?string + { + return $this->customerName; + } + + public function setCustomerName(?string $customerName): static + { + $this->customerName = $customerName; + return $this; + } + + public function getCustomerId(): ?string + { + return $this->customerId; + } + + public function setCustomerId(?string $customerId): static + { + $this->customerId = $customerId; + return $this; + } +} \ No newline at end of file diff --git a/hesabixCore/src/Entity/PluginTaxsettingsKey.php b/hesabixCore/src/Entity/PluginTaxsettingsKey.php new file mode 100644 index 00000000..f7d88e6f --- /dev/null +++ b/hesabixCore/src/Entity/PluginTaxsettingsKey.php @@ -0,0 +1,53 @@ +id; } + public function getBusinessId() { return $this->business_id; } + public function setBusinessId($val) { $this->business_id = $val; } + public function getUserId() { return $this->user_id; } + public function setUserId($val) { $this->user_id = $val; } + public function getPrivateKey() { return $this->private_key; } + public function setPrivateKey($val) { $this->private_key = $val; } + public function getTaxMemoryId() { return $this->tax_memory_id; } + public function setTaxMemoryId($val) { $this->tax_memory_id = $val; } + public function getEconomicCode() { return $this->economic_code; } + public function setEconomicCode($val) { $this->economic_code = $val; } + public function getCreatedAt() { return $this->created_at; } + public function setCreatedAt($val) { $this->created_at = $val; } + public function getUpdatedAt() { return $this->updated_at; } + public function setUpdatedAt($val) { $this->updated_at = $val; } +} \ No newline at end of file diff --git a/hesabixCore/src/Repository/PluginTaxInvoiceRepository.php b/hesabixCore/src/Repository/PluginTaxInvoiceRepository.php new file mode 100644 index 00000000..06f5f946 --- /dev/null +++ b/hesabixCore/src/Repository/PluginTaxInvoiceRepository.php @@ -0,0 +1,106 @@ + + * + * @method PluginTaxInvoice|null find($id, $lockMode = null, $lockVersion = null) + * @method PluginTaxInvoice|null findOneBy(array $criteria, array $orderBy = null) + * @method PluginTaxInvoice findAll() + * @method PluginTaxInvoice findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class PluginTaxInvoiceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, PluginTaxInvoice::class); + } + + public function save(PluginTaxInvoice $entity, bool $flush = false): void + { + $this->getEntityManager()->persist($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + public function remove(PluginTaxInvoice $entity, bool $flush = false): void + { + $this->getEntityManager()->remove($entity); + + if ($flush) { + $this->getEntityManager()->flush(); + } + } + + /** + * پیدا کردن فاکتورهای ارسال شده برای یک کسب‌و‌کار + */ + public function findByBusiness($businessId, $limit = null, $offset = null) + { + $qb = $this->createQueryBuilder('pti') + ->leftJoin('pti.invoice', 'invoice') + ->leftJoin('pti.user', 'user') + ->where('pti.business = :businessId') + ->setParameter('businessId', $businessId) + ->orderBy('pti.createdAt', 'DESC'); + if ($limit) { + $qb->setMaxResults($limit); + } + if ($offset) { + $qb->setFirstResult($offset); + } + + return $qb->getQuery()->getResult(); + } + + /** + * پیدا کردن فاکتور بر اساس کد فاکتور و کسب‌و‌کار + */ + public function findByInvoiceCodeAndBusiness($invoiceCode, $businessId) + { + return $this->createQueryBuilder('pti') + ->where('pti.invoiceCode = :invoiceCode') + ->andWhere('pti.business = :businessId') + ->setParameter('invoiceCode', $invoiceCode) + ->setParameter('businessId', $businessId) + ->getQuery() + ->getOneOrNullResult(); + } + + /** + * آمار فاکتورهای ارسال شده بر اساس وضعیت + */ + public function getStatusStats($businessId) + { + $qb = $this->createQueryBuilder('pti') + ->select('pti.status, COUNT(pti.id) as count') + ->where('pti.business = :businessId') + ->setParameter('businessId', $businessId) + ->groupBy('pti.status'); + + return $qb->getQuery()->getResult(); + } + + /** + * فاکتورهای با وضعیت مشخص + */ + public function findByStatus($businessId, $status) + { + return $this->createQueryBuilder('pti') + ->leftJoin('pti.invoice', 'invoice') + ->where('pti.business = :businessId') + ->andWhere('pti.status = :status') + ->setParameter('businessId', $businessId) + ->setParameter('status', $status) + ->orderBy('pti.createdAt', 'DESC') + ->getQuery() + ->getResult(); + } +} \ No newline at end of file diff --git a/hesabixCore/symfony.lock b/hesabixCore/symfony.lock index eca69b11..d2398b56 100644 --- a/hesabixCore/symfony.lock +++ b/hesabixCore/symfony.lock @@ -8,6 +8,15 @@ "ref": "64d8583af5ea57b7afa4aba4b159907f3a148b05" } }, + "doctrine/deprecations": { + "version": "1.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "1.0", + "ref": "87424683adc81d7dc305eefec1fced883084aab9" + } + }, "doctrine/doctrine-bundle": { "version": "2.10", "recipe": { diff --git a/webUI/.github/workflows/release.yml b/webUI/.github/workflows/release.yml old mode 100644 new mode 100755 diff --git a/webUI/.gitignore b/webUI/.gitignore old mode 100644 new mode 100755 diff --git a/webUI/LICENSE b/webUI/LICENSE old mode 100644 new mode 100755 diff --git a/webUI/env.d.ts b/webUI/env.d.ts old mode 100644 new mode 100755 diff --git a/webUI/index.html b/webUI/index.html old mode 100644 new mode 100755 diff --git a/webUI/package.json b/webUI/package.json old mode 100644 new mode 100755 diff --git a/webUI/public/.htaccess b/webUI/public/.htaccess old mode 100644 new mode 100755 diff --git a/webUI/public/dashmix/dashmix.app.min.js b/webUI/public/dashmix/dashmix.app.min.js old mode 100644 new mode 100755 diff --git a/webUI/public/dashmix/dashmix.min.css b/webUI/public/dashmix/dashmix.min.css old mode 100644 new mode 100755 diff --git a/webUI/public/favicon.ico b/webUI/public/favicon.ico old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-brands-400.ttf b/webUI/public/fonts/fontawesome/fa-brands-400.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-brands-400.woff2 b/webUI/public/fonts/fontawesome/fa-brands-400.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-regular-400.ttf b/webUI/public/fonts/fontawesome/fa-regular-400.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-regular-400.woff2 b/webUI/public/fonts/fontawesome/fa-regular-400.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-solid-900.ttf b/webUI/public/fonts/fontawesome/fa-solid-900.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-solid-900.woff2 b/webUI/public/fonts/fontawesome/fa-solid-900.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-v4compatibility.ttf b/webUI/public/fonts/fontawesome/fa-v4compatibility.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/fontawesome/fa-v4compatibility.woff2 b/webUI/public/fonts/fontawesome/fa-v4compatibility.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-300.woff2 b/webUI/public/fonts/inter/inter-v11-latin-300.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-500.woff2 b/webUI/public/fonts/inter/inter-v11-latin-500.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-600.woff2 b/webUI/public/fonts/inter/inter-v11-latin-600.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-700.woff2 b/webUI/public/fonts/inter/inter-v11-latin-700.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-800.woff2 b/webUI/public/fonts/inter/inter-v11-latin-800.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-900.woff2 b/webUI/public/fonts/inter/inter-v11-latin-900.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/inter/inter-v11-latin-regular.woff2 b/webUI/public/fonts/inter/inter-v11-latin-regular.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Black-FD.eot b/webUI/public/fonts/sahel/Sahel-Black-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Black-FD.ttf b/webUI/public/fonts/sahel/Sahel-Black-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Black-FD.woff b/webUI/public/fonts/sahel/Sahel-Black-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Black-FD.woff2 b/webUI/public/fonts/sahel/Sahel-Black-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Bold-FD.eot b/webUI/public/fonts/sahel/Sahel-Bold-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Bold-FD.ttf b/webUI/public/fonts/sahel/Sahel-Bold-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Bold-FD.woff b/webUI/public/fonts/sahel/Sahel-Bold-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Bold-FD.woff2 b/webUI/public/fonts/sahel/Sahel-Bold-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-FD.eot b/webUI/public/fonts/sahel/Sahel-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-FD.ttf b/webUI/public/fonts/sahel/Sahel-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-FD.woff b/webUI/public/fonts/sahel/Sahel-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-FD.woff2 b/webUI/public/fonts/sahel/Sahel-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Light-FD.eot b/webUI/public/fonts/sahel/Sahel-Light-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Light-FD.ttf b/webUI/public/fonts/sahel/Sahel-Light-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Light-FD.woff b/webUI/public/fonts/sahel/Sahel-Light-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-Light-FD.woff2 b/webUI/public/fonts/sahel/Sahel-Light-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-SemiBold-FD.eot b/webUI/public/fonts/sahel/Sahel-SemiBold-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-SemiBold-FD.ttf b/webUI/public/fonts/sahel/Sahel-SemiBold-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-SemiBold-FD.woff b/webUI/public/fonts/sahel/Sahel-SemiBold-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/Sahel-SemiBold-FD.woff2 b/webUI/public/fonts/sahel/Sahel-SemiBold-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/sahel/sahel.css b/webUI/public/fonts/sahel/sahel.css old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Bold-FD.eot b/webUI/public/fonts/shabnam/Shabnam-Bold-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Bold-FD.ttf b/webUI/public/fonts/shabnam/Shabnam-Bold-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Bold-FD.woff b/webUI/public/fonts/shabnam/Shabnam-Bold-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Bold-FD.woff2 b/webUI/public/fonts/shabnam/Shabnam-Bold-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-FD.eot b/webUI/public/fonts/shabnam/Shabnam-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-FD.ttf b/webUI/public/fonts/shabnam/Shabnam-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-FD.woff b/webUI/public/fonts/shabnam/Shabnam-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-FD.woff2 b/webUI/public/fonts/shabnam/Shabnam-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Light-FD.eot b/webUI/public/fonts/shabnam/Shabnam-Light-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Light-FD.ttf b/webUI/public/fonts/shabnam/Shabnam-Light-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Light-FD.woff b/webUI/public/fonts/shabnam/Shabnam-Light-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Light-FD.woff2 b/webUI/public/fonts/shabnam/Shabnam-Light-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Medium-FD.eot b/webUI/public/fonts/shabnam/Shabnam-Medium-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Medium-FD.ttf b/webUI/public/fonts/shabnam/Shabnam-Medium-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Medium-FD.woff b/webUI/public/fonts/shabnam/Shabnam-Medium-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Medium-FD.woff2 b/webUI/public/fonts/shabnam/Shabnam-Medium-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Thin-FD.eot b/webUI/public/fonts/shabnam/Shabnam-Thin-FD.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Thin-FD.ttf b/webUI/public/fonts/shabnam/Shabnam-Thin-FD.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Thin-FD.woff b/webUI/public/fonts/shabnam/Shabnam-Thin-FD.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/Shabnam-Thin-FD.woff2 b/webUI/public/fonts/shabnam/Shabnam-Thin-FD.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/shabnam/shabnam.css b/webUI/public/fonts/shabnam/shabnam.css old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.eot b/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.eot old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.svg b/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.svg old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.ttf b/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.woff b/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.woff old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.woff2 b/webUI/public/fonts/simple-line-icons/Simple-Line-Icons.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Black.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Black.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Bold.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Bold.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-ExtraBold.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-ExtraBold.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-ExtraLight.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-ExtraLight.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Light.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Light.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Medium.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Medium.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Regular.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Regular.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-SemiBold.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-SemiBold.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/ttf/Vazirmatn-Thin.ttf b/webUI/public/fonts/vazir/ttf/Vazirmatn-Thin.ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/variable/Vazirmatn[wght].ttf b/webUI/public/fonts/vazir/variable/Vazirmatn[wght].ttf old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/vazir.css b/webUI/public/fonts/vazir/vazir.css old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Black.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Black.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Bold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Bold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-ExtraBold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-ExtraBold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-ExtraLight.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-ExtraLight.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Black.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Black.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Bold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Bold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-ExtraBold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-ExtraBold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-ExtraLight.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-ExtraLight.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Light.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Light.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Medium.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Medium.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Regular.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Regular.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-SemiBold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-SemiBold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Thin.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-FD-Thin.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Light.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Light.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Medium.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Medium.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Regular.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Regular.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-SemiBold.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-SemiBold.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn-Thin.woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn-Thin.woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/fonts/vazir/webfonts/Vazirmatn[wght].woff2 b/webUI/public/fonts/vazir/webfonts/Vazirmatn[wght].woff2 old mode 100644 new mode 100755 diff --git a/webUI/public/img/404.gif b/webUI/public/img/404.gif old mode 100644 new mode 100755 diff --git a/webUI/public/img/android-chrome-192x192.png b/webUI/public/img/android-chrome-192x192.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/android-chrome-512x512.png b/webUI/public/img/android-chrome-512x512.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/apple-touch-icon.png b/webUI/public/img/apple-touch-icon.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/avatar.jpg b/webUI/public/img/avatar.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/avatar.png b/webUI/public/img/avatar.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/avatar.webp b/webUI/public/img/avatar.webp old mode 100644 new mode 100755 diff --git a/webUI/public/img/banner1.jpg b/webUI/public/img/banner1.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/bg_side_overlay_header.jpg b/webUI/public/img/bg_side_overlay_header.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/cover.jpg b/webUI/public/img/cover.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/enamad-logo.png b/webUI/public/img/enamad-logo.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicon-16x16.png b/webUI/public/img/favicon-16x16.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicon-32x32.png b/webUI/public/img/favicon-32x32.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicon.ico b/webUI/public/img/favicon.ico old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicons/apple-touch-icon-180x180.png b/webUI/public/img/favicons/apple-touch-icon-180x180.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicons/favicon-192x192.png b/webUI/public/img/favicons/favicon-192x192.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicons/favicon.ico b/webUI/public/img/favicons/favicon.ico old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicons/favicon.png b/webUI/public/img/favicons/favicon.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favicons/favw.png b/webUI/public/img/favicons/favw.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/favw.png b/webUI/public/img/favw.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/bale-logo.png b/webUI/public/img/icons/bale-logo.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/bank.jpg b/webUI/public/img/icons/bank.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/business.png b/webUI/public/img/icons/business.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/cashdesk.jpg b/webUI/public/img/icons/cashdesk.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/check.jpg b/webUI/public/img/icons/check.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/eitaa.jpeg b/webUI/public/img/icons/eitaa.jpeg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/melipayamak.png b/webUI/public/img/icons/melipayamak.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/robika.png b/webUI/public/img/icons/robika.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/salary.jpg b/webUI/public/img/icons/salary.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/telegram.png b/webUI/public/img/icons/telegram.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/wallet.png b/webUI/public/img/icons/wallet.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/warehouse.jpg b/webUI/public/img/icons/warehouse.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/icons/zarinpal.png b/webUI/public/img/icons/zarinpal.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo-blue.png b/webUI/public/img/logo-blue.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen144.png b/webUI/public/img/logo/homescreen144.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen168.png b/webUI/public/img/logo/homescreen168.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen192.png b/webUI/public/img/logo/homescreen192.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen256.png b/webUI/public/img/logo/homescreen256.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen48.png b/webUI/public/img/logo/homescreen48.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen512.png b/webUI/public/img/logo/homescreen512.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen72.png b/webUI/public/img/logo/homescreen72.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/homescreen96.png b/webUI/public/img/logo/homescreen96.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/logo/logo500.png b/webUI/public/img/logo/logo500.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/payways/pec.ir.png b/webUI/public/img/payways/pec.ir.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/payways/zarinpal-logo-min.png b/webUI/public/img/payways/zarinpal-logo-min.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/accpro.png b/webUI/public/img/plugins/accpro.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/accpro/intro.png b/webUI/public/img/plugins/accpro/intro.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/apartemanma.jpg b/webUI/public/img/plugins/apartemanma.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/apartemanma/drawer.jpg b/webUI/public/img/plugins/apartemanma/drawer.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/apartemanma/intro.jpg b/webUI/public/img/plugins/apartemanma/intro.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/club.webp b/webUI/public/img/plugins/club.webp old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/ghesta.png b/webUI/public/img/plugins/ghesta.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/hmr.jpg b/webUI/public/img/plugins/hmr.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/noghrekoob.jpeg b/webUI/public/img/plugins/noghrekoob.jpeg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/onlinestore.webp b/webUI/public/img/plugins/onlinestore.webp old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/onlinestore/intro.webp b/webUI/public/img/plugins/onlinestore/intro.webp old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/repservice.jpg b/webUI/public/img/plugins/repservice.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/repservice.png b/webUI/public/img/plugins/repservice.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/rest.jpg b/webUI/public/img/plugins/rest.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/plugins/taxplugin.jpg b/webUI/public/img/plugins/taxplugin.jpg new file mode 100644 index 00000000..8b2765dc Binary files /dev/null and b/webUI/public/img/plugins/taxplugin.jpg differ diff --git a/webUI/public/img/sabavision.gif b/webUI/public/img/sabavision.gif old mode 100644 new mode 100755 diff --git a/webUI/public/img/site.webmanifest b/webUI/public/img/site.webmanifest old mode 100644 new mode 100755 diff --git a/webUI/public/img/whatsapp.png b/webUI/public/img/whatsapp.png old mode 100644 new mode 100755 diff --git a/webUI/public/img/wp.jpg b/webUI/public/img/wp.jpg old mode 100644 new mode 100755 diff --git a/webUI/public/img/zarinpal-logo-min.png b/webUI/public/img/zarinpal-logo-min.png old mode 100644 new mode 100755 diff --git a/webUI/public/manifest.json b/webUI/public/manifest.json old mode 100644 new mode 100755 diff --git a/webUI/public/service-worker.js b/webUI/public/service-worker.js old mode 100644 new mode 100755 diff --git a/webUI/public/sounds/beep.mp3 b/webUI/public/sounds/beep.mp3 old mode 100644 new mode 100755 diff --git a/webUI/src/App.vue b/webUI/src/App.vue old mode 100644 new mode 100755 diff --git a/webUI/src/assets/dino.png b/webUI/src/assets/dino.png old mode 100644 new mode 100755 diff --git a/webUI/src/assets/hero.png b/webUI/src/assets/hero.png old mode 100644 new mode 100755 diff --git a/webUI/src/assets/logo.svg b/webUI/src/assets/logo.svg old mode 100644 new mode 100755 diff --git a/webUI/src/assets/peach.png b/webUI/src/assets/peach.png old mode 100644 new mode 100755 diff --git a/webUI/src/assets/site.css b/webUI/src/assets/site.css old mode 100644 new mode 100755 diff --git a/webUI/src/components/ChangePasswordDialog.vue b/webUI/src/components/ChangePasswordDialog.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/Editor.vue b/webUI/src/components/Editor.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/PrintDialog.vue b/webUI/src/components/PrintDialog.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/CalculatorButton.vue b/webUI/src/components/application/buttons/CalculatorButton.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/SecretDialog.vue b/webUI/src/components/application/buttons/SecretDialog.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/ShortcutsButton.vue b/webUI/src/components/application/buttons/ShortcutsButton.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/change_lang.vue b/webUI/src/components/application/buttons/change_lang.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/notifications_btn.vue b/webUI/src/components/application/buttons/notifications_btn.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/buttons/profile_btn.vue b/webUI/src/components/application/buttons/profile_btn.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/clock.vue b/webUI/src/components/application/clock.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/combobox/currency_cob.vue b/webUI/src/components/application/combobox/currency_cob.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/combobox/year_cob.vue b/webUI/src/components/application/combobox/year_cob.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/list/archive_list.vue b/webUI/src/components/application/list/archive_list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/application/list/sms_list.vue b/webUI/src/components/application/list/sms_list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Haccountsearch.vue b/webUI/src/components/forms/Haccountsearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hbankaccountsearch.vue b/webUI/src/components/forms/Hbankaccountsearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hbankselect.vue b/webUI/src/components/forms/Hbankselect.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hcashdesksearch.vue b/webUI/src/components/forms/Hcashdesksearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hcommoditysearch.vue b/webUI/src/components/forms/Hcommoditysearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hdatepicker.vue b/webUI/src/components/forms/Hdatepicker.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hdocsearch.vue b/webUI/src/components/forms/Hdocsearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/HesabdariTreeView.vue b/webUI/src/components/forms/HesabdariTreeView.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hnumberinput.vue b/webUI/src/components/forms/Hnumberinput.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hpersonsearch.vue b/webUI/src/components/forms/Hpersonsearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Hsalarysearch.vue b/webUI/src/components/forms/Hsalarysearch.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/Htabletreeselect.vue b/webUI/src/components/forms/Htabletreeselect.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/forms/TreeNode.vue b/webUI/src/components/forms/TreeNode.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/widgets/PrintOptions.vue b/webUI/src/components/widgets/PrintOptions.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/widgets/ShareOptions.vue b/webUI/src/components/widgets/ShareOptions.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/widgets/TopCommoditiesChart.vue b/webUI/src/components/widgets/TopCommoditiesChart.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/widgets/TopCostCentersChart.vue b/webUI/src/components/widgets/TopCostCentersChart.vue old mode 100644 new mode 100755 diff --git a/webUI/src/components/widgets/TopIncomeCentersChart.vue b/webUI/src/components/widgets/TopIncomeCentersChart.vue old mode 100644 new mode 100755 diff --git a/webUI/src/css/main.css b/webUI/src/css/main.css old mode 100644 new mode 100755 diff --git a/webUI/src/hesabixConfig.js b/webUI/src/hesabixConfig.js old mode 100644 new mode 100755 diff --git a/webUI/src/i18n/calendarLocalConfig.ts b/webUI/src/i18n/calendarLocalConfig.ts old mode 100644 new mode 100755 diff --git a/webUI/src/i18n/en_lang.ts b/webUI/src/i18n/en_lang.ts old mode 100644 new mode 100755 diff --git a/webUI/src/i18n/fa_lang.ts b/webUI/src/i18n/fa_lang.ts old mode 100644 new mode 100755 index cd1a9fcc..99d09953 --- a/webUI/src/i18n/fa_lang.ts +++ b/webUI/src/i18n/fa_lang.ts @@ -173,6 +173,7 @@ const fa_lang = { reports: "گزارشات", settings: "تنظیمات", bid_settings: "تنظیمات کسب‌و‌کار", + tax_settings: "تنظیمات مالیاتی", print_settings: "چاپ اسناد", user_perms: "کاربران و دسترسی‌ها", avatar_settings: "نمایه و مهر کسب‌و‌کار", @@ -196,6 +197,8 @@ const fa_lang = { hrm: 'منابع انسانی', hrm_docs: 'سند حقوق', buysellByPerson: "گزارش خرید و فروش های اشخاص", + tax_system: "سامانه مودیان مالیاتی", + tax_invoices: "صورتحساب‌ ها", }, time: { month: "{id} ماه", @@ -268,6 +271,19 @@ const fa_lang = { "fetchError": "خطا در دریافت", "cancel": "لغو", "confirm": "تأیید", + "updateSourceTitle": "منبع به‌روزرسانی", + "updateSourceLabel": "آدرس منبع به‌روزرسانی", + "changeSourceButton": "تغییر منبع", + "sourceUrlRequired": "لطفاً آدرس منبع به‌روزرسانی را وارد کنید", + "changingSourceMessage": "در حال تغییر منبع به‌روزرسانی...", + "sourceChangeSuccess": "منبع به‌روزرسانی با موفقیت تغییر یافت", + "sourceChangeError": "خطایی در تغییر منبع به‌روزرسانی رخ داد", + "notGitRepository": "این پروژه یک مخزن Git نیست", + "invalidRepositoryUrl": "آدرس مخزن نامعتبر است. لطفاً یک آدرس HTTP یا SSH معتبر وارد کنید.", + "repositoryUrlError": "خطا در دریافت آدرس مخزن", + "repositoryChangeError": "خطا در تغییر آدرس مخزن", + "repositoryConnectionError": "خطا در اتصال به مخزن جدید", + "repositoryChangeSuccess": "آدرس مخزن با موفقیت تغییر یافت و اتصال برقرار شد", }, static: { not_found: "صفحه مورد نظر یافت نشد", @@ -555,6 +571,9 @@ const fa_lang = { status: "وضعیت", actions: "عملیات" }, + send_to_tax_system: "ارسال به سامانه مودیان", + tax_send_success: "فاکتور با موفقیت به سامانه مودیان ارسال شد.", + tax_send_error: "ارسال به سامانه مودیان با خطا مواجه شد.", }, app: { loading: "در حال بارگذاری...", @@ -799,6 +818,19 @@ const fa_lang = { sms_settings_plug_accpro_pass_cheque_input: "واگذاری چک", sms_settings_reject_cheque_input: "برگشت چک", sms_settings_plug_accpro_reject_cheque_input: "برگشت چک", + inquiry_zohal_api_key: "کلید API زحل", + inquiry_zohal_api_key_des: "کلید API زحل برای دریافت اطلاعات از سامانه زحل", + inquiry_zohal_api_key_placeholder: "کلید API زحل", + inquiry_zohal_api_key_label: "کلید API زحل", + enable_postalcode_to_address: "تبدیل کد پستی به آدرس", + postalcode_to_address_fee: "کارمزد تبدیل کد پستی به آدرس", + enable_card_to_sheba: "تبدیل شماره کارت به شبا", + card_to_sheba_fee: "کارمزد تبدیل شماره کارت به شبا", + enable_account_to_sheba: "تبدیل حساب به شبا", + account_to_sheba_fee: "کارمزد تبدیل حساب به شبا", + inquiry_panel_enable: "فعال سازی پنل سامانه استعلامات", + inquiry_panel: "پنل سامانه استعلامات", + inquiry_panel_zohal: "زحل", app_site: "آدرس اینترفیس(رابط کاربری)", keywords: "کلیدواژه‌ها با کاما (,) از هم جدا شوند", zarinpal_api: "کد API زرین‌پال", diff --git a/webUI/src/i18n/i18n.ts b/webUI/src/i18n/i18n.ts old mode 100644 new mode 100755 diff --git a/webUI/src/main.ts b/webUI/src/main.ts old mode 100644 new mode 100755 diff --git a/webUI/src/registerServiceWorker.js b/webUI/src/registerServiceWorker.js old mode 100644 new mode 100755 diff --git a/webUI/src/router/index.ts b/webUI/src/router/index.ts old mode 100644 new mode 100755 index 9c3d0b36..bedfb9e5 --- a/webUI/src/router/index.ts +++ b/webUI/src/router/index.ts @@ -510,6 +510,18 @@ const router = createRouter({ component: () => import('../views/acc/settings/extramoneys.vue'), }, + { + path: 'plugins/tax/invoices/list', + name: 'tax_invoices_list', + component: () => + import('../views/acc/plugins/tax/invoices/list.vue'), + }, + { + path: 'plugins/tax/settings', + name: 'business_tax_settings', + component: () => + import('../views/acc/plugins/tax/settings.vue'), + }, { path: 'business/logs', name: 'business_logs', diff --git a/webUI/src/scss/_override.scss b/webUI/src/scss/_override.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/_variables.scss b/webUI/src/scss/_variables.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VAlert.scss b/webUI/src/scss/components/_VAlert.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VBadge.scss b/webUI/src/scss/components/_VBadge.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VBreadcrumb.scss b/webUI/src/scss/components/_VBreadcrumb.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VButtons.scss b/webUI/src/scss/components/_VButtons.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VCard.scss b/webUI/src/scss/components/_VCard.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VField.scss b/webUI/src/scss/components/_VField.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VInput.scss b/webUI/src/scss/components/_VInput.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VList.scss b/webUI/src/scss/components/_VList.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VNavigationDrawer.scss b/webUI/src/scss/components/_VNavigationDrawer.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VShadow.scss b/webUI/src/scss/components/_VShadow.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VTextField.scss b/webUI/src/scss/components/_VTextField.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/components/_VTextarea.scss b/webUI/src/scss/components/_VTextarea.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/layout/_container.scss b/webUI/src/scss/layout/_container.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/layout/_footer.scss b/webUI/src/scss/layout/_footer.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/layout/_horizontal.scss b/webUI/src/scss/layout/_horizontal.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/layout/_sidebar.scss b/webUI/src/scss/layout/_sidebar.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/layout/_topbar.scss b/webUI/src/scss/layout/_topbar.scss old mode 100644 new mode 100755 diff --git a/webUI/src/scss/style.scss b/webUI/src/scss/style.scss old mode 100644 new mode 100755 diff --git a/webUI/src/stores/applicationStore.ts b/webUI/src/stores/applicationStore.ts old mode 100644 new mode 100755 diff --git a/webUI/src/stores/counter.ts b/webUI/src/stores/counter.ts old mode 100644 new mode 100755 diff --git a/webUI/src/stores/userStore.ts b/webUI/src/stores/userStore.ts old mode 100644 new mode 100755 diff --git a/webUI/src/theme/DarkTheme.ts b/webUI/src/theme/DarkTheme.ts old mode 100644 new mode 100755 diff --git a/webUI/src/theme/LightTheme.ts b/webUI/src/theme/LightTheme.ts old mode 100644 new mode 100755 diff --git a/webUI/src/types/vue3-qrcode-reader.d.ts b/webUI/src/types/vue3-qrcode-reader.d.ts old mode 100644 new mode 100755 diff --git a/webUI/src/utils/date.js b/webUI/src/utils/date.js old mode 100644 new mode 100755 diff --git a/webUI/src/utils/number.js b/webUI/src/utils/number.js old mode 100644 new mode 100755 diff --git a/webUI/src/views/NotFound.vue b/webUI/src/views/NotFound.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/App.vue b/webUI/src/views/acc/App.vue old mode 100644 new mode 100755 index 452c610a..1645a6af --- a/webUI/src/views/acc/App.vue +++ b/webUI/src/views/acc/App.vue @@ -179,6 +179,8 @@ export default { { path: '/acc/plugin-center/invoice', key: '`', label: this.$t('drawer.plugins_invoices'), ctrl: true, shift: true, permission: () => this.permissions.owner }, { path: '/acc/hrm/docs/list', key: 'H', label: this.$t('drawer.hrm_docs'), ctrl: true, shift: true, permission: () => this.isPluginActive('hrm') && this.permissions.plugHrmDocs }, { path: '/acc/plugins/ghesta/list', key: 'G', label: this.$t('drawer.ghesta_invoices'), ctrl: true, shift: true, permission: () => this.isPluginActive('ghesta') && this.permissions.plugGhestaManager }, + { path: '/acc/plugins/tax/invoices/list', key: 'L', label: this.$t('drawer.tax_invoices'), ctrl: true, shift: true, permission: () => this.permissions.settings && this.isPluginActive('taxsettings') }, + { path: '/acc/plugins/tax/settings', key: 'T', label: this.$t('drawer.tax_settings'), ctrl: true, shift: true, permission: () => this.permissions.settings && this.isPluginActive('taxsettings') }, ]; }, restorePermissions(shortcuts) { @@ -741,7 +743,7 @@ export default { {{ $t('drawer.user_perms') }} {{ getShortcutKey('/acc/business/users') }} - + @@ -828,6 +830,23 @@ export default { + + + + + {{ $t('drawer.tax_invoices') }} + + + + + {{ $t('drawer.tax_settings') }} + + + diff --git a/webUI/src/views/acc/accounting/closeyear.vue b/webUI/src/views/acc/accounting/closeyear.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/accounting/list.vue b/webUI/src/views/acc/accounting/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/accounting/mod.vue b/webUI/src/views/acc/accounting/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/accounting/openBalance.vue b/webUI/src/views/acc/accounting/openBalance.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/accounting/table.vue b/webUI/src/views/acc/accounting/table.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/accounting/viewDoc.vue b/webUI/src/views/acc/accounting/viewDoc.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/api/list.vue b/webUI/src/views/acc/api/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/archive/order_new.vue b/webUI/src/views/acc/archive/order_new.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/archive/orders_list.vue b/webUI/src/views/acc/archive/orders_list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/archive/view_files.vue b/webUI/src/views/acc/archive/view_files.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/bank/card.vue b/webUI/src/views/acc/bank/card.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/bank/list.vue b/webUI/src/views/acc/bank/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/bank/mod.vue b/webUI/src/views/acc/bank/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/buy/list.vue b/webUI/src/views/acc/buy/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/buy/mod.vue b/webUI/src/views/acc/buy/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/buy/viewInvoice.vue b/webUI/src/views/acc/buy/viewInvoice.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cashdesk/card.vue b/webUI/src/views/acc/cashdesk/card.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cashdesk/list.vue b/webUI/src/views/acc/cashdesk/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cashdesk/mod.vue b/webUI/src/views/acc/cashdesk/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cheque/input.vue b/webUI/src/views/acc/cheque/input.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cheque/list.vue b/webUI/src/views/acc/cheque/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cheque/mod.vue b/webUI/src/views/acc/cheque/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cheque/output.vue b/webUI/src/views/acc/cheque/output.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/cheque/transfer.vue b/webUI/src/views/acc/cheque/transfer.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/cat/list.vue b/webUI/src/views/acc/commodity/cat/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/drop/list.vue b/webUI/src/views/acc/commodity/drop/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/drop/mod.vue b/webUI/src/views/acc/commodity/drop/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/list.vue b/webUI/src/views/acc/commodity/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/mod.vue b/webUI/src/views/acc/commodity/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/priceList/list.vue b/webUI/src/views/acc/commodity/priceList/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/priceList/mod.vue b/webUI/src/views/acc/commodity/priceList/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/priceList/pricelistedit.vue b/webUI/src/views/acc/commodity/priceList/pricelistedit.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/commodity/priceList/view.vue b/webUI/src/views/acc/commodity/priceList/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/Currency.vue b/webUI/src/views/acc/component/Currency.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/Year.vue b/webUI/src/views/acc/component/Year.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/archive/archiveUpload.vue b/webUI/src/views/acc/component/archive/archiveUpload.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/archive/archive_modal.vue b/webUI/src/views/acc/component/archive/archive_modal.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/commodity/changePriceGroup.vue b/webUI/src/views/acc/component/commodity/changePriceGroup.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/commodity/quickAddCommodity.vue b/webUI/src/views/acc/component/commodity/quickAddCommodity.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/documentLogButton.vue b/webUI/src/views/acc/component/documentLogButton.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/helpBtn.vue b/webUI/src/views/acc/component/helpBtn.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/hitable.vue b/webUI/src/views/acc/component/hitable.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/importModal/commodity-import-excel.vue b/webUI/src/views/acc/component/importModal/commodity-import-excel.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/importModal/person-import-excel.vue b/webUI/src/views/acc/component/importModal/person-import-excel.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/mostdes.vue b/webUI/src/views/acc/component/mostdes.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/notes.vue b/webUI/src/views/acc/component/notes.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/notifications/icon.vue b/webUI/src/views/acc/component/notifications/icon.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/person.vue b/webUI/src/views/acc/component/person.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/person/quickAdd.vue b/webUI/src/views/acc/component/person/quickAdd.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/person/quickView.vue b/webUI/src/views/acc/component/person/quickView.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/rec.vue b/webUI/src/views/acc/component/rec.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/recList.vue b/webUI/src/views/acc/component/recList.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/reports/detailsBtn.vue b/webUI/src/views/acc/component/reports/detailsBtn.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/send.vue b/webUI/src/views/acc/component/send.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/smsPanel.vue b/webUI/src/views/acc/component/smsPanel.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/component/widgets/saleChart.vue b/webUI/src/views/acc/component/widgets/saleChart.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/costs/list.vue b/webUI/src/views/acc/costs/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/costs/mod.vue b/webUI/src/views/acc/costs/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/dashboard.vue b/webUI/src/views/acc/dashboard.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/incomes/list.vue b/webUI/src/views/acc/incomes/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/incomes/mod.vue b/webUI/src/views/acc/incomes/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/notifications/notifications.vue b/webUI/src/views/acc/notifications/notifications.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/card.vue b/webUI/src/views/acc/persons/card.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/insert.vue b/webUI/src/views/acc/persons/insert.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/list.vue b/webUI/src/views/acc/persons/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/receive/list.vue b/webUI/src/views/acc/persons/receive/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/receive/mod.vue b/webUI/src/views/acc/persons/receive/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/send/list.vue b/webUI/src/views/acc/persons/send/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/persons/send/mod.vue b/webUI/src/views/acc/persons/send/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/accpro/intro.vue b/webUI/src/views/acc/plugins/accpro/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/amartemanma/intro.vue b/webUI/src/views/acc/plugins/amartemanma/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/cc/intro.vue b/webUI/src/views/acc/plugins/cc/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/ghesta/intro.vue b/webUI/src/views/acc/plugins/ghesta/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/ghesta/list.vue b/webUI/src/views/acc/plugins/ghesta/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/ghesta/mod.vue b/webUI/src/views/acc/plugins/ghesta/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/ghesta/view.vue b/webUI/src/views/acc/plugins/ghesta/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/hrm/docs/list.vue b/webUI/src/views/acc/plugins/hrm/docs/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/hrm/docs/mod.vue b/webUI/src/views/acc/plugins/hrm/docs/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/hrm/docs/view.vue b/webUI/src/views/acc/plugins/hrm/docs/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/hrm/intro.vue b/webUI/src/views/acc/plugins/hrm/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/employess/list.vue b/webUI/src/views/acc/plugins/noghre/employess/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/employess/mod.vue b/webUI/src/views/acc/plugins/noghre/employess/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/intro.vue b/webUI/src/views/acc/plugins/noghre/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/order/list.vue b/webUI/src/views/acc/plugins/noghre/order/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/order/mod.vue b/webUI/src/views/acc/plugins/noghre/order/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/order/view.vue b/webUI/src/views/acc/plugins/noghre/order/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/noghre/pays.vue b/webUI/src/views/acc/plugins/noghre/pays.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/onlinestore/dashboard.vue b/webUI/src/views/acc/plugins/onlinestore/dashboard.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/onlinestore/intro.vue b/webUI/src/views/acc/plugins/onlinestore/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/repservice/intro.vue b/webUI/src/views/acc/plugins/repservice/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/repservice/list.vue b/webUI/src/views/acc/plugins/repservice/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/repservice/mod.vue b/webUI/src/views/acc/plugins/repservice/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/repservice/view.vue b/webUI/src/views/acc/plugins/repservice/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/resamap/intro.vue b/webUI/src/views/acc/plugins/resamap/intro.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/plugins/tax/invoices/list.vue b/webUI/src/views/acc/plugins/tax/invoices/list.vue new file mode 100644 index 00000000..0cae98b3 --- /dev/null +++ b/webUI/src/views/acc/plugins/tax/invoices/list.vue @@ -0,0 +1,260 @@ + + + + + \ No newline at end of file diff --git a/webUI/src/views/acc/plugins/tax/settings.vue b/webUI/src/views/acc/plugins/tax/settings.vue new file mode 100755 index 00000000..503f89e7 --- /dev/null +++ b/webUI/src/views/acc/plugins/tax/settings.vue @@ -0,0 +1,321 @@ + + + \ No newline at end of file diff --git a/webUI/src/views/acc/presell/list.vue b/webUI/src/views/acc/presell/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/presell/mod.vue b/webUI/src/views/acc/presell/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/presell/view.vue b/webUI/src/views/acc/presell/view.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/presell/viewInvoice.vue b/webUI/src/views/acc/presell/viewInvoice.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/printers/list.vue b/webUI/src/views/acc/printers/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/printers/printList.vue b/webUI/src/views/acc/printers/printList.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/printers/queue.vue b/webUI/src/views/acc/printers/queue.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/printers/templates.vue b/webUI/src/views/acc/printers/templates.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/balanceSheet.vue b/webUI/src/views/acc/reports/balanceSheet.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/commodity/buysellByCommodity.vue b/webUI/src/views/acc/reports/commodity/buysellByCommodity.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/explore_accounts.vue b/webUI/src/views/acc/reports/explore_accounts.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/persons/buysellByPerson.vue b/webUI/src/views/acc/reports/persons/buysellByPerson.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/persons/debtors.vue b/webUI/src/views/acc/reports/persons/debtors.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/persons/depositors.vue b/webUI/src/views/acc/reports/persons/depositors.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/persons/withdet.vue b/webUI/src/views/acc/reports/persons/withdet.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/reports/reports.vue b/webUI/src/views/acc/reports/reports.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfbuy/list.vue b/webUI/src/views/acc/rfbuy/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfbuy/mod.vue b/webUI/src/views/acc/rfbuy/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfbuy/viewInvoice.vue b/webUI/src/views/acc/rfbuy/viewInvoice.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfsell/list.vue b/webUI/src/views/acc/rfsell/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfsell/mod.vue b/webUI/src/views/acc/rfsell/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/rfsell/viewInvoice.vue b/webUI/src/views/acc/rfsell/viewInvoice.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/router/index.js b/webUI/src/views/acc/router/index.js old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/salary/card.vue b/webUI/src/views/acc/salary/card.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/salary/list.vue b/webUI/src/views/acc/salary/list.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/salary/mod.vue b/webUI/src/views/acc/salary/mod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/sell/fastMod.vue b/webUI/src/views/acc/sell/fastMod.vue old mode 100644 new mode 100755 diff --git a/webUI/src/views/acc/sell/list.vue b/webUI/src/views/acc/sell/list.vue old mode 100644 new mode 100755 index d615d22a..0f8ce488 --- a/webUI/src/views/acc/sell/list.vue +++ b/webUI/src/views/acc/sell/list.vue @@ -131,6 +131,11 @@ + + +