-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
`;
@@ -375,6 +399,7 @@ function addQuoteItem(item = null) {
// Save HTML content on change
quill.on('text-change', () => {
hiddenInput.value = quill.root.innerHTML;
+ updateItemSummary(itemId);
updateTotals();
});
@@ -396,12 +421,17 @@ function addQuoteItem(item = null) {
const amount = qty * rateValue;
amountInput.value = amount.toFixed(2);
}
+ updateItemSummary(itemId);
updateTotals();
};
- // Add event listeners for auto-calculation
+ // Add event listeners for auto-calculation and summary update
qtyInput.addEventListener('input', calculateAmount);
rateInput.addEventListener('input', calculateAmount);
+ amountInput.addEventListener('input', () => {
+ updateItemSummary(itemId);
+ updateTotals();
+ });
// Add event listeners for totals update
itemDiv.querySelectorAll('.item-input, .item-amount').forEach(input => {
@@ -438,6 +468,41 @@ function removeQuoteItem(itemId) {
updateTotals();
}
+function toggleItem(itemId) {
+ const itemDiv = document.getElementById(`item-${itemId}`);
+ const content = itemDiv.querySelector('.item-content');
+ const chevron = itemDiv.querySelector('.item-chevron');
+
+ if (content.classList.contains('hidden')) {
+ content.classList.remove('hidden');
+ chevron.style.transform = 'rotate(180deg)';
+ } else {
+ content.classList.add('hidden');
+ chevron.style.transform = 'rotate(0deg)';
+ }
+}
+
+function updateItemSummary(itemId) {
+ const itemDiv = document.getElementById(`item-${itemId}`);
+ const qtyInput = itemDiv.querySelector('[data-field="quantity"]');
+ const amountInput = itemDiv.querySelector('[data-field="amount"]');
+ const descEditor = itemDiv.querySelector('.item-description-editor');
+
+ // Update summary displays
+ const summaryQty = itemDiv.querySelector('.item-summary-qty');
+ const summaryDesc = itemDiv.querySelector('.item-summary-desc');
+ const summaryAmount = itemDiv.querySelector('.item-summary-amount');
+
+ if (summaryQty) summaryQty.textContent = qtyInput.value || '0';
+ if (summaryAmount) summaryAmount.textContent = amountInput.value || '0.00';
+
+ if (summaryDesc && descEditor.quillInstance) {
+ const plainText = descEditor.quillInstance.getText().trim();
+ const preview = plainText.substring(0, 60) + (plainText.length > 60 ? '...' : '');
+ summaryDesc.textContent = preview || 'New item';
+ }
+}
+
function updateTotals() {
const items = getQuoteItems();
const taxExempt = document.getElementById('quote-tax-exempt').checked;
@@ -474,17 +539,18 @@ function getQuoteItems() {
const itemDivs = document.querySelectorAll('#quote-items > div');
itemDivs.forEach(div => {
- const descEditor = div.querySelector('.item-description-editor');
+ const content = div.querySelector('.item-content');
+ const descEditor = content.querySelector('.item-description-editor');
const descriptionHTML = descEditor && descEditor.quillInstance
? descEditor.quillInstance.root.innerHTML
: '';
const item = {
- quantity: div.querySelector('[data-field="quantity"]').value,
+ quantity: content.querySelector('[data-field="quantity"]').value,
description: descriptionHTML,
- rate: div.querySelector('[data-field="rate"]').value,
- amount: div.querySelector('[data-field="amount"]').value,
- is_tbd: div.querySelector('[data-field="is_tbd"]').checked
+ rate: content.querySelector('[data-field="rate"]').value,
+ amount: content.querySelector('[data-field="amount"]').value,
+ is_tbd: content.querySelector('[data-field="is_tbd"]').checked
};
items.push(item);
});