update migrations and create base migration. set discount and tax to sale invoices

This commit is contained in:
2026-05-28 18:27:21 +03:30
parent a975f9d02a
commit 7ae027633b
7 changed files with 114 additions and 45 deletions
@@ -7,6 +7,7 @@ import {
TspProviderResponseStatus,
} from 'generated/prisma/client'
import {
goldTypePayload,
TspProviderCorrectionSendPayloadDto,
TspProviderGetResponseDto,
TspProviderOriginalResponseDto,
@@ -169,6 +170,8 @@ export async function buildCorrectionPayload(
invoice_number: true,
settlement_type: true,
tax_id: true,
discount_amount: true,
tax_amount: true,
items: true,
pos: {
select: {
@@ -251,7 +254,8 @@ export async function buildCorrectionPayload(
measure_unit: item.measure_unit_code,
sku: item.sku_code,
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,
service_id: item.service_id,
payload: item.payload,
@@ -267,6 +271,8 @@ export async function buildCorrectionPayload(
},
})),
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!,
invoice_number: invoice.invoice_number,
id: invoice.id,
@@ -281,17 +287,17 @@ export async function buildCorrectionPayload(
customer:
invoice.customer && invoice.customer.type !== 'UNKNOWN'
? {
type: invoice.customer.type,
legal_info: invoice.customer.legal ?? undefined,
individual_info: invoice.customer.individual ?? undefined,
}
type: invoice.customer.type,
legal_info: invoice.customer.legal ?? undefined,
individual_info: invoice.customer.individual ?? undefined,
}
: {
type: 'UNKNOWN',
unknown_info: {
name: unknown_customer?.name || '',
economic_code: unknown_customer?.economic_code || '',
},
type: 'UNKNOWN',
unknown_info: {
name: unknown_customer?.name || '',
economic_code: unknown_customer?.economic_code || '',
},
},
}
}
@@ -312,6 +318,8 @@ export async function buildOriginalPayload(
invoice_date: true,
invoice_number: true,
settlement_type: true,
discount_amount: true,
tax_amount: true,
items: {
select: {
id: true,
@@ -412,7 +420,7 @@ export async function buildOriginalPayload(
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 unknown_customer = (invoice.unknown_customer || {}) as Record<string, string>
@@ -425,6 +433,8 @@ export async function buildOriginalPayload(
invoice_date,
settlement_type,
total_amount: Number(total_amount),
tax_amount: Number(tax_amount),
discount_amount: Number(discount_amount),
economic_code: ba.economic_code,
fiscal_id: ba.fiscal_id,
template: ba.guild.invoice_template,
@@ -443,30 +453,34 @@ export async function buildOriginalPayload(
customer:
invoice.customer && invoice.customer.type !== 'UNKNOWN'
? {
type: invoice.customer.type,
legal_info: invoice.customer.legal ?? undefined,
individual_info: invoice.customer.individual ?? undefined,
}
type: invoice.customer.type,
legal_info: invoice.customer.legal ?? undefined,
individual_info: invoice.customer.individual ?? undefined,
}
: {
type: 'UNKNOWN',
unknown_info: {
name: unknown_customer?.name || '',
economic_code: unknown_customer?.economic_code || '',
},
type: 'UNKNOWN',
unknown_info: {
name: unknown_customer?.name || '',
economic_code: unknown_customer?.economic_code || '',
},
},
items: invoice.items.map(item => ({
invoice_item_id: item.id,
quantity: Number(item.quantity),
unit_price: Number(item.unit_price),
total_amount: Number(item.total_amount),
tax_amount: Number(tax_amount),
discount_amount: Number(discount_amount),
measure_unit: item.measure_unit_code,
sku: item.sku_code,
sku_vat: String(item.sku_vat),
discount: String((item.payload as Record<string, any>)?.discount || '0'),
good_id: item.good_id,
service_id: item.service_id,
payload: item.payload,
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,
}
}
function isGoldTypePayload(value: unknown): value is goldTypePayload {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}