import { Inject, Injectable, OnApplicationBootstrap } from '@nestjs/common'; import { DocumentLineItem, DocumentLineItemStatusChangedEvent, DocumentStatusType, EventBus, Logger, PhoenixPlugin, PluginCommonModule } from '@phoenix/core'; // Example service for the plugin @Injectable() export class AmplidService { getPluginInfo() { return { name: 'AmplidPlugin', version: '1.0.0', description: '' }; } } // The main plugin class using the PhoenixPlugin decorator @PhoenixPlugin({ imports: [PluginCommonModule], controllers: [], providers: [AmplidService], exports: [AmplidService] }) export class AmplidPlugin implements OnApplicationBootstrap { private customFieldForBestellteMenge = 'bestellteMenge'; //bestellteMenge @Inject(EventBus) private readonly eventBus!: EventBus; // Required static init method for Phoenix plugins static init(): typeof AmplidPlugin { console.log('AmplidPlugin initialized'); return AmplidPlugin; } async onApplicationBootstrap() { this.setupEvents(); } setupEvents() { this.eventBus.ofType(DocumentLineItemStatusChangedEvent).subscribe(async (event) => { if (event.newStatus == DocumentStatusType.COMPLETED) { let bestellteMenge = +event.dli.customFields?.[this.customFieldForBestellteMenge]; if (bestellteMenge && bestellteMenge > 0) { if (bestellteMenge == event.dli.quantity && event.dli.openQuantity == 0) { //we are good, we can keep it being completed } else { //we need to change the status to inwork Logger.info(`Changing status to inwork for DocumentLineItem ${event.dli.id} because bestellteMenge ${bestellteMenge} is not equal to quantity ${event.dli.quantity} and openQuantity ${event.dli.openQuantity}`); event.dli.status = DocumentStatusType.INWORK; await DocumentLineItem.update(event.dli.id, { status: DocumentStatusType.INWORK }); } } } }); } }