예제 #1
0
        public ReservationState Book([FromUri] BookingCartParam param, [FromBody] BookingClaim claim)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (claim == null)
            {
                throw new ArgumentNullException("claim");
            }
            WebPartner partner = UserToolsProvider.GetPartner(param);

            if (claim.customer != null)
            {
                foreach (BookingOrder order in claim.orders)
                {
                    if (order.excursion != null)
                    {
                        if (order.excursion.contact == null)
                        {
                            order.excursion.contact = new ExcursionContact();
                        }
                        if (order.excursion.contact.name == null)
                        {
                            order.excursion.contact.name = claim.customer.name;
                        }
                        if (order.excursion.contact.mobile == null)
                        {
                            order.excursion.contact.mobile = claim.customer.mobile;
                        }
                    }
                }
            }
            return(BookingProvider.DoBooking(param.Language, partner.id, partner.passId, claim));
        }
        public ActionResult uniteller()
        {
            string requiredString = base.RouteData.GetRequiredString("action");

            try
            {
                Tracing.DataTrace.TraceEvent(TraceEventType.Verbose, 0, "UNITELLER payment data: {0}", new object[] { base.Request.DumpValues() });
                this.CheckServerAddressList();
                UnitellerPaymentResult result = UnitellerPaymentResult.Create(base.Request);
                if (result.Status == UnitellerPaymentResult.OpeationStatus.Success)
                {
                    ConfirmInvoiceResult result2 = BookingProvider.ConfirmInvoice(result.InvoiceNumber.Trim());
                    Tracing.DataTrace.TraceEvent(TraceEventType.Information, 0, "UNITELLER transaction: invoice: '{0}', status: '{1}', invoice confirmation: '{2}'", new object[] { result.InvoiceNumber, result.Status, result2.IsSuccess ? "SUCCESS" : "FAILED" });
                    if (!result2.IsSuccess)
                    {
                        throw new Exception(string.Format("invoice confirm error {0}", result2.ErrorMessage));
                    }
                }
                else
                {
                    Tracing.DataTrace.TraceEvent(TraceEventType.Information, 0, "UNITELLER transaction: invoice: '{1}', status: '{2}'", new object[] { result.InvoiceNumber, result.Status });
                }
                return(new EmptyResult());
            }
            catch (Exception exception)
            {
                Tracing.DataTrace.TraceEvent(TraceEventType.Error, 0, "UNITELLER payment error: {0}", new object[] { exception.ToString() });
                return(new HttpStatusCodeResult(500));
            }
        }
        public JsonResult AddCart(ExcursionAddWebParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            List <string> list = new List <string>();

            if (param.excursion != null)
            {
                if ((param.excursion.pax != null) && ((param.excursion.pax.adult + param.excursion.pax.child) > 0))
                {
                    if (param.cid == null)
                    {
                        int?nullable = null;
                        using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session))
                        {
                            cart.PartnerAlias     = param.PartnerAlias;
                            cart.PartnerSessionID = param.psid;
                            BookingOrder item = new BookingOrder {
                                orderid   = Guid.NewGuid().ToString(),
                                excursion = param.excursion
                            };
                            cart.Orders.Add(item);
                            nullable = new int?(cart.Orders.Count);
                        }
                        return(base.Json(new { ok = true, ordercount = nullable }));
                    }
                    WebPartner   partner = UserToolsProvider.GetPartner(param);
                    BookingOrder order2  = new BookingOrder {
                        orderid   = Guid.NewGuid().ToString(),
                        excursion = param.excursion
                    };
                    ExternalCartAddOrderResult result = BookingProvider.ExternalCart_AddOrder(UrlLanguage.CurrentLanguage, partner, param.cid, order2);
                    if (result.errorcode == 0)
                    {
                        return(base.Json(new { ok = true, ordercount = result.ordercount }));
                    }
                    list.Add(result.errormessage);
                }
                else
                {
                    list.Add(ExcursionStrings.ResourceManager.Get("ErrorGuestCount"));
                }
            }
            else
            {
                list.Add(ExcursionStrings.ResourceManager.Get("ErrorInvalidParams"));
            }
            return(base.Json(new { errormessages = list.ToArray() }));
        }
예제 #4
0
        private ActionResult Processing_Bank(int claim, PaymentMode payment)
        {
            ActionResult result4;

            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }
            PaymentBeforeProcessingResult result = BookingProvider.BeforePaymentProcessing(UrlLanguage.CurrentLanguage, payment.paymentparam);

            if (result == null)
            {
                throw new Exception("cannot get payment details");
            }
            if (!result.success)
            {
                throw new Exception("payment details fail");
            }
            try
            {
                List <ReportParam> list = new List <ReportParam>();
                ReportParam        item = new ReportParam {
                    Name  = "vClaimList",
                    Value = claim.ToString()
                };
                list.Add(item);
                string str = ConfigurationManager.AppSettings["report_PrintInvoice"];
                if (string.IsNullOrEmpty(str))
                {
                    throw new Exception("report_PrintInvoice is empty");
                }
                ReportResult result2 = ReportServer.BuildReport(str, ReportFormat.pdf, list.ToArray());
                if (result2 == null)
                {
                    throw new Exception("report data is empty");
                }
                MemoryStream     fileStream = new MemoryStream(result2.Content);
                FileStreamResult result3    = new FileStreamResult(fileStream, "application/pdf")
                {
                    FileDownloadName = string.Format("invoice_{0}.pdf", claim)
                };
                result4 = result3;
            }
            catch (Exception exception)
            {
                Tracing.ServiceTrace.TraceEvent(TraceEventType.Error, 0, exception.ToString());
                throw;
            }
            return(result4);
        }
예제 #5
0
        public ReservationState Calculate([FromUri] BookingCartParam param, [FromBody] BookingClaim claim)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (claim == null)
            {
                throw new ArgumentNullException("claim");
            }
            WebPartner partner = UserToolsProvider.GetPartner(param);

            return(BookingProvider.DoCalculation(param.Language, partner.id, claim));
        }
        public ActionResult Summary([Bind(Prefix = "OrderFindForm")] OrderModel model)
        {
            SummaryContext context = new SummaryContext {
                ShowOrderFindForm = true
            };

            if (base.ModelState.IsValid)
            {
                DateTime?         currentDate = model.CurrentDate;
                DateTime          dateFrom    = currentDate.HasValue ? currentDate.GetValueOrDefault() : DateTime.Now.Date;
                List <GuestClaim> claims      = GuestProvider.FindGuestClaims(UrlLanguage.CurrentLanguage, 0, model.ClaimName, new int?(Convert.ToInt32(model.Claim)), null);
                if ((claims != null) && (claims.Count > 0))
                {
                    int?nullable2;
                    ReservationState reservationState = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, claims[0].claim);
                    if ((reservationState != null) && (nullable2 = reservationState.claimId).HasValue)
                    {
                        context.Claim             = reservationState;
                        context.ShowOrderFindForm = false;
                        context.Hotels            = new List <DepartureHotel>();
                        foreach (GuestClaim claim in claims)
                        {
                            nullable2 = null;
                            context.Hotels.AddRange(GuestProvider.GetDepartureInfo(UrlLanguage.CurrentLanguage, dateFrom, dateFrom.AddDays(1.0), nullable2, new int?(claim.claim)));
                        }
                        context.GuideDurties = new List <HotelGuideResult>();
                        List <GuestOrder> list2 = GuestProvider.GetActiveHotelOrders(claims, dateFrom, dateFrom.AddDays(1.0));
                        if ((list2 != null) && (list2.Count > 0))
                        {
                            GuideController controller = new GuideController();
                            foreach (GuestOrder order in list2)
                            {
                                HotelGuideParam param = new HotelGuideParam {
                                    h  = order.hotelid,
                                    ln = UrlLanguage.CurrentLanguage,
                                    pb = new DateTime?(order.period.begin.Value),
                                    pe = new DateTime?(order.period.end.Value)
                                };
                                HotelGuideResult item = controller.HotelGuide(param);
                                context.GuideDurties.Add(item);
                            }
                        }
                    }
                }
            }
            context.OrderFindNotFound = context.Claim == null;
            return(base.View(context));
        }
예제 #7
0
        public CheckPromoCodeResult CheckPromoCode([FromUri] BookingCartParam param, [FromBody] BookingClaim claim, [FromUri] string promocode)
        {
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            if (claim == null)
            {
                throw new ArgumentNullException("claim");
            }
            if (string.IsNullOrEmpty(promocode))
            {
                throw new ArgumentNullException("promocode");
            }
            WebPartner partner = UserToolsProvider.GetPartner(param);

            return(BookingProvider.CheckExcursionPromoCode(param.Language, partner.id, claim, promocode));
        }
예제 #8
0
        public ActionResult Index(PaymentModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException("model");
            }
            if (model.claimId == 0)
            {
                throw new ArgumentException("claimid");
            }

            PaymentContext context = new PaymentContext {
                Reservation  = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, model.claimId),
                PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, model.claimId)
            };

            return(base.View(context));
        }
예제 #9
0
        public ReservationState State(int?id, [FromUri] StatusParams param)
        {
            Func <GuestClaim, bool> func = null;

            if (!id.HasValue)
            {
                throw new ArgumentNullExceptionWithCode(110, "id");
            }
            if (param == null)
            {
                throw new ArgumentNullException("param");
            }
            WebPartner       partner = UserToolsProvider.GetPartner(param);
            ReservationState result  = BookingProvider.GetReservationState(param.Language, id.Value);
            ReservationState result2;

            if (result != null && result.claimId.HasValue)
            {
                if (param.PartnerSessionID != null && result.partner != null && result.partner.id == partner.id)
                {
                    result2 = result;
                    return(result2);
                }
                if (WebSecurity.CurrentUserId > 0)
                {
                    System.Collections.Generic.List <GuestClaim> claims = GuestProvider.GetLinkedClaims(param.Language, WebSecurity.CurrentUserId);
                    bool arg_10E_0;
                    if (claims != null)
                    {
                        arg_10E_0 = (claims.FirstOrDefault((GuestClaim m) => m.claim == result.claimId.Value) == null);
                    }
                    else
                    {
                        arg_10E_0 = true;
                    }
                    if (!arg_10E_0)
                    {
                        result2 = result;
                        return(result2);
                    }
                }
            }
            return(null);
        }
예제 #10
0
        public void Then_IsCorporateFailWithWebAgent()
        {
            mockFactory.ClearExpectations();

            bool expected = false;

            string salesAgent      = "web";
            int    amountOfBooking = 1;

            var booking = BookingProvider.GetBookings(salesAgent, amountOfBooking).First();

            _XXXLibraryConfigurationMock.Expects.One.GetProperty <string>(x => x.PartialCodeForCorporateAgent).WillReturn("corp");

            bool actual = Sut.IsCorporate(booking);

            Assert.IsTrue(actual == expected, "Expected to fail IsCorporate feature.");

            mockFactory.VerifyAllExpectationsHaveBeenMet();
        }
예제 #11
0
        public void Then_IsAgencyPassWithAgencyAgent()
        {
            mockFactory.ClearExpectations();

            bool expected = true;

            string salesAgent      = "Agency";
            int    amountOfBooking = 1;

            var booking = BookingProvider.GetBookings(salesAgent, amountOfBooking).First();

            _XXXLibraryConfigurationMock.Expects.One.GetProperty <string>(x => x.PartialCodeForAgencyAgent).WillReturn("agency");

            bool actual = Sut.IsAgency(booking);

            Assert.IsTrue(actual == expected, "Expected to pass IsAgency feature.");

            mockFactory.VerifyAllExpectationsHaveBeenMet();
        }
예제 #12
0
        private ActionResult ProcessingPrivate(ProcessingModel model)
        {
            if (model == null)
            {
                throw new System.ArgumentNullException("model");
            }
            if (model.claimId == 0)
            {
                throw new System.ArgumentException("claimid");
            }
            PaymentMode paymentMode = (
                from m in BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, model.claimId)
                where m.id == model.paymentId
                select m).FirstOrDefault <PaymentMode>();

            if (paymentMode == null)
            {
                throw new System.Exception(string.Format("payment mode id '{0}' not found", model.paymentId));
            }
            string text = (paymentMode.processing ?? "").ToLowerInvariant();

            if (text != null)
            {
                switch (text)
                {
                case "paypal":
                    return(this.Processing_PayPal(model.claimId, paymentMode));

                case "uniteller":
                    return(this.Processing_Uniteller(model.claimId, paymentMode));

                case "payu":
                    return(this.Processing_PayU(model.claimId, paymentMode));

                case "cash":
                    return(new RedirectResult(base.Url.Action("howtopay", "info")));

                default:
                    break;
                }
            }
            throw new System.Exception(string.Format("unsupported processing system '{0}'", paymentMode.processing));
        }
        public ActionResult Order(int?id)
        {
            OrderContext      model         = new OrderContext();
            int               currentUserId = WebSecurity.CurrentUserId;
            List <GuestClaim> linkedClaims  = GuestProvider.GetLinkedClaims(UrlLanguage.CurrentLanguage, currentUserId);
            int?              detailedId    = null;

            if (id.HasValue)
            {
                if (linkedClaims.FirstOrDefault((GuestClaim m) => m.claim == id.Value) != null)
                {
                    detailedId = new int?(id.Value);
                }
            }

            if (!(detailedId.HasValue || (linkedClaims.Count <= 0)))
            {
                detailedId = new int?(linkedClaims[0].claim);
            }
            if (detailedId.HasValue)
            {
                ReservationState reservationState = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, detailedId.Value);
                if ((reservationState != null) && reservationState.claimId.HasValue)
                {
                    model.Claim = reservationState;
                    model.ExcursionTransfers = GuestProvider.GetExcursionTransferByClaim(UrlLanguage.CurrentLanguage, reservationState.claimId.Value);
                }
            }
            model.ClaimsNotFound  = linkedClaims.Count == 0;
            model.ShowOtherClaims = true;

            model.OtherClaims = (
                from m in linkedClaims

                //удалить детальн
                //  where m.claim != detailedId
                select m).ToList <GuestClaim>();
            //     model.OtherClaims = linkedClaims.Where<GuestClaim>(new Func<GuestClaim, bool>(class2, (IntPtr) this.<Order>b__2)).ToList<GuestClaim>();


            return(base.View(model));
        }
예제 #14
0
        public void Then_BookingIsNotCanceledWhenAgency()
        {
            mockFactory.ClearExpectations();

            string salesAgent      = "agency";
            int    amountOfBooking = 1;

            var bookingsToCancel       = BookingProvider.GetBookings(salesAgent, amountOfBooking);
            var firstModificationDate  = bookingsToCancel.SingleOrDefault().Modified;
            var journeysAmountToCancel = bookingsToCancel.SingleOrDefault().Journeys.Count;

            _BookingRepository.Expects.One.Method(x => x.Get(null, null, null, null, null, false)).WithAnyArguments().WillReturn(bookingsToCancel);
            _JourneyRepository.Expects.Exactly(journeysAmountToCancel).Method(x => x.Delete(null)).WithAnyArguments();
            _BookingRepository.Expects.One.Method(x => x.UpdateRootEntity(null)).WithAnyArguments();
            _UnitOfWorkBookingCanceler.Expects.One.Method(x => x.Save()).WillReturn(journeysAmountToCancel);

            _BookingFeaturesDomainServices.Expects.One.Method(x => x.IsAgency(null)).WithAnyArguments().WillReturn(true);

            Sut.CancelBooking(bookingsToCancel.First().Id);
        }
예제 #15
0
        public void Then_IsEnabledToAddNewJourneysFailWithMoreThanJourneysAllowed()
        {
            mockFactory.ClearExpectations();

            bool expected = false;

            string salesAgent      = "Corporate";
            int    amountOfBooking = 1;

            var booking = BookingProvider.GetBookings(salesAgent, amountOfBooking).First();

            var maxJourneysAllowedByBooking = booking.Journeys.Count - 1;

            _XXXLibraryConfigurationMock.Expects.One.GetProperty <int>(x => x.MaxJourneysAllowedByBooking).WillReturn(maxJourneysAllowedByBooking);

            bool actual = Sut.IsEnabledToAddNewJourneys(booking);

            Assert.IsTrue(actual == expected, "Expected to fail IsEnabledToAddNewJourneys feature.");

            mockFactory.VerifyAllExpectationsHaveBeenMet();
        }
        public ActionResult Order([Bind(Prefix = "OrderFindForm")] OrderModel model)
        {
            OrderContext context = new OrderContext {
                ShowOrderFindForm = true
            };

            if (base.ModelState.IsValid)
            {
                List <GuestClaim> list = GuestProvider.FindGuestClaims(UrlLanguage.CurrentLanguage, 0, model.ClaimName, new int?(Convert.ToInt32(model.Claim)), null);
                if ((list != null) && (list.Count > 0))
                {
                    ReservationState reservationState = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, list[0].claim);
                    if ((reservationState != null) && reservationState.claimId.HasValue)
                    {
                        context.Claim = reservationState;
                        context.ExcursionTransfers = GuestProvider.GetExcursionTransferByClaim(UrlLanguage.CurrentLanguage, reservationState.claimId.Value);
                        context.ShowOrderFindForm  = false;
                    }
                }
            }
            context.OrderFindNotFound = context.Claim == null;
            return(base.View(context));
        }
예제 #17
0
        private ActionResult Processing_PayU(int claim, PaymentMode payment)
        {
            if (payment == null)
            {
                throw new System.ArgumentNullException("payment");
            }
            PaymentBeforeProcessingResult beforePaymentResult = BookingProvider.BeforePaymentProcessing(UrlLanguage.CurrentLanguage, payment.paymentparam);

            if (beforePaymentResult == null)
            {
                throw new System.Exception("cannot get payment details");
            }
            if (!beforePaymentResult.success)
            {
                throw new System.Exception("payment details fail");
            }
            return(base.View("PaymentSystems\\PayU", new ProcessingContext
            {
                Reservation = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, claim),
                PaymentMode = payment,
                BeforePaymentResult = beforePaymentResult
            }));
        }
        public BookingProviderTests()
        {
            _mockBookingServiceGateway.Setup(_ => _.NextAvailability(It.IsAny <AvailabilityRequest>()))
            .ReturnsAsync(new HttpResponse <AvailabilityDayResponse> {
                StatusCode = System.Net.HttpStatusCode.OK, IsSuccessStatusCode = true, ResponseContent = new AvailabilityDayResponse()
            });

            _mockBookingServiceGateway.Setup(_ => _.GetAvailability(It.IsAny <AvailabilityRequest>()))
            .ReturnsAsync(new HttpResponse <List <AvailabilityDayResponse> > {
                StatusCode = System.Net.HttpStatusCode.OK, IsSuccessStatusCode = true, ResponseContent = new List <AvailabilityDayResponse>()
            });

            _mockBookingServiceGateway.Setup(_ => _.Reserve(It.IsAny <BookingRequest>()))
            .ReturnsAsync(new HttpResponse <Guid> {
                StatusCode = System.Net.HttpStatusCode.OK, IsSuccessStatusCode = true, ResponseContent = Guid.Empty
            });

            _mockBookingServiceGateway.Setup(_ => _.GetLocation(It.IsAny <LocationRequest>()))
            .ReturnsAsync(new HttpResponse <string> {
                StatusCode = System.Net.HttpStatusCode.OK, IsSuccessStatusCode = true, ResponseContent = String.Empty
            });

            _bookigProvider = new BookingProvider(_mockBookingServiceGateway.Object);
        }
예제 #19
0
        private ActionResult ProcessingResult_PayU(ProcessingResultModel model)
        {
            if (model == null)
            {
                throw new System.ArgumentNullException("model");
            }
            PaymentResultContext context = new PaymentResultContext();

            if (model.success == true)
            {
                context.Success = true;
                context.Order   = model.order;
                ConfirmInvoiceResult invoiceResult = BookingProvider.ConfirmInvoice(model.invoice);

                Tracing.DataTrace.TraceEvent(TraceEventType.Information, 0, "PAYU transaction: invoice: '{0}', invoice confirmation: '{1}'", new object[]
                {
                    model.invoice,
                    invoiceResult.IsSuccess ? "SUCCESS" : "FAILED"
                });

                if (!invoiceResult.IsSuccess)
                {
                    context.Errors.Add(string.Format("invoice confirmation error: {0}", invoiceResult.ErrorMessage));
                }
                else
                {
                    context.Success = true;
                    BookingProvider.AcceptInvoice(Convert.ToInt32(context.Order));
                }
            }
            else
            {
                context.Errors.Add(PaymentStrings.PaymentCancelled);
            }
            return(base.View("_ProcessingResult", context));
        }
예제 #20
0
        private ActionResult Processing_Uniteller(int claim, PaymentMode payment)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }
            PaymentBeforeProcessingResult result = BookingProvider.BeforePaymentProcessing(UrlLanguage.CurrentLanguage, payment.paymentparam);

            if (result == null)
            {
                throw new Exception("cannot get payment details");
            }
            if (!result.success)
            {
                throw new Exception("payment details fail");
            }
            ProcessingContext model = new ProcessingContext {
                Reservation         = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, claim),
                PaymentMode         = payment,
                BeforePaymentResult = result
            };

            return(base.View(@"PaymentSystems\Uniteller", model));
        }
예제 #21
0
 public BookingService(BookingProvider bookingProvider)
 {
     _bookingProvider = bookingProvider;
 }
예제 #22
0
        public ActionResult Index(int?claim)
        {
            ReservationState state = null;

            if (claim.HasValue)
            {
                state = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, claim.Value);
            }


            #region ПРОВЕРКА ПРАВ ПОЛЬЗОВАТЕЛЯ НА ПРОСМОТР ЗАКАЗА
            //если есть в параметрах телефон, проверяем его
            if (!string.IsNullOrEmpty(Request.Params["phone"]))
            {
                try
                {
                    //проверяем правильность телефона, добавляем в список разрешенных
                    if (ClearPhoneFromGarbege(Request.Params["phone"]) == ClearPhoneFromGarbege(state.customer.phone))
                    {
                        if (System.Web.HttpContext.Current.Session["allowed_claims"] == null)
                        {
                            System.Web.HttpContext.Current.Session["allowed_claims"] = new List <int>();
                        }

                        (System.Web.HttpContext.Current.Session["allowed_claims"] as List <int>).Add(claim.Value);
                    }
                    else
                    {
                        state = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, 0);
                    }
                }
                catch (Exception)
                {
                    state = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, 0);
                }
            }
            else //если нет, проверяем есть ли в сессии разрешение на заявку
            {
                try
                {
                    if ((claim.HasValue) &&
                        ((System.Web.HttpContext.Current.Session["allowed_claims"] == null) ||
                         (!(System.Web.HttpContext.Current.Session["allowed_claims"] as List <int>).Contains(claim.Value))))
                    {
                        state = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, 0);
                    }
                }
                catch (NullReferenceException)
                {
                    state = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, 0);
                }
            }
            #endregion

            PaymentContext context = new PaymentContext();
            if (claim.HasValue)
            {
                context.Reservation  = state;
                context.PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, claim.Value);
            }

            if (!string.IsNullOrEmpty(Request.Params["paymentMethod"]))
            {
                return(ProcessingPrivate(new ProcessingModel()
                {
                    claimId = claim.Value,
                    paymentId = Request.Params["paymentMethod"]
                }));
            }

            return(base.View(context));
        }
예제 #23
0
        private ActionResult ProcessingResult_PayPal(ProcessingResultModel model)
        {
            if (model == null)
            {
                throw new System.ArgumentNullException("model");
            }
            PaymentResultContext context = new PaymentResultContext();

            context.Order = model.order;
            if (model.success == true)
            {
                if (model.token == null)
                {
                    throw new System.ArgumentNullException("token");
                }
                if (model.payerID == null)
                {
                    throw new System.ArgumentNullException("payerID");
                }
                GetExpressCheckoutDetailsRequestType request = new GetExpressCheckoutDetailsRequestType();
                request.Version = "104.0";
                request.Token   = model.token;
                GetExpressCheckoutDetailsReq wrapper = new GetExpressCheckoutDetailsReq();
                wrapper.GetExpressCheckoutDetailsRequest = request;
                System.Collections.Generic.Dictionary <string, string> config = PaymentController.PayPal_CreateConfig();
                PayPalAPIInterfaceServiceService      service    = new PayPalAPIInterfaceServiceService(config);
                GetExpressCheckoutDetailsResponseType ecResponse = service.GetExpressCheckoutDetails(wrapper);
                if (ecResponse == null)
                {
                    throw new System.Exception("checkout details result is null");
                }
                if (ecResponse.Errors != null && ecResponse.Errors.Count > 0)
                {
                    ecResponse.Errors.ForEach(delegate(ErrorType m)
                    {
                        context.Errors.Add(m.LongMessage);
                    });
                }
                if (ecResponse.Ack == AckCodeType.SUCCESS || ecResponse.Ack == AckCodeType.SUCCESSWITHWARNING)
                {
                    GetExpressCheckoutDetailsResponseDetailsType details = ecResponse.GetExpressCheckoutDetailsResponseDetails;
                    if (details == null)
                    {
                        throw new System.Exception("details object is null");
                    }
                    if (string.IsNullOrEmpty(details.InvoiceID))
                    {
                        throw new System.Exception("invoiceID not found");
                    }
                    if (details.PaymentDetails == null)
                    {
                        throw new System.Exception("payment details is null");
                    }
                    System.Collections.Generic.List <PaymentDetailsType> paymentDetails = new System.Collections.Generic.List <PaymentDetailsType>();
                    foreach (PaymentDetailsType payment in details.PaymentDetails)
                    {
                        paymentDetails.Add(new PaymentDetailsType
                        {
                            NotifyURL     = null,
                            PaymentAction = payment.PaymentAction,
                            OrderTotal    = payment.OrderTotal
                        });
                    }
                    DoExpressCheckoutPaymentRequestType paymentRequest = new DoExpressCheckoutPaymentRequestType();
                    paymentRequest.Version = "104.0";
                    paymentRequest.DoExpressCheckoutPaymentRequestDetails = new DoExpressCheckoutPaymentRequestDetailsType
                    {
                        PaymentDetails = paymentDetails,
                        Token          = model.token,
                        PayerID        = model.payerID
                    };
                    DoExpressCheckoutPaymentResponseType doECResponse = service.DoExpressCheckoutPayment(new DoExpressCheckoutPaymentReq
                    {
                        DoExpressCheckoutPaymentRequest = paymentRequest
                    });
                    if (doECResponse == null)
                    {
                        throw new System.Exception("payment result is null");
                    }
                    if (doECResponse.Errors != null && doECResponse.Errors.Count > 0)
                    {
                        doECResponse.Errors.ForEach(delegate(ErrorType m)
                        {
                            context.Errors.Add(m.LongMessage);
                        });
                    }
                    if (doECResponse.Ack == AckCodeType.SUCCESS || doECResponse.Ack == AckCodeType.SUCCESSWITHWARNING)
                    {
                        ConfirmInvoiceResult invoiceResult = BookingProvider.ConfirmInvoice(details.InvoiceID.Trim());
                        Tracing.DataTrace.TraceEvent(TraceEventType.Information, 0, "PAYPAL transaction: invoice: '{0}', invoice confirmation: '{1}'", new object[]
                        {
                            details.InvoiceID,
                            invoiceResult.IsSuccess ? "SUCCESS" : "FAILED"
                        });
                        if (!invoiceResult.IsSuccess)
                        {
                            context.Errors.Add(string.Format("invoice confirmation error: {0}", invoiceResult.ErrorMessage));
                        }
                        else
                        {
                            context.Success = true;

                            BookingProvider.AcceptInvoice(Convert.ToInt32(context.Order));
                        }
                    }
                }
            }
            else
            {
                context.Errors.Add(PaymentStrings.PaymentCancelled);
            }
            return(base.View("_ProcessingResult", context));
        }
예제 #24
0
        private ActionResult Processing_PayPal(int claim, PaymentMode payment)
        {
            if (payment == null)
            {
                throw new System.ArgumentNullException("payment");
            }
            PaymentBeforeProcessingResult beforePaymentResult = BookingProvider.BeforePaymentProcessing(UrlLanguage.CurrentLanguage, payment.paymentparam);

            if (beforePaymentResult == null)
            {
                throw new System.Exception("cannot get payment details");
            }
            if (!beforePaymentResult.success)
            {
                throw new System.Exception("payment details fail");
            }
            System.Collections.Generic.List <PaymentDetailsType> paymentDetails = new System.Collections.Generic.List <PaymentDetailsType>();
            PaymentDetailsType paymentDetail = new PaymentDetailsType();

            paymentDetail.AllowedPaymentMethod = new AllowedPaymentMethodType?(AllowedPaymentMethodType.ANYFUNDINGSOURCE);
            CurrencyCodeType       currency    = (CurrencyCodeType)EnumUtils.GetValue(payment.payrest.currency, typeof(CurrencyCodeType));
            PaymentDetailsItemType paymentItem = new PaymentDetailsItemType();

            paymentItem.Name                 = string.Format(PaymentStrings.ResourceManager.Get("PaymentForOrderFormat"), claim);
            paymentItem.Amount               = new BasicAmountType(new CurrencyCodeType?(currency), payment.payrest.total.ToString("#.00", System.Globalization.NumberFormatInfo.InvariantInfo));
            paymentItem.Quantity             = new int?(1);
            paymentItem.ItemCategory         = new ItemCategoryType?(ItemCategoryType.PHYSICAL);
            paymentItem.Description          = string.Format("Booking #{0}", claim);
            paymentDetail.PaymentDetailsItem = new System.Collections.Generic.List <PaymentDetailsItemType>
            {
                paymentItem
            };
            paymentDetail.PaymentAction = new PaymentActionCodeType?(PaymentActionCodeType.SALE);
            paymentDetail.OrderTotal    = new BasicAmountType(paymentItem.Amount.currencyID, paymentItem.Amount.value);
            paymentDetails.Add(paymentDetail);
            SetExpressCheckoutRequestDetailsType ecDetails = new SetExpressCheckoutRequestDetailsType();

            ecDetails.ReturnURL = new Uri(base.Request.BaseServerAddress(), base.Url.Action("processingresult", new
            {
                id      = "paypal",
                success = true
            })).ToString();
            ecDetails.CancelURL = new Uri(base.Request.BaseServerAddress(), base.Url.Action("processingresult", new
            {
                id      = "paypal",
                success = false
            })).ToString();
            ecDetails.NoShipping     = "1";
            ecDetails.AllowNote      = "0";
            ecDetails.SolutionType   = new SolutionTypeType?(SolutionTypeType.SOLE);
            ecDetails.SurveyEnable   = "0";
            ecDetails.PaymentDetails = paymentDetails;
            ecDetails.InvoiceID      = beforePaymentResult.invoiceNumber;
            SetExpressCheckoutRequestType request = new SetExpressCheckoutRequestType();

            request.Version = "104.0";
            request.SetExpressCheckoutRequestDetails = ecDetails;
            SetExpressCheckoutReq wrapper = new SetExpressCheckoutReq();

            wrapper.SetExpressCheckoutRequest = request;
            System.Collections.Generic.Dictionary <string, string> config = PaymentController.PayPal_CreateConfig();
            PayPalAPIInterfaceServiceService service       = new PayPalAPIInterfaceServiceService(config);
            SetExpressCheckoutResponseType   setECResponse = service.SetExpressCheckout(wrapper);

            System.Collections.Generic.KeyValuePair <string, string> sandboxConfig = config.FirstOrDefault((System.Collections.Generic.KeyValuePair <string, string> m) => m.Key == "mode");
            string sandboxServer = (sandboxConfig.Key != null && sandboxConfig.Value == "sandbox") ? ".sandbox" : "";

            return(base.View("PaymentSystems\\PayPal", new ProcessingContext
            {
                Reservation = BookingProvider.GetReservationState(UrlLanguage.CurrentLanguage, claim),
                PaymentMode = payment,
                BeforePaymentResult = beforePaymentResult,
                RedirectUrl = string.Format("https://www{0}.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token={1}", sandboxServer, base.Server.UrlEncode(setECResponse.Token))
            }));

            //  return new RedirectResult(string.Format("https://www{0}.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token={1}", sandboxServer, base.Server.UrlEncode(setECResponse.Token)));
        }
    public async Task<IDictionary<string, object>> BuildStatusCalendarContent(DateTime startDate, DateTime endDate)
    {
      SearchBookingSummariesQuery query = new SearchBookingSummariesQuery
      {
        Start = startDate,
        End = endDate,
        BookingState = new BookingDataModel.BookingStateType[] { BookingDataModel.BookingStateType.Requested, BookingDataModel.BookingStateType.Approved }
      };

      var bookings = await BookingProvider.FindBookingsInInterval(query);
      var expandedBookingDays = bookings.SelectMany(b => b.ExpandDays()).ToDictionary(
        b => b.Date.ToString("yyyy-MM-dd"),
        b => b.Booking);

      List<Dictionary<string, object>> dates = new List<Dictionary<string, object>>();

      var today = DateTime.Now.ToString("yyyy-MM-dd");

      for (DateTime day = startDate; day < endDate; day = day.AddDays(1))
      {
        string dayString = day.ToString("yyyy-MM-dd");
        Dictionary<string, object> dayData = new Dictionary<string, object>();

        dayData["date"] = day;
        dayData["dateString"] = dayString;

        string rowColor = "transparent";
        string dateColor = "transparent";

        if (today == dayString)
        {
          rowColor = "#90EE90";
        }
        else if (day.DayOfWeek == DayOfWeek.Saturday)
        {
          dateColor = "#D3D3D3";
        }
        if (day.DayOfWeek == DayOfWeek.Sunday)
        {
          rowColor = "#D3D3D3";
        }

        dayData["rowColor"] = rowColor;
        dayData["dateColor"] = dateColor;

        if (expandedBookingDays.TryGetValue(dayString, out BookingSummary booking))
        {
          dayData["bookingNumber"] = booking.BookingNumber;
          dayData["bookingAlert"] = booking.AlertMessage;
          dayData["bookingPurpose"] = booking.Purpose;
          dayData["bookingContactName"] = booking.ContactName;
        }

        dates.Add(dayData);
      }

      await LoadElectricityTimeSeries(startDate, endDate, dates);

      Dictionary<string, object> result = new Dictionary<string, object>();

      result["dates"] = dates;

      return result;
    }
예제 #26
0
 public BookingController(BookingContext context)
 {
     _provider = new BookingProvider(context);
 }
        public ActionResult Index(BookingCartWebParam param)
        {
            Action <BookingOrder> action    = null;
            Action <BookingOrder> action2   = null;
            BookingContext        context   = new BookingContext();
            CompleteOperation     operation = CompleteOperation.CreateFromSession(base.Session);

            if (operation.IsProgress)
            {
                context.BookingOperationId = operation.OperationId;
                return(base.View("_BookingProcessing", context));
            }
            if (operation.HasResult)
            {
                BookingCartResult result = JsonConvert.DeserializeObject <BookingCartResult>(operation.OperationResultData);
                if (result != null)
                {
                    context.Prepare(result.Form, result.Reservation);
                }
                operation.Clear();
                return(base.View(context));
            }
            using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session))
            {
                if (param != null)
                {
                    if (param.PartnerSessionID != null)
                    {
                        cart.PartnerSessionID = param.PartnerSessionID;
                    }
                    if (param.PartnerAlias != null)
                    {
                        cart.PartnerAlias = param.PartnerAlias;
                    }
                }
                context.Form = new BookingModel();
                context.Form.PartnerAlias     = cart.PartnerAlias;
                context.Form.PartnerSessionID = cart.PartnerSessionID;
                if (WebSecurity.IsAuthenticated)
                {
                    context.Form.CustomerEmail = WebSecurity.CurrentUserName;
                }
                if (cart.Orders != null)
                {
                    if (action == null)
                    {
                        action = delegate(BookingOrder o) {
                            if (((o != null) && (o.excursion != null)) && (o.excursion.contact != null))
                            {
                                if (!((context.Form.CustomerName != null) || string.IsNullOrEmpty(o.excursion.contact.name)))
                                {
                                    context.Form.CustomerName = o.excursion.contact.name;
                                }
                                if (!((context.Form.CustomerMobile != null) || string.IsNullOrEmpty(o.excursion.contact.mobile)))
                                {
                                    context.Form.CustomerMobile = o.excursion.contact.mobile;
                                }
                            }
                        };
                    }
                    cart.Orders.ForEach(action);
                }
                if (cart.Orders != null)
                {
                    if (action2 == null)
                    {
                        action2 = delegate(BookingOrder m) {
                            BookingOrderModel item = new BookingOrderModel {
                                BookingOrder = m
                            };
                            context.Form.Orders.Add(item);
                        };
                    }
                    cart.Orders.ForEach(action2);
                }
            }
            context.Form.Action  = "calculate";
            context.PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, 2025654180);

            return(this.Index(context.Form));
        }
        public ActionResult Index([Bind(Prefix = "Form")] BookingModel form)
        {
            Predicate <BookingOrderModel> match      = null;
            Predicate <BookingOrder>      predicate2 = null;
            Action <BookingOrderModel>    action2    = null;

            if (form == null)
            {
                throw new ArgumentNullException("form");
            }
            if (form.Action == "remove")
            {
                base.ModelState.Clear();
                if ((form.RemoveOrderId != null) && (form.Orders != null))
                {
                    if (match == null)
                    {
                        match = m => ((m != null) && (m.BookingOrder != null)) && (m.BookingOrder.orderid == form.RemoveOrderId);
                    }
                    form.Orders.RemoveAll(match);
                    using (ShoppingCart cart = ShoppingCart.CreateFromSession(base.Session))
                    {
                        if ((cart != null) && (cart.Orders != null))
                        {
                            if (predicate2 == null)
                            {
                                predicate2 = m => m.orderid == form.RemoveOrderId;
                            }
                            cart.Orders.RemoveAll(predicate2);
                        }
                    }
                }
            }
            BookingContext model = new BookingContext();

            model.PaymentModes = BookingProvider.GetPaymentModes(UrlLanguage.CurrentLanguage, 2025654180);
            BookingClaim bookingClaim = new BookingClaim {
                orders = new List <BookingOrder>()
            };

            if (form.Orders != null)
            {
                if (action2 == null)
                {
                    action2 = delegate(BookingOrderModel m) {
                        if ((m != null) && (m.BookingOrder != null))
                        {
                            bookingClaim.orders.Add(m.BookingOrder);
                        }
                    };
                }
                form.Orders.ForEach(action2);
            }
            BookingCartParam bookingCartParam = new BookingCartParam {
                ln   = UrlLanguage.CurrentLanguage,
                pa   = form.PartnerAlias,
                psid = form.PartnerSessionID
            };

            GuestService.Controllers.Api.BookingController controller = new GuestService.Controllers.Api.BookingController();
            bookingClaim.note = form.BookingNote;
            Customer customer = new Customer {
                name    = form.CustomerName,
                mobile  = form.CustomerMobile,
                email   = form.CustomerEmail,
                address = form.CustomerAddress
            };

            bookingClaim.customer = customer;
            if (form.PromoCodes != null)
            {
                bookingClaim.PromoCodes = new List <string>(form.PromoCodes);
            }
            if (form.Action == null)
            {
                if (!form.RulesAccepted)
                {
                    base.ModelState.AddModelError("Form.RulesAccepted", BookingStrings.RulesAccepted);
                }
                if (base.ModelState.IsValid)
                {
                    CompleteOperation operation = CompleteOperation.CreateFromSession(base.Session);
                    operation.Start();
                    model.BookingOperationId = operation.OperationId;
                    int?userId = WebSecurity.IsAuthenticated ? new int?(WebSecurity.CurrentUserId) : null;
                    ThreadPool.QueueUserWorkItem(delegate(object o) {
                        try
                        {
                            BookingCartResult result = new BookingCartResult {
                                Form        = form,
                                Reservation = controller.Book(bookingCartParam, bookingClaim)
                            };
                            if (((result.Reservation != null) && result.Reservation.claimId.HasValue) && userId.HasValue)
                            {
                                GuestProvider.LinkGuestClaim(userId.Value, result.Reservation.claimId.Value);
                            }
                            string data = JsonConvert.SerializeObject(result);
                            CompleteOperationProvider.SetResult(operation.OperationId, "bookingresult", data);
                        }
                        catch (Exception exception)
                        {
                            Tracing.WebTrace.TraceEvent(TraceEventType.Error, 2, exception.ToString());
                            CompleteOperationProvider.SetResult(operation.OperationId, null, null);
                        }
                    }, null);
                    model.Form = form;
                    return(base.View("_BookingProcessing", model));
                }
            }
            else if (form.Action == "promo")
            {
                base.ModelState.Clear();
                List <string> list = (form.PromoCodes == null) ? new List <string>() : new List <string>(form.PromoCodes);
                if (!string.IsNullOrWhiteSpace(form.PromoCode))
                {
                    Action <BookingOrderModel> action = null;
                    BookingClaim checkPromoClaim      = new BookingClaim {
                        orders = new List <BookingOrder>()
                    };
                    if (form.Orders != null)
                    {
                        if (action == null)
                        {
                            action = delegate(BookingOrderModel m) {
                                if ((m != null) && (m.BookingOrder != null))
                                {
                                    checkPromoClaim.orders.Add(m.BookingOrder);
                                }
                            };
                        }
                        form.Orders.ForEach(action);
                    }
                    checkPromoClaim.PromoCodes = (form.PromoCodes != null) ? new List <string>(form.PromoCodes) : new List <string>();
                    CheckPromoCodeResult result = controller.CheckPromoCode(bookingCartParam, bookingClaim, form.PromoCode);
                    if ((result != null) && (result.errorcode == 0))
                    {
                        list.Add(form.PromoCode);
                        bookingClaim.PromoCodes = list;
                        form.PromoCodes         = list.ToArray();
                    }
                    else
                    {
                        base.ModelState.AddModelError("PromoCodeError", (result != null) ? result.errormessage : "невозможно применить промо код");
                    }
                }
            }
            ReservationState reservation = controller.Calculate(bookingCartParam, bookingClaim);

            model.Prepare(form, reservation);
            return(base.View(model));
        }