/// <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); }
public void collegaEntrataAGruppo(quotaMovimento entrata, MovimentoRaggruppato mov) { mov.addEntrata(entrata); splittaNettoSeSaturoReversali(mov); }