diff --git a/hesabixCore/src/Controller/Plugins/TaxSettingsController.php b/hesabixCore/src/Controller/Plugins/TaxSettingsController.php index 5bf4ab46..85480d51 100644 --- a/hesabixCore/src/Controller/Plugins/TaxSettingsController.php +++ b/hesabixCore/src/Controller/Plugins/TaxSettingsController.php @@ -124,28 +124,47 @@ class TaxSettingsController extends AbstractController $params = $request->getPayload()->all(); - if (empty($params['nationalId']) || empty($params['nameFa']) || empty($params['nameEn']) || empty($params['email'])) { + $personType = $params['personType'] ?? 'natural'; + + if (empty($params['nationalId'])) { return $this->json([ 'success' => false, - 'message' => 'تمام فیلدها الزامی هستند' + 'message' => 'شناسه ملی الزامی است' ]); } + + if ($personType === 'legal') { + if (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([ + + $response = [ 'success' => true, - 'message' => 'کلید و CSR با موفقیت تولید شد', 'privateKey' => $privateKey, - 'publicKey' => $publicKey, - 'csr' => $csr - ]); + 'publicKey' => $publicKey + ]; + + if ($personType === 'legal') { + $csr = $this->generateCSR($privateKey, $params); + $response['csr'] = $csr; + $response['message'] = 'کلید و CSR با موفقیت تولید شد'; + $log->insert('تنظیمات مالیاتی', 'کلید و CSR تولید شد (بدون ذخیره)', $this->getUser(), $businessId); + } else { + $response['message'] = 'کلید با موفقیت تولید شد'; + $log->insert('تنظیمات مالیاتی', 'کلید خصوصی و عمومی تولید شد (بدون ذخیره)', $this->getUser(), $businessId); + } + + return $this->json($response); } catch (\Exception $e) { return $this->json([ 'success' => false, @@ -291,7 +310,6 @@ class TaxSettingsController extends AbstractController $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; @@ -1058,15 +1076,6 @@ class TaxSettingsController extends AbstractController $data = $extractedData['data']; $taxId = $moadianTaxId; $internalId = $invoice->getId() ?? 1; - - $date = $data['date'] ?? 'now'; - // if (is_string($date)) { - // $dateTime = new DateTime($date); - // } elseif ($date instanceof DateTime) { - // $dateTime = $date; - // } else { - // $dateTime = new DateTime(); - // } if (!method_exists($moadian, 'generateTaxId') || !method_exists($moadian, 'normalizeInvoiceNumber')) { throw new \Exception('متدهای مورد نیاز در کلاس Moadian وجود ندارد'); diff --git a/webUI/src/router/index.ts b/webUI/src/router/index.ts index bedfb9e5..fd4d23d4 100755 --- a/webUI/src/router/index.ts +++ b/webUI/src/router/index.ts @@ -522,6 +522,12 @@ const router = createRouter({ component: () => import('../views/acc/plugins/tax/settings.vue'), }, + { + path: 'plugins/taxsettings/intro', + name: 'taxsettings_intro', + component: () => + import('../views/acc/plugins/taxsettings/intro.vue'), + }, { path: 'business/logs', name: 'business_logs', diff --git a/webUI/src/views/acc/plugins/tax/settings.vue b/webUI/src/views/acc/plugins/tax/settings.vue index 44c9fbe9..10324a81 100755 --- a/webUI/src/views/acc/plugins/tax/settings.vue +++ b/webUI/src/views/acc/plugins/tax/settings.vue @@ -192,8 +192,7 @@
شخص
- + @@ -201,14 +200,16 @@ :rules="nationalIdRules" @blur="validateNationalId" @input="validateNationalId" class="mb-4"> - + @@ -234,7 +235,7 @@ ندارد. - +
CSR
@@ -248,7 +249,7 @@
- +
Public Key
@@ -262,7 +263,7 @@
- +
Private Key
@@ -318,7 +319,7 @@ export default { privateKey: [], }, csrData: { - personType: 'legal', + personType: 'natural', nationalId: '', nameFa: '', nameEn: '', @@ -348,7 +349,6 @@ export default { }, nationalIdRules: [ (v) => !!v || 'شناسه ملی الزامی است', - (v) => /^[0-9]{11}$/.test(v) || 'شناسه ملی باید دقیقاً 11 رقم باشد', (v) => /^[0-9]+$/.test(v) || 'شناسه ملی فقط باید شامل اعداد باشد', ], nameFaRules: [ @@ -475,8 +475,10 @@ export default { this.csrErrors.nationalId.push('شناسه ملی الزامی است'); } else if (!/^[0-9]+$/.test(this.csrData.nationalId)) { this.csrErrors.nationalId.push('شناسه ملی فقط باید شامل اعداد باشد'); - } else if (!/^[0-9]{11}$/.test(this.csrData.nationalId)) { - this.csrErrors.nationalId.push('شناسه ملی باید دقیقاً 11 رقم باشد'); + } else if (this.csrData.personType === 'natural' && !/^[0-9]{10}$/.test(this.csrData.nationalId)) { + this.csrErrors.nationalId.push('شناسه ملی افراد حقیقی باید دقیقاً 10 رقم باشد'); + } else if (this.csrData.personType === 'legal' && !/^[0-9]{11}$/.test(this.csrData.nationalId)) { + this.csrErrors.nationalId.push('شناسه ملی اشخاص حقوقی باید دقیقاً 11 رقم باشد'); } }, validateNameFa() { @@ -530,9 +532,12 @@ export default { validateAllFields() { this.validatePersonType(); this.validateNationalId(); - this.validateNameFa(); - this.validateNameEn(); - this.validateEmail(); + + if (this.csrData.personType === 'legal') { + this.validateNameFa(); + this.validateNameEn(); + this.validateEmail(); + } return Object.values(this.csrErrors).every(errors => errors.length === 0); }, diff --git a/webUI/src/views/acc/plugins/taxsettings/intro.vue b/webUI/src/views/acc/plugins/taxsettings/intro.vue new file mode 100644 index 00000000..dc29fec6 --- /dev/null +++ b/webUI/src/views/acc/plugins/taxsettings/intro.vue @@ -0,0 +1,725 @@ + + + + + \ No newline at end of file