void splittaNettoSeSaturoReversali(MovimentoRaggruppato mov) { if (mov.importoNetto() == 0) { return; } if (mov.saturoReversali()) { var nuovoMov = mov.splittaResiduo(); movimenti.Add(nuovoMov); } }
/// <summary> /// Può variare la collezione dei movimenti raggruppati ma non varia quella delle entrate /// </summary> /// <param name="entrata"></param> /// <returns></returns> bool collegaEntrata(quotaMovimento entrata) { if (totaleNetto < entrata.quota) { return(false); } if (collegaEntrataMatchEsatto(entrata)) { return(true); } if (collegaEntrataMatchMassimaCapienza(entrata)) { return(true); } //Dato che ogni volta che colleghiamo un'entrata splittiamo il netto ove ci siano 30 reversali, // non è possibile che vi sia un movimento con disponibile sufficiente ma 30 reversali //Quindi vi devono essere movimenti di spesa con disponibilità insufficiente e meno di 30 reversali //A questo punto ad ognuno di loro associamo una quota dell'entrata data while (entrata.quota > 0) { MovimentoRaggruppato maxDisp = movConMassimoResiduo(); if (maxDisp == null) { return(false); //non dovrebbe accadere } decimal residuo = maxDisp.importoNetto(); if (residuo >= entrata.quota) { //il movimento considerato è capiente per quel che rimane dell'entrata collegaEntrataAGruppo(entrata, maxDisp); return(true); } var quotaEntrata = entrata.splittaQuota(residuo); maxDisp.addEntrata(quotaEntrata); } return(true); }