feat: implement tax switch functionality with Nama adapter
- Add DTOs for tax switch operations including payloads and results. - Create SalesInvoiceFiscalSwitchService to handle sending and retrieving tax data. - Implement SalesInvoiceFiscalService for managing invoice tax submissions and results persistence. - Develop NamaTaxSwitchAdapter for interfacing with the external tax service. - Introduce NamaTaxRequestDto and related classes for structured tax requests.
This commit is contained in:
@@ -1,14 +1,144 @@
|
||||
export default {
|
||||
COUNT: 'تعداد',
|
||||
GRAM: 'گرم',
|
||||
KILO_GRAM: 'کیلوگرم',
|
||||
LITER: 'لیتر',
|
||||
MILLILITER: 'میلیلیتر',
|
||||
STANDARD: 'استاندارد',
|
||||
GOLD: 'طلا',
|
||||
ACTIVE: 'فعال',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
OWNER: 'مدیر اصلی',
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
PaymentMethodType: {
|
||||
TERMINAL: 'ترمینال',
|
||||
CASH: 'نقدی',
|
||||
SET_OFF: 'تهاتر',
|
||||
CARD: 'کارت',
|
||||
BANK: 'بانکی',
|
||||
CHECK: 'چک',
|
||||
OTHER: 'سایر',
|
||||
},
|
||||
UnitType: {
|
||||
COUNT: 'تعداد',
|
||||
GRAM: 'گرم',
|
||||
KILOGRAM: 'کیلوگرم',
|
||||
KILO_GRAM: 'کیلوگرم',
|
||||
LITER: 'لیتر',
|
||||
MILLILITER: 'میلیلیتر',
|
||||
METER: 'متر',
|
||||
HOUR: 'ساعت',
|
||||
},
|
||||
GoodPricingModel: {
|
||||
STANDARD: 'استاندارد',
|
||||
GOLD: 'طلا',
|
||||
},
|
||||
CustomerType: {
|
||||
INDIVIDUAL: 'حقیقی',
|
||||
LEGAL: 'حقوقی',
|
||||
UNKNOWN: 'نامشخص',
|
||||
},
|
||||
POSStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
DISABLED: 'غیرفعال',
|
||||
},
|
||||
POSRole: {
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
},
|
||||
LicenseType: {
|
||||
BASIC: 'پایه',
|
||||
PRO: 'حرفهای',
|
||||
ENTERPRISE: 'سازمانی',
|
||||
},
|
||||
LicenseStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
EXPIRED: 'منقضی',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
},
|
||||
POSType: {
|
||||
PSP: 'PSP',
|
||||
MOBILE: 'موبایل',
|
||||
WEB: 'وب',
|
||||
API: 'API',
|
||||
},
|
||||
UserType: {
|
||||
LEGAL: 'حقوقی',
|
||||
INDIVIDUAL: 'حقیقی',
|
||||
},
|
||||
AccountType: {
|
||||
ADMIN: 'مدیر سیستم',
|
||||
PROVIDER: 'ارائهدهنده خدمات',
|
||||
PARTNER: 'شریک تجاری',
|
||||
CONSUMER: 'مصرفکننده',
|
||||
},
|
||||
UserStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
INACTIVE: 'غیرفعال',
|
||||
},
|
||||
AccountRole: {
|
||||
OWNER: 'مدیر اصلی',
|
||||
OPERATOR: 'اپراتور',
|
||||
ACCOUNTANT: 'حسابدار',
|
||||
},
|
||||
AccountStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
},
|
||||
PartnerRole: {
|
||||
OWNER: 'مدیر اصلی',
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
},
|
||||
PartnerStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
},
|
||||
ProviderRole: {
|
||||
OWNER: 'مدیر اصلی',
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
},
|
||||
ProviderStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
},
|
||||
BusinessRole: {
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
},
|
||||
ConsumerRole: {
|
||||
OWNER: 'مدیر اصلی',
|
||||
MANAGER: 'مدیریت',
|
||||
OPERATOR: 'اپراتور',
|
||||
},
|
||||
ConsumerStatus: {
|
||||
ACTIVE: 'فعال',
|
||||
SUSPENDED: 'غیرفعال',
|
||||
},
|
||||
ConsumerType: {
|
||||
INDIVIDUAL: 'حقیقی',
|
||||
LEGAL: 'حقوقی',
|
||||
},
|
||||
TokenType: {
|
||||
ACCESS: 'دسترسی',
|
||||
REFRESH: 'نوسازی',
|
||||
},
|
||||
ApplicationPlatform: {
|
||||
ANDROID: 'اندروید',
|
||||
IOS: 'iOS',
|
||||
},
|
||||
ApplicationReleaseType: {
|
||||
STABLE: 'پایدار',
|
||||
BETA: 'بتا',
|
||||
ALPHA: 'آلفا',
|
||||
},
|
||||
ApplicationPublisher: {
|
||||
DIRECT: 'مستقیم',
|
||||
CAFE_BAZAR: 'کافه بازار',
|
||||
MAYKET: 'مایکت',
|
||||
},
|
||||
PartnerFiscalSwitchType: {
|
||||
NAMA: 'نما',
|
||||
SUN: 'سان',
|
||||
},
|
||||
FiscalResponseStatus: {
|
||||
SUCCESS: 'موفق',
|
||||
FAILURE: 'ناموفق',
|
||||
NOT_SEND: 'ارسال نشده',
|
||||
},
|
||||
GoldKarat: {
|
||||
KARAT_18: '۱۸ عیار',
|
||||
KARAT_21: '۲۱ عیار',
|
||||
KARAT_24: '۲۴ عیار',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import translates from '@/common/constants/translates/translates'
|
||||
|
||||
type EnumTranslateMap = Record<string, string>
|
||||
type EnumsRegistry = Record<string, EnumTranslateMap>
|
||||
|
||||
export interface EnumTranslatedValue {
|
||||
value: string | null | undefined
|
||||
translate: string | null
|
||||
}
|
||||
|
||||
export function translateEnumValue(
|
||||
enumKey: keyof typeof translates.enums,
|
||||
value: string | null | undefined,
|
||||
): EnumTranslatedValue {
|
||||
const enumsRegistry = translates.enums as EnumsRegistry
|
||||
const enumMap = enumsRegistry[String(enumKey)]
|
||||
|
||||
if (!value) {
|
||||
return {
|
||||
value,
|
||||
translate: null,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
value,
|
||||
translate: enumMap?.[value] ?? null,
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
export * from './jwt-user.util'
|
||||
export * from './enum-translator.util'
|
||||
export * from './mappers/consumer_mappers.util'
|
||||
export * from './password.util'
|
||||
export * from './tracking-code-generator.util'
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { translateEnumValue } from '../enum-translator.util'
|
||||
|
||||
export default (consumer: any) => {
|
||||
const { legal, individual, activation, _count, ...rest } = consumer
|
||||
const { legal, individual, activation, type, status, _count, ...rest } = consumer
|
||||
|
||||
const { business_activities: business_counts } = _count || { business_activities: 0 }
|
||||
const partner = legal?.partner || individual?.partner
|
||||
@@ -9,6 +11,8 @@ export default (consumer: any) => {
|
||||
return {
|
||||
...rest,
|
||||
partner,
|
||||
type: translateEnumValue('ConsumerType', consumer.type),
|
||||
status: translateEnumValue('ConsumerStatus', consumer.status),
|
||||
legal: legal ? { ...legal } : null,
|
||||
individual: individual
|
||||
? { ...individual, fullname: `${rest?.first_name} ${rest?.last_name}` }
|
||||
|
||||
Reference in New Issue
Block a user