private static EnvBal getNegativeEnvelope(List <EnvBal> envelopes) { decimal smallestNegative = Decimal.Negate(Decimal.MaxValue); EnvBal smallest = null; foreach (EnvBal eSum in envelopes) { if (eSum.balance < 0.0m && eSum.balance > smallestNegative) { smallestNegative = eSum.balance; smallest = eSum; } } return(smallest); }
private static void fillInFromEnvelopeLines(FFDataSet dataSet, LineSum lineSum, List <EnvBal> envelopes, decimal skipAmount) { decimal remainingAmount = lineSum.RemainingAmount - skipAmount; while (remainingAmount > 0.0m) { FFDataSet.EnvelopeLineRow envLine = null; EnvBal envelope = getNegativeEnvelope(envelopes); if (envelope == null) { break; } // Make a new envelope line for this envelope envLine = dataSet.EnvelopeLine.NewEnvelopeLineRow(); envLine.lineItemID = lineSum.Line.id; envLine.envelopeID = envelope.envelopeID; envLine.description = ""; envLine.amount = 0.0m; dataSet.EnvelopeLine.AddEnvelopeLineRow(envLine); // decide how much to change the envelopeLine.amount if (remainingAmount >= +Math.Abs(envelope.balance)) { envLine.amount = Math.Abs(envelope.balance); remainingAmount -= Math.Abs(envelope.balance); envelope.balance = 0.0m; } else { envLine.amount = remainingAmount; envelope.balance += remainingAmount; remainingAmount = 0.0m; } } }