Files
Amplid-Plugins/index.ts

60 lines
2.2 KiB
TypeScript

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 });
}
}
}
});
}
}