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;
 }