Verificeret mod app@9d146f9, 16 skal genverificeres, 0 brudt
Tabt kvittering regner øre med round(v * 100)
Fælde
faelde.kvitteringer.tabt-kvittering-oere
LostReceiptService::createAsVoucher omregner beløb til øre med et fast gange 100 på en float, i strid med pengereglen.
Felter
- symptom
- Et erstatningsbilag i en valuta uden to decimaler får et beløb, der er 100 gange for stort eller for småt, og en halv øre kan runde forkert.
- aarsag
- Metoden viser beløbet i PDF-bilaget med MinorUnits::toMinor, men gemmer beløbet på bilaget med (int) round((float) $v * 100). Det fejler for valutaer uden to decimaler og for halve øre, fordi floaten ikke er præcis. Pengereglen kræver heltal i mindste enhed og valutabevidst omregning.
- saadan undgaas
- Brug MinorUnits::toMinor til både visning og lagring. Rettes ikke i Atlas. Bifund fra recon, stadig sandt på main.
Prosa
VoucherPopulator bruger den rigtige omregning, MinorUnits::toMinor, som kalder Money::fromMajor med bcmath og halv op. Kun erstatningsbilaget bruger det faste gange 100. Sporet på denne fælde er også nævnt i PR-teksten.
Kilder
kode: app app/Services/Ap/LostReceiptService.php · LostReceiptService::createAsVoucherverificeretkode: app app/Services/Ap/VoucherPopulator.php · VoucherPopulator::populateverificeret
Bruges af
- Opret et erstatningsbilag til en banktransaktion (
handling.kvitteringer.bank-erstatningsbilagvia prosa) - Opret et erstatningsbilag (
handling.kvitteringer.tabt-kvitteringvia prosa)