Compare commits

..

2 Commits

Author SHA1 Message Date
ahasani 4e4cc08224 feat: enhance invoice handling with success messages and payment data integration
Production CI / validate-and-build (push) Failing after 1m7s
2026-06-17 10:03:06 +03:30
ahasani e5f53c2265 set loading in correction and return form 2026-06-17 09:21:20 +03:30
8 changed files with 38 additions and 8 deletions
@@ -1,6 +1,8 @@
import { TspProviderResponseStatus } from '@/shared/catalog';
import { IPosSaleInvoicesSummaryResponse } from './io';
export interface IPosSaleInvoiceFiscalActionResponse {
invoice: IPosSaleInvoicesSummaryResponse;
message?: string;
status: TspProviderResponseStatus;
}
@@ -5,6 +5,8 @@
[sendToTspLoading]="sendToTspLoading()"
[inquiryLoading]="inquiryLoading()"
[resendToTspLoading]="resendToTspLoading()"
[correctionLoading]="correctionLoading()"
[returnFromSaleLoading]="backFromSaleLoading()"
(onSendToTsp)="sendToTsp()"
(onResendToTsp)="resendToTsp()"
(onInquiry)="inquiry()"
@@ -94,7 +94,12 @@ export class PosSaleInvoiceComponent {
this.correctionLoading.set(false);
})
)
.subscribe();
.subscribe((res) => {
this.toastService.success({
text: `اصلاحیه‌ی صورت‌حساب با شماره‌ی ${res.invoice?.invoice_number} با موفقیت ایجاد شد.`,
});
this.store.updateStatus(res.status);
});
}
returnFromSale(data: IPosReturnFromSaleRequest) {
this.backFromSaleLoading.set(true);
@@ -105,7 +110,12 @@ export class PosSaleInvoiceComponent {
this.backFromSaleLoading.set(false);
})
)
.subscribe();
.subscribe((res) => {
this.toastService.success({
text: `برگشت از فروش با شماره‌ی ${res.invoice?.invoice_number} با موفقیت ایجاد شد.`,
});
this.store.updateStatus(res.status);
});
}
revoke() {
this.revokeLoading.set(true);
@@ -116,7 +126,12 @@ export class PosSaleInvoiceComponent {
this.revokeLoading.set(false);
})
)
.subscribe();
.subscribe((res) => {
this.toastService.success({
text: `صورت‌حساب شماره‌ی ${res.invoice?.invoice_number} با موفقیت ابطال شد.`,
});
this.store.updateStatus(res.status);
});
}
ngOnInit() {
@@ -43,7 +43,7 @@
<pos-order-price-info-card [info]="totalPriceInfo" />
<app-form-footer-actions [loading]="submitLoading()" (onCancel)="close()" />
<app-form-footer-actions [loading]="loading || submitLoading()" (onCancel)="close()" />
</form>
<shared-light-bottomsheet
@@ -42,6 +42,7 @@ export class SharedCorrectionFormComponent extends AbstractForm<
@Input() beforeSubmit?: (payload: CorrectionInvoiceFormValue) => Promise<boolean> | boolean;
@Input({ required: true }) invoiceDate!: string;
@Input() visible = false;
@Input() loading = false;
form = this.fb.group({
invoice_date: [this.invoiceDate],
@@ -22,5 +22,5 @@
<pos-order-price-info-card [info]="totalPriceInfo" />
<app-form-footer-actions (onCancel)="close()" />
<app-form-footer-actions [loading]="loading || submitLoading()" (onCancel)="close()" />
</form>
@@ -50,6 +50,7 @@
[initialValues]="invoice.items"
[invoiceDate]="invoice.invoice_date"
[beforeSubmit]="beforeCorrectionSubmitHandler.bind(this)"
[loading]="correctionLoading || false"
(onSubmit)="correctionSubmit($event)"
(onClose)="cancelCorrection()" />
</shared-light-bottomsheet>
@@ -110,8 +110,10 @@ export class SharedSaleInvoiceSingleViewComponent {
showQrCodeDialog = signal(false);
showCorrectionPaymentDialog = signal(false);
correctionRequiredPayment = signal(0);
paymentData = signal<Maybe<IPayment>>(null);
readonly isApplication = config.isPosApplication;
private pendingCorrectionSubmitResolver: Maybe<(allowed: boolean) => void> = null;
private pendingCorrectionSubmitResolver: Maybe<(allowed: boolean, payment?: IPayment) => void> =
null;
publicInvoiceRoute = computed(() => {
if (this.invoice) {
@@ -282,6 +284,7 @@ export class SharedSaleInvoiceSingleViewComponent {
total_amount,
discount_amount,
tax_amount,
payments: this.paymentData() || undefined,
};
}
@@ -310,7 +313,12 @@ export class SharedSaleInvoiceSingleViewComponent {
return false;
}
return (await this.beforeCorrectionSubmit?.(mapped)) ?? true;
return (
(await this.beforeCorrectionSubmit?.({
...mapped,
payments: this.paymentData() || undefined,
})) ?? true
);
}
confirmCorrectionPayment(_event: {
@@ -318,7 +326,8 @@ export class SharedSaleInvoiceSingleViewComponent {
settlementType: 'CASH' | 'CREDIT' | 'MIXED';
}) {
this.showCorrectionPaymentDialog.set(false);
this.pendingCorrectionSubmitResolver?.(true);
this.paymentData.set(_event.payment);
this.pendingCorrectionSubmitResolver?.(true, _event.payment);
this.pendingCorrectionSubmitResolver = null;
}