update migrations and create base migration. set discount and tax to sale invoices
This commit is contained in:
Vendored
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
"editor.formatOnSave": true
|
"editor.formatOnSave": true
|
||||||
},
|
},
|
||||||
"[typescript]": {
|
"[typescript]": {
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
"editor.defaultFormatter": "vscode.typescript-language-features"
|
||||||
},
|
},
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
|
|||||||
@@ -140,8 +140,8 @@ export default {
|
|||||||
[TspProviderResponseStatus.SUCCESS]: 'موفق',
|
[TspProviderResponseStatus.SUCCESS]: 'موفق',
|
||||||
[TspProviderResponseStatus.FAILURE]: 'ناموفق',
|
[TspProviderResponseStatus.FAILURE]: 'ناموفق',
|
||||||
[TspProviderResponseStatus.NOT_SEND]: 'ارسال نشده',
|
[TspProviderResponseStatus.NOT_SEND]: 'ارسال نشده',
|
||||||
[TspProviderResponseStatus.QUEUED]: 'در صف ارسال به معتمد',
|
[TspProviderResponseStatus.QUEUED]: 'در صف ارسال',
|
||||||
[TspProviderResponseStatus.FISCAL_QUEUED]: 'در صف ارسال به مالیات',
|
[TspProviderResponseStatus.FISCAL_QUEUED]: 'در انتظار تایید سازمان',
|
||||||
[TspProviderResponseStatus.SEND_FAILURE]: 'خطا در ارسال',
|
[TspProviderResponseStatus.SEND_FAILURE]: 'خطا در ارسال',
|
||||||
},
|
},
|
||||||
TspProviderRequestType: {
|
TspProviderRequestType: {
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ import {
|
|||||||
IsObject,
|
IsObject,
|
||||||
IsOptional,
|
IsOptional,
|
||||||
IsString,
|
IsString,
|
||||||
ValidateNested,
|
Min,
|
||||||
|
ValidateNested
|
||||||
} from 'class-validator'
|
} from 'class-validator'
|
||||||
import {
|
import {
|
||||||
CustomerInfoDto,
|
CustomerInfoDto,
|
||||||
@@ -45,12 +46,18 @@ export class TspProviderOriginalItemPayloadDto {
|
|||||||
|
|
||||||
@ApiProperty()
|
@ApiProperty()
|
||||||
@IsNumber()
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
total_amount: number
|
total_amount: number
|
||||||
|
|
||||||
@ApiProperty()
|
@ApiProperty()
|
||||||
@IsOptional()
|
@IsNumber()
|
||||||
@IsString()
|
@Min(0)
|
||||||
discount: string
|
discount_amount: number
|
||||||
|
|
||||||
|
@ApiProperty()
|
||||||
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
|
tax_amount: number
|
||||||
|
|
||||||
@ApiProperty({ required: true })
|
@ApiProperty({ required: true })
|
||||||
@IsString()
|
@IsString()
|
||||||
@@ -116,8 +123,19 @@ export class TspProviderOriginalSendPayloadDto {
|
|||||||
|
|
||||||
@ApiProperty()
|
@ApiProperty()
|
||||||
@IsNumber()
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
total_amount: number
|
total_amount: number
|
||||||
|
|
||||||
|
@ApiProperty()
|
||||||
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
|
discount_amount: number
|
||||||
|
|
||||||
|
@ApiProperty()
|
||||||
|
@IsNumber()
|
||||||
|
@Min(0)
|
||||||
|
tax_amount: number
|
||||||
|
|
||||||
@ApiProperty({ type: [TspProviderOriginalItemPayloadDto] })
|
@ApiProperty({ type: [TspProviderOriginalItemPayloadDto] })
|
||||||
@IsArray()
|
@IsArray()
|
||||||
@ValidateNested({ each: true })
|
@ValidateNested({ each: true })
|
||||||
|
|||||||
@@ -159,20 +159,30 @@ export class NamaProviderCommonBodyDto {
|
|||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: ' اجرت ساخت (طلا)',
|
description: ' اجرت ساخت (طلا)',
|
||||||
})
|
})
|
||||||
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
consfee: string
|
consfee?: string
|
||||||
|
|
||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: 'حق العمل',
|
description: 'حق العمل',
|
||||||
})
|
})
|
||||||
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
bros: string
|
bros?: string
|
||||||
|
|
||||||
@ApiProperty({
|
@ApiProperty({
|
||||||
description: 'سود فروشنده',
|
description: 'سود فروشنده',
|
||||||
})
|
})
|
||||||
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
spro: string
|
spro?: string
|
||||||
|
|
||||||
|
@ApiProperty({
|
||||||
|
description: 'مجموع سود، حقالعمل و اجرت',
|
||||||
|
})
|
||||||
|
@IsOptional()
|
||||||
|
@IsString()
|
||||||
|
tcpbs?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export class NamaProviderApiErrorItemDto {
|
export class NamaProviderApiErrorItemDto {
|
||||||
|
|||||||
@@ -110,6 +110,10 @@ export class NamaProviderSwitchAdapter implements IProviderSwitchAdapter {
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log('err@@@@@@@@@@@@@@@@@@', err);
|
||||||
|
console.log(JSON.parse(JSON.stringify(mappedRequest)));
|
||||||
|
|
||||||
|
|
||||||
const failure: TspProviderOriginalResponseDto = {
|
const failure: TspProviderOriginalResponseDto = {
|
||||||
invoice_id: payload.id,
|
invoice_id: payload.id,
|
||||||
provider_request_payload: JSON.parse(JSON.stringify(mappedRequest)),
|
provider_request_payload: JSON.parse(JSON.stringify(mappedRequest)),
|
||||||
|
|||||||
@@ -12,10 +12,11 @@ import {
|
|||||||
PaymentInfoDto,
|
PaymentInfoDto,
|
||||||
TspProviderCorrectionSendPayloadDto,
|
TspProviderCorrectionSendPayloadDto,
|
||||||
TspProviderOriginalSendPayloadDto,
|
TspProviderOriginalSendPayloadDto,
|
||||||
TspProviderRevokePayloadDto,
|
TspProviderRevokePayloadDto
|
||||||
} from '../../dto'
|
} from '../../dto'
|
||||||
import {
|
import {
|
||||||
NamaProviderCorrectionRequestDto,
|
NamaProviderCorrectionRequestDto,
|
||||||
|
NamaProviderOriginalBodyItemDto,
|
||||||
NamaProviderOriginalRequestDto,
|
NamaProviderOriginalRequestDto,
|
||||||
NamaProviderPaymentInfoDto,
|
NamaProviderPaymentInfoDto,
|
||||||
NamaProviderResponseStatus,
|
NamaProviderResponseStatus,
|
||||||
@@ -62,18 +63,35 @@ export class NamaProviderUtils {
|
|||||||
),
|
),
|
||||||
...this.mapCustomerInfo(payload.customer),
|
...this.mapCustomerInfo(payload.customer),
|
||||||
},
|
},
|
||||||
body: payload.items.map(item => ({
|
body: payload.items.map(item => {
|
||||||
sstid: item.sku,
|
let data: NamaProviderOriginalBodyItemDto = {
|
||||||
vra: item.sku_vat,
|
sstid: item.sku,
|
||||||
// sstt: item.unit_type,
|
vra: item.sku_vat,
|
||||||
fee: String(item.unit_price),
|
fee: String(item.unit_price),
|
||||||
dis: String(item.discount),
|
dis: String(item.discount_amount),
|
||||||
mu: item.measure_unit,
|
mu: item.measure_unit,
|
||||||
am: String(item.quantity),
|
am: String(item.quantity),
|
||||||
consfee: '0',
|
consfee: '0',
|
||||||
bros: '0',
|
bros: '0',
|
||||||
spro: '0',
|
spro: '0',
|
||||||
})),
|
}
|
||||||
|
|
||||||
|
console.log('item.gold_type_payload', item.gold_type_payload);
|
||||||
|
|
||||||
|
|
||||||
|
if (item.gold_type_payload) {
|
||||||
|
const { profit='0', commission = '0', wages = "0" } = item.gold_type_payload
|
||||||
|
data = {
|
||||||
|
...data,
|
||||||
|
consfee: wages,
|
||||||
|
bros: commission,
|
||||||
|
spro: profit,
|
||||||
|
tcpbs: (Number(profit) + Number(commission) + Number(wages)).toString(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return data
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +118,7 @@ export class NamaProviderUtils {
|
|||||||
vra: item.sku_vat,
|
vra: item.sku_vat,
|
||||||
// sstt: item.unit_type,
|
// sstt: item.unit_type,
|
||||||
fee: String(item.unit_price),
|
fee: String(item.unit_price),
|
||||||
dis: String(item.discount),
|
dis: String(item.discount_amount),
|
||||||
mu: item.measure_unit,
|
mu: item.measure_unit,
|
||||||
am: String(item.quantity),
|
am: String(item.quantity),
|
||||||
consfee: '0',
|
consfee: '0',
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
TspProviderResponseStatus,
|
TspProviderResponseStatus,
|
||||||
} from 'generated/prisma/client'
|
} from 'generated/prisma/client'
|
||||||
import {
|
import {
|
||||||
|
goldTypePayload,
|
||||||
TspProviderCorrectionSendPayloadDto,
|
TspProviderCorrectionSendPayloadDto,
|
||||||
TspProviderGetResponseDto,
|
TspProviderGetResponseDto,
|
||||||
TspProviderOriginalResponseDto,
|
TspProviderOriginalResponseDto,
|
||||||
@@ -169,6 +170,8 @@ export async function buildCorrectionPayload(
|
|||||||
invoice_number: true,
|
invoice_number: true,
|
||||||
settlement_type: true,
|
settlement_type: true,
|
||||||
tax_id: true,
|
tax_id: true,
|
||||||
|
discount_amount: true,
|
||||||
|
tax_amount: true,
|
||||||
items: true,
|
items: true,
|
||||||
pos: {
|
pos: {
|
||||||
select: {
|
select: {
|
||||||
@@ -251,7 +254,8 @@ export async function buildCorrectionPayload(
|
|||||||
measure_unit: item.measure_unit_code,
|
measure_unit: item.measure_unit_code,
|
||||||
sku: item.sku_code,
|
sku: item.sku_code,
|
||||||
sku_vat: String(item.sku_vat),
|
sku_vat: String(item.sku_vat),
|
||||||
discount: String((item.payload as Record<string, any>)?.discount || '0'),
|
discount_amount: Number(item.discount_amount),
|
||||||
|
tax_amount: Number(item.tax_amount),
|
||||||
good_id: item.good_id,
|
good_id: item.good_id,
|
||||||
service_id: item.service_id,
|
service_id: item.service_id,
|
||||||
payload: item.payload,
|
payload: item.payload,
|
||||||
@@ -267,6 +271,8 @@ export async function buildCorrectionPayload(
|
|||||||
},
|
},
|
||||||
})),
|
})),
|
||||||
total_amount: Number(invoice.total_amount),
|
total_amount: Number(invoice.total_amount),
|
||||||
|
discount_amount: Number(invoice.discount_amount),
|
||||||
|
tax_amount: Number(invoice.tax_amount),
|
||||||
last_tax_id: invoice.reference_invoice!.tax_id!,
|
last_tax_id: invoice.reference_invoice!.tax_id!,
|
||||||
invoice_number: invoice.invoice_number,
|
invoice_number: invoice.invoice_number,
|
||||||
id: invoice.id,
|
id: invoice.id,
|
||||||
@@ -281,17 +287,17 @@ export async function buildCorrectionPayload(
|
|||||||
customer:
|
customer:
|
||||||
invoice.customer && invoice.customer.type !== 'UNKNOWN'
|
invoice.customer && invoice.customer.type !== 'UNKNOWN'
|
||||||
? {
|
? {
|
||||||
type: invoice.customer.type,
|
type: invoice.customer.type,
|
||||||
legal_info: invoice.customer.legal ?? undefined,
|
legal_info: invoice.customer.legal ?? undefined,
|
||||||
individual_info: invoice.customer.individual ?? undefined,
|
individual_info: invoice.customer.individual ?? undefined,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
type: 'UNKNOWN',
|
type: 'UNKNOWN',
|
||||||
unknown_info: {
|
unknown_info: {
|
||||||
name: unknown_customer?.name || '',
|
name: unknown_customer?.name || '',
|
||||||
economic_code: unknown_customer?.economic_code || '',
|
economic_code: unknown_customer?.economic_code || '',
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,6 +318,8 @@ export async function buildOriginalPayload(
|
|||||||
invoice_date: true,
|
invoice_date: true,
|
||||||
invoice_number: true,
|
invoice_number: true,
|
||||||
settlement_type: true,
|
settlement_type: true,
|
||||||
|
discount_amount: true,
|
||||||
|
tax_amount: true,
|
||||||
items: {
|
items: {
|
||||||
select: {
|
select: {
|
||||||
id: true,
|
id: true,
|
||||||
@@ -412,7 +420,7 @@ export async function buildOriginalPayload(
|
|||||||
throw new NotFoundException('فاکتور مورد نظر یافت نشد.')
|
throw new NotFoundException('فاکتور مورد نظر یافت نشد.')
|
||||||
}
|
}
|
||||||
|
|
||||||
const { pos, id, invoice_number, invoice_date, total_amount, settlement_type } = invoice
|
const { pos, id, invoice_number, invoice_date, total_amount, discount_amount, tax_amount, settlement_type } = invoice
|
||||||
const { business_activity: ba } = pos.complex
|
const { business_activity: ba } = pos.complex
|
||||||
|
|
||||||
const unknown_customer = (invoice.unknown_customer || {}) as Record<string, string>
|
const unknown_customer = (invoice.unknown_customer || {}) as Record<string, string>
|
||||||
@@ -425,6 +433,8 @@ export async function buildOriginalPayload(
|
|||||||
invoice_date,
|
invoice_date,
|
||||||
settlement_type,
|
settlement_type,
|
||||||
total_amount: Number(total_amount),
|
total_amount: Number(total_amount),
|
||||||
|
tax_amount: Number(tax_amount),
|
||||||
|
discount_amount: Number(discount_amount),
|
||||||
economic_code: ba.economic_code,
|
economic_code: ba.economic_code,
|
||||||
fiscal_id: ba.fiscal_id,
|
fiscal_id: ba.fiscal_id,
|
||||||
template: ba.guild.invoice_template,
|
template: ba.guild.invoice_template,
|
||||||
@@ -443,30 +453,34 @@ export async function buildOriginalPayload(
|
|||||||
customer:
|
customer:
|
||||||
invoice.customer && invoice.customer.type !== 'UNKNOWN'
|
invoice.customer && invoice.customer.type !== 'UNKNOWN'
|
||||||
? {
|
? {
|
||||||
type: invoice.customer.type,
|
type: invoice.customer.type,
|
||||||
legal_info: invoice.customer.legal ?? undefined,
|
legal_info: invoice.customer.legal ?? undefined,
|
||||||
individual_info: invoice.customer.individual ?? undefined,
|
individual_info: invoice.customer.individual ?? undefined,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
type: 'UNKNOWN',
|
type: 'UNKNOWN',
|
||||||
unknown_info: {
|
unknown_info: {
|
||||||
name: unknown_customer?.name || '',
|
name: unknown_customer?.name || '',
|
||||||
economic_code: unknown_customer?.economic_code || '',
|
economic_code: unknown_customer?.economic_code || '',
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
items: invoice.items.map(item => ({
|
items: invoice.items.map(item => ({
|
||||||
invoice_item_id: item.id,
|
invoice_item_id: item.id,
|
||||||
quantity: Number(item.quantity),
|
quantity: Number(item.quantity),
|
||||||
unit_price: Number(item.unit_price),
|
unit_price: Number(item.unit_price),
|
||||||
total_amount: Number(item.total_amount),
|
total_amount: Number(item.total_amount),
|
||||||
|
tax_amount: Number(tax_amount),
|
||||||
|
discount_amount: Number(discount_amount),
|
||||||
measure_unit: item.measure_unit_code,
|
measure_unit: item.measure_unit_code,
|
||||||
sku: item.sku_code,
|
sku: item.sku_code,
|
||||||
sku_vat: String(item.sku_vat),
|
sku_vat: String(item.sku_vat),
|
||||||
discount: String((item.payload as Record<string, any>)?.discount || '0'),
|
discount: String((item.payload as Record<string, any>)?.discount || '0'),
|
||||||
good_id: item.good_id,
|
good_id: item.good_id,
|
||||||
service_id: item.service_id,
|
service_id: item.service_id,
|
||||||
payload: item.payload,
|
|
||||||
good_snapshot: item.good_snapshot,
|
good_snapshot: item.good_snapshot,
|
||||||
|
gold_type_payload: isGoldTypePayload(item.payload)
|
||||||
|
? item.payload
|
||||||
|
: undefined
|
||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -547,3 +561,8 @@ export async function onResult(
|
|||||||
message: updatedAttempt.message,
|
message: updatedAttempt.message,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function isGoldTypePayload(value: unknown): value is goldTypePayload {
|
||||||
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user