Пример #1
0
        public void Action(AddItemInput message)
        {
            CheckItemInput(message);
            ItemModel item = null;

            if (message is AddGuestInput)
            {
                decimal amount = AmountConverter.Convert(message.Amount, false);
                item = new GuestModel(EventService.AddGuest(CurrentEvent.Id, null, message.Name, amount));
                CurrentEvent.Guests.Add((GuestModel)item);
                Queue(ToItemOutput(item, ItemType.Guest));
            }
            else if (message is AddExpenseInput)
            {
                decimal amount = AmountConverter.Convert(message.Amount, true);
                item = new ExpenseModel(EventService.AddExpense(CurrentEvent.Id, null, message.Name, amount));
                CurrentEvent.Expenses.Add((ExpenseModel)item);
                Queue(ToItemOutput(item, ItemType.Expense));
            }
            else
            {
                throw new InvalidCastException($"{message.GetType().Name} is not handled");
            }
            CalculateOutcome();
            QueueItemsCount();
            QueueItemsAmount();
            QueueOutcomeAvailable();
            QueueOutcomeSummary();
            QueueOutcomeGuests();
            QueueItemSaved();
            QueueEnableReset();
        }
Пример #2
0
        private string ProcessNumber(decimal number)
        {
            if (number < 0)
            {
                throw new ArgumentException("The number should be positive.");
            }
            AmountConverter converter = new AmountConverter();
            ulong           integer   = (ulong)Truncate(number);           // extracts the integer part of the number
            ulong           decimals  = (ulong)((number - integer) * 100); // extracts the decimals of the number and converts it to integer


            string result =
                ($"{converter.Convert(integer)} dollar{(integer > 1 ? "s" : "")}" +
                 $"{(decimals > 0 ? $" and {converter.Convert(decimals)} cent{(decimals > 1 ? "s" : "")}" : "")}");

            return(result);
        }
        public override IEnumerable <ValidationError> Validate(PropertyInfo property, object value)
        {
            IList <ValidationError> retval = null;

            retval = new List <ValidationError>();

            if (!string.IsNullOrEmpty((string)value))
            {
                try
                {
                    AmountConverter.Convert((string)value, GetAttribute().GreaterThanZero);
                }
                catch (AmountConvertionException e)
                {
                    retval.Add(new AmountValidationError(e.Reason));
                }
            }

            return(retval);
        }
Пример #4
0
        public void Action(EditItemInput message)
        {
            CheckItemInput(message);
            ItemModel modelItem   = null;
            Item      updatedItem = null;

            if (message is EditGuestInput)
            {
                decimal amount = AmountConverter.Convert(message.Amount, false);
                modelItem   = CurrentEvent.Guests.Single(x => x.Id == message.ItemId);
                updatedItem = EventService.UpdateGuest(CurrentEvent.Id, modelItem.Id, message.Name, amount);
                modelItem.Map(updatedItem);
                Queue(ToItemOutput(modelItem, ItemType.Guest));
            }
            else if (message is EditExpenseInput)
            {
                decimal amount = AmountConverter.Convert(message.Amount, false);
                modelItem   = CurrentEvent.Expenses.Single(x => x.Id == message.ItemId);
                updatedItem = EventService.UpdateExpense(CurrentEvent.Id, modelItem.Id, message.Name, amount);
                modelItem.Map(updatedItem);
                Queue(ToItemOutput(modelItem, ItemType.Expense));
            }
            else
            {
                throw new InvalidCastException($"{message.GetType().Name} is not handled");
            }

            if (modelItem != null)
            {
                CalculateOutcome();
                QueueItemsCount();
                QueueItemsAmount();
                QueueOutcomeAvailable();
                QueueOutcomeSummary();
                QueueOutcomeGuests();
                QueueItemSaved();
            }
        }