Petrol Pump Accounting In Excel Sheet Download May 2026

// 2. Expenses Register html += `<h3 style="margin:25px 0 5px 0; color:#1e4a2f;">📝 Expenses Register</h3>`; html += `<table id="expensesTable"><thead><tr><th>Date</th><th>Category</th><th>Amount (₹)</th><th></th></tr></thead><tbody>`; for (let i = 0; i < expensesData.length; i++) let exp = expensesData[i]; html += `<tr data-type="expense" data-index="$i"> <td><input type="text" class="exp-date" value="$exp.date" data-idx="$i"></td> <td><input type="text" class="exp-cat" value="$exp.category" data-idx="$i"></td> <td><input type="number" step="0.01" class="exp-amt" value="$exp.amount" data-idx="$i"></td> <td><button class="delRowBtn" data-type="expense" data-idx="$i" style="background:#b33;">❌</button></td> </tr>`; html += `<tr><td colspan="3"><button id="addExpenseRowBtn" style="background:#3c8c40;">+ Add Expense</button></td><td></td></tr>`; html += `</tbody></table>`;

// Attach all event listeners dynamically attachInputEvents(); attachDeleteButtons(); attachAddRowButtons(); updateCards();

function deleteHandler(e) const btn = e.currentTarget; const type = btn.getAttribute('data-type'); const idx = parseInt(btn.getAttribute('data-idx')); if (type === 'sales') salesData.splice(idx, 1); else if (type === 'expense') expensesData.splice(idx, 1); else if (type === 'stock') stockData.splice(idx, 1); renderTables(); petrol pump accounting in excel sheet download

<div class="excel-table" id="excelTableContainer"> <!-- dynamic table will be injected --> </div> <div class="footer"> * Double-click any cell to edit. Sales & expenses auto update profit. Stock closing = Opening + Received - Sold. </div> </div>

let stockData = [ product: "Petrol (MS)", opening: 5200, received: 8000, sold: 1250, closing: 11950, unitPrice: 102.50 , product: "Diesel (HSD)", opening: 4300, received: 7000, sold: 980, closing: 10320, unitPrice: 94.80 , product: "Premium Petrol", opening: 1100, received: 2000, sold: 320, closing: 2780, unitPrice: 115.00 , product: "Engine Oil (Lube)", opening: 180, received: 120, sold: 45, closing: 255, unitPrice: 850.00 ]; Stock closing = Opening + Received - Sold

function salesChangeHandler(e) 0; salesData[idx].liters = liters; salesData[idx].rate = rate; salesData[idx].amount = liters * rate; // update amount cell const amountCell = document.querySelector(`tr[data-type='sales'][data-index='$idx'] .sales-amount`); if (amountCell) amountCell.innerText = salesData[idx].amount.toFixed(2); // also reflect in stock 'sold' column? Sold amount must be consistent? for stock we keep separate but we sync sold from sales aggregate? // For simplicity we also update stockData sold field for corresponding product match by name. const productName = salesData[idx].product; const stockIdx = stockData.findIndex(s => s.product === productName); if (stockIdx !== -1) stockData[stockIdx].sold = liters; recomputeStock(); renderTables(); // re-render to reflect updated stock closing & value else updateCards(); updateCards();

container.innerHTML = html;

function expenseChangeHandler(e) const idx = parseInt(e.target.getAttribute('data-idx')); if (!isNaN(idx))