`;
});
}
function sipgUpdateDropdowns() {
const src = document.getElementById('sipg-in-int-source');
const tgt = document.getElementById('sipg-in-int-target');
src.innerHTML = '';
tgt.innerHTML = '';
sipgData.systems.forEach(sys => {
const opt = ``;
src.innerHTML += opt;
tgt.innerHTML += opt;
});
}
// --- Interface Management ---
function sipgAddInterface() {
const name = document.getElementById('sipg-in-int-name').value.trim();
const type = document.getElementById('sipg-in-int-type').value;
const source = document.getElementById('sipg-in-int-source').value;
const target = document.getElementById('sipg-in-int-target').value;
const mapping = document.getElementById('sipg-in-int-mapping').value.trim();
if (name && source && target) {
const id = 'i' + Date.now();
sipgData.interfaces.push({ id, name, type, source, target, mapping });
document.getElementById('sipg-in-int-name').value = '';
document.getElementById('sipg-in-int-mapping').value = '';
sipgRenderInterfaceList();
sipgUpdatePreview();
}
}
function sipgRemoveInterface(id) {
sipgData.interfaces = sipgData.interfaces.filter(i => i.id !== id);
sipgRenderInterfaceList();
sipgUpdatePreview();
}
function sipgRenderInterfaceList() {
const list = document.getElementById('sipg-int-list');
list.innerHTML = '';
if (sipgData.interfaces.length === 0) list.innerHTML = '
`;
});
}
// --- Preview Rendering ---
function sipgUpdatePreview() {
// Header
document.getElementById('sipg-prev-project').innerText = sipgData.meta.project;
document.getElementById('sipg-prev-manager').innerText = sipgData.meta.manager;
document.getElementById('sipg-prev-date').innerText = sipgData.meta.date;
document.getElementById('sipg-prev-summary').innerText = sipgData.meta.summary;
// Systems Table
const sysTable = document.getElementById('sipg-prev-systems-table');
sysTable.innerHTML = '';
sipgData.systems.forEach(sys => {
sysTable.innerHTML += `
${sys.name}
${sys.role}
${sys.tech}
`;
});
// Interfaces Cards
const intContainer = document.getElementById('sipg-prev-interfaces-container');
intContainer.innerHTML = '';
sipgData.interfaces.forEach((intf, idx) => {
const sName = sipgData.systems.find(s => s.id === intf.source)?.name || 'Unknown';
const tName = sipgData.systems.find(s => s.id === intf.target)?.name || 'Unknown';
intContainer.innerHTML += `
`;
});
}
// --- PDF Export ---
function sipgGeneratePDF() {
const element = document.getElementById('sipg-plan-paper');
const btn = document.getElementById('sipg-btn-download');
const originalText = btn.innerHTML;
// Ensure Preview tab is active
sipgSwitchTab('sipg-preview');
btn.innerHTML = ' Generating PDF...';
document.body.classList.add('generating-pdf');
const opt = {
margin: [10, 10, 10, 10],
filename: `Integration_Plan_${sipgData.meta.project.replace(/[^a-z0-9]/gi, '_')}.pdf`,
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
pagebreak: { mode: ['avoid-all', 'css', 'legacy'] }
};
html2pdf().set(opt).from(element).save().then(() => {
btn.innerHTML = originalText;
document.body.classList.remove('generating-pdf');
});
}
No interfaces defined.
';
sipgData.interfaces.forEach(intf => {
const sName = sipgData.systems.find(s => s.id === intf.source)?.name || '?';
const tName = sipgData.systems.find(s => s.id === intf.target)?.name || '?';
list.innerHTML += `
${intf.name}
${intf.type}
${sName}
${tName}
${intf.mapping || 'No specific mapping defined.'}
3.${idx+1} ${intf.name}
Type: ${intf.type}
Source: ${sName}
Target: ${tName}
Data Mapping / Transformation:
${intf.mapping}
