Example #1
0
        /// <summary>
        /// For booking the tickets - abstract method defined in derived class
        /// </summary>
        /// <param name="customerID">ID of the customer</param>
        /// <param name="trainID">TrainID of the train</param>
        /// <param name="serviceType">service type selected by user</param>
        /// <param name="noOfSeats">noofseats to be booked</param>
        /// <param name="ticketStatus">ticket status of booking ticket</param>
        public override void BookTicket(int customerID, int trainID, string serviceType, int noOfSeats, out string ticketStatus)
        {
            //delegate instance pointing to purchaseTicket method
            transactionDele += new MoneyTransaction(gatewayRef.PurchaseTickets);
            ticketStatus     = "WaitingList";
            int    index      = 0;
            Ticket bookTicket = new Ticket();

            foreach (Seats item in RailwayData.seats)
            {
                index = RailwayData.seats.IndexOf(item);
                Seats searchSeat = (Seats)item;
                if (searchSeat.TrainID == trainID && searchSeat.ServiceType == serviceType)
                {
                    RailwayData.seats.Remove(searchSeat);
                    searchSeat.NumberOfSeats = searchSeat.NumberOfSeats - noOfSeats;
                    RailwayData.seats.Insert(index, searchSeat);
                    bookTicket.CustomerID    = customerID;
                    bookTicket.DateOfBooking = DateTime.Now.Date.ToString();
                    Console.Write("\nEnter the date of journey :");
                    bookTicket.DateOfJourney = Console.ReadLine();
                    bookTicket.FromStation   = ((TrainSchedule)RailwayData.trainSchedule[trainID]).FromStation;
                    bookTicket.ToStation     = ((TrainSchedule)RailwayData.trainSchedule[trainID]).ToStation;
                    bookTicket.TotalFare     = searchSeat.FarePerPerson * noOfSeats;
                    bookTicket.TrainID       = trainID;
                    bookTicket.ServiceType   = serviceType;
                    bookTicket.NumberOfSeats = noOfSeats;
                    bookTicket.PnrNumber     = rn.Next(1000, 2000).ToString();

                    if (searchSeat.NumberOfSeats > noOfSeats)
                    {
                        ticketStatus = "Booked";
                    }
                    else
                    {
                        ticketStatus = "Waiting";
                    }
                    bookTicket.TicketStatus = ticketStatus;

                    bookTicket.Passengers = new ArrayList();
                    for (int count = 0; count < noOfSeats; count++)
                    {
                        Console.WriteLine("\nEnter the passenger details \n");
                        Passenger passenger = AddPassengerDetails(bookTicket.PnrNumber, count);
                        bookTicket.Passengers.Add(passenger);
                    }
                    Console.WriteLine("\nEnter the payment Details\n");
                    Console.Write("Enter the credit Card Number:");
                    bookTicket.CreditCardNumber = long.Parse(Console.ReadLine());

                    //Invoking purchaseTicket method through delegate
                    transactionDele(bookTicket.CreditCardNumber, bookTicket.TotalFare);

                    RailwayData.ticketDetails.Add(bookTicket.PnrNumber, bookTicket);
                    serializerRef.Serialize("myTicket.xml", bookTicket);
                    Console.WriteLine("PNR Number  : " + bookTicket.PnrNumber);
                    break;
                }
            }
        }
