public void CreateBookingMismatchedBusinessIdThrowsValidationException()
            {
                // Arrange
                // Parameters for the invoke
                const long BUSINESS_ID = 2;
                const long MISMATCHED_BUSINESS_ID = 5;

                var bookingDto = new BookingDto
                {
                    BusinessId = BUSINESS_ID,
                        Guest = new GuestDto { Id = 1, BusinessId = BUSINESS_ID, Surname = "Test Guest", Email = "*****@*****.**" },
                        StartDate = new DateTime(2012, 2, 1, 0, 0, 0, DateTimeKind.Utc),
                        EndDate = new DateTime(2012, 2, 2, 0, 0, 0, DateTimeKind.Utc),
                    NumberOfAdults = 2,
                        NumberOfChildren = 1,
                        Cost = new decimal(120.5),
                        BookingStatusCode = BookingStatusType.CONFIRMED,
                    RoomTypeId = 1,
                    RoomId = 1,
                    RatePlanId = 1,
                        CheckinStatusCode = CheckinStatusOptions.NOTCHECKEDIN,
                        Notes = "Testing note",
                        BookingScenarioType = BookingScenarioTypeEnumDto.OnAccountBooking
                };

                var orderDto = new OrderDto
                    {
                        Id = 1,
                        Bookings = new List<BookingDto> { bookingDto }
                    };

                // Stub the BusinessCache to be used by our service method
                CacheHelper.StubBusinessCacheSingleBusiness(MISMATCHED_BUSINESS_ID);

                // invalidate the cache so we make sure our business is loaded into the cache
                Cache.Business.Invalidate();

                try
                {
                // Act
                    PropertyManagementSystemService.CreateOrder(MISMATCHED_BUSINESS_ID, orderDto);

                // Assert
                    Assert.Fail("An exception SRVEX30000 of type ValidationException should have been thrown");
                }
                catch (ValidationException ex)
                {
                    // Assert
                    Assert.AreEqual("SRVEX30000", ex.Code, "The Validation exception is not returning the right error code");
                }
                finally
                {
                // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method
                CacheHelper.ReAssignBusinessDaoToBusinessCache();
            }
            }
            public void CreateOrderInvalidBusinessIdThrowsValidationException()
            {
                // Arrange
                // businessId that we know will never exist
                const long BUSINESS_ID = -100011110010000;

                var orderDto = new OrderDto
                    {
                        Id = 1,
                        Bookings = new List<BookingDto>()
                    };

                try
                {
                    // Act
                    PropertyManagementSystemService.CreateOrder(BUSINESS_ID, orderDto);

                    // Assert
                    Assert.Fail("An exception SRVEX30001 of type ValidationException should have been thrown");
                }
                catch (ValidationException ex)
                {
                    // Assert
                    Assert.AreEqual("SRVEX30001", ex.Code, "The Validation exception is not returning the right error code");
                }
            }
        public OrderDto CreateOrder(long businessId, OrderDto orderDto)
        {
            // Make sure the current user has access to this business
            CheckAccessRights(businessId);

            if (Cache.Business.TryGetValue(businessId) == null)
            {
                throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30001, "PropertyManagementSystemService.CreateOrder",
                                                additionalDescriptionParameters: (new object[] { businessId })));
            }

            // Validate if the business matches the business on the booking
            foreach (var bookingDto in orderDto.Bookings)
            {
                if (businessId != bookingDto.BusinessId)
                {
                    throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30000, "PropertyManagementSystemService.CreateOrder",
                                                    additionalDescriptionParameters: (new object[] { businessId, bookingDto.BusinessId }),
                                                    arguments: new object[] {businessId, bookingDto }));
                }
            }

            // Convert to Model
            Order order = DataTransferObjectsConverter.ConvertOrderDtoToOrder(orderDto);
            order.OfflineSourceEnum = OfflineSourceEnum.Web;
            order.OrderSourceCode = SourceType.Pms.GetCode();

            order.Bookings.ForEach(b => b.CheckinStatus = new EnumEntity { Code = CheckinStatusOptions.NOTCHECKEDIN });

            orderManager.CreateOrder(businessId, order);

            return order.Id != null ? Mapper.Map<Order, OrderDto>(orderManager.GetOrderWithBookingsByKey(order.Id.Value)) : null;
        }
            public void CreateOrderCreatesOrder()
            {
                // Arrange
                const long BUSINESS_ID = 1;

                // Stub the BusinessCache to be used by our service method
                CacheHelper.StubBusinessCacheSingleBusiness(BUSINESS_ID);

                // invalidate the cache so we make sure our business is loaded into the cache
                Cache.Business.Invalidate();

                var orderDto = new OrderDto
                    {
                        Id = 1,
                        Bookings = new List<BookingDto>()
                    };

                var order = new Order
                    {
                        Id = 1,
                        Bookings = new List<Booking>()
                    };
                
                var orderManager = MockRepository.GenerateMock<IOrderManager>();

                orderManager.Expect(x => x.CreateOrder(Arg<long>.Is.Anything, Arg<Order>.Is.Anything)).Return(true);
                orderManager.Expect(x => x.GetOrderWithBookingsByKey(Arg<int>.Is.Anything, Arg<string>.Is.Anything, Arg<string>.Is.Anything, Arg<string>.Is.Anything, Arg<GetOrderWithBookingsByEnum>.Is.Equal(GetOrderWithBookingsByEnum.Id))).Return(order);

                PropertyManagementSystemService.OrderManager = orderManager;

                // Act
                PropertyManagementSystemService.CreateOrder(BUSINESS_ID, orderDto);

                // Assert
                orderManager.VerifyAllExpectations();

                // Reassign the Dao on the cache to discard the stub assigned on the StubBusinessCacheSingleBusiness method
                CacheHelper.ReAssignBusinessDaoToBusinessCache();
            }
 /// <summary>
 /// Converts Order DTO object to Order
 /// </summary>
 /// <param name="orderDto">Order Dto to convert</param>
 /// <returns>Converted Order</returns>
 public static Order ConvertOrderDtoToOrder(OrderDto orderDto)
 {
     OfflineSourceEnum? offlineSourceEnum = EnumExtensions.ParseEnumFromCode<OfflineSourceEnum>(orderDto.OfflineSourceCode);
     
     if (offlineSourceEnum == OfflineSourceEnum.Unknown)
     {
         offlineSourceEnum = null;
     }
     
     var order = new Order
         {
             Id = orderDto.Id,
             OrderSourceCode = orderDto.OrderSourceCode,
             ChannelId = orderDto.ChannelId,
             ChannelReference = orderDto.ChannelReference,
             IntegrationType = EnumExtensions.ParseEnumFromCode<IntegrationTypeEnum>(orderDto.IntegrationTypeCode),
             AgentId = orderDto.AgentId,
             OfflineSourceEnum = offlineSourceEnum,
             CustomerCurrencyCode = orderDto.CustomerCurrencyCode,
             CustomerCultureCode = orderDto.CustomerCultureCode,
             GroupReference = orderDto.GroupReference,
             Bookings = orderDto.Bookings != null ? orderDto.Bookings.ConvertAll(ConvertBookingDtoToBooking) : null,
             OrderReference = orderDto.OrderReference,
             LeadGuest = orderDto.LeadGuest != null ? Mapper.Map<Guest>(orderDto.LeadGuest) : null,
             GuestMessage = orderDto.GuestMessage,
             Notes = orderDto.Notes
         };
     
     return order;
 }