Beispiel #1
0
 void splittaNettoSeSaturoReversali(MovimentoRaggruppato mov)
 {
     if (mov.importoNetto() == 0)
     {
         return;
     }
     if (mov.saturoReversali())
     {
         var nuovoMov = mov.splittaResiduo();
         movimenti.Add(nuovoMov);
     }
 }
Beispiel #2
0
        /// <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);
        }