mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
|
|
import { Booking } from '../modules/bookings/entities/booking.entity';
|
|
import { ServiceType } from '../modules/rule-engine/entities/service-type.entity';
|
|
import { CargoType } from '../modules/rule-engine/entities/cargo-type.entity';
|
|
|
|
@Injectable()
|
|
export class ContractTemplateResolver {
|
|
resolve(booking: Booking): string {
|
|
const dir =
|
|
booking.tradeDirection === 'IMPORT'
|
|
? 'IMP'
|
|
: booking.tradeDirection === 'EXPORT'
|
|
? 'EXP'
|
|
: 'DOM';
|
|
|
|
let freight = booking.freightType === 'BULK' ? 'BULK' : 'CON';
|
|
const cargoCode = (booking.cargoType as CargoType | undefined)?.code ?? '';
|
|
if (cargoCode.startsWith('BREAK_BULK')) {
|
|
freight = 'BULK';
|
|
}
|
|
|
|
const currency = booking.paymentCurrency === 'ETB' ? 'ETB' : 'USD';
|
|
const service = this.resolveServiceScope(booking.serviceType);
|
|
|
|
return `${dir}_${freight}_${currency}_${service}`;
|
|
}
|
|
|
|
private resolveServiceScope(
|
|
serviceType?: ServiceType | null,
|
|
): 'TRANSPORT_ONLY' | 'FORWARDING' {
|
|
if (!serviceType) return 'TRANSPORT_ONLY';
|
|
const code = (serviceType.code ?? '').toUpperCase();
|
|
if (
|
|
serviceType.includesFirstMile ||
|
|
serviceType.includesLastMile ||
|
|
code.includes('FORWARD')
|
|
) {
|
|
return 'FORWARDING';
|
|
}
|
|
return 'TRANSPORT_ONLY';
|
|
}
|
|
}
|