Spaces:
Running
Running
هناك مشاكل كثيرة مثل ان السكربت كله لا يعمل و لا يوجد عرض يولد و كل الازرار لا تعمل - Follow Up Deployment
Browse files- index.html +50 -8
index.html
CHANGED
|
@@ -4,9 +4,13 @@
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>نظام عروض الأسعار - المصرية للمقاولات الكهروميكانيكية</title>
|
| 7 |
-
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 9 |
<style>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap');
|
| 11 |
|
| 12 |
body {
|
|
@@ -504,8 +508,11 @@
|
|
| 504 |
// Calculate item total
|
| 505 |
function calculateItemTotal() {
|
| 506 |
const row = this.closest('tr');
|
| 507 |
-
|
| 508 |
-
|
|
|
|
|
|
|
|
|
|
| 509 |
const total = quantity * unitPrice;
|
| 510 |
|
| 511 |
row.querySelector('.item-total').textContent = total.toFixed(2);
|
|
@@ -558,8 +565,20 @@
|
|
| 558 |
const validityDays = document.getElementById('validityDays').value || 30;
|
| 559 |
const notes = document.getElementById('notes').value;
|
| 560 |
|
| 561 |
-
if (!clientName
|
| 562 |
-
alert('الرجاء إدخال
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 563 |
return;
|
| 564 |
}
|
| 565 |
|
|
@@ -574,7 +593,9 @@
|
|
| 574 |
const itemsPerPage = 7;
|
| 575 |
const pageCount = Math.ceil(items.length / itemsPerPage);
|
| 576 |
|
| 577 |
-
|
|
|
|
|
|
|
| 578 |
const pageItems = items.slice(i * itemsPerPage, (i + 1) * itemsPerPage);
|
| 579 |
|
| 580 |
// Clone the quote template
|
|
@@ -673,7 +694,7 @@
|
|
| 673 |
document.getElementById('previewSection').classList.remove('hidden');
|
| 674 |
}
|
| 675 |
|
| 676 |
-
// Format date
|
| 677 |
function formatDate(dateString) {
|
| 678 |
const date = new Date(dateString);
|
| 679 |
const day = date.getDate().toString().padStart(2, '0');
|
|
@@ -759,6 +780,14 @@
|
|
| 759 |
// Load settings
|
| 760 |
loadSettings();
|
| 761 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 762 |
// Set today's date as default
|
| 763 |
const today = new Date().toISOString().split('T')[0];
|
| 764 |
document.getElementById('quoteDate').value = today;
|
|
@@ -776,7 +805,20 @@
|
|
| 776 |
document.getElementById('generateQuoteBtn').addEventListener('click', generateQuote);
|
| 777 |
|
| 778 |
// Preview button
|
| 779 |
-
document.getElementById('previewBtn').addEventListener('click',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 780 |
|
| 781 |
// Back to input button
|
| 782 |
document.getElementById('backToInputBtn').addEventListener('click', function() {
|
|
|
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
<title>نظام عروض الأسعار - المصرية للمقاولات الكهروميكانيكية</title>
|
| 7 |
+
<script src="https://cdn.tailwindcss.com?plugins=forms"></script>
|
| 8 |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 9 |
<style>
|
| 10 |
+
:root {
|
| 11 |
+
--primary-color: #1e40af;
|
| 12 |
+
--primary-hover: #1e3fa8;
|
| 13 |
+
}
|
| 14 |
@import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap');
|
| 15 |
|
| 16 |
body {
|
|
|
|
| 508 |
// Calculate item total
|
| 509 |
function calculateItemTotal() {
|
| 510 |
const row = this.closest('tr');
|
| 511 |
+
let quantity = parseFloat(row.querySelector('.item-quantity').value);
|
| 512 |
+
let unitPrice = parseFloat(row.querySelector('.item-unit-price').value);
|
| 513 |
+
|
| 514 |
+
if (isNaN(quantity) || quantity < 0) quantity = 0;
|
| 515 |
+
if (isNaN(unitPrice) || unitPrice < 0) unitPrice = 0;
|
| 516 |
const total = quantity * unitPrice;
|
| 517 |
|
| 518 |
row.querySelector('.item-total').textContent = total.toFixed(2);
|
|
|
|
| 565 |
const validityDays = document.getElementById('validityDays').value || 30;
|
| 566 |
const notes = document.getElementById('notes').value;
|
| 567 |
|
| 568 |
+
if (!clientName) {
|
| 569 |
+
alert('الرجاء إدخال اسم الجهة');
|
| 570 |
+
return;
|
| 571 |
+
}
|
| 572 |
+
if (!quoteDate) {
|
| 573 |
+
alert('الرجاء إدخال تاريخ العرض');
|
| 574 |
+
return;
|
| 575 |
+
}
|
| 576 |
+
if (!quoteNumber) {
|
| 577 |
+
alert('الرجاء إدخال رقم العرض');
|
| 578 |
+
return;
|
| 579 |
+
}
|
| 580 |
+
if (items.length === 0) {
|
| 581 |
+
alert('الرجاء إضافة بنود للعرض');
|
| 582 |
return;
|
| 583 |
}
|
| 584 |
|
|
|
|
| 593 |
const itemsPerPage = 7;
|
| 594 |
const pageCount = Math.ceil(items.length / itemsPerPage);
|
| 595 |
|
| 596 |
+
// Always show at least one page even if no items
|
| 597 |
+
const actualPageCount = Math.max(1, pageCount);
|
| 598 |
+
for (let i = 0; i < actualPageCount; i++) {
|
| 599 |
const pageItems = items.slice(i * itemsPerPage, (i + 1) * itemsPerPage);
|
| 600 |
|
| 601 |
// Clone the quote template
|
|
|
|
| 694 |
document.getElementById('previewSection').classList.remove('hidden');
|
| 695 |
}
|
| 696 |
|
| 697 |
+
// Format date from YYYY-MM-DD to DD/MM/YYYY
|
| 698 |
function formatDate(dateString) {
|
| 699 |
const date = new Date(dateString);
|
| 700 |
const day = date.getDate().toString().padStart(2, '0');
|
|
|
|
| 780 |
// Load settings
|
| 781 |
loadSettings();
|
| 782 |
|
| 783 |
+
// Set default date
|
| 784 |
+
const today = new Date();
|
| 785 |
+
const formattedDate = today.toISOString().split('T')[0];
|
| 786 |
+
document.getElementById('quoteDate').value = formattedDate;
|
| 787 |
+
|
| 788 |
+
// Generate random quote number
|
| 789 |
+
document.getElementById('quoteNumber').value = 'Q-' + Math.floor(1000 + Math.random() * 9000);
|
| 790 |
+
|
| 791 |
// Set today's date as default
|
| 792 |
const today = new Date().toISOString().split('T')[0];
|
| 793 |
document.getElementById('quoteDate').value = today;
|
|
|
|
| 805 |
document.getElementById('generateQuoteBtn').addEventListener('click', generateQuote);
|
| 806 |
|
| 807 |
// Preview button
|
| 808 |
+
document.getElementById('previewBtn').addEventListener('click', function() {
|
| 809 |
+
if (validateForm()) {
|
| 810 |
+
generateQuote();
|
| 811 |
+
}
|
| 812 |
+
});
|
| 813 |
+
|
| 814 |
+
function validateForm() {
|
| 815 |
+
const clientName = document.getElementById('clientName').value;
|
| 816 |
+
if (!clientName) {
|
| 817 |
+
alert('الرجاء إدخال اسم الجهة');
|
| 818 |
+
return false;
|
| 819 |
+
}
|
| 820 |
+
return true;
|
| 821 |
+
}
|
| 822 |
|
| 823 |
// Back to input button
|
| 824 |
document.getElementById('backToInputBtn').addEventListener('click', function() {
|