コード例 #1
0
        public void PerformCharge(Charge charge)
        {
            var card     = charge.Card;
            var messages = LocalizationFactory.CreateLocalResources();

            if (card != null)
            {
                if (charge.Status != ChargeStatus.Pending)
                {
                    throw new InvalidOperationException(messages.GetStringResource(LocalizationKeys.Domain.exception_InvalidStateForCharge));
                }
                if (card.CanWithdraw(charge.Amount))
                {
                    card.WithdrawMoney(charge.Amount,
                                       MovementType.CON,
                                       messages.GetStringResource(LocalizationKeys.Domain.messages_ChargeMessageDescription),
                                       messages.GetStringResource(LocalizationKeys.Domain.messages_ChargeMessageDisplayName),
                                       charge.Movements.FirstOrDefault()
                                       );
                    charge.Status = ChargeStatus.Accepted;
                    charge.GenerateOperationCode();
                    charge.ImageUrl = GenerateChargeUrl();
                }
                else
                {
                    charge.Status = ChargeStatus.Canceled;
                }
            }
            else
            {
                throw new InvalidOperationException(messages.GetStringResource(LocalizationKeys.Domain.exception_PerformChargeCardIsNull));
            }
        }