97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
/**
|
|
* Plans and cutting list routes
|
|
*/
|
|
import { generateAllPlans, generatePDFHtml } from '../services/planGenerator.js';
|
|
import { generateCuttingList, formatCuttingListForExport } from '../services/cuttingEngine.js';
|
|
|
|
/**
|
|
* POST /api/plans/generate
|
|
* Generate all 2D plans for a configuration
|
|
*/
|
|
export async function generatePlansRoute(req, res) {
|
|
try {
|
|
const { config, modules = [], colors = {} } = req.body;
|
|
|
|
if (!config) {
|
|
return res.status(400).json({ error: 'Configuration requise' });
|
|
}
|
|
|
|
const plans = generateAllPlans(config, modules, colors);
|
|
res.json({ success: true, plans });
|
|
|
|
} catch (error) {
|
|
console.error('Plan generation error:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur de génération des plans' });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* POST /api/plans/cutting-list
|
|
* Generate cutting list for a configuration
|
|
*/
|
|
export async function generateCuttingListRoute(req, res) {
|
|
try {
|
|
const { config, modules = [], colors = {} } = req.body;
|
|
|
|
if (!config) {
|
|
return res.status(400).json({ error: 'Configuration requise' });
|
|
}
|
|
|
|
const cuttingList = generateCuttingList(config, colors, modules);
|
|
res.json({ success: true, cuttingList });
|
|
|
|
} catch (error) {
|
|
console.error('Cutting list error:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur de génération de la liste de débitage' });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* POST /api/plans/export-text
|
|
* Export cutting list as text file
|
|
*/
|
|
export async function exportCuttingListText(req, res) {
|
|
try {
|
|
const { config, modules = [], colors = {} } = req.body;
|
|
|
|
if (!config) {
|
|
return res.status(400).json({ error: 'Configuration requise' });
|
|
}
|
|
|
|
const cuttingList = generateCuttingList(config, colors, modules);
|
|
const textContent = formatCuttingListForExport(cuttingList);
|
|
|
|
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
res.setHeader('Content-Disposition', 'attachment; filename="liste-debitage.txt"');
|
|
res.send(textContent);
|
|
|
|
} catch (error) {
|
|
console.error('Export text error:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur d\'export' });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* POST /api/plans/export-pdf
|
|
* Export plans and cutting list as HTML (for PDF conversion)
|
|
*/
|
|
export async function exportPDFHtml(req, res) {
|
|
try {
|
|
const { config, modules = [], colors = {} } = req.body;
|
|
|
|
if (!config) {
|
|
return res.status(400).json({ error: 'Configuration requise' });
|
|
}
|
|
|
|
const cuttingList = generateCuttingList(config, colors, modules);
|
|
const html = generatePDFHtml(config, modules, cuttingList);
|
|
|
|
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
res.send(html);
|
|
|
|
} catch (error) {
|
|
console.error('Export PDF error:', error);
|
|
res.status(500).json({ error: error.message || 'Erreur d\'export PDF' });
|
|
}
|
|
}
|