feat: implement fiscal ID validation; replace fiscal code validator and update related components

This commit is contained in:
2026-05-19 20:34:20 +03:30
parent c135e1a85f
commit 2e1ad77946
26 changed files with 108 additions and 76 deletions
@@ -9,28 +9,28 @@ export const CONSUMER_MENU_ITEMS = [
},
{
label: 'فعالیت اقتصادی',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-shop',
routerLink: ['/consumer/business_activities'],
},
{
label: 'پایانه‌های فروش',
icon: 'pi pi-fw pi-home',
label: 'پایانه‌ی فروش',
icon: 'pi pi-fw pi-tablet',
routerLink: ['/consumer/poses'],
},
{
label: 'فاکتورها',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-receipt',
routerLink: ['/consumer/sale_invoices'],
},
{
label: 'مشتری‌ها',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-users',
routerLink: ['/consumer/customers'],
},
{
label: 'حساب‌های کاربری',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-user',
routerLink: ['/consumer/accounts'],
},
],
@@ -9,7 +9,7 @@
<form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4">
<field-name [control]="form.controls.name" />
<field-economic-code [control]="form.controls.economic_code" />
<field-fiscal-code [control]="form.controls.fiscal_id" />
<field-fiscal-id [control]="form.controls.fiscal_id" />
<field-partner-token [control]="form.controls.partner_token" />
<field-invoice-number-sequence [control]="form.controls.invoice_number_sequence" [min]="1" />
<app-form-footer-actions [submitLabel]="'ذخیره'" [loading]="submitLoading()" (onCancel)="close()" />
@@ -9,17 +9,17 @@ export const PARTNER_MENU_ITEMS = [
},
{
label: 'حساب‌های کاربری',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-user',
routerLink: ['/partner/accounts'],
},
{
label: 'مشتری‌ها',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-users',
routerLink: ['/partner/consumers'],
},
{
label: 'لایسنس‌ها',
icon: 'pi pi-fw pi-home',
icon: 'pi pi-fw pi-key',
routerLink: ['/partner/licenses'],
},
],
@@ -1,7 +1,8 @@
<form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4">
<field-name [control]="form.controls.name" />
<field-economic-code [control]="form.controls.economic_code" />
<field-fiscal-code [control]="form.controls.fiscal_id" />
<field-fiscal-id [control]="form.controls.fiscal_id" />
<field-invoice-number-sequence [control]="form.controls.invoice_number_sequence" />
<field-partner-token [control]="form.controls.partner_token" />
<field-guild-id [control]="form.controls.guild_id" />
@@ -7,6 +7,7 @@ import {
NameComponent,
PartnerTokenComponent,
} from '@/shared/components';
import { InvoiceNumberSequenceComponent } from '@/shared/components/fields/invoice_number_sequence.component';
import { FormFooterActionsComponent } from '@/shared/components/formFooterActions/form-footer-actions.component';
import { fieldControl } from '@/shared/constants/fields';
import { Component, inject, Input } from '@angular/core';
@@ -28,6 +29,7 @@ import { PartnerConsumerBusinessActivitiesService } from '../../services/busines
LicenseStartsAtComponent,
FormFooterActionsComponent,
Divider,
InvoiceNumberSequenceComponent,
],
})
export class ConsumerBusinessActivitiesFormComponent extends AbstractForm<
@@ -44,6 +46,9 @@ export class ConsumerBusinessActivitiesFormComponent extends AbstractForm<
name: fieldControl.name(this.initialValues?.name || ''),
economic_code: fieldControl.economic_code(this.initialValues?.economic_code || ''),
fiscal_id: fieldControl.fiscal_id(this.initialValues?.fiscal_id || ''),
invoice_number_sequence: fieldControl.invoice_number_sequence(
parseInt(this.initialValues?.invoice_number_sequence || '1'),
),
partner_token: fieldControl.partner_token(this.initialValues?.partner_token || ''),
guild_id: fieldControl.guild_id(this.initialValues?.guild?.id || ''),
license_starts_at: [''],
@@ -7,6 +7,7 @@ export interface IBusinessActivityRawResponse {
fiscal_id: string;
partner_token: string;
guild: ISummary;
invoice_number_sequence: string;
created_at: string;
license_info: LicenseInfo;
}
@@ -1,6 +1,6 @@
<div class="form-group">
<form [formGroup]="form">
<app-input [control]="form.controls.unit_price" name="unit_price" label="قیمت پایه هر گرم" type="price" />
<app-input [control]="form.controls.unit_price" name="unit_price" label="مبلغ واحد" type="price" />
<app-input [control]="form.controls.quantity" name="quantity" label="مقدار" type="number" suffix="گرم" />
<app-enum-select [control]="form.controls.payload.controls.karat" type="goldKarat" name="karat" />
@@ -31,16 +31,16 @@ export class PosGoldPayloadFormComponent extends AbstractForm<
IPosOrderItem<IGoldPayload>,
IPosOrderItem<IGoldPayload>
> {
// override defaultValues: Partial<IPosOrderItem<IGoldPayload>> = {
// unit_price: 200_000_000,
// quantity: 2,
// payload: {
// // commission: 10_000,
// // wages: 10_000,
// // profit: 10_000,
// karat: 'KARAT_18' as TGoldKarat,
// } as any,
// };
override defaultValues: Partial<IPosOrderItem<IGoldPayload>> = {
// unit_price: 200_000_000,
// quantity: 2,
payload: {
// commission: 10_000,
// wages: 10_000,
// profit: 10_000,
karat: 'KARAT_18' as TGoldKarat,
} as any,
};
@Input({ required: true }) vatPercentage!: number;
@@ -14,7 +14,7 @@
</form>
<div class="form-group">
<uikit-field label="تعداد مراحل پرداخت با پایانه" name="pay_by_terminal_steps">
<uikit-field label="تعداد مراحل پرداخت با پوز" name="pay_by_terminal_steps">
<p-select
[options]="payByTerminalSteps()"
[ngModel]="selectedPayByTerminalStep()"
@@ -30,7 +30,7 @@
<app-input
[control]="terminalControl"
[name]="'terminal_' + $index"
[label]="$index === 0 ? 'پرداخت با پایانه' : 'پرداخت با پایانه - مرحله ' + ($index + 1)"
[label]="$index === 0 ? 'پرداخت با پوز' : 'پرداخت با پوز - مرحله ' + ($index + 1)"
type="price"
[max]="terminalsMax()[$index]"
[disabled]="payByTerminalSteps()[$index].payed"
@@ -43,24 +43,30 @@
[disabled]="!remainedAmount() || payByTerminalSteps()[$index].payed"
(click)="fillTerminalRemained($index)"
>
تمامی بدهی باقی‌مانده
باقی‌مانده مبلغ
</button>
</ng-template>
</app-input>
}
</div>
<form [formGroup]="form" (submit)="submit()">
<app-input [control]="form.controls.cash" name="cash" label="نقدی" type="price" [max]="cashMax()">
<app-input
[control]="form.controls.cash"
name="cash"
label="نقدی/ کارت‌خوان دیگر/ کارت به کارت"
type="price"
[max]="cashMax()"
>
<ng-template #suffixTemp>
<button pButton size="small" type="button" [disabled]="!remainedAmount()" (click)="fillRemained('CASH')">
تمامی بدهی باقی‌مانده
باقی‌مانده مبلغ
</button>
</ng-template>
</app-input>
<app-input [control]="form.controls.set_off" name="setOff" label="تهاتر" type="price" [max]="setOffMax()">
<ng-template #suffixTemp>
<button pButton size="small" type="button" [disabled]="!remainedAmount()" (click)="fillRemained('SET_OFF')">
تمامی بدهی باقی‌مانده
باقی‌مانده مبلغ
</button>
</ng-template>
</app-input>
@@ -13,5 +13,6 @@ export class LayoutComponent {
ngOnInit() {
this.layoutService.setMenuItems(SUPER_ADMIN_MENU_ITEMS);
this.layoutService.setPanelInfo({ title: 'پنل مدیریتی ' });
}
}
@@ -9,7 +9,7 @@
<form [formGroup]="form" (submit)="submit()" class="flex flex-col gap-4">
<field-name [control]="form.controls.name" />
<field-economic-code [control]="form.controls.economic_code" />
<field-fiscal-code [control]="form.controls.fiscal_id" />
<field-fiscal-id [control]="form.controls.fiscal_id" />
<field-partner-token [control]="form.controls.partner_token" />
<field-guild-id [control]="form.controls.guild_id" />
<app-form-footer-actions [submitLabel]="'ذخیره'" [loading]="submitLoading()" (onCancel)="close()" />
@@ -6,8 +6,8 @@
</ng-template>
<div class="flex flex-col gap-4">
<div class="listKeyValue">
<app-key-value label="عنوان شریک تجاری" [value]="partner()?.name" />
<app-key-value label="کد شریک تجاری" [value]="partner()?.code" />
<app-key-value label="عنوان" [value]="partner()?.name" />
<app-key-value label="کد" [value]="partner()?.code" />
<div class="col-span-3 grid grid-cols-3 gap-4 mt-6">
<partner-license-info-template