Example #1
0
 public ImportBookingsCommandHandler(
     IAdvancedContentRepository domainRepository,
     ITenantCategoryProvider tenantCategoryProvider,
     IPermissionValidationService permissionValidationService,
     BookingSettings bookingSettings)
 {
     DomainRepository            = domainRepository;
     TenantCategoryProvider      = tenantCategoryProvider;
     PermissionValidationService = permissionValidationService;
     BookingSettings             = bookingSettings;
 }
Example #2
0
 public UpdateBookingCommandHandler(
     IAdvancedContentRepository domainRepository,
     IBookingProvider bookingProvider,
     IPermissionValidationService permissionValidationService,
     ITenantCategoryProvider tenantCategoryProvider)
 {
     DomainRepository            = domainRepository;
     BookingProvider             = bookingProvider;
     PermissionValidationService = permissionValidationService;
     TenantCategoryProvider      = tenantCategoryProvider;
 }
Example #3
0
 public BookingProvider(
     IAdvancedContentRepository contentRepository,
     IPermissionValidationService permissionValidationService,
     ITenantCategoryProvider tenantCategoryProvider,
     IContentRouteLibrary contentRouteLibrary,
     BookingSettings bookingSettings)
     : base(contentRepository)
 {
     PermissionValidationService = permissionValidationService;
     TenantCategoryProvider      = tenantCategoryProvider;
     ContentRouteLibrary         = contentRouteLibrary;
     BookingSettings             = bookingSettings;
 }
Example #4
0
 public BookingRequestCommandHandler(
     IAdvancedContentRepository domainRepository,
     ISequenceNumberGenerator sequenceNumberGenerator,
     ITemplateProvider templateProvider,
     ITenantCategoryProvider tenantCategoryProvider,
     IMailDispatchService mailDispatchService,
     ICommandExecutor commandExecutor,
     BookingSettings bookingSettings,
     ICurrentUserProvider currentUserProvider)
 {
     DomainRepository        = domainRepository;
     SequenceNumberGenerator = sequenceNumberGenerator;
     TemplateProvider        = templateProvider;
     TenantCategoryProvider  = tenantCategoryProvider;
     MailDispatchService     = mailDispatchService;
     CommandExecutor         = commandExecutor;
     BookingSettings         = bookingSettings;
     CurrentUserProvider     = currentUserProvider;
 }
        public async Task UpdateCalculatedValues(
            IBookingProvider bookingProvider,
            ITenantCategoryProvider tenantCategoryProvider,
            BookingSettings settings)
        {
            Alert = null;

            if (IsCancelled)
            {
                Alert            = AlertType.Cancelled;
                AlertMessage     = "Aflyst.";
                BookingStateText = "Aflyst";
            }
            else if (BookingState == BookingDataModel.BookingStateType.Requested)
            {
                Alert        = AlertType.New;
                AlertMessage = "Ny reservation.";
            }
            else if (BookingState == BookingDataModel.BookingStateType.Approved)
            {
                if (!WelcomeLetterIsSent && DateTime.Now > ArrivalDate - TimeSpan.FromDays(settings.DaysBeforeArrivalForWelcomeLetter))
                {
                    Alert        = AlertType.Key;
                    AlertMessage = "Velkomstbrev skal udsendes.";
                }
                else if (DateTime.Now > DepartureDate)
                {
                    if (!IsCheckedOut)
                    {
                        Alert        = AlertType.AwaitingCheckout;
                        AlertMessage = "Afventer slutafregning fra lejer.";
                    }
                    else
                    {
                        Alert        = AlertType.Finalize;
                        AlertMessage = "Lejemålet er overstået og skal afsluttes.";
                    }
                }
            }

            Notifications = new List <Notification>();

            var tenantCategory = await tenantCategoryProvider.GetTenantCategoryById(TenantCategoryId);

            DateTime lastAllowedArrivalDate = CreatedDate.AddMonths(tenantCategory.AllowedBookingFutureMonths);

            if (ArrivalDate >= lastAllowedArrivalDate)
            {
                AddNotification(NotificationLevelType.Warning, $"Bemærk at ankomstdatoen ligger mere end de tilladte {tenantCategory.AllowedBookingFutureMonths} måneder efter at ansøgningen blev oprettet. " +
                                $"Datoen er beregnet på baggrund af lejerkategorien.");
            }

            if (RentalPrice == null)
            {
                AddNotification(NotificationLevelType.Warning, "Bemærk at der endnu ikke er aftalt nogen pris.");
            }

            // Look up overlap for active bookings (no need to add warning for historic bookings)
            if (BookingState != BookingDataModel.BookingStateType.Closed)
            {
                var overlappingBookings = await bookingProvider.FindBookingsInInterval(new Queries.SearchBookingSummariesQuery
                {
                    Start       = ArrivalDate,
                    End         = DepartureDate,
                    IsCancelled = false
                });

                foreach (var booking in overlappingBookings)
                {
                    // Do not include self
                    if (booking.Id != Id && booking.CollidesWith(this))
                    {
                        AddNotification(NotificationLevelType.Warning, $"Denne reservation overlapper med reservation nr. {booking.BookingNumber} den {booking.ArrivalDate.ToShortDateString()} til {booking.DepartureDate.ToShortDateString()}.");
                    }
                }
            }

            if (BookingState == BookingDataModel.BookingStateType.Closed)
            {
                AddNotification(NotificationLevelType.Information, $"Denne reservation er afsluttet ({GetSingleWordStateDescription()}).");
            }
        }