Example #2
0
        public ActionResult Save(PaymentViewModel paymentViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("PaymentForm"));
            }

            if (paymentViewModel.Amount == 0)
            {
                ModelState.AddModelError("", WebValidationErrorMessages.AmountIsZero);
                return(View("PaymentForm"));
            }

            if (paymentViewModel.Type == TransactionType.None)
            {
                ModelState.AddModelError("", WebValidationErrorMessages.InvalidTransactionType);
                return(View("PaymentForm"));
            }

            if (paymentViewModel.Type == TransactionType.Supply && paymentViewModel.Amount < 0)
            {
                ModelState.AddModelError("", WebValidationErrorMessages.AmountShouldBeMoreThanZero);
                return(View("PaymentForm"));
            }

            if (paymentViewModel.Type == TransactionType.Withdraw && paymentViewModel.Amount > 0)
            {
                ModelState.AddModelError("", WebValidationErrorMessages.AmountShouldBeLessThanZero);
                return(View("PaymentForm"));
            }

            if (paymentViewModel.Id == 0)
            {
                var user = _context.Users.SingleOrDefault(x => x.UserName == paymentViewModel.Username);

                if (user == null || user.GetFullname() != paymentViewModel.FullName)
                {
                    ModelState.AddModelError("", WebValidationErrorMessages.UserNotFound);
                    return(View("PaymentForm"));
                }

                user.Balance += paymentViewModel.Amount;

                var newPayment = new MoneyTransaction()
                {
                    ApplicationUser = user,
                    Date            = DateTime.Now,
                    Type            = paymentViewModel.Type,
                    Amount          = paymentViewModel.Amount,
                    Description     = paymentViewModel.Description
                };

                _context.MoneyTransactions.Add(newPayment);
            }

            _context.SaveChanges();

            return(RedirectToAction("List"));
        }
        public MoneyTransaction Deposit(decimal amount)
        {
            MoneyTransaction trans = new MoneyTransaction(amount);

            this.transactions.Add(trans);

            return(trans);
        }
        public IEnumerable <string> GetTagsToApply(MoneyTransaction transaction)
        {
            if (transaction.Description.IndexOf(TextToSearch, StringComparison.CurrentCultureIgnoreCase) >= 0)
            {
                return(TagsToApply);
            }

            return(new List <string>());
        }
Example #5
0
        public MoneyTransaction Deposit(decimal amount)
        {
            MoneyTransaction transaction = new MoneyTransaction(amount);

            this.Transactions.Add(transaction);

            Log(string.Format($"{this.UserName} deposited {amount:C} balance {this.Balance:C}"));

            return(transaction);
        }
Example #6
0
        public Receipt Purchase(IProduct product)
        {
            MoneyTransaction transaction = this.account.Withdraw(product.Price);

            if (transaction == null)
            {
                return(null);
            }

            return(new Receipt(product.Name, product.Price));
        }
        public void ApplyRules(MoneyTransaction transaction)
        {
            IEnumerable <string> ruleAppliedTags = transaction.Tags;

            foreach (var rule in _rules)
            {
                ruleAppliedTags = ruleAppliedTags.Concat(rule.GetTagsToApply(transaction));
            }

            transaction.Tags = new ObservableCollection <string>(ruleAppliedTags.Distinct());
        }
Example #8
0
        public IPurchaseReport Purchase(IProduct product)
        {
            MoneyTransaction transaction = this.account.Withdraw(product.Price);

            if (transaction == null)
            {
                return(FailedPurchase.Instance);
            }

            return(new Receipt(this.Username, product.Name, product.Price));
        }
Example #9
0
        public IPurchaseReport Purchase(IProduct product)
        {
            MoneyTransaction transaction = this.account.Withdraw(product.Price);

            if (transaction == null)
            {
                return(this.reportFactory.CreateNotEnoughMoney(this.Username, product.Name,
                                                               product.Price));
            }

            return(new Receipt(this.Username, product.Name, product.Price));
        }
Example #10
0
        public override MoneyTransaction Deposit(decimal amount)
        {
            if (amount <= 0)
            {
                throw new ArgumentException("Amount to deposit must be positive.", nameof(amount));
            }

            var trans = new MoneyTransaction(amount);

            RegisterTransaction(trans);
            return(trans);
        }
        private void ProcessPendingWithdrawal(Option <MoneyTransaction> option)
        {
            if (!option.Any())
            {
                return;
            }

            MoneyTransaction transaction = option.Single();

            base.RegisterTransaction(transaction);
            this.pendingTransactions.Remove(transaction);
        }
Example #12
0
 public bool Register(MoneyTransaction transaction)
 {
     try
     {
         MoneyTransactions.Push(transaction);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Example #13
0
        public MoneyTransaction Withdraw(decimal amount)
        {
            if (this.Balance < amount)
            {
                return(null);
            }

            MoneyTransaction trans = new MoneyTransaction(-amount);

            this.transactions.Add(trans);

            return(trans);
        }
Example #14
0
 public static DepositMoneyResponse ResponseFromModel(MoneyTransaction transaction)
 {
     return(new DepositMoneyResponse()
     {
         StudentId = transaction.StudentId,
         Type = transaction.Type,
         Date = transaction.Date.ToString(GlobalParams.DateTimeResponseFormat),
         OriginalBalance = transaction.OriginalBalance,
         ResultBalance = transaction.ResultBalance,
         MoneyAmount = transaction.MoneyAmount,
         MoneyTransactionId = transaction.MoneyTransactionId
     });
 }
        public override Option <MoneyTransaction> TryWithdraw(decimal amount)
        {
            if (amount <= 0)
            {
                throw new ArgumentException("Amount to withdraw must be positive.", nameof(amount));
            }

            MoneyTransaction transaction = new MoneyTransaction(-amount);

            this.pendingTransactions.Add(transaction);
            this.ProcessPendingWithdrawals();

            return(Option <MoneyTransaction> .Create(transaction));
        }
Example #16
0
        public Option <MoneyTransaction> TryWithdraw(decimal amount)
        {
            if (Balance < amount)
            {
                return(None.Value);
            }

            MoneyTransaction transaction = new MoneyTransaction(-amount);

            Transactions.Add(transaction);

            Log(string.Format($"{UserName} withdrew {amount:C} balance {Balance:C}"));

            return(transaction);
        }
Example #17
0
        public IOption <MoneyTransaction> TryWithdraw(decimal amount)
        {
            if (this.Balance < amount)
            {
                return(Option.None <MoneyTransaction>());
            }

            MoneyTransaction transaction = new MoneyTransaction(-amount);

            this.Transactions.Add(transaction);

            this.Log(string.Format($"{this.UserName} withdrew {amount:C} balance {this.Balance:C}"));

            return(Option.Some(transaction));
        }
Example #18
0
        public override Task <SaveMoneyTransactionResponse> SaveMoneyTransaction(SaveMoneyTransactionRequest request, ServerCallContext context)
        {
            var newData = new MoneyTransaction
            {
                FromUserName = request.FromUserName,
                Sign         = request.Sign,
                RegisterDate = (new DateTime(1970, 1, 1)).AddMilliseconds(request.RegisterDate),
                Sum          = request.Sum
            };
            var id = _moneyTransactionRepository.Insert(newData);

            return(Task.FromResult(new SaveMoneyTransactionResponse {
                Id = id.ToString()
            }));
        }
        public override MoneyTransaction Deposit(decimal amount)
        {
            if (amount <= 0)
            {
                throw new ArgumentException("Amount to deposit must be positive.", nameof(amount));
            }

            MoneyTransaction transaction = new MoneyTransaction(amount);

            base.RegisterTransaction(transaction);

            this.ProcessPendingWithdrawals();

            return(transaction);
        }
        private Option <MoneyTransaction> TrySelectFirstPendingTransaction()
        {
            if (!this.pendingTransactions.Any())
            {
                return(Option <MoneyTransaction> .CreateEmpty());
            }

            MoneyTransaction candidate = this.pendingTransactions.First();

            if (base.Balance + candidate.Amount < 0)
            {
                return(Option <MoneyTransaction> .CreateEmpty());
            }

            return(Option <MoneyTransaction> .Create(candidate));
        }
Example #21
0
        public Option <MoneyTransaction> TrySelectOne(IEnumerable <MoneyTransaction> transactions, decimal maxAmount)
        {
            if (!transactions.Any())
            {
                return(Option <MoneyTransaction> .CreateEmpty());
            }

            MoneyTransaction candidate = transactions.First();

            if (maxAmount + candidate.Amount < 0)
            {
                return(Option <MoneyTransaction> .CreateEmpty());
            }

            return(Option <MoneyTransaction> .Create(candidate));
        }
Example #22
0
    protected void cashout_Click(object sender, EventArgs e)
    {
        if (Session["CashoutAmount"] == null)
        {
            Response.Write("<script>alert('Please select Reward Amount you want to get')</script>");
        }
        else
        {
            SqlConnection sc = new SqlConnection();
            sc.ConnectionString = ConfigurationManager.ConnectionStrings["GroupProjectConnectionString"].ConnectionString;
            sc.Open();
            SqlCommand insert = new SqlCommand();
            insert.Connection = sc;

            insert.CommandText = "SELECT [TotalAmount] FROM [MoneyTransaction] where MoneyTransactionID=(select max(MoneyTransactionID) from MoneyTransaction)";
            SqlDataReader reader = insert.ExecuteReader();

            if (reader.HasRows)
            {
                reader.Read();
                int totalPoints       = Convert.ToInt32(reader["TotalAmount"]);
                int transactionAmount = Convert.ToInt32(rblcashout.SelectedValue);
                reader.Close();
                if (totalPoints >= transactionAmount && (Convert.ToInt32(Session["PointsBalance"]) > transactionAmount))
                {
                    MoneyTransaction newTransaction = new MoneyTransaction(totalPoints, DateTime.Today.ToShortDateString(), transactionAmount, DateTime.Today.ToShortDateString(), Session["loggedIn"].ToString(), Convert.ToInt32(Session["ID"]));
                    insert.CommandText = "INSERT INTO [dbo].[MoneyTransaction] ([Date],[TotalAmount],[TransactionAmount],[LastUpdated],[LastUpdatedBy],[PersonID])" +
                                         "VALUES (@Date,@TotalAmount,@TransactionAmount,@LastUpdated,@LastUpdatedBy,@PersonID)";
                    insert.Parameters.AddWithValue("@TotalAmount", totalPoints - transactionAmount);
                    insert.Parameters.AddWithValue("@Date", newTransaction.getDate());
                    insert.Parameters.AddWithValue("@TransactionAmount", newTransaction.getTransactionAmount());
                    insert.Parameters.AddWithValue("@LastUpdated", newTransaction.getLUD());
                    insert.Parameters.AddWithValue("@LastUpdatedBy", newTransaction.getLUDB());
                    insert.Parameters.AddWithValue("@PersonID", newTransaction.getPersonID());
                    insert.ExecuteNonQuery();
                    sc.Close();
                    Response.Write("<script>alert('Transaction Submited')</script>");
                    Send_Mail(Session["E-mail"].ToString(), newTransaction.getTransactionAmount());
                    rewardpool();
                }
                else
                {
                    Response.Write("<script>alert('personal points not enough or Bank balance low')</script>");
                }
            }
        }
    }
Example #23
0
        public override Option <MoneyTransaction> TryWithdraw(decimal amount)
        {
            if (amount <= 0)
            {
                throw new ArgumentException("Amount to withdraw must be positive.", nameof(amount));
            }

            if (Balance < amount)
            {
                return(Option <MoneyTransaction> .CreateEmpty());
            }

            var trans = new MoneyTransaction(-amount);

            RegisterTransaction(trans);
            return(Option <MoneyTransaction> .Create(trans));
        }
        public override Option <MoneyTransaction> TryWithdraw(decimal amount)
        {
            if (amount <= 0)
            {
                throw new ArgumentException("Amount to withdraw must be positive.", nameof(amount));
            }

            MoneyTransaction transaction = new MoneyTransaction(-amount);

            if (this.Balance >= amount)
            {
                base.RegisterTransaction(transaction);
            }
            else
            {
                this.pendingTransactions.Add(transaction);
            }

            return(Option <MoneyTransaction> .Create(transaction));
        }
Example #25
0
        /// <summary>
        /// To cancel the tickets
        /// </summary>
        /// <param name="customerID">ID of the user</param>
        /// <param name="pnrNumber">pnrnumber if the passenger</param>
        public override void CancelTickets(int customerID, string pnrNumber)
        {
            ((Ticket)RailwayData.ticketDetails[pnrNumber]).TicketStatus = "Cancelled";
            int    index        = 0;
            Ticket cancelTicket = (Ticket)RailwayData.ticketDetails[pnrNumber];

            //delegate instance pointing to purchaseTicket method
            transactionDele += new MoneyTransaction(gatewayRef.CancelTickets);
            foreach (Seats item in RailwayData.seats)
            {
                index = RailwayData.seats.IndexOf(item);
                Seats searchSeat = (Seats)item;
                if (searchSeat.TrainID == cancelTicket.TrainID && searchSeat.ServiceType == cancelTicket.ServiceType)
                {
                    RailwayData.seats.Remove(searchSeat);
                    searchSeat.NumberOfSeats = searchSeat.NumberOfSeats + cancelTicket.NumberOfSeats;
                    RailwayData.seats.Insert(index, searchSeat);
                }
            }
            transactionDele(cancelTicket.CreditCardNumber, cancelTicket.TotalFare);
        }
Example #26
0
        public IHttpActionResult RevertPayment(int id)
        {
            var transaction = _context.MoneyTransactions
                              .Include(x => x.ApplicationUser)
                              .SingleOrDefault(c => c.Id == id);

            if (transaction == null)
            {
                return(NotFound());
            }

            if (transaction.IsRevertMade)
            {
                return(BadRequest("Transaction was already reverted once."));
            }

            if (transaction.Type == TransactionType.Revert || transaction.Type == TransactionType.Withdraw)
            {
                return(BadRequest("This transaction type can't be reverted."));
            }

            var revertedTransaction = new MoneyTransaction()
            {
                ApplicationUser = transaction.ApplicationUser,
                Amount          = -transaction.Amount,
                Date            = DateTime.Now,
                Description     = "Revert for " + transaction.Id,
                Type            = TransactionType.Revert
            };

            transaction.ApplicationUser.Balance += revertedTransaction.Amount;
            transaction.IsRevertMade             = true;

            _context.MoneyTransactions.Add(revertedTransaction);
            _context.SaveChanges();

            return(Ok(true));
        }
Example #27
0
        public ActionResult Refill(decimal?sum)
        {
            if (!sum.HasValue || sum.Value <= 0)
            {
                ViewBag.Error = true;
                return(View(CurrentUser));
            }

            var sDesc     = "Пополнение счета на сайте знакомств CityLove";
            var sOutSum   = sum.Value.ToString("F", new System.Globalization.CultureInfo("en-US"));
            var sShpItem  = "2";
            var sCulture  = "ru";
            var sEncoding = "utf-8";

            var transaction = new MoneyTransaction()
            {
                Date        = DateTime.Now,
                Status      = 0,
                Sum         = sum.Value,
                UserID      = CurrentUser.ID,
                Description = "Пополнение счета"
            };

            DB.MoneyTransactions.InsertOnSubmit(transaction);
            DB.SubmitChanges();
            var nInvId   = transaction.ID;
            var sCrcBase = string.Format("{0}:{1}:{2}:{3}" /*:shpItem={4}*/, Config.RoboLogin, sOutSum, nInvId, Config.RoboPass1 /*, sShpItem*/);

            var md5  = new MD5CryptoServiceProvider();
            var buf  = md5.ComputeHash(Encoding.ASCII.GetBytes(sCrcBase));
            var sCrc = buf.Select(b => string.Format("{0:x2}", b)).Aggregate((acc, el) => acc + el);

            string url = HttpUtility.UrlPathEncode(Config.RoboServer + "?" + "MrchLogin="******"&OutSum=" + sOutSum + "&InvId=" + nInvId + "&SignatureValue=" +
                                                   sCrc + "&Desc=" + sDesc);

            return(Redirect(url));
        }
Example #28
0
    protected void btnCommit_Click(object sender, EventArgs e)
    {
        SqlConnection sc = new SqlConnection();

        sc.ConnectionString = ConfigurationManager.ConnectionStrings["GroupProjectConnectionString"].ConnectionString;
        sc.Open();
        SqlCommand insert = new SqlCommand();

        insert.Connection = sc;

        insert.CommandText = "SELECT [TotalAmount] FROM [MoneyTransaction] where MoneyTransactionID=(select max(MoneyTransactionID) from MoneyTransaction)";
        SqlDataReader reader = insert.ExecuteReader();

        if (reader.HasRows)
        {
            reader.Read();
            int totalPoints       = Convert.ToInt32(reader["TotalAmount"]);
            int transactionAmount = Convert.ToInt32(txtFrontLoad.Text);
            reader.Close();

            MoneyTransaction newTransaction = new MoneyTransaction(totalPoints, DateTime.Today.ToShortDateString(), transactionAmount, DateTime.Today.ToShortDateString(), Session["loggedIn"].ToString(), Convert.ToInt32(Session["ID"]));
            insert.CommandText = "INSERT INTO [dbo].[MoneyTransaction] ([Date],[TotalAmount],[TransactionAmount],[LastUpdated],[LastUpdatedBy],[PersonID])" +
                                 "VALUES (@Date,@TotalAmount,@TransactionAmount,@LastUpdated,@LastUpdatedBy,@PersonID)";
            insert.Parameters.AddWithValue("@TotalAmount", totalPoints + transactionAmount);
            insert.Parameters.AddWithValue("@Date", newTransaction.getDate());
            insert.Parameters.AddWithValue("@TransactionAmount", transactionAmount);
            insert.Parameters.AddWithValue("@LastUpdated", newTransaction.getLUD());
            insert.Parameters.AddWithValue("@LastUpdatedBy", newTransaction.getLUDB());
            insert.Parameters.AddWithValue("@PersonID", newTransaction.getPersonID());
            insert.ExecuteNonQuery();

            //insert.CommandText = "Update person set [PointsBalance]=[PointsBalance]+@TransactionAmount where personid=PersonID";
            //insert.ExecuteNonQuery();
            sc.Close();
            rewardpool();
        }
    }
Example #29
0
 protected void RegisterTransaction(MoneyTransaction trans)
 {
     this.registeredTransactions.Add(trans);
 }
Example #30
0
        public ActionResult Buy(decimal cost, string type, TimeSpan duration, int?arg)
        {
            if (CurrentUser.Balance < cost)
            {
                return(new ContentResult());
            }

            var date = DateTime.Now.Date;
            var user = DB.Users.First(x => x.ID == CurrentUser.ID);

            switch (type)
            {
            case "hidden":
                if (CurrentUser.HiddenEnd.HasValue && CurrentUser.HiddenEnd.Value.Date > DateTime.Now.Date)
                {
                    date = CurrentUser.HiddenEnd.Value.Date;
                }
                user.HiddenEnd = date.Add(duration);
                user.IsHidden  = true;
                break;

            case "up":
                if (CurrentUser.UpEnd.HasValue && CurrentUser.UpEnd.Value.Date > DateTime.Now.Date)
                {
                    date = CurrentUser.UpEnd.Value.Date;
                }
                user.UpEnd = date.Add(duration);
                user.IsUp  = true;
                break;

            case "vip":
                if (CurrentUser.VipEnd.HasValue && CurrentUser.VipEnd.Value.Date > DateTime.Now.Date)
                {
                    date = CurrentUser.VipEnd.Value.Date;
                }
                user.VipEnd = date.Add(duration);
                user.IsVip  = true;
                break;

            case "place":
                var place = DB.Places.FirstOrDefault(x => x.ID == arg);
                if (place != null)
                {
                    if (place.VipEnd.HasValue && place.VipEnd.Value.Date > DateTime.Now.Date)
                    {
                        date = place.VipEnd.Value.Date;
                    }
                    place.VipEnd = date.Add(duration);
                    place.IsVip  = true;
                }
                break;
            }

            var transaction = new MoneyTransaction()
            {
                Date        = DateTime.Now,
                Description = type,
                Status      = 1,
                Sum         = cost * -1,
                UserID      = CurrentUser.ID
            };

            DB.MoneyTransactions.InsertOnSubmit(transaction);


            DB.SubmitChanges();

            return(new ContentResult()
            {
                Content = "Vip-опция успешно подключена"
            });
        }