51ee4ecb5a
Finished the planner end to end. Corrected rollover and yearly accounting, recurring targets, savings rules, and targeted dormant restorations. Added editing/deletion for income, expenses, targets, and categories. Rebuilt dashboard, analytics, calendar, settings, exports, authentication, and responsive mobile UI. Added original artwork at [financial-flow.png](/Users/tyemeclifford/Documents/GH/budget/public/assets/images/financial-flow.png), generated with built-in Imagegen using an abstract financial-momentum landscape prompt. Added [self-test.php](/Users/tyemeclifford/Documents/GH/budget/scripts/self-test.php). Verification passed: automated accounting/export tests, full browser workflow, responsive 390px layout, light/dark themes, and no console errors. Tested with FrankenPHP v1.12.4. Live Mailgun delivery was not attempted without credentials.
8 lines
943 B
PHP
8 lines
943 B
PHP
<?php $fieldIncome = $editingIncome ?? []; $defaultIncomeDate = $month === date('Y-m') ? date('Y-m-d') : $month . '-01'; ?>
|
|
<div class="form-grid">
|
|
<label class="span-2">Label<input type="text" name="label" required placeholder="Paycheck, freelance, refund…" value="<?= h($fieldIncome['label'] ?? '') ?>"></label>
|
|
<label>Amount<div class="money-input"><span><?= h($symbol) ?></span><input type="number" name="amount" min="0.01" step="0.01" required value="<?= h((string) ($fieldIncome['amount'] ?? '')) ?>"></div></label>
|
|
<label>Received<input type="date" name="received_on" value="<?= h((string) ($fieldIncome['received_on'] ?? $defaultIncomeDate)) ?>" min="<?= h($month . '-01') ?>" max="<?= h($month . '-' . date('t', strtotime($month . '-01'))) ?>" required></label>
|
|
<label class="span-2">Notes<textarea name="notes" rows="2" placeholder="Optional details"><?= h($fieldIncome['notes'] ?? '') ?></textarea></label>
|
|
</div>
|