Close all GL entry gaps across the accounting surface
- Stripe payments/refunds/chargebacks now post DR/CR entries (PaymentController) - Vendor credit void now reverses the posted GL lines (VendorCreditsController) - Gift certificate issue/redeem/void post GL to account 2500 GC Liability; FinancialReportService Trial Balance + Balance Sheet include GC liability and breakage income; P&L shows deferred revenue deduction and breakage income line - Customer deposits now post DR Checking / CR 2300 on record, reverse on delete; invoice auto-apply uses DR 2300 / CR AR (not a second bank debit); draft invoice delete reverses deposit-apply GL before the AR reversal - Deposit.DepositAccountId column added; account 2300 seeded via migration - InvoicesController.ApplyCredit now posts DR Sales Discounts / CR AR, consistent with CreditMemosController.Apply - IssueRefund (cash/card) posts DR AR / CR Bank and sets Refund.DepositAccountId; refund modal gains a bank account selector hidden for store-credit path - CancelRefund (cash/card) reverses the IssueRefund GL entries - LedgerService GetAccountLedgerAsync + ComputePriorBalanceAsync now include Refunds, CreditMemoApplications, VendorCreditApplications, GC Liability (2500), and Customer Deposits (2300) so account ledger view and RecalculateAllAsync produce correct balances - Three EF migrations applied: SeedSalesDiscountsAccount, AccountingGapsPhase2, AccountingDepositsGL - Unit tests updated for new IAccountBalanceService constructor params (200/200) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1145,6 +1145,20 @@
|
||||
<option value="5">Store Credit</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3" id="refundDepositAccountRow">
|
||||
<label class="form-label fw-semibold">Refund From Account</label>
|
||||
<select name="DepositAccountId" class="form-select">
|
||||
<option value="">(Not tracked)</option>
|
||||
@if (ViewBag.BankAccounts != null)
|
||||
{
|
||||
@foreach (var acct in (IEnumerable<SelectListItem>)ViewBag.BankAccounts)
|
||||
{
|
||||
<option value="@acct.Value">@acct.Text</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
<div class="form-text">Bank or cash account the refund is paid from.</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-semibold">Reason <span class="text-danger">*</span></label>
|
||||
<input type="text" name="Reason" class="form-control" placeholder="e.g. Warranty claim, duplicate charge..." required />
|
||||
@@ -1171,6 +1185,7 @@
|
||||
document.getElementById('refundAlertCash').classList.toggle('d-none', isCredit);
|
||||
document.getElementById('refundAlertCredit').classList.toggle('d-none', !isCredit);
|
||||
document.getElementById('refundReferenceRow').classList.toggle('d-none', isCredit);
|
||||
document.getElementById('refundDepositAccountRow').classList.toggle('d-none', isCredit);
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user