Example #1
0
 public static void ClearTransaction(IOnlinePaymentFlowState state)
 {
     state.current_transaction.Datetime_finished = DateTime.Now;
     state.database.UpdateTransaction(state.current_transaction);
     state.current_transaction = null;
     state.flow.state          = new EntrypointState(state.api, state.database, state.flow);
 }
Example #2
0
 public PaidState(IOnlinePaymentFlowState state, OnlinePaymentFlow flow)
 {
     this.api                 = state.api;
     this.database            = state.database;
     this.current_transaction = state.current_transaction;
     this.flow                = flow;
 }
Example #3
0
        public void Construct(string sql_conn_string)
        {
            mBillsDatabase  database = new mBillsDatabase(sql_conn_string);
            MBillsAPIFacade api      = new MBillsAPIFacade();

            state = new flows.EntrypointState(api, database, this);
        }
Example #4
0
 public EntrypointState(IOnlinePaymentFlowState state, OnlinePaymentFlow flow)
 {
     this.api                 = state.api;
     this.database            = state.database;
     this.current_transaction = null;
     this.flow                = flow;
     LoadLastTransaction(flow);
 }
Example #5
0
        public static bool VoidTransaction(IOnlinePaymentFlowState state)
        {
            ETransactionStatus status = state.api.Void(state.current_transaction.Transaction_id, "Your payment reservation has been cancelled!");

            if (status == ETransactionStatus.Voided)
            {
                PersistAndTransitionState(state, status);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #6
0
 public static bool RefreshTransaction(IOnlinePaymentFlowState state)
 {
     try
     {
         ETransactionStatus new_status     = state.api.GetTransactionStatus(state.current_transaction.Transaction_id);
         ETransactionStatus current_status = TransactionStatus.FromDatabaseStatus(state.current_transaction.Status);
         if (new_status != current_status)
         {
             PersistAndTransitionState(state, new_status);
         }
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Example #7
0
        public static IOnlinePaymentFlowState GetCorrespondingState(IOnlinePaymentFlowState state, ETransactionStatus status)
        {
            switch (status)
            {
            case ETransactionStatus.Accepted:
                return(new AcceptedState(state, state.flow));

            case ETransactionStatus.Authorized:
                return(new AuthorizedState(state, state.flow));

            case ETransactionStatus.InsufficientFunds:
                return(new UnpaidFinishedState(state, state.flow));

            case ETransactionStatus.Paid:
                return(new PaidState(state, state.flow));

            case ETransactionStatus.Pending:
                throw new Exception("Transaction was in pending state, which is unknown to us at this time.");

            case ETransactionStatus.RecurringCancelled:
                throw new Exception("Transaction was in RecurringCancelled state. We don't support recurring payments.");

            case ETransactionStatus.Rejected:
                return(new UnpaidFinishedState(state, state.flow));

            case ETransactionStatus.TimeOut:
                return(new UnpaidFinishedState(state, state.flow));

            case ETransactionStatus.TransactionAmountTooBig:
                return(new UnpaidFinishedState(state, state.flow));

            case ETransactionStatus.TransactionAmountTooLow:
                return(new UnpaidFinishedState(state, state.flow));

            default:
                return(null);
            }
        }
Example #8
0
 public static void PersistAndTransitionState(IOnlinePaymentFlowState state, ETransactionStatus status)
 {
     state.current_transaction.Status = TransactionStatus.ToDatabaseStatus(status);
     state.database.UpdateTransaction(state.current_transaction);
     state.flow.state = GetCorrespondingState(state, status);
 }
Example #9
0
        public static IOnlinePaymentFlowState GetCorrespondingState(string status, IOnlinePaymentFlowState state)
        {
            ETransactionStatus s = TransactionStatus.FromString(status);

            return(GetCorrespondingState(state, s));
        }