You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
import type { MarkupRule } from "@/modules/pricing/engine";
|
|
import { applyMarkup } from "@/modules/pricing/engine";
|
|
import type { FlockQuoteLine } from "@/workers/rpa/flock/types";
|
|
|
|
export type FlockDisplayLine = FlockQuoteLine & {
|
|
markup_amount: number;
|
|
final_total_usd: number;
|
|
};
|
|
|
|
export type FlockStoredQuotes = {
|
|
provider: "flock";
|
|
reference?: string | null;
|
|
lines: FlockDisplayLine[];
|
|
};
|
|
|
|
export function applyMarkupToFlockLines(
|
|
lines: FlockQuoteLine[],
|
|
rule: MarkupRule,
|
|
): FlockDisplayLine[] {
|
|
return lines.map((line) => {
|
|
const { markupAmount, finalTotal } = applyMarkup(
|
|
line.totalUsd,
|
|
line.totalUsd,
|
|
rule,
|
|
);
|
|
return {
|
|
...line,
|
|
markup_amount: markupAmount,
|
|
final_total_usd: finalTotal,
|
|
};
|
|
});
|
|
}
|
|
|
|
export function buildFlockStoredQuotes(
|
|
lines: FlockQuoteLine[],
|
|
rule: MarkupRule,
|
|
reference?: string | null,
|
|
): FlockStoredQuotes {
|
|
return {
|
|
provider: "flock",
|
|
reference: reference ?? null,
|
|
lines: applyMarkupToFlockLines(lines, rule),
|
|
};
|
|
}
|
|
|
|
export function parseFlockStoredQuotes(
|
|
json: unknown,
|
|
): FlockStoredQuotes | null {
|
|
if (!json || typeof json !== "object" || Array.isArray(json)) {
|
|
return null;
|
|
}
|
|
const o = json as Record<string, unknown>;
|
|
if (o.provider !== "flock" || !Array.isArray(o.lines)) {
|
|
return null;
|
|
}
|
|
return o as unknown as FlockStoredQuotes;
|
|
}
|
|
|
|
export function readFlockShipmentMeta(pickupJson: unknown): {
|
|
pickupDate?: string;
|
|
provider?: string;
|
|
} {
|
|
if (!pickupJson || typeof pickupJson !== "object") {
|
|
return {};
|
|
}
|
|
const o = pickupJson as Record<string, unknown>;
|
|
return {
|
|
pickupDate:
|
|
typeof o.flock_pickup_date === "string" ? o.flock_pickup_date : undefined,
|
|
provider: typeof o.provider === "string" ? o.provider : undefined,
|
|
};
|
|
}
|