Merged PR 1816: #4836 Fix Printer Handling on Small Amount Invoice

#4836 Fix Printer Handling on Small Amount Invoice
This commit is contained in:
Nino Righi
2024-10-30 10:39:53 +00:00
committed by Lorenz Hilpert
parent 8ae990bcde
commit 694fc6d084

View File

@@ -4,53 +4,74 @@ import { OrderItemsContext } from './order-items.context';
import { OMSPrintService } from '@swagger/print';
import { UiModalService } from '@ui/modal';
import { PrintModalComponent, PrintModalData } from '@modal/printer';
import { NativeContainerService } from '@external/native-container';
import { groupBy } from '@ui/common';
import { Group, groupBy } from '@ui/common';
import { DomainPrinterService, Printer } from '@domain/printer';
import { firstValueFrom } from 'rxjs';
import { EnvironmentService } from '@core/environment';
import { ReceiptDTO, ResponseArgs } from '@swagger/oms';
@Injectable()
export class PrintSmallamountinvoiceActionHandler extends ActionHandler<OrderItemsContext> {
private uiModal = inject(UiModalService);
private omsPrintService = inject(OMSPrintService);
private nativeContainerService = inject(NativeContainerService);
private _environmentSerivce = inject(EnvironmentService);
private _domainPrinterService = inject(DomainPrinterService);
constructor() {
super('PRINT_SMALLAMOUNTINVOICE');
}
async handler(data: OrderItemsContext): Promise<OrderItemsContext> {
await this.uiModal
.open({
content: PrintModalComponent,
config: { showScrollbarY: false },
data: {
printImmediately: !this.nativeContainerService.isNative,
printerType: 'Label',
print: async (printer) => {
try {
const receipts = data?.receipts?.filter((r) => r?.receiptType & 128);
for (const group of groupBy(receipts, (receipt) => receipt?.buyer?.buyerNumber)) {
await this.omsPrintService
.OMSPrintKleinbetragsrechnung({
data: group?.items?.map((r) => r?.id),
printer,
})
.toPromise();
}
return {
error: false,
};
} catch (error) {
console.error(error);
return {
error: true,
message: error?.message || error,
};
}
},
} as PrintModalData,
})
.afterClosed$.toPromise();
private _printKleinbetragsrechnungHelper(printer: string, receiptGroup: Group<string, ReceiptDTO>): Promise<ResponseArgs> {
return firstValueFrom(
this.omsPrintService.OMSPrintKleinbetragsrechnung({
data: receiptGroup?.items?.map((r) => r?.id),
printer,
}),
);
}
async handler(data: OrderItemsContext): Promise<OrderItemsContext> {
const printerList = await firstValueFrom(this._domainPrinterService.getAvailableLabelPrinters());
let printer: Printer;
if (Array.isArray(printerList)) {
printer = printerList.find((printer) => printer.selected === true);
}
if (!printer || this._environmentSerivce.matchTablet()) {
await firstValueFrom(
this.uiModal.open({
content: PrintModalComponent,
config: { showScrollbarY: false },
data: {
printImmediately: !this._environmentSerivce.matchTablet(),
printerType: 'Label',
print: async (printer) => {
try {
const receipts = data?.receipts?.filter((r) => r?.receiptType & 128);
for (const group of groupBy(receipts, (receipt) => receipt?.buyer?.buyerNumber)) {
await this._printKleinbetragsrechnungHelper(printer, group);
}
return {
error: false,
};
} catch (error) {
console.error(error);
return {
error: true,
message: error?.message || error,
};
}
},
} as PrintModalData,
}).afterClosed$,
);
} else {
const receipts = data?.receipts?.filter((r) => r?.receiptType & 128);
for (const group of groupBy(receipts, (receipt) => receipt?.buyer?.buyerNumber)) {
await this._printKleinbetragsrechnungHelper(printer.key, group);
}
}
return data;
}
}