[HttpPost] //payment status public ActionResult Result(RenderModel model, string result, string payment) { var rto = new Step4Model(CurrentPage); rto.Transection_ID = Convert.ToInt32(result); rto.Transection = DatabaseContext.Database.Fetch <tb_transection>(string.Format("select top(1) * from tb_transection where ID = {0}", rto.Transection_ID)).FirstOrDefault(); var version = Request["version"]; var request_timestamp = Request["request_timestamp"]; var merchant_id = Request["merchant_id"]; var currency = Request["currency"]; var order_id = Request["order_id"]; var amount = Request["amount"]; var invoice_no = Request["invoice_no"]; var transaction_ref = Request["transaction_ref"]; var approval_code = Request["approval_code"]; var eci = Request["eci"]; var transaction_datetime = Request["transaction_datetime"]; var payment_channel = Request["payment_channel"]; var payment_status = Request["payment_status"]; var channel_response_code = Request["channel_response_code"]; var channel_response_desc = Request["channel_response_desc"]; var masked_pan = Request["masked_pan"]; var stored_card_unique_id = Request["stored_card_unique_id"]; var backend_invoice = Request["backend_invoice"]; var paid_channel = Request["paid_channel"]; var paid_agent = Request["paid_agent"]; var payment_scheme = Request["payment_scheme"]; var user_defined_1 = Request["user_defined_1"]; var user_defined_2 = Request["user_defined_2"]; var user_defined_3 = Request["user_defined_3"]; var user_defined_4 = Request["user_defined_4"]; var user_defined_5 = Request["user_defined_5"]; var browser_info = Request["browser_info"]; var hash_value = Request["hash_value"]; var checkHashStr = version + "" + request_timestamp + "" + merchant_id + "" + order_id + "" + invoice_no + "" + currency + "" + amount + "" + transaction_ref + "" + approval_code + "" + eci + "" + transaction_datetime + "" + payment_channel + "" + payment_status + "" + channel_response_code + "" + channel_response_desc + "" + masked_pan + "" + stored_card_unique_id + "" + backend_invoice + "" + paid_channel + "" + paid_agent + "" + user_defined_1 + "" + user_defined_2 + "" + user_defined_3 + "" + user_defined_4 + "" + user_defined_5 + "" + browser_info + "" + payment_scheme; var SECRETKEY = "7jYcp4FxFdf0"; var checkHash = hash_hmac_sha1(checkHashStr, SECRETKEY); //Compute hash value //Validate response hash_value if (hash_value.ToLower() == checkHash.ToLower()) { rto.Transection.Status = "A"; rto.Transection.Payment_Ref = string.Format("10{0}", rto.Transection.ID.ToString("D8")); } else { rto.Transection.Status = "P"; } //rto.Transection.Payment_Type = "L"; DatabaseContext.Database.Update(rto.Transection); return(Redirect("/booking/result/" + rto.Transection_ID)); }
[HttpGet] //payment status public ActionResult Step4(RenderModel model, string id) { var rto = new Step4Model(CurrentPage); rto.Transection_ID = Convert.ToInt32(id); rto.Transection = DatabaseContext.Database.Fetch <tb_transection>(string.Format("select top(1) * from tb_transection where ID = {0}", rto.Transection_ID)).FirstOrDefault(); var sqlcar = string.Format(@"Select t1.A_ID,Branch_ID,Car_ID,t2.* From tb_branch_car t1 Inner join tb_car t2 on t1.Car_ID = t2.id Where t1.A_ID = {0}", rto.Transection.Car_Branch_ID); rto.Car = new dto_carprice(); rto.Car = DatabaseContext.Database.Fetch <dto_carprice>(sqlcar).FirstOrDefault(); var sqloption = string.Format(@"SELECT t2.* FROM tb_transection_detail t1 INNER JOIN tb_optional t2 on t1.Item_ID = t2.A_ID Where t1.Transection = {0}", rto.Transection.ID); rto.ExtraOption = DatabaseContext.Database.Fetch <tb_optional>(sqloption).ToList(); return(CurrentTemplate(rto)); }
[HttpGet] //payment status public ActionResult Result(RenderModel model, string id) { var sendmail = Request["sendmail"]; var testmail = Request["testmail"]; var rto = new Step4Model(CurrentPage); rto.Transection_ID = Convert.ToInt32(id); var transection = new dto_transection(); transection = DatabaseContext.Database.Query <dto_transection>(string.Format("select top(1) * from tb_transection where ID = {0};", rto.Transection_ID)).FirstOrDefault(); var customer = new tb_customer(); customer = DatabaseContext.Database.Query <tb_customer>(string.Format("select top(1) * from tb_customer where User_ID = {0};", transection.Customer_ID)).FirstOrDefault(); var car = new tb_car(); car = DatabaseContext.Database.Query <tb_car>( string.Format(@"SELECT top(1) t1.A_ID,Branch_ID,Car_ID,t2.* From tb_branch_car t1 INNER join tb_car t2 on t1.Car_ID = t2.id WHERE t1.A_ID = {0};", transection.Car_Branch_ID)).FirstOrDefault(); var optional = new List <tb_optional>(); optional = DatabaseContext.Database.Fetch <tb_optional>( string.Format(@"select [Item_Type] ,[Item_Price] ,[Sub_Total] ,[Vat_Total] ,[Total] ,t2.* FROM tb_transection_detail t1 INNER JOIN tb_optional t2 on t1.Item_ID = t2.A_ID WHERE t1.Transection = {0};", transection.ID)).ToList(); var pickuploc = new tb_branch(); pickuploc = DatabaseContext.Database.Fetch <tb_branch>( string.Format(@"select top(1) * FROM tb_branch WHERE A_ID = {0};", transection.PickUpLoc)).FirstOrDefault(); var dropoffloc = new tb_branch(); dropoffloc = DatabaseContext.Database.Fetch <tb_branch>( string.Format(@"select top(1) * FROM tb_branch WHERE A_ID = {0};", transection.DropOffLoc)).FirstOrDefault(); var price = new tb_car_price(); price = DatabaseContext.Database.Fetch <tb_car_price>( string.Format(@"select top(1) * FROM tb_car_price WHERE price_id = {0};", transection.Price_ID)).FirstOrDefault(); transection.car = car; transection.customer = customer; transection.optional = optional; transection.pickuplocation = pickuploc; transection.dropofflocation = dropoffloc; transection.car_price = price; var textDetail = model.Content.GetProperty("textContent").Value.ToString(); textDetail = textDetail.Replace("{name}", customer.Name + " " + customer.LName); textDetail = textDetail.Replace("{email}", customer.Email); textDetail = textDetail.Replace("{phone}", customer.Phone); textDetail = textDetail.Replace("{pricecode}", price.price_code); textDetail = textDetail.Replace("{adddate}", transection.Add_Date.ToString("yyyy-MM-dd hh:mm tt")); textDetail = textDetail.Replace("{pickuplocation}", pickuploc.Branch_Name); var status = transection.Status == "A" ? "Comfirm" : "Pending"; textDetail = textDetail.Replace("{status}", status); var paytype = transection.Payment_Type == "N" ? "Online" : "At counter"; textDetail = textDetail.Replace("{paytype}", paytype); textDetail = textDetail.Replace("{transectionno}", "#" + transection.Payment_Type + "" + transection.Transection_ID); textDetail = textDetail.Replace("{pickupdate}", transection.PickUpDatetime?.ToString("yyyy-MM-dd hh:mm tt")); textDetail = textDetail.Replace("{dropofftime}", transection.DropOffDatetime?.ToString("yyyy-MM-dd hh:mm tt")); textDetail = textDetail.Replace("{pickuplocation}", pickuploc.Branch_Name); textDetail = textDetail.Replace("{droplocation}", dropoffloc.Branch_Name); textDetail = textDetail.Replace("{discount}", transection.Discount_Total?.ToString("N2")); textDetail = textDetail.Replace("{subtotal}", transection.Sub_Total?.ToString("N2")); textDetail = textDetail.Replace("{vat}", transection.Vat_Total?.ToString("N2")); textDetail = textDetail.Replace("{total}", transection.Total_Price?.ToString("N2")); var totaltext = ""; var carprice = price.price; var itemcar = string.Format(@"<tr> <td>{0}</td> <td>{1}</td> <td>{2}</td> <td>{3}</td> </tr>" , car.name , carprice?.ToString("N2") , transection.Numdate , (carprice * transection.Numdate)?.ToString("N2")); var itemoption = ""; foreach (var op in optional) { var opprice = op.Price; itemoption += string.Format(@"<tr> <td>{0}</td> <td>{1}</td> <td>{2}</td> <td>{3}</td> </tr>" , op.Name , opprice.ToString("N2") , transection.Numdate , (opprice * transection.Numdate)?.ToString("N2")); } var itemdetail = @"<table style='width:100%' border='0'> <tr> <td width='50%'><b>Description</b></td> <td><b>Rate</b></td> <td><b>Day(s)</b></td> <td><b>Total</b></td> </tr> " + itemcar + @" " + itemoption + @" " + totaltext + @" </table>"; textDetail = textDetail.Replace("{detail}", itemdetail); ViewBag.text = textDetail; if (sendmail == "1") { SendEmail(customer.Email, "Your reservation details.", textDetail); } if (testmail == "1") { return(CurrentTemplate(rto)); } return(Redirect("/booking/step4/" + rto.Transection_ID)); }
[HttpPost] //payment public ActionResult Step4(RenderModel model, Step3 param) { var rto = new Step4Model(CurrentPage); DateTime pudate = _functional.ConvertDate(param.pickupdate); DateTime dfdate = _functional.ConvertDate(param.dropoffdate); DateTime putime = _functional.ConvertTime(param.pickuptime); DateTime dftime = _functional.ConvertTime(param.dropofftime); pudate = _functional.MergeDatetime(pudate, putime); dfdate = _functional.MergeDatetime(dfdate, dftime); int ndate = (dfdate - pudate).Days; int nhour = (dfdate - pudate).Hours; int nmin = (dfdate - pudate).Minutes; if (nhour >= 4 && nmin > 1) { ndate += 1; } rto.NumDate = ndate; rto.PickupBranch = DatabaseContext.Database.Fetch <tb_branch>(string.Format("select * from tb_branch where A_ID = {0};", param.pickuploc)).FirstOrDefault(); rto.DropoffBranch = DatabaseContext.Database.Fetch <tb_branch>(string.Format("select * from tb_branch where A_ID = {0};", param.dropoffloc)).FirstOrDefault(); var sql = string.Format(@"Select t1.A_ID,Branch_ID,Car_ID,t2.* From tb_branch_car t1 Inner join tb_car t2 on t1.Car_ID = t2.id Where t1.A_ID = {0};", param.car_id); rto.Car = new dto_carprice(); rto.Car = DatabaseContext.Database.Fetch <dto_carprice>(sql).FirstOrDefault(); rto.Car.price = new tb_car_price(); rto.Car.price = _carService.GetCarPriceByid(param.price_id); rto.TotalCarPrice = (rto.Car?.price.price ?? 0) * rto.NumDate; var listextra = string.Join(",", param.extra ?? new int[] { 0 }); rto.ExtraOption = DatabaseContext.Database.Fetch <tb_optional>(string.Format("select * from tb_optional where A_ID in ({0});", listextra)); rto.TotalExtra = rto.ExtraOption.Sum(x => x.Price) * rto.NumDate; rto.TotalPrice = rto.TotalCarPrice + rto.TotalExtra; var transection = new tb_transection(); transection.Customer_ID = GetMemberID(param.email[0] , string.Format("{0} {1}", param.name[0], param.lname[0]) , param.title[0] , param.name[0] , param.lname[0] , param.phone[0] , param.license[0] ); if (param.diffpick == "1") { // transection.PickupCus_ID = GetMemberID(param.pemail, string.Format("{0} {1}", param.pname, param.plname)); } transection.PickUpDatetime = _functional.MergeDatetime(pudate, putime); transection.DropOffDatetime = _functional.MergeDatetime(dfdate, dftime); transection.Car_Branch_ID = rto.Car.A_ID; transection.Numdate = rto.NumDate; transection.Status = "P"; transection.Price_ID = rto.Car.price.price_id; //transectionid int lastid = DatabaseContext.Database.ExecuteScalar <int>("select count(*) + 1 from tb_transection where Convert(date, Add_Date) = Convert(date, getdate());"); DateTime dt = DateTime.Now; transection.Transection_ID = Convert.ToInt32(dt.ToString("yyMMdd") + lastid.ToString("0000")); rto.PickupBranch = DatabaseContext.Database.Fetch <tb_branch>(string.Format("select * from tb_branch where A_ID = {0};", param.pickuploc)).FirstOrDefault(); rto.DropoffBranch = DatabaseContext.Database.Fetch <tb_branch>(string.Format("select * from tb_branch where A_ID = {0};", param.dropoffloc)).FirstOrDefault(); transection.PickUpLoc = rto.PickupBranch.A_ID; transection.DropOffLoc = rto.DropoffBranch.A_ID; transection.Total_Price = rto.TotalPrice; var discounttype = rto.Car.price.paynow_type; var discount = rto.Car.price.paynow ?? 0; var totaldiscount = 0M; var sendemail = 0; if (param.pay == "now") { transection.Payment_Type = "N"; if (discounttype == "percent") { totaldiscount = rto.TotalCarPrice * (discount / 100); transection.Total_Price = rto.TotalPrice - totaldiscount; } else { totaldiscount = discount; transection.Total_Price = rto.TotalPrice - discount; } } else { transection.Payment_Type = "L"; sendemail = 1; } transection.Discount_Total = totaldiscount; transection.Sub_Total = transection.Total_Price / 1.07M; transection.Vat_Total = transection.Total_Price - transection.Sub_Total; DatabaseContext.Database.Save(transection); rto.Transection_ID = transection.ID; var transection_cus = new List <tb_transection_cus>(); for (var i = 0; i < param.email.Length; i++) { var cus = new tb_transection_cus(); cus.Transection = rto.Transection_ID; cus.User_ID = GetMemberID(param.email[0] , string.Format("{0} {1}", param.name[i], param.lname[i]) , param.title[i] , param.name[i] , param.lname[i] , param.phone[i] , param.license[i] ); cus.Customer_Type = string.Format("Driver #{0}", i + 1); DatabaseContext.Database.Save(cus); } if (param.diffpick == "1") { var cus = new tb_transection_cus(); cus.Transection = rto.Transection_ID; cus.User_ID = GetMemberID(param.pemail, string.Format("{0} {1}", param.pname, param.plname)); cus.Customer_Type = string.Format("Pick car"); DatabaseContext.Database.Save(cus); } foreach (var item in rto.ExtraOption) { var detail = new tb_transection_detail(); detail.Transection = rto.Transection_ID; detail.Item_ID = item.A_ID; detail.Item_Price = item.Price; detail.Total = item.Price * rto.NumDate; detail.Vat_Total = Math.Round(detail.Total * 0.07M, 2); detail.Sub_Total = detail.Total - detail.Vat_Total; detail.Item_Type = "E"; DatabaseContext.Database.Save(detail); } return(Redirect("/booking/Result/" + rto.Transection_ID + "?sendmail=" + sendemail)); }