// LPO Form Logic initInvoiceForm('lpoProductSearchInput', 'lpoSearchSuggestions', 'lpoItemsTableBody', 'lpo_grand_display', 'lpo_subtotal_display', 'lpo_vat_display'); initInvoiceForm('editLpoProductSearchInput', 'editLpoSearchSuggestions', 'editLpoItemsTableBody', 'edit_lpo_grand_display', 'edit_lpo_subtotal_display', 'edit_lpo_vat_display'); const parseLpoQuotationButtonPayload = (btn) => { if (!btn || !btn.dataset || !btn.dataset.json) return {}; try { return JSON.parse(btn.dataset.json); } catch (error) { console.warn('Failed to parse LPO/Quotation payload from button data.', error); return {}; } }; const renderExistingDocumentItems = (items, tableBodyId, grandTotalId, subtotalId, totalVatId) => { const tableBody = document.getElementById(tableBodyId); const grandTotalEl = document.getElementById(grandTotalId); const subtotalEl = document.getElementById(subtotalId); const totalVatEl = document.getElementById(totalVatId); if (!tableBody) return; tableBody.innerHTML = ''; if (!Array.isArray(items) || items.length === 0) { if (typeof recalculate === 'function') { recalculate(tableBody, grandTotalEl, subtotalEl, totalVatEl); } return; } items.forEach(item => { addItemToTable({ id: item.item_id || item.id, name_en: item.name_en || item.item_name_en || 'Item', name_ar: item.name_ar || item.item_name_ar || '', sku: item.sku || '', vat_rate: item.vat_rate || 0, stock_quantity: item.stock_quantity || 0 }, tableBody, null, null, grandTotalEl, subtotalEl, totalVatEl, { quantity: item.quantity, unit_price: item.unit_price }); }); }; document.querySelectorAll('.edit-lpo-btn').forEach(btn => { btn.addEventListener('click', function() { const data = parseLpoQuotationButtonPayload(this); if (Object.keys(data).length === 0) return; const supplierSelect = document.getElementById('edit_lpo_supplier_id'); const supplierId = data.supplier_id ?? ''; const supplierLabel = data.supplier_name || ''; invoiceEnsureSelectOption('edit_lpo_supplier_id', supplierId, supplierLabel); const lpoIdInput = document.getElementById('edit_lpo_id'); const lpoDateInput = document.getElementById('edit_lpo_date'); const deliveryDateInput = document.getElementById('edit_lpo_delivery_date'); const statusSelect = document.getElementById('edit_lpo_status'); const termsInput = document.getElementById('edit_lpo_terms'); if (lpoIdInput) lpoIdInput.value = data.id || ''; if (supplierSelect) { invoiceSetBlankSelectOptionLabel(supplierSelect, (supplierId === '' && supplierLabel) ? supplierLabel : '---'); supplierSelect.value = supplierId; invoiceSyncSelect2Value(supplierSelect); } if (lpoDateInput) lpoDateInput.value = data.lpo_date || ''; if (deliveryDateInput) deliveryDateInput.value = data.delivery_date || ''; if (statusSelect) statusSelect.value = data.status || 'pending'; if (termsInput) termsInput.value = data.terms_conditions || ''; renderExistingDocumentItems(data.items || [], 'editLpoItemsTableBody', 'edit_lpo_grand_display', 'edit_lpo_subtotal_display', 'edit_lpo_vat_display'); }); }); document.querySelectorAll('.view-lpo-btn').forEach(btn => { btn.addEventListener('click', function() { const data = JSON.parse(this.dataset.json); window.viewAndPrintLPO(data); }); }); window.viewAndPrintLPO = function(data) { const modal = new bootstrap.Modal(document.getElementById('viewLpoModal')); const content = document.getElementById('lpoDetailsContent'); const logoUrl = companySettings.company_logo || ''; const companyHeader = `
${companySettings.company_address || ''}
Phone: ${companySettings.company_phone || ''} | Email: ${companySettings.company_email || ''}
${companySettings.tax_number ? `
TRN: ${companySettings.tax_number}` : ''}
LPO-${data.id.toString().padStart(5, '0')}
${data.supplier_name}
${data.supplier_phone ? `Phone: ${data.supplier_phone}` : ''}
| # | Description | Qty | Unit Price | VAT | Total |
|---|---|---|---|---|---|
| Subtotal | OMR ${parseFloat(data.total_amount).toFixed(3)} | ||||
| VAT Amount | OMR ${parseFloat(data.vat_amount).toFixed(2)} | ||||
| Grand Total | OMR ${parseFloat(data.total_with_vat).toFixed(3)} | ||||
${data.terms_conditions.replace(/\n/g, '
')}
Prepared By
Authorized Signature
VAT: ${companySettings.vat_number}
` : ''; const companyPhone = companySettings.company_phone ? `Tel: ${companySettings.company_phone}
` : ''; // Quotation Header Construction const quotDate = data.quotation_date; const quotValid = data.valid_until || 'N/A'; const quotNo = 'QUO-' + data.id.toString().padStart(5, '0'); const customerName = data.customer_name || 'Walk-in Customer'; const statusBadge = `${data.status.toUpperCase()}`; content.innerHTML = `${companyAddress}
${companyVat} ${companyPhone}No / رقم: ${quotNo}
Date / التاريخ: ${quotDate}
Valid Until / صالح لغاية: ${quotValid}
To / إلى
| # | Item Description / وصف الصنف | Qty / الكمية | Unit Price / سعر الوحدة | VAT / الضريبة | Total / الإجمالي |
|---|---|---|---|---|---|
| Subtotal / المجموع الفرعي | ${parseFloat(data.total_amount).toFixed(3)} | ||||
| VAT Amount / مبلغ الضريبة | ${parseFloat(data.vat_amount).toFixed(2)} | ||||
| Grand Total (OMR) / المجموع الكلي (رع) | ${parseFloat(data.total_with_vat).toFixed(3)} | ||||
Terms & Conditions / الشروط والأحكام:
Generated by / تم إنشاؤه بواسطة ${companyName}