mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 15:18:11 +00:00
changes
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
|
||||
import { ContractsRepository } from '../modules/contracts/contracts.repository';
|
||||
import { Contract } from '../modules/contracts/entities/contract.entity';
|
||||
import {
|
||||
Contract,
|
||||
ContractDocumentSnapshot,
|
||||
} from '../modules/contracts/entities/contract.entity';
|
||||
import { ContractRoute } from '../modules/contracts/entities/contract-route.entity';
|
||||
import {
|
||||
ContractSignature,
|
||||
@@ -11,7 +14,10 @@ import { ContractPricingBreakdown } from '../modules/contracts/contract-pricing.
|
||||
import { ContractTemplatesService } from '../modules/contract-templates/contract-templates.service';
|
||||
import { ContractTemplateResolver } from './contract-template.resolver';
|
||||
import { getTemplateMeta } from './contract-template.registry';
|
||||
import { ContractViewModel } from './contract-view-model.builder';
|
||||
import {
|
||||
ContractDynamicTemplateView,
|
||||
ContractViewModel,
|
||||
} from './contract-view-model.builder';
|
||||
|
||||
/**
|
||||
* Signature row for the contract PDF. Mirrors the booking builder's
|
||||
@@ -90,22 +96,36 @@ export class ContractDocumentViewModelBuilder {
|
||||
contract.contractTemplateKey ?? this.templateResolver.resolve(this.toResolverInput(contract));
|
||||
let template = getTemplateMeta(templateKey);
|
||||
|
||||
// Prefer the admin-editable DB template matching the contract's
|
||||
// direction/freight pair; fall back to the code-defined generic layout
|
||||
// when none is active.
|
||||
const dynamicSource = await this.contractTemplates.findActiveForContract(
|
||||
contract.tradeDirection,
|
||||
contract.freightType,
|
||||
);
|
||||
const dynamicTemplate = dynamicSource
|
||||
? {
|
||||
code: dynamicSource.code,
|
||||
name: dynamicSource.name,
|
||||
documentTitle: dynamicSource.documentTitle,
|
||||
whereasClauses: dynamicSource.whereasClauses ?? [],
|
||||
articles: dynamicSource.articles ?? [],
|
||||
}
|
||||
: undefined;
|
||||
// The document articles come, in order of preference, from:
|
||||
// 1. this contract's frozen snapshot (staff accepted / edited it) — the
|
||||
// shared six templates are never consulted for these contracts;
|
||||
// 2. the admin-editable DB template matching the direction/freight pair;
|
||||
// 3. the code-defined generic layout (handled below when none of the above).
|
||||
const snapshot = contract.documentSnapshot as ContractDocumentSnapshot | null;
|
||||
let dynamicTemplate: ContractDynamicTemplateView | undefined;
|
||||
if (snapshot && (snapshot.articles?.length ?? 0) > 0) {
|
||||
dynamicTemplate = {
|
||||
code: snapshot.code ?? 'CONTRACT',
|
||||
name: snapshot.name ?? template.title,
|
||||
documentTitle: snapshot.documentTitle ?? '',
|
||||
whereasClauses: snapshot.whereasClauses ?? [],
|
||||
articles: snapshot.articles,
|
||||
};
|
||||
} else {
|
||||
const dynamicSource = await this.contractTemplates.findActiveForContract(
|
||||
contract.tradeDirection,
|
||||
contract.freightType,
|
||||
);
|
||||
dynamicTemplate = dynamicSource
|
||||
? {
|
||||
code: dynamicSource.code,
|
||||
name: dynamicSource.name,
|
||||
documentTitle: dynamicSource.documentTitle,
|
||||
whereasClauses: dynamicSource.whereasClauses ?? [],
|
||||
articles: dynamicSource.articles ?? [],
|
||||
}
|
||||
: undefined;
|
||||
}
|
||||
if (dynamicTemplate) {
|
||||
template = {
|
||||
...template,
|
||||
|
||||
Reference in New Issue
Block a user