asset slice + testing initiative: fixed assets, property/mutation/fuzz testing, docs
This commit is contained in:
1 parent
9126e33f77
commit
325eb1003a
1 file changed
+12
-3
@@ -73,21 +73,30 @@ impl ReceiptPolicy {
|
|||||||
/// True when posting this entry requires at least one receipt.
|
/// True when posting this entry requires at least one receipt.
|
||||||
pub fn receipt_required(&self, ledger: &Ledger, entry: &JournalEntry) -> bool {
|
pub fn receipt_required(&self, ledger: &Ledger, entry: &JournalEntry) -> bool {
|
||||||
let codes = self.account_codes(ledger, entry);
|
let codes = self.account_codes(ledger, entry);
|
||||||
|
let refs: Vec<&str> = codes.iter().map(|s| s.as_str()).collect();
|
||||||
|
self.receipt_required_for(&refs, Self::entry_debits(entry))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// True when an entry touching these account codes with this debit total
|
||||||
|
/// requires at least one receipt. The code-level check behind
|
||||||
|
/// [`Self::receipt_required`], for postings (like disposals) computed
|
||||||
|
/// without a draft entry in hand.
|
||||||
|
pub fn receipt_required_for(&self, codes: &[&str], debits: Decimal) -> bool {
|
||||||
// Per-account override: any line in a required account → required.
|
// Per-account override: any line in a required account → required.
|
||||||
if codes
|
if codes
|
||||||
.iter()
|
.iter()
|
||||||
.any(|c| self.receipt_required_accounts.iter().any(|r| r == c))
|
.any(|c| self.receipt_required_accounts.iter().any(|r| r == *c))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Strictly greater than the threshold (Stephen: ">$25").
|
// Strictly greater than the threshold (Stephen: ">$25").
|
||||||
if Self::entry_debits(entry) <= self.threshold() {
|
if debits <= self.threshold() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Exempt only when every line is in an exempt account.
|
// Exempt only when every line is in an exempt account.
|
||||||
!codes
|
!codes
|
||||||
.iter()
|
.iter()
|
||||||
.all(|c| self.receipt_exempt_accounts.iter().any(|e| e == c))
|
.all(|c| self.receipt_exempt_accounts.iter().any(|e| e == *c))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Human-readable policy summary for previews and errors.
|
/// Human-readable policy summary for previews and errors.
|
||||||
|
|||||||
Reference in new issue
Block a user