예제 #1
0
 public ActionResult Edit(CurrencyModel data)
 {
     try
     {
         if (ModelState.IsValid)
         {
             CLayer.Currency pt = new CLayer.Currency()
             {
                 CurrencyId           = data.CurrencyId,
                 Title                = data.Title,
                 Symbol               = data.Symbol,
                 ConversionRate       = data.ConversionRate,
                 ConversionPercentage = data.ConversionPercentage,
                 IsDefault            = data.IsDefault,
                 Status               = data.Status,
                 Exchangecode         = data.Exchangecode
             };
             BLayer.Currency.Save(pt);
             ViewBag.Saved = true;
         }
         else
         {
             ViewBag.Saved = false;
         }
         return(RedirectToAction("Index"));
     }
     catch (Exception ex)
     {
         Common.LogHandler.HandleError(ex);
         return(Redirect("~/Admin/ErrorPage"));
     }
 }
예제 #2
0
        public int Save(CLayer.Currency currency)
        {
            List <DataPlug.Parameter> param = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pCurrencyId", DataPlug.DataType._BigInt, currency.CurrencyId));
            param.Add(Connection.GetParameter("pTitle", DataPlug.DataType._Varchar, currency.Title));
            param.Add(Connection.GetParameter("pSymbol", DataPlug.DataType._Varchar, currency.Symbol));
            param.Add(Connection.GetParameter("pConversionRate", DataPlug.DataType._Decimal, currency.ConversionRate));
            param.Add(Connection.GetParameter("pConversionPercentage", DataPlug.DataType._Decimal, currency.ConversionPercentage));
            param.Add(Connection.GetParameter("pIsDefault", DataPlug.DataType._Bool, currency.IsDefault));
            param.Add(Connection.GetParameter("pStatus", DataPlug.DataType._Int, currency.Status));
            param.Add(Connection.GetParameter("pExchangecode", DataPlug.DataType._Varchar, currency.Exchangecode));

            object result = Connection.ExecuteQueryScalar("currency_Save", param);

            return(Connection.ToInteger(result));
        }
예제 #3
0
        //
        // TODO Delete Currency
        //

        public CLayer.Currency Get(string code)
        {
            CLayer.Currency currency = null;

            DataTable dt = Connection.GetSQLTable("Select * From currency Where Title like '" + code + "'");

            if (dt.Rows.Count > 0)
            {
                currency                      = new CLayer.Currency();
                currency.CurrencyId           = Connection.ToLong(dt.Rows[0]["CurrencyId"]);
                currency.Title                = Connection.ToString(dt.Rows[0]["Title"]);
                currency.Symbol               = Connection.ToString(dt.Rows[0]["Symbol"]);
                currency.ConversionRate       = Connection.ToDecimal(dt.Rows[0]["ConversionRate"]);
                currency.ConversionPercentage = Connection.ToDecimal(dt.Rows[0]["ConversionPercentage"]);
                currency.LastUpdate           = Connection.ToDate(dt.Rows[0]["LastUpdate"]);
                currency.IsDefault            = Connection.ToBoolean(dt.Rows[0]["IsDefault"]);
                currency.Status               = Connection.ToInteger(dt.Rows[0]["Status"]);
                currency.Exchangecode         = Connection.ToString(dt.Rows[0]["ExchgCode"]);
            }
            return(currency);
        }
예제 #4
0
        public CLayer.Currency Get(int CurrencyId)
        {
            CLayer.Currency           currency = null;
            List <DataPlug.Parameter> param    = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pCurrencyId", DataPlug.DataType._BigInt, CurrencyId));
            DataTable dt = Connection.GetTable("currency_Get", param);

            if (dt.Rows.Count > 0)
            {
                currency                      = new CLayer.Currency();
                currency.CurrencyId           = Connection.ToLong(dt.Rows[0]["CurrencyId"]);
                currency.Title                = Connection.ToString(dt.Rows[0]["Title"]);
                currency.Symbol               = Connection.ToString(dt.Rows[0]["Symbol"]);
                currency.ConversionRate       = Connection.ToDecimal(dt.Rows[0]["ConversionRate"]);
                currency.ConversionPercentage = Connection.ToDecimal(dt.Rows[0]["ConversionPercentage"]);
                currency.LastUpdate           = Connection.ToDate(dt.Rows[0]["LastUpdate"]);
                currency.IsDefault            = Connection.ToBoolean(dt.Rows[0]["IsDefault"]);
                currency.Status               = Connection.ToInteger(dt.Rows[0]["Status"]);
                currency.Exchangecode         = Connection.ToString(dt.Rows[0]["ExchgCode"]);
            }
            return(currency);
        }
예제 #5
0
        public ActionResult GET(int id)
        {
            try
            {
                ViewBag.Saved = false;
                CurrencyModel mbt = new CurrencyModel()
                {
                    CurrencyId = 0
                };

                CLayer.Currency pt = BLayer.Currency.Get(id);

                if (pt != null)
                {
                    mbt = new CurrencyModel()
                    {
                        CurrencyId           = pt.CurrencyId,
                        Title                = pt.Title,
                        Symbol               = pt.Symbol,
                        ConversionRate       = pt.ConversionRate,
                        ConversionPercentage = pt.ConversionPercentage,
                        IsDefault            = pt.IsDefault,
                        Exchangecode         = pt.Exchangecode,
                        Status               = pt.Status
                    }
                }
                ;

                return(PartialView("_Edit", mbt));
            }
            catch (Exception ex)
            {
                Common.LogHandler.HandleError(ex);
                return(Redirect("~/Admin/ErrorPage"));
            }
        }
예제 #6
0
 public static int Save(CLayer.Currency currencydata)
 {
     DataLayer.Currency currency = new DataLayer.Currency();
     //currencydata.Validate();
     return(currency.Save(currencydata));
 }
        public RedirectResult SaveOfflinePaybyPaypal(Models.OfflinePaymentModel data)
        {
            string errorPage = System.Configuration.ConfigurationManager.AppSettings.Get(PAYMENT_FAILED_LINK);

            try
            {
                long UserId = GetUserId();
                CLayer.OfflinePayment dt = new CLayer.OfflinePayment();
                dt.Name            = data.Name;
                dt.Amount          = data.Amount;
                dt.ReferenceNumber = data.ReferenceNumber;
                dt.Message         = data.Message;
                dt.UserId          = UserId;
                dt.Address         = data.Address;
                dt.CountryId       = data.CountryId;
                dt.StateId         = data.State;
                dt.CityId          = data.CityId;
                if (data.City != null && data.City != "")
                {
                    dt.City = data.City;
                }
                if (data.CityId > 0)
                {
                    dt.City = BLayer.City.Get(data.CityId).Name;
                }
                dt.Email       = data.Email;
                dt.Mobile      = data.Mobile;
                dt.ZipCode     = data.ZipCode;
                dt.Gatewaytype = (int)CLayer.ObjectStatus.Gateway.PayPal;
                CLayer.Role.Roles rle   = BLayer.User.GetRole(UserId);
                long   OfflinePaymentId = BLayer.OfflinePayment.SaveInitialPaymentData(dt);
                string PaymentRefNo     = " ";

                string token = "";

                try
                {
                    //load paypal url from settings
                    string     url  = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_TOKEN_URL);
                    WebRequest rqst = HttpWebRequest.Create(url);

                    rqst.Method = "POST";
                    string user, pwd, signature, returnurl, cancelurl;
                    user      = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_USER);
                    pwd       = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_PWD);
                    signature = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_SIGNAUTRE);
                    returnurl = BLayer.Settings.GetValue(CLayer.Settings.OFFLINE_PAYPAL_RETURN_URL);
                    cancelurl = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_CANCELURL);

                    CLayer.Currency cur = BLayer.Currency.Get("USD");
                    if (cur == null)
                    {
                        throw new Exception("Cannot find USD conversion rate for Paypal booking");
                    }
                    decimal amount = data.Amount;
                    amount = Math.Round(amount * cur.ConversionRate, 2, MidpointRounding.AwayFromZero);

                    string ProBookDes = data.Message;
                    string postdata   = "METHOD=SetExpressCheckout&VERSION=109.0";
                    postdata = postdata + "&USER="******"&PWD=" + pwd + "&SIGNATURE=" + signature;
                    postdata = postdata + "&PAYMENTREQUEST_0_AMT=" + amount.ToString("F2") + "&PAYMENTREQUEST_0_CURRENCYCODE=USD" + "&PAYMENTREQUEST_0_DESC=" + ProBookDes;
                    postdata = postdata + "&RETURNURL=" + Server.UrlEncode(returnurl);
                    postdata = postdata + "&CANCELURL=" + Server.UrlEncode(cancelurl);
                    postdata = postdata + "&PAYMENTREQUEST_0_PAYMENTACTION=Sale";

                    if (!String.IsNullOrEmpty(postdata))
                    {
                        rqst.ContentType = "application/x-www-form-urlencoded";
                        byte[] byteData = UTF8Encoding.UTF8.GetBytes(postdata);
                        rqst.ContentLength = byteData.Length;
                        using (Stream postStream = rqst.GetRequestStream())
                        {
                            postStream.Write(byteData, 0, byteData.Length);
                            postStream.Close();
                        }
                    }
                    ((HttpWebRequest)rqst).KeepAlive = false;
                    StreamReader rsps    = new StreamReader(rqst.GetResponse().GetResponseStream());
                    string       strRsps = rsps.ReadToEnd();
                    Debug.WriteLine(strRsps);
                    token = PaymentController.GetToken(strRsps);
                    if (token == "")
                    {
                        //(int)CLayer.ObjectStatus.OfflinePyamentStatus.Processing
                        BLayer.OfflinePayment.SetStatus((int)CLayer.ObjectStatus.OfflinePyamentStatus.failed, OfflinePaymentId);
                        return(Redirect(errorPage));
                    }
                }
                catch (Exception ex)
                {
                    Common.LogHandler.HandleError(ex);
                    BLayer.OfflinePayment.SetStatus((int)CLayer.ObjectStatus.OfflinePyamentStatus.failed, OfflinePaymentId);
                    return(Redirect(errorPage));
                }

                string red = BLayer.Settings.GetValue(CLayer.Settings.PAYPAL_REQUEST_URL) + token;

                token = Server.UrlDecode(token);
                //save to database
                PaymentRefNo = token;
                long OffPayId = BLayer.OfflinePayment.SetPaymentRefNo(OfflinePaymentId, rle, PaymentRefNo);
                BLayer.OfflinePayment.SetStatus((int)CLayer.ObjectStatus.OfflinePyamentStatus.Processing, OfflinePaymentId);
                return(Redirect(red));
            }
            catch (Exception ex)
            {
                Common.LogHandler.HandleError(ex);
                return(Redirect(errorPage));
            }
        }
예제 #8
0
        //public static void CancelAccommodation(long bookingItemId)
        //{
        //    CLayer.BookingItem detail = BLayer.BookingItem.GetDetails(bookingItemId);
        //    List<CLayer.Transaction> refundable = BLayer.Transaction.GetAllRefundable(detail.BookingId);
        //    double serviceCharge = 0; // BLayer.Transaction.GetTotalCancellationServiceCharge(detail.BookingId, ref refundable, detail.Amount);
        //    decimal cancellationCharge = 0;
        //    decimal firstDayCharge = BLayer.BookingItem.GetFirstDayCharge(bookingItemId);
        //    CLayer.Property prp = BLayer.Property.GetCancellationCharges(BLayer.Bookings.GetPropertyId(detail.BookingId));
        //    if (detail.CheckIn.AddHours(-1 * (double)prp.CancellationPeriod) <= DateTime.Now)
        //    {
        //        cancellationCharge = BLayer.Bookings.GetTotalCancellationCharge(prp, detail.Amount, firstDayCharge, detail.CheckIn); ;
        //    }
        //    //found refund amount by reducing cancellation charge, service charge will be deducted once the transaction is done
        //    decimal RefundAmount = detail.TotalAmount - cancellationCharge;
        //    bool CanCancel = (RefundAmount > CLayer.Settings.TRANSACTION_MIN_AMOUNT);

        //    BLayer.BookingItem.SetStatus(bookingItemId, CLayer.ObjectStatus.StatusType.Disabled);

        //    if (CanCancel)
        //    {
        //        //mark as trying
        //        double amt = 0;
        //        decimal tryRefund = 0;
        //        foreach (CLayer.Transaction tran in refundable)
        //        {
        //            //(pPaymentId VARCHAR(12),pTryAmount DECIMAL(14,2), pTryTime DATETIME,pTotalAmount DECIMAL(14,2),pStatus INT)
        //            serviceCharge = GetServiceCharge((CLayer.ObjectStatus.PaymentMethod)tran.PaymentType);
        //            if (serviceCharge > 0)
        //            {
        //                serviceCharge = Math.Round((double)RefundAmount * serviceCharge / 100 * 2);
        //                RefundAmount = RefundAmount - (decimal)serviceCharge;
        //            }
        //            if (RefundAmount <= 0) break;
        //            amt = tran.TotalAmount;
        //            if (amt >= (double)RefundAmount)
        //            {
        //                amt = amt - (double)RefundAmount;
        //                tryRefund = RefundAmount;
        //                RefundAmount = 0;
        //            }
        //            else
        //            {
        //                RefundAmount = RefundAmount - (decimal)amt;
        //                tryRefund = (decimal)amt;
        //                amt = 0;
        //            }

        //            tran.TryAmount = tryRefund;
        //            tran.ServiceCharge = tran.ServiceCharge + serviceCharge;
        //            tran.TryTime = DateTime.Today;
        //            tran.TotalAmount = amt;
        //            tran.Status = CLayer.ObjectStatus.TransactionStatus.TryingForRefund;
        //            BLayer.Transaction.UpdateAmountAndStatus(tran);
        //            // if (RefundAmount <= 0) break;
        //        }

        //        foreach (CLayer.Transaction tran in refundable)
        //        {
        //            try
        //            {
        //                if (tran.Status != CLayer.ObjectStatus.TransactionStatus.TryingForRefund) continue;
        //                if (SendRefund(tran))
        //                {
        //                    if (tran.TotalAmount > 0)
        //                        tran.Status = CLayer.ObjectStatus.TransactionStatus.PartialRefund;
        //                    else
        //                        tran.Status = CLayer.ObjectStatus.TransactionStatus.Refunded;
        //                    tran.TryAmount = 0;
        //                    BLayer.Transaction.UpdateAmountAndStatus(tran);
        //                }

        //            }
        //            catch
        //            { }
        //        }
        //        //BLayer.Bookings.UpdateCharges(bookingId, cancellationCharge, (decimal)totalServiceCharge);
        //        //BLayer.Bookings.SetRefund(bookingId, totalRefund - (decimal)totalServiceCharge);
        //    }
        //}

        public static void CancelAllTransactions(long bookingId)
        {
            CLayer.ObjectStatus.BookingStatus BStatus = BLayer.Bookings.GetStatus(bookingId);
            long PayOption = BLayer.Bookings.GetPaymentoption(bookingId);

            CLayer.Booking            detail     = BLayer.Bookings.GetDetails(bookingId);
            List <CLayer.Transaction> refundable = BLayer.Transaction.GetAllRefundable(bookingId);
            double  serviceCharge      = 0;// BLayer.Transaction.GetTotalCancellationServiceCharge(bookingId, ref refundable);
            decimal cancellationCharge = 0;


            double totalServiceCharge = 0;

            decimal firstDayCharge = BLayer.Bookings.GetFirstDayCharge(bookingId);

            CLayer.Property prp      = BLayer.Property.GetCancellationCharges(BLayer.Bookings.GetPropertyId(bookingId));
            int             noOfDays = (detail.CheckOut - detail.CheckIn).Days;

            cancellationCharge = BLayer.Bookings.GetTotalCancellationCharge(prp, detail.TotalAmount, noOfDays * firstDayCharge, detail.CheckIn);

            if (BStatus == CLayer.ObjectStatus.BookingStatus.BookingRequest)
            {
                cancellationCharge = 0;
            }

            decimal RefundAmountFCancel = Math.Round(detail.TotalAmount - cancellationCharge);

            if (PayOption == (int)CLayer.ObjectStatus.PaymentOption.FullPayment)
            {
                RefundAmountFCancel = Math.Round(detail.TotalAmount - cancellationCharge);
            }
            else if (PayOption == (int)CLayer.ObjectStatus.PaymentOption.PartialPayment)
            {
                CLayer.ObjectStatus.PartialPaymentStatus PartialPayStatus = BLayer.Bookings.GetPartialPaymentStatus(bookingId);
                CLayer.Booking PartBookDt = BLayer.Bookings.GetPartialBookDetailsbyBookId(bookingId);

                if (PartialPayStatus == CLayer.ObjectStatus.PartialPaymentStatus.InitialPaymentSuccess || PartialPayStatus == CLayer.ObjectStatus.PartialPaymentStatus.SecondPaymentFailed || PartialPayStatus == CLayer.ObjectStatus.PartialPaymentStatus.Secondpaycheckout)
                {
                    RefundAmountFCancel = Math.Round(PartBookDt.PaymentFirstinstallment - cancellationCharge);
                }
                else if (PartialPayStatus == CLayer.ObjectStatus.PartialPaymentStatus.SecondPaymentSuccess)
                {
                    RefundAmountFCancel = Math.Round(detail.TotalAmount - cancellationCharge);
                }
            }


            bool CanCancel = (RefundAmountFCancel > CLayer.Settings.TRANSACTION_MIN_AMOUNT);


            if (BStatus == CLayer.ObjectStatus.BookingStatus.BookingRequest)
            {
                BLayer.Bookings.SetStatus((int)CLayer.ObjectStatus.BookingStatus.Decline, bookingId);
            }
            else
            {
                BLayer.Bookings.SetStatus((int)CLayer.ObjectStatus.BookingStatus.Cancelled, bookingId);
            }


            BLayer.Bookings.SetPartialPaymentStatus((int)CLayer.ObjectStatus.PartialPaymentStatus.BookingCancel, bookingId);
            BLayer.Bookings.SetUpdatedDate(bookingId);

            decimal totalRefund = RefundAmountFCancel;
            long    Gatewaytype = BLayer.Bookings.Getgatewaytype(bookingId);



            if (CanCancel)
            {
                //mark as trying
                double  amt       = 0;
                decimal tryRefund = 0;
                int     countlist = 0;
                foreach (CLayer.Transaction tran in refundable)
                {
                    decimal RefundAmount = RefundAmountFCancel;

                    if (PayOption == (int)CLayer.ObjectStatus.PaymentOption.FullPayment)
                    {
                        RefundAmount = RefundAmountFCancel;
                    }
                    else if (PayOption == (int)CLayer.ObjectStatus.PaymentOption.PartialPayment)
                    {
                        CLayer.Booking PartBookDt = BLayer.Bookings.GetPartialBookDetailsbyBookId(bookingId);
                        if (countlist == 0)
                        {
                            RefundAmount = Math.Round(PartBookDt.PaymentFirstinstallment - cancellationCharge);
                        }
                        else if (countlist == 1)
                        {
                            RefundAmount = Math.Round(PartBookDt.PaymentSecondinstallment - cancellationCharge);
                        }
                    }
                    else
                    {
                        RefundAmount = RefundAmountFCancel;
                    }



                    serviceCharge = GetServiceCharge((CLayer.ObjectStatus.PaymentMethod)tran.PaymentType);
                    if (serviceCharge > 0)
                    {
                        serviceCharge = Math.Round((double)RefundAmount * serviceCharge / 100 * 2);
                        if (BStatus == CLayer.ObjectStatus.BookingStatus.Decline)
                        {
                            serviceCharge = 0;
                        }
                        RefundAmount = RefundAmount - (decimal)serviceCharge;
                    }
                    if (RefundAmount <= 0)
                    {
                        break;
                    }
                    amt = tran.TotalAmount;



                    if (Gatewaytype == (int)CLayer.ObjectStatus.Gateway.EBS)
                    {
                        if (amt >= (double)RefundAmount)
                        {
                            amt          = amt - (double)RefundAmount;
                            tryRefund    = RefundAmount;
                            RefundAmount = 0;
                        }
                        else
                        {
                            RefundAmount = RefundAmount - (decimal)amt;
                            tryRefund    = (decimal)amt;
                            amt          = 0;
                        }
                    }
                    else if (Gatewaytype == (int)CLayer.ObjectStatus.Gateway.PayPal)
                    {
                        CLayer.Currency cur = BLayer.Currency.Get("USD");
                        RefundAmount = Math.Round(RefundAmount * cur.ConversionRate, 2, MidpointRounding.AwayFromZero);

                        if (amt >= (double)RefundAmount)
                        {
                            amt          = amt - (double)RefundAmount;
                            tryRefund    = RefundAmount;
                            RefundAmount = 0;
                        }
                        else
                        {
                            RefundAmount = RefundAmount - (decimal)amt;
                            tryRefund    = (decimal)amt;
                            amt          = 0;
                        }
                    }



                    totalServiceCharge = totalServiceCharge + serviceCharge;
                    tran.TryAmount    += tryRefund;
                    tran.ServiceCharge = tran.ServiceCharge + serviceCharge;

                    //tran.TryAmount = tryRefund;
                    //tran.ServiceCharge = tran.ServiceCharge + serviceCharge;
                    tran.TryTime     = DateTime.Today;
                    tran.TotalAmount = amt;
                    tran.Status      = CLayer.ObjectStatus.TransactionStatus.TryingForCanc;
                    BLayer.Transaction.UpdateAmountAndStatus(tran);
                    // if (RefundAmount <= 0) break;

                    countlist = countlist + 1;
                }
                //set totalservice charge and cancellation charge
                BLayer.Bookings.UpdateCharges(bookingId, cancellationCharge, (decimal)totalServiceCharge);
                BLayer.Bookings.SetRefund(bookingId, totalRefund - (decimal)totalServiceCharge);

                //save to booking refund
                //BLayer.Bookings.SaveBookingRefundAmt(bookingId, totalRefund - (decimal)totalServiceCharge, (int)CLayer.ObjectStatus.BookingChangeType.Cancel);

                foreach (CLayer.Transaction tran in refundable)
                {
                    try
                    {
                        //if (tran.ResponseCode != CLayer.Transaction.TRAN_SUCCESS)
                        //{
                        //    continue;
                        //}

                        if (tran.Status != CLayer.ObjectStatus.TransactionStatus.TryingForCanc)
                        {
                            continue;
                        }

                        if (Gatewaytype == (int)CLayer.ObjectStatus.Gateway.EBS)
                        {
                            if (SendRefund(tran))
                            {
                                //      if (tran.TotalAmount > 0)
                                //          tran.Status = CLayer.ObjectStatus.TransactionStatus.PartialRefund;
                                //       else
                                tran.Status    = CLayer.ObjectStatus.TransactionStatus.Refunded;
                                tran.TryAmount = 0;
                                BLayer.Transaction.UpdateAmountAndStatus(tran);
                            }
                        }
                        else if (Gatewaytype == (int)CLayer.ObjectStatus.Gateway.PayPal)
                        {
                            if (SendPayPalRefund(tran))
                            {
                                tran.Status    = CLayer.ObjectStatus.TransactionStatus.Refunded;
                                tran.TryAmount = 0;
                                BLayer.Transaction.UpdateAmountAndStatus(tran);
                            }
                        }
                    }
                    catch
                    { }
                }
            }
            else
            {
                //very less amount to refund which can be less than Rs.10
                BLayer.Transaction.RefundAllTransactions(bookingId);
            }
        }