feat: Implement Schedule Maintenance Management and Tab Dashboard

This commit is contained in:
Tola Leng
2025-05-23 20:34:18 +08:00
parent 0692a78576
commit 4c2f65b432
51 changed files with 3962 additions and 0 deletions
@@ -0,0 +1,173 @@
import { useLanguage } from '@/contexts/LanguageContext';
import { useToast } from '@/hooks/use-toast';
import { MaintenanceItem } from '@/services/types/maintenance.types';
export const usePrintMaintenance = () => {
const { t } = useLanguage();
const { toast } = useToast();
const handlePrint = (maintenance: MaintenanceItem) => {
try {
// Add print-specific stylesheet temporarily
const style = document.createElement('style');
style.id = 'print-style';
style.textContent = `
@page {
size: A4;
margin: 10mm;
}
@media print {
body * {
visibility: hidden;
}
.dialog-content, .dialog-content * {
visibility: visible;
}
.dialog-content {
position: absolute !important;
left: 0;
top: 0;
width: 100%;
height: auto;
padding: 15mm !important;
margin: 0 !important;
background-color: white !important;
box-shadow: none;
overflow: visible !important;
display: block !important;
transform: none !important;
}
/* Remove any black backgrounds */
html, body {
background-color: white !important;
color: black !important;
}
/* Optimize spacing for single page */
.print-section {
margin-bottom: 2mm !important;
page-break-inside: avoid !important;
}
/* Reduce vertical spacing */
h4 {
margin-bottom: 1mm !important;
margin-top: 1mm !important;
color: #1e40af !important; /* blue-800 */
font-weight: bold !important;
}
.print-compact-text {
font-size: 9pt !important;
line-height: 1.2 !important;
}
.print-compact-spacing > * {
margin-top: 1mm !important;
margin-bottom: 1mm !important;
}
.print-grid {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 1mm !important;
}
.badge-print {
background-color: #dbeafe !important; /* blue-100 */
color: #1e40af !important; /* blue-800 */
border: 1px solid #93c5fd !important; /* blue-300 */
padding: 0.5mm 1mm !important;
margin: 0.5mm !important;
display: inline-block !important;
font-size: 8pt !important;
}
/* More compact spacing */
.print-compact-margin {
margin: 1mm 0 !important;
}
.print-smaller-font {
font-size: 8pt !important;
}
.header-print {
background-color: #1e40af !important; /* blue-800 */
color: #ffffff !important;
padding: 2mm 3mm !important;
margin-bottom: 2mm !important;
}
/* More compact header */
.header-print h1 {
font-size: 12pt !important;
margin-bottom: 0 !important;
}
.header-print p {
font-size: 9pt !important;
margin-top: 1mm !important;
}
/* Footer stays at bottom */
.footer-print {
font-size: 7pt !important;
color: #6b7280 !important; /* gray-500 */
border-top: 1px solid #e5e7eb !important; /* gray-200 */
position: fixed !important;
bottom: 10mm !important;
left: 15mm !important;
right: 15mm !important;
padding-top: 2mm !important;
background-color: white !important;
}
/* Hide any unnecessary elements */
.print-hide {
display: none !important;
}
/* Optimize description text */
.print-description {
max-height: 100px !important;
overflow: hidden !important;
text-overflow: ellipsis !important;
}
}
`;
document.head.appendChild(style);
// Wait a bit to ensure styles are applied
setTimeout(() => {
window.print();
// Remove the style after printing dialog closes
setTimeout(() => {
const printStyle = document.getElementById('print-style');
if (printStyle) {
printStyle.remove();
}
}, 1000);
}, 100);
toast({
title: t('success'),
description: t('printJobStarted'),
});
} catch (error) {
console.error("Error printing:", error);
toast({
title: t('error'),
description: t('printingFailed'),
variant: 'destructive',
});
}
};
return { handlePrint };
};