Cashup: add 'Load last count' receipts button on petty cash form
Fetches receipts from the most recent petty cash count and populates the current form — for when the tin hasn't been replenished and slips carry over. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
5fe8fe2814
commit
c2ab162870
1 changed files with 22 additions and 1 deletions
|
|
@ -220,6 +220,7 @@ export function FloatCountForm({ type }: { type: CountType }) {
|
||||||
const [receipts, setReceipts] = useState<Array<{ amount: string; description: string }>>([])
|
const [receipts, setReceipts] = useState<Array<{ amount: string; description: string }>>([])
|
||||||
const [notes, setNotes] = useState('')
|
const [notes, setNotes] = useState('')
|
||||||
const [saving, setSaving] = useState(false)
|
const [saving, setSaving] = useState(false)
|
||||||
|
const [loadingLast, setLoadingLast] = useState(false)
|
||||||
const [error, setError] = useState<string | null>(null)
|
const [error, setError] = useState<string | null>(null)
|
||||||
const [savedRecord, setSavedRecord] = useState<DetailRecord | null>(null)
|
const [savedRecord, setSavedRecord] = useState<DetailRecord | null>(null)
|
||||||
const [changeTinTargets, setChangeTinTargets] = useState<Record<string, number>>({})
|
const [changeTinTargets, setChangeTinTargets] = useState<Record<string, number>>({})
|
||||||
|
|
@ -278,6 +279,21 @@ export function FloatCountForm({ type }: { type: CountType }) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadLastReceipts() {
|
||||||
|
setLoadingLast(true)
|
||||||
|
try {
|
||||||
|
const list = await api.get<{ rows: FloatCount[] }>('/floats?type=petty_cash&offset=0&limit=1')
|
||||||
|
if (!list.rows.length) { setError('No previous petty cash count found.'); return }
|
||||||
|
const detail = await api.get<DetailRecord>(`/floats/${list.rows[0].id}`)
|
||||||
|
if (!detail.receipts.length) { setError('Last count had no receipts.'); return }
|
||||||
|
setReceipts(detail.receipts.map(r => ({ amount: String(r.receipt_value), description: r.receipt_description || '' })))
|
||||||
|
} catch {
|
||||||
|
setError('Could not load last count.')
|
||||||
|
} finally {
|
||||||
|
setLoadingLast(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function reset() {
|
function reset() {
|
||||||
setSavedRecord(null)
|
setSavedRecord(null)
|
||||||
setDenomQtys({})
|
setDenomQtys({})
|
||||||
|
|
@ -338,8 +354,13 @@ export function FloatCountForm({ type }: { type: CountType }) {
|
||||||
<Card style={{ marginBottom: '1rem' }}>
|
<Card style={{ marginBottom: '1rem' }}>
|
||||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '0.75rem' }}>
|
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '0.75rem' }}>
|
||||||
<h2 style={{ fontSize: '0.875rem', fontWeight: 700, color: 'var(--text-mid)' }}>RECEIPTS</h2>
|
<h2 style={{ fontSize: '0.875rem', fontWeight: 700, color: 'var(--text-mid)' }}>RECEIPTS</h2>
|
||||||
|
<div style={{ display: 'flex', gap: '0.5rem' }}>
|
||||||
|
<Btn small variant="ghost" disabled={loadingLast} onClick={loadLastReceipts}>
|
||||||
|
{loadingLast ? 'Loading…' : 'Load last count'}
|
||||||
|
</Btn>
|
||||||
<Btn small variant="ghost" onClick={() => setReceipts(r => [...r, { amount: '', description: '' }])}>+ Add</Btn>
|
<Btn small variant="ghost" onClick={() => setReceipts(r => [...r, { amount: '', description: '' }])}>+ Add</Btn>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
{receipts.map((r, i) => (
|
{receipts.map((r, i) => (
|
||||||
<div key={i} style={{ display: 'grid', gridTemplateColumns: '100px 1fr 32px', gap: '0.4rem', marginBottom: '0.35rem', alignItems: 'center' }}>
|
<div key={i} style={{ display: 'grid', gridTemplateColumns: '100px 1fr 32px', gap: '0.4rem', marginBottom: '0.35rem', alignItems: 'center' }}>
|
||||||
<input type="number" min="0" step="0.01" value={r.amount} placeholder="0.00"
|
<input type="number" min="0" step="0.01" value={r.amount} placeholder="0.00"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue