86 lines
2.7 KiB
TypeScript
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');
|
|
}
|