invoice-generator / index.html
anuragshas's picture
fix: table view and printing
2639a2b
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Quotation Generator</title>
<link rel="stylesheet" href="style.css" />
</head>
<body class="bg-gray-100">
<h1 class="text-3xl font-bold text-center my-8" id="top-header">
Quotation Generator
</h1>
<div class="flex flex-col lg:flex-row container mx-auto gap-4">
<div id="form-container" class="w-full lg:w-1/2">
<form
id="quotation-form"
class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4"
>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Your Company Details
</legend>
<input
type="text"
id="company-name"
name="company-name"
placeholder="Company Name"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<textarea
id="company-address"
name="company-address"
placeholder="Address"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
></textarea>
<input
type="text"
id="company-phone"
name="company-phone"
placeholder="Phone"
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="email"
id="company-email"
name="company-email"
placeholder="Email"
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="text"
id="company-gstin"
name="company-gstin"
placeholder="GSTIN"
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</fieldset>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Customer Company Details
</legend>
<input
type="text"
id="customer-name"
name="customer-name"
placeholder="Customer Name"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<textarea
id="customer-address"
name="customer-address"
placeholder="Address"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
></textarea>
<input
type="text"
id="customer-phone"
name="customer-phone"
placeholder="Phone"
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="email"
id="customer-email"
name="customer-email"
placeholder="Email"
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="text"
id="customer-gstin"
name="customer-gstin"
placeholder="GSTIN"
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</fieldset>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Quotation Details
</legend>
<input
type="text"
id="quotation-number"
name="quotation-number"
placeholder="Quotation Number"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="date"
id="quotation-date"
name="quotation-date"
required
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</fieldset>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Items
</legend>
<div
class="bg-blue-50 border border-blue-200 rounded p-2 mb-3 text-xs text-blue-800"
>
<strong>💡 Tips:</strong>
<ul class="list-disc list-inside mt-1 space-y-0.5">
<li>
Use
<kbd
class="bg-gray-200 px-1 rounded text-xs"
>Enter</kbd
>
to move to the next field or add a new row
</li>
<li>
Use
<kbd
class="bg-gray-200 px-1 rounded text-xs"
>Ctrl+I</kbd
>
to quickly add a new item
</li>
<li>
Amounts are calculated automatically as you
type
</li>
<li>
At least one item with description is
required
</li>
</ul>
</div>
<!-- Items Container -->
<div id="items-container" class="space-y-4">
<!-- Items will be dynamically added here -->
</div>
<div class="flex justify-center mt-4">
<button
type="button"
id="add-item"
class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md flex items-center gap-2 shadow-sm"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-4 w-4"
viewBox="0 0 20 20"
fill="currentColor"
>
<path
fill-rule="evenodd"
d="M10 5a1 1 0 011 1v3h3a1 1 0 110 2h-3v3a1 1 0 11-2 0v-3H6a1 1 0 110-2h3V6a1 1 0 011-1z"
clip-rule="evenodd"
/>
</svg>
Add Another Item
</button>
</div>
</fieldset>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Additional Charges
</legend>
<label class="block mb-2"
>IGST (%)<input
type="number"
id="igst-rate"
name="igst-rate"
value="0"
min="0"
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/></label>
<label class="block"
>Freight Charges<input
type="number"
id="freight-charges"
name="freight-charges"
value="0"
min="0"
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/></label>
</fieldset>
<fieldset
class="border border-gray-300 p-4 mb-4 rounded-lg"
>
<legend
class="text-lg font-semibold mb-2 text-gray-700"
>
Bank Details
</legend>
<input
type="text"
id="bank-name"
name="bank-name"
placeholder="Bank Name"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="text"
id="bank-account"
name="bank-account"
placeholder="Account Number"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="text"
id="bank-ifsc"
name="bank-ifsc"
placeholder="IFSC Code"
required
class="w-full p-2 border border-gray-300 rounded mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<input
type="text"
id="bank-branch"
name="bank-branch"
placeholder="Branch"
required
class="w-full p-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
</fieldset>
<div class="flex justify-between items-center">
<button
type="submit"
class="bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded-lg shadow-md transition-all duration-200 ease-in-out transform hover:scale-105"
>
Generate Quotation
</button>
<button
type="button"
id="clear-data"
class="bg-red-500 hover:bg-red-600 text-white font-bold py-2 px-4 rounded-lg shadow-md transition-all duration-200 ease-in-out transform hover:scale-105"
>
Clear Saved Data
</button>
</div>
</form>
</div>
<div id="preview-container" class="w-full lg:w-1/2 hidden lg:block">
<div
id="quotation-preview"
class="bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4"
>
<h2 class="text-2xl font-bold text-center mb-4">
Quotation Preview
</h2>
<div id="preview-content"></div>
</div>
</div>
</div>
<div
id="quotation-output"
class="hidden fixed inset-0 bg-gray-900 bg-opacity-75 z-50 overflow-y-auto"
>
<div class="flex items-center justify-center min-h-screen">
<div
class="bg-white p-8 rounded-lg max-w-4xl w-full mx-auto my-8 relative"
>
<button
id="close-quotation"
class="absolute top-4 right-4 text-gray-500 hover:text-gray-800"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-6 w-6"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M6 18L18 6M6 6l12 12"
/>
</svg>
</button>
<div id="quotation-content"></div>
</div>
</div>
</div>
<!-- Data Management Status Modal -->
<div
id="status-modal"
class="fixed inset-0 bg-gray-600 bg-opacity-50 hidden items-center justify-center z-50"
>
<div class="bg-white p-6 rounded-lg shadow-lg max-w-sm mx-auto">
<div id="modal-content" class="text-center">
<div id="modal-message" class="mb-4"></div>
<button
id="modal-close"
class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded-lg shadow-md transition-all duration-200 ease-in-out transform hover:scale-105"
>
OK
</button>
</div>
</div>
</div>
<script src="data-manager.js"></script>
<script src="script.js"></script>
</body>
</html>