Пример #1
0
 public static CardDebitRequest CreateDebitRequest(string pPath, string pAPIKey, CardDebitRequest pDebitRequest)
 {
     try {
         return(ApiRestServices.CreateObject <CardDebitRequest>(pPath + "/card-debit-request", pAPIKey, "card_debit_request", pDebitRequest));
     }
     catch (ApplicationException ae)
     {
         throw new ApplicationException(ae.Message);
     }
 }
Пример #2
0
 public static CardDebitRequest CreateDebitRequest(string pPath, string pAPIKey, CardDebitRequest pDebitRequest)
 {
     return(ApiRestServices.CreateObject <CardDebitRequest>(pPath + "/card-debit-request", pAPIKey, "card_debit_request", pDebitRequest));
 }
Пример #3
0
        public ActionResult CardDebit(CardDebitRequest request)
        {
            string username = Request.Form["username"];

            if (String.IsNullOrEmpty(username))
            {
                ModelState.AddModelError("username", "Username cannot be empty");
            }
            if (String.IsNullOrEmpty(request.TransactionID))
            {
                ModelState.AddModelError("TransactionID", "This field cannot be empty!");
            }
            if (String.IsNullOrEmpty(request.TimeStamp.ToShortDateString()))
            {
                ModelState.AddModelError("TimeStamp", "This field cannot be empty!");
            }
            if (String.IsNullOrEmpty(request.CardID))
            {
                ModelState.AddModelError("CardID", "This field cannot be empty!");
            }
            if (String.IsNullOrEmpty(request.Amount.ToString()))
            {
                ModelState.AddModelError("Amount", "This field cannot be empty!");
            }
            if (String.IsNullOrEmpty(request.Remarks))
            {
                ModelState.AddModelError("Remarks", "This field cannot be empty!");
            }
            if (!String.IsNullOrEmpty(request.Remarks))
            {
                string pattern = "^[a-zA-Z]+,[0-9]+\\.[0-9]{2},[0-9]+\\.[0-9]{2},[a-zA-z]+$";
                if (!System.Text.RegularExpressions.Regex.IsMatch(request.Remarks, pattern))
                {
                    ModelState.AddModelError("Remarks", "Incorrect format (eg. Petrol,1.20,3.40,pump)");
                }
            }
            Transaction transaction = new Transaction {
                Amount        = request.Amount,
                CardID        = request.CardID,
                Remarks       = request.Remarks,
                TimeStamp     = request.TimeStamp,
                TransactionID = request.TransactionID
            };

            Transaction tempTransaction = db.Transactions.Find(request.TransactionID);

            if (tempTransaction != null)
            {
                ModelState.AddModelError("TransactionID", "Duplicate transaction ID");
            }
            CardDetail card = db.CardDetails.FirstOrDefault(c => c.CardID == request.CardID);

            if (card == null)
            {
                ModelState.AddModelError("CardID", "Card not found");
            }
            else
            {
                if (card.Balance < request.Amount)
                {
                    ModelState.AddModelError("Amount", "Low balance in card!");
                }
                if (card.UserName != username)
                {
                    ModelState.AddModelError("CardID", "Card doesnt belong to this user!");
                }
            }

            if (ModelState.IsValid)
            {
                transaction.Username      = card.UserName;
                transaction.CardType      = card.CardType;
                transaction.VehicleNumber = card.VehicleNumber;
                transaction.Status        = 1;
                transaction.Type          = "Debit";
                db.Transactions.Add(transaction);

                //Subtracting balance from card
                card.Balance -= transaction.Amount;

                //Discount transaction
                IQueryable <Discount> discountsOnCard = db.Discounts.Where(m => m.CardID == request.CardID);
                if (discountsOnCard.Count() > 0)
                {
                    //Transaction on card exists
                    IQueryable <Discount> discountOnCardOnDate = discountsOnCard.Where(m => m.Date == request.TimeStamp);
                    if (discountOnCardOnDate.Count() > 0)
                    {
                        // Transaction on same day exists
                        Discount discount = discountOnCardOnDate.FirstOrDefault();
                        discount.TotalAmount    += request.Amount;
                        db.Entry(discount).State = EntityState.Modified;
                    }
                    else
                    {
                        //Transaction on same day doesnt exists
                        Discount discount = new Discount {
                            CardID      = request.CardID,
                            Date        = request.TimeStamp,
                            TotalAmount = request.Amount,
                            Username    = card.UserName
                        };
                        db.Discounts.Add(discount);
                    }
                }
                else
                {
                    Discount discount = new Discount
                    {
                        CardID      = request.CardID,
                        Date        = request.TimeStamp,
                        TotalAmount = request.Amount,
                        Username    = card.UserName
                    };
                    db.Discounts.Add(discount);
                }

                db.Entry(card).State = EntityState.Modified;
                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateException)
                {
                    ModelState.AddModelError("", "Something went wrong!");
                }
                return(RedirectToAction("CardDebit", new { message = "Transaction recorded" }));
            }
            return(View());
        }