Add direct Cash-in-Hand ledger selection for cash payment review
This commit is contained in:
@@ -57,7 +57,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-xs font-semibold uppercase text-slate-500">Cash Ledger</label>
|
||||
<select id="cash-ledger-scope" class="mt-1 w-full rounded-xl border-slate-300 text-xs">
|
||||
<select id="cash-ledger-scope" name="ledger_scope" class="mt-1 w-full rounded-xl border-slate-300 text-xs">
|
||||
<option value="cash" selected>Ledgers under Cash-in-Hand</option>
|
||||
<option value="all">All Tally ledgers — manual selection</option>
|
||||
</select>
|
||||
@@ -306,15 +306,27 @@
|
||||
const companyOption = companySelect && companySelect.options[companySelect.selectedIndex];
|
||||
const companyName = companyOption ? String(companyOption.dataset.companyName || companyOption.textContent || '').trim() : '';
|
||||
if (companyName) fd.set('company_name', companyName);
|
||||
const selectedScope = ledgerScope ? String(ledgerScope.value || 'cash') : 'cash';
|
||||
fd.set('ledger_scope', selectedScope);
|
||||
if(forceRefresh) fd.set('force_refresh','1');
|
||||
ledgerButton.disabled = true; if(ledgerRefreshButton) ledgerRefreshButton.disabled=true;
|
||||
ledgerHelp.textContent = forceRefresh ? 'Starting background refresh from Tally…' : 'Loading cached ledgers or starting background Tally sync…';
|
||||
ledgerHelp.textContent = selectedScope === 'all'
|
||||
? (forceRefresh ? 'Starting background full-ledger refresh from Tally…' : 'Loading the full ledger list for manual selection…')
|
||||
: 'Reading Cash-in-Hand ledgers directly from the selected Tally company…';
|
||||
try {
|
||||
const response = await fetch('/tools/accounting/cash-payments/ledgers', {method:'POST', body:fd, headers:{'Accept':'application/json'}});
|
||||
const data = await response.json();
|
||||
if (!response.ok || !data.ok) throw new Error(data.error || 'Could not load Tally ledgers.');
|
||||
if ((data.ledgers||[]).length) {
|
||||
populateLedgers(data); ledgerButton.disabled=false; if(ledgerRefreshButton) ledgerRefreshButton.disabled=false; return;
|
||||
if (Array.isArray(data.ledgers)) {
|
||||
populateLedgers(data);
|
||||
ledgerButton.disabled=false; if(ledgerRefreshButton) ledgerRefreshButton.disabled=false;
|
||||
ledgerProgress.classList.remove('hidden');
|
||||
ledgerProgressBar.style.width='100%'; ledgerProgressPct.textContent='100%';
|
||||
ledgerProgressStage.textContent = data.cash_only
|
||||
? String(data.ledger_count || 0)+' Cash-in-Hand ledger(s) ready'
|
||||
: String(data.ledger_count || 0)+' ledger(s) ready';
|
||||
window.setTimeout(()=>ledgerProgress.classList.add('hidden'),1200);
|
||||
return;
|
||||
}
|
||||
const job=data.job||{};
|
||||
if(!job.job_id) throw new Error('Local Agent did not return a ledger-sync job id.');
|
||||
@@ -328,7 +340,10 @@
|
||||
if (ledgerButton) ledgerButton.addEventListener('click', function(){loadCashLedgers(false);});
|
||||
if (ledgerRefreshButton) ledgerRefreshButton.addEventListener('click', function(){loadCashLedgers(true);});
|
||||
const companySelect = document.getElementById('cash-tally-company');
|
||||
if (ledgerScope) ledgerScope.addEventListener('change', function(){ renderLedgerOptions(); });
|
||||
if (ledgerScope) ledgerScope.addEventListener('change', function(){
|
||||
ledgerSelect.innerHTML = '<option value="">Select Cash ledger</option>';
|
||||
if (companySelect && companySelect.value) loadCashLedgers(false);
|
||||
});
|
||||
if (companySelect) companySelect.addEventListener('change', function(){
|
||||
allLedgerRows = []; cashLedgerRows = []; lastLedgerMeta = {ledger_count:0, company_name:'', from_cache:false};
|
||||
ledgerSelect.innerHTML = '<option value="">Select Cash ledger</option>';
|
||||
|
||||
Reference in New Issue
Block a user