DECLARE
CURSOR c_sale_master IS
SELECT
m.SALE_ID,
TO_CHAR(m.SALE_DATE, 'DD-MON-YYYY') AS SALE_DATE,
m.CUSTOMER_NAME
FROM SALE_MASTER m
WHERE m.SALE_ID = :P1_SALE_ID;
CURSOR c_sale_detail IS
SELECT
d.PRODUCT_NAME,
d.QUANTITY,
d.PRICE,
d.AMOUNT
FROM SALE_DETAIL d
WHERE d.SALE_ID = :P1_SALE_ID;
v_total NUMBER := 0;
v_net NUMBER := 0;
v_cash NUMBER := 200; -- Example cash received
v_balance NUMBER := 0;
v_sr NUMBER := 1;
BEGIN
HTP.P('<html><head><style>
body { font-family: monospace; font-size: 12px; }
.center { text-align: center; }
.bold { font-weight: bold; }
.invoice-box {
max-width: 300px;
margin: auto;
border: 1px solid #000;
padding: 10px;
}
table { width: 100%; border-collapse: collapse; margin-top: 10px; }
th, td {
border: 1px solid #000;
padding: 4px;
text-align: left;
}
.no-border td {
border: none;
padding: 2px 4px;
}
.summary td {
font-weight: bold;
}
.thankyou {
margin-top: 20px;
text-align: center;
font-size: 13px;
font-weight: bold;
}
</style></head><body>');
HTP.P('<div class="invoice-box">');
HTP.P('<div class="center bold">ABC & CO.</div>');
HTP.P('<div class="center">Example Road Test Street</div>');
HTP.P('<div class="center">Ph: 123456789</div>');
-- Master Info
FOR m IN c_sale_master LOOP
HTP.P('<table class="no-border" style="margin-top: 10px;">');
HTP.P('<tr><td><strong>Bill No.:</strong></td><td>' || m.SALE_ID || '</td></tr>');
HTP.P('<tr><td><strong>Customer:</strong></td><td>' || m.CUSTOMER_NAME || '</td></tr>');
HTP.P('<tr><td><strong>Date:</strong></td><td>' || m.SALE_DATE || '</td></tr>');
HTP.P('</table>');
END LOOP;
-- Detail Header
HTP.P('<table>');
HTP.P('<tr>
<th>Sr #</th>
<th>Description</th>
<th>Qty</th>
<th>Rate</th>
<th>Amount</th>
</tr>');
-- Detail Rows
FOR d IN c_sale_detail LOOP
HTP.P('<tr>
<td>' || v_sr || '</td>
<td>' || d.PRODUCT_NAME || '</td>
<td>' || d.QUANTITY || '</td>
<td>' || d.PRICE || '</td>
<td>' || d.AMOUNT || '</td>
</tr>');
v_total := v_total + d.AMOUNT;
v_sr := v_sr + 1;
END LOOP;
HTP.P('</table>');
-- Summary
v_net := v_total - 100; -- assuming fixed discount
v_balance := v_net - v_cash;
HTP.P('<table class="summary" style="margin-top: 10px;">');
HTP.P('<tr><td>Total Bill</td><td>' || v_total || '</td></tr>');
HTP.P('<tr><td>Discount</td><td>100</td></tr>');
HTP.P('<tr><td>Net Bill</td><td>' || v_net || '</td></tr>');
HTP.P('<tr><td>Cash Receive</td><td>' || v_cash || '</td></tr>');
HTP.P('<tr><td>COC</td><td>' || v_balance || '</td></tr>');
HTP.P('</table>');
-- Thank You Note
HTP.P('<div class="thankyou">*** Thank You! Visit Again! ***</div>');
HTP.P('</div>'); -- close invoice box
HTP.P('</body></html>');
END;
No comments:
Post a Comment