private static List<OrdinaryExpense> GetOrdinaryExpenses( CreateOrdinaryExpenseInput input, int sequence, IEnumerable<Category> categories ) { var list = new List<OrdinaryExpense>(); OrdinaryExpense ordinaryExpense = Mapper.Map<CreateOrdinaryExpenseInput, OrdinaryExpense>( input ); double price = input.Price; long[] selectedConsumerIds = input.SelectedConsumerIds; int consumerCount = selectedConsumerIds.Count(); if ( consumerCount == 1 ) { ordinaryExpense.Sequence = sequence; ordinaryExpense.ConsumerId = selectedConsumerIds.Single(); list.Add( ordinaryExpense ); } else if ( consumerCount > 1 ) { double averagePrice = EnhancedMath.RoundDown( price / consumerCount, 2 ); double primaryConsumerPrice = price - averagePrice * ( consumerCount - 1 ); Category treat = categories.Single( x => x.Name == "Treat" ); int i = 0; foreach ( long consumerId in selectedConsumerIds ) { OrdinaryExpense clone = ordinaryExpense.CloneOrdinaryExpense(); clone.Sequence = sequence + i; clone.ConsumerId = consumerId; bool isPrimaryConsumer = ( i == 0 ); if ( isPrimaryConsumer ) { clone.Price = primaryConsumerPrice; } else { clone.CategoryId = treat.Id; clone.Price = averagePrice; } list.Add( clone ); i++; } } return list; }
public static List<OrdinaryExpense> GetOrdinaryExpenses( IMvcExpenseUnitOfWork unitOfWork, CreateOrdinaryExpenseInput input, IEnumerable<Category> categories ) { int sequence = unitOfWork.OrdinaryExpenseRepository.NewSequence( input.Date ); List<OrdinaryExpense> list = GetOrdinaryExpenses( input, sequence, categories ); return list; }