new card for roadworthiness, link to sims portal, bettwe error handling
Deploy static content to Pages / deploy (push) Has been cancelled
Deploy static content to Pages / deploy (push) Has been cancelled
This commit is contained in:
@@ -309,8 +309,14 @@ async function setupPdfImport() {
|
|||||||
try {
|
try {
|
||||||
const text = await extractTextFromPdf(file);
|
const text = await extractTextFromPdf(file);
|
||||||
const data = parseRegistrationData(text);
|
const data = parseRegistrationData(text);
|
||||||
fillFormWithData(data);
|
|
||||||
showSnackbar('Data imported successfully!', 'success');
|
// Check if any data was extracted
|
||||||
|
if (Object.keys(data).length === 0) {
|
||||||
|
showSnackbar('Failed to import data. Make sure PDF was exported from SIMS portal.', 'error');
|
||||||
|
} else {
|
||||||
|
fillFormWithData(data);
|
||||||
|
showSnackbar('Data imported successfully!', 'success');
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('PDF import failed:', error);
|
console.error('PDF import failed:', error);
|
||||||
showSnackbar('Failed to import PDF', 'error');
|
showSnackbar('Failed to import PDF', 'error');
|
||||||
|
|||||||
+37
-32
@@ -42,7 +42,42 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main class="main-content">
|
<main class="main-content three-column">
|
||||||
|
<!-- Roadworthiness Details Card -->
|
||||||
|
<div class="card form-card">
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="material-icons">fact_check</span>
|
||||||
|
<h2>Roadworthiness Details</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<!-- Garage Selection -->
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="garage">Select Garage</label>
|
||||||
|
<div class="select-wrapper">
|
||||||
|
<select id="garage" class="form-select" required form="stickerForm">
|
||||||
|
<!-- Populated dynamically from templates/index.json -->
|
||||||
|
</select>
|
||||||
|
<span class="material-icons select-icon">expand_more</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- From Date -->
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="fromDate">From Date</label>
|
||||||
|
<input type="date" id="fromDate" class="form-input" required form="stickerForm">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- To Date -->
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="toDate">To Date</label>
|
||||||
|
<input type="date" id="toDate" class="form-input" readonly form="stickerForm">
|
||||||
|
<span class="form-hint">Auto-calculated</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Vehicle Information Card -->
|
||||||
<div class="card form-card">
|
<div class="card form-card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span class="material-icons">edit_document</span>
|
<span class="material-icons">edit_document</span>
|
||||||
@@ -50,35 +85,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="stickerForm">
|
<form id="stickerForm">
|
||||||
<!-- Garage Selection -->
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label" for="garage">Select Garage</label>
|
|
||||||
<div class="select-wrapper">
|
|
||||||
<select id="garage" class="form-select" required>
|
|
||||||
<!-- Populated dynamically from templates/index.json -->
|
|
||||||
</select>
|
|
||||||
<span class="material-icons select-icon">expand_more</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Date Range -->
|
|
||||||
<div class="form-row">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label" for="fromDate">From Date</label>
|
|
||||||
<input type="date" id="fromDate" class="form-input" required>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="form-label" for="toDate">To Date</label>
|
|
||||||
<input type="date" id="toDate" class="form-input" readonly>
|
|
||||||
<span class="form-hint">Auto-calculated</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Divider -->
|
|
||||||
<div class="form-divider">
|
|
||||||
<span>Vehicle Details</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Import from PDF -->
|
<!-- Import from PDF -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label">Import from Registration PDF</label>
|
<label class="form-label">Import from Registration PDF</label>
|
||||||
@@ -87,7 +93,7 @@
|
|||||||
Import PDF
|
Import PDF
|
||||||
<input type="file" id="pdfInput" accept=".pdf" hidden>
|
<input type="file" id="pdfInput" accept=".pdf" hidden>
|
||||||
</label>
|
</label>
|
||||||
<span class="form-hint">Upload vehicle registration PDF to auto-fill</span>
|
<span class="form-hint">Get your PDF from <a href="https://sims.transport.gov.mv/" target="_blank" rel="noopener">SIMS portal</a></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Divider -->
|
<!-- Divider -->
|
||||||
@@ -101,7 +107,6 @@
|
|||||||
<input type="text" id="regNumber" class="form-input"
|
<input type="text" id="regNumber" class="form-input"
|
||||||
placeholder="X0X0000" required
|
placeholder="X0X0000" required
|
||||||
pattern="[A-Za-z0-9]+" maxlength="10">
|
pattern="[A-Za-z0-9]+" maxlength="10">
|
||||||
<span class="form-hint">Letters and numbers only</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Model Number -->
|
<!-- Model Number -->
|
||||||
|
|||||||
+30
-1
@@ -234,6 +234,19 @@ body {
|
|||||||
align-items: start;
|
align-items: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main-content.three-column {
|
||||||
|
max-width: 1400px;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Card Body */
|
||||||
|
.card-body {
|
||||||
|
padding: 24px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Cards */
|
/* Cards */
|
||||||
.card {
|
.card {
|
||||||
background-color: var(--md-sys-color-surface);
|
background-color: var(--md-sys-color-surface);
|
||||||
@@ -493,11 +506,27 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Responsive Styles */
|
/* Responsive Styles */
|
||||||
|
@media (max-width: 1200px) {
|
||||||
|
.main-content.three-column {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content.three-column .preview-card {
|
||||||
|
grid-column: span 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 900px) {
|
@media (max-width: 900px) {
|
||||||
.main-content {
|
.main-content,
|
||||||
|
.main-content.three-column {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main-content.three-column .preview-card {
|
||||||
|
grid-column: span 1;
|
||||||
|
order: -1;
|
||||||
|
}
|
||||||
|
|
||||||
.preview-card {
|
.preview-card {
|
||||||
position: static;
|
position: static;
|
||||||
order: -1;
|
order: -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user