in starting or 1st time or for first invoice ‘precious copy count’ will be zero and next time it take input from ‘current copy count’ of first time and so loop going on 2.‘total copy’ =‘current copy count’ - ‘precious copy count’ 3. there are a field name ‘free copy’ which is provide first time as a fixed input if user use less than ‘free copy’ then ‘billed’ will be zero and ‘amount’=‘monthly rental charge’ and ‘negative amount’= ‘free copy’ - ‘total copy’ it going on until when ‘negative amount’ become zero it will not be negative
if user use more than ‘free copy’ then ‘billed’= ‘total copies’ - ‘negative amount’ then ‘amount’=‘billed’ * ‘rate’
frappe.ui.form.on(‘Sales Invoice Rental’, {
refresh(frm) {
// Initialize Precious copy Count to zero for the first invoice
if (!frm.doc.__islocal && frm.doc[‘precious_copy_count’] === 0) {
frm.set_value(‘precious_copy_count’, frm.doc[‘current_copy_count’]);
}
// Calculate Total Copies as the difference between Current Copy Count and Precious Copy Count
frm.set_value('total_copies', frm.doc['current_copy_count'] - frm.doc['precious_copy_count']);
// Calculate Monthly Rental Charge based on Total Copies and Rate (per)
frm.set_value('monthly_rental_charge', frm.doc['total_copies'] * frm.doc['rate']);
// Check if user used less than Free Copy
if (frm.doc['total_copies'] <= frm.doc['free_copy']) {
// Billed is zero, Amount is Monthly Rental Charge, and Negative amount is Free Copy - Total Copies
frm.set_value('billed', 0);
frm.set_value('amount', frm.doc['monthly_rental_charge']);
frm.set_value('negative_amount', frm.doc['free_copy'] - frm.doc['total_copies']);
} else {
// Billed is Total Copies - Negative amount
frm.set_value('Billed', frm.doc['total_copies'] - frm.doc['negative_amount']);
// Amount is Billed * Rate (per)
frm.set_value('amount', frm.doc['billed'] * frm.doc['rate']);
// Reset Negative amount to zero
frm.set_value('negative_amount', 0);
}
}});