Files
Investidor-V2/resources/js/lib/public-business-offline.ts
T
2026-11-02 20:31:15 +02:00

86 lines
2.7 KiB
TypeScript

import {
publicRecordOfflineHtml,
downloadOfflineHtml,
offlineValue as display,
} from './public-record-offline.ts';
export type PublicBusinessOffline = {
slug: string;
title: string;
modality: string;
objective?: string | null;
stage?: string | null;
activity_code?: string | null;
amount_min?: string | null;
amount_max?: string | null;
available_percentage?: string | null;
currency?: string | null;
province?: string | null;
district?: string | null;
locality?: string | null;
published_at?: string | null;
sector?: { name: string } | null;
};
/** Fixed public projection: private or future properties are never serialised. */
export function publicBusinessOfflineHtml(
record: PublicBusinessOffline,
modalityLabel: string,
origin: string,
savedAt: Date,
): string {
const rows: [string, string][] = [
['Modalidade', display(modalityLabel)],
['Sector', display(record.sector?.name)],
['Fase', display(record.stage)],
['Actividade', display(record.activity_code)],
[
'Localização divulgada',
[record.locality, record.district, record.province]
.filter(Boolean)
.join(', ') || 'Não indicada',
],
[
'Montante mínimo indicado',
display(record.amount_min) +
(record.currency ? ` ${record.currency}` : ''),
],
[
'Montante máximo indicado',
display(record.amount_max) +
(record.currency ? ` ${record.currency}` : ''),
],
[
'Participação indicada',
record.available_percentage
? `${record.available_percentage}%`
: 'Não indicada',
],
['Publicação no portal', display(record.published_at)],
];
return publicRecordOfflineHtml(
{
title: record.title,
kind: 'Ficha p\u00fablica de neg\u00f3cio',
sourcePath: `/negocios/${encodeURIComponent(record.slug)}`,
rows,
sections: [{ title: 'Objectivo', text: display(record.objective) }],
notice: 'A publica\u00e7\u00e3o n\u00e3o constitui garantia de titularidade, avalia\u00e7\u00e3o, transmissibilidade ou retorno.',
},
origin,
savedAt,
);
}
export function downloadPublicBusinessOffline(
record: PublicBusinessOffline,
modalityLabel: string,
): void {
const html = publicBusinessOfflineHtml(
record,
modalityLabel,
window.location.origin,
new Date(),
);
downloadOfflineHtml(html, 'negocio', record.slug || 'ficha');
}