Example #1
0
    private void ProcessDeactivation(string supplierAccommodationCode, DeactivationReasons reason,
                                     Contracts.MultilingualAccommodation accommodation)
    {
        if (_accommodationDataStorage.SupplierInvalidAccommodations.TryGetValue(supplierAccommodationCode, out var invalidAccommodation))
        {
            if (invalidAccommodation.DeactivationReason == reason)
            {
                return;
            }

            var accommodationToUpdate = new RichAccommodationDetails
            {
                Id = invalidAccommodation.HtId,
                DeactivationReason = reason,
                Modified           = DateTimeOffset.UtcNow,
                FinalAccommodation = accommodation
            };

            _context.Attach(accommodationToUpdate);

            var entry = _context.Entry(accommodationToUpdate);
            entry.Property(ac => ac.DeactivationReason).IsModified = true;
            entry.Property(ac => ac.Modified).IsModified           = true;
            entry.Property(ac => ac.FinalAccommodation).IsModified = true;

            _accommodationChangeLogCollectorService.CollectDeactivationReasonChangeEvent(invalidAccommodation.HtId, AccommodationChangeEventSources.Updater,
                                                                                         invalidAccommodation.DeactivationReason, reason);

            return;
        }

        if (_accommodationDataStorage.SupplierActiveAccommodations.TryGetValue(supplierAccommodationCode,
                                                                               out var existingActive))
        {
            var accommodationToUpdate = new RichAccommodationDetails
            {
                Id                 = existingActive.HtId,
                IsActive           = false,
                DeactivationReason = reason,
                Modified           = DateTimeOffset.UtcNow,
                FinalAccommodation = accommodation
            };

            _context.Attach(accommodationToUpdate);

            var entry = _context.Entry(accommodationToUpdate);
            entry.Property(ac => ac.IsActive).IsModified           = true;
            entry.Property(ac => ac.DeactivationReason).IsModified = true;
            entry.Property(ac => ac.Modified).IsModified           = true;

            _accommodationsToRemove.Add(existingActive.HtId);
            _accommodationChangeLogCollectorService.CollectDeactivationEvent(existingActive.HtId, AccommodationChangeEventSources.Updater, reason,
                                                                             string.Empty);
            return;
        }

        var dbAccommodation = GetDbAccommodation(accommodation, isActive: false, reason);

        _accommodationsToAdd.Add(dbAccommodation);
    }
Example #2
0
        public static AccommodationChangeLog GetDeactivationChangeLog(int accommodationId, AccommodationChangeEventSources eventSource,
                                                                      DeactivationReasons deactivationReason, string?deactivationReasonDescription)
        {
            var deactivationEventData = new DeactivationEventData(deactivationReason, deactivationReasonDescription);

            return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.Deactivation, deactivationEventData));
        }
Example #3
0
    private RichAccommodationDetails GetDbAccommodation(Contracts.MultilingualAccommodation accommodation, bool isActive,
                                                        DeactivationReasons deactivationReason = DeactivationReasons.None)
    {
        var locationIds = _actualLocationsSearchHelper.GetActualLocationIds(accommodation.Location);
        var utcNow      = DateTimeOffset.UtcNow;

        var dbAccommodation = new RichAccommodationDetails
        {
            CountryCode                = _country.Code,
            FinalAccommodation         = accommodation,
            SupplierAccommodationCodes = new Dictionary <string, string> {
                { _supplier, accommodation.SupplierCode }
            },
            Created            = utcNow,
            Modified           = utcNow,
            IsCorrected        = true,
            KeyData            = _multilingualDataHelper.GetAccommodationKeyData(accommodation),
            CountryId          = _country.Id,
            LocalityId         = locationIds.LocalityId,
            LocalityZoneId     = locationIds.LocalityZoneId,
            IsActive           = isActive,
            DeactivationReason = deactivationReason
        };

        return(dbAccommodation);
    }
 public CreationEventData(Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation,
                          bool isActive, DeactivationReasons deactivationReason = default)
 {
     SupplierAccommodationCodes = supplierAccommodationCodes;
     Accommodation      = accommodation;
     IsActive           = isActive;
     DeactivationReason = deactivationReason;
 }
        public void CollectDeactivationReasonChangeEvent(int accommodationId, AccommodationChangeEventSources source, DeactivationReasons oldDeactivationReason,
                                                         DeactivationReasons newDeactivationReason)

        {
            var changeLog = AccommodationChangeLogConverter.GetDeactivationReasonChangeLog(accommodationId, source, oldDeactivationReason,
                                                                                           newDeactivationReason);

            AccommodationsChangeLogs.Add(changeLog);
        }
Example #6
0
        public static AccommodationChangeLog GetDeactivationReasonChangeLog(int accommodationId, AccommodationChangeEventSources eventSource,
                                                                            DeactivationReasons oldDeactivationReason, DeactivationReasons newDeactivationReason)
        {
            var deactivationReasonChangeEventData = new DeactivationReasonChangeEventData
            {
                OldReason = oldDeactivationReason,
                NewReason = newDeactivationReason
            };

            return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.DeactivationReasonChange, deactivationReasonChangeEventData));
        }
Example #7
0
        public async Task <Result> Activate(string htAccommodationId, DeactivationReasons deactivationReasonToCheck = default,
                                            CancellationToken cancellationToken = default)
        {
            var(_, isFailure, accommodationId, error) = AccommodationIdRetriever.RetrieveId(htAccommodationId);
            if (isFailure)
            {
                return(Result.Failure(error));
            }

            var accommodationToActivate = await _context.Accommodations.SingleOrDefaultAsync(a => a.Id == accommodationId, cancellationToken);

            if (accommodationToActivate is null)
            {
                return(Result.Failure <RichAccommodationDetails>($"Accommodation with htId {htAccommodationId} doesn't exist"));
            }

            if (deactivationReasonToCheck != default && accommodationToActivate.DeactivationReason != deactivationReasonToCheck)
            {
                return(Result.Failure <RichAccommodationDetails>(
                           $"Accommodation with htId {htAccommodationId} must have {deactivationReasonToCheck.ToString()} deactivation reason."));
            }

            if (accommodationToActivate.IsActive)
            {
                return(Result.Success());
            }

            return(await ActivateAccommodation(accommodationToActivate)
                   .Tap(Publish)
                   .Tap(AddActivationEvent));


            async Task <Result <RichAccommodationDetails> > ActivateAccommodation(RichAccommodationDetails accommodation)
            {
                accommodation.IsActive                      = true;
                accommodation.DeactivationReason            = DeactivationReasons.None;
                accommodation.DeactivationReasonDescription = string.Empty;
                accommodation.Modified                      = DateTimeOffset.UtcNow;

                _context.Update(accommodation);
                await _context.SaveChangesAsync(cancellationToken);

                return(accommodation);
            }

            Task Publish(RichAccommodationDetails accommodation)
            {
                return(_accommodationChangePublisher.PublishAdded(AccommodationDataForPublicationConverter.Convert(accommodation), accommodation.LocalityId ?? default));
            }

            Task AddActivationEvent()
            => _accommodationChangeLogService.AddActivationEvent(accommodationId, AccommodationChangeEventSources.Api,
                                                                 accommodationToActivate.DeactivationReason);
        }
Example #8
0
        public static AccommodationChangeLog GetActivationChangeLog(int accommodationId, AccommodationChangeEventSources eventSource,
                                                                    DeactivationReasons deactivationReason,
                                                                    AccommodationKeyData?previousKeyData = default, AccommodationKeyData?currentKeyData = default)
        {
            var activationEventData = new ActivationEventData
            {
                DeactivationReason = deactivationReason,
                CurrentKeyData     = currentKeyData,
                PreviousKeyData    = previousKeyData
            };

            return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.Activation, activationEventData));
        }
Example #9
0
        public async Task <Result> Deactivate(string htAccommodationId, DeactivationReasons reason, string deactivationReasonDescription,
                                              CancellationToken cancellationToken = default)
        {
            var(_, isFailure, accommodationId, error) = AccommodationIdRetriever.RetrieveId(htAccommodationId);
            if (isFailure)
            {
                return(Result.Failure(error));
            }

            var accommodationToDeactivate = await _context.Accommodations.SingleOrDefaultAsync(a => a.Id == accommodationId, cancellationToken);

            if (accommodationToDeactivate is null)
            {
                return(Result.Failure($"Accommodation with id {accommodationId} doesn't exist"));
            }

            if (reason == DeactivationReasons.None)
            {
                return(Result.Failure("Deactivation reason must be specified"));
            }

            if (accommodationToDeactivate.IsActive == false && accommodationToDeactivate.DeactivationReason == reason)
            {
                return(Result.Success());
            }

            return(await DeactivateAccommodation(accommodationToDeactivate)
                   .Tap(Unpublish)
                   .Tap(AddDeactivationEvent));


            async Task <Result <RichAccommodationDetails> > DeactivateAccommodation(RichAccommodationDetails accommodation)
            {
                accommodation.IsActive                      = false;
                accommodation.DeactivationReason            = reason;
                accommodation.DeactivationReasonDescription = deactivationReasonDescription;
                accommodation.Modified                      = DateTimeOffset.UtcNow;

                _context.Update(accommodation);
                await _context.SaveChangesAsync(cancellationToken);

                return(accommodation);
            }

            Task Unpublish(RichAccommodationDetails accommodation) => _accommodationChangePublisher.PublishRemoved(accommodation.Id);


            Task AddDeactivationEvent()
            => _accommodationChangeLogService.AddDeactivationEvent(accommodationId, AccommodationChangeEventSources.Api, reason,
                                                                   deactivationReasonDescription);
        }
        public void CollectDeactivationEvent(int accommodationId, AccommodationChangeEventSources source, DeactivationReasons deactivationReason,
                                             string deactivationReasonService)
        {
            var deactivationLog =
                AccommodationChangeLogConverter.GetDeactivationChangeLog(accommodationId, source, deactivationReason, deactivationReasonService);

            AccommodationsChangeLogs.Add(deactivationLog);
        }
Example #11
0
 public DeactivationEventData(DeactivationReasons deactivationReason, string?deactivationReasonDescription)
 {
     DeactivationReason            = deactivationReason;
     DeactivationReasonDescription = deactivationReasonDescription;
 }
        public void CollectActivationEvent(int accommodationId, AccommodationChangeEventSources source, DeactivationReasons deactivationReason,
                                           AccommodationKeyData?previousKeyData = default, AccommodationKeyData?currentKeyData = default)
        {
            var activationLog =
                AccommodationChangeLogConverter.GetActivationChangeLog(accommodationId, source, deactivationReason, previousKeyData, currentKeyData);

            AccommodationsChangeLogs.Add(activationLog);
        }
Example #13
0
        public static AccommodationChangeLog GetCreationChangeLog(int accommodationId, AccommodationChangeEventSources eventSource,
                                                                  Dictionary <string, string> supplierAccommodationCodes, MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReason = default)
        {
            var creationEventData = new CreationEventData(supplierAccommodationCodes, accommodation, isActive, deactivationReason);

            return(GetAccommodationChangeLog(accommodationId, eventSource, AccommodationChangeEventTypes.Creation, creationEventData));
        }
Example #14
0
 public static SupplierCodeRemoveReasons Convert(DeactivationReasons deactivationReason)
 => deactivationReason switch
 {
        public void CollectCreationEvent(int accommodationId, AccommodationChangeEventSources source, Dictionary <string, string> supplierAccommodationCodes,
                                         MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReasons = default)
        {
            var creationLog = AccommodationChangeLogConverter.GetCreationChangeLog(accommodationId, source, supplierAccommodationCodes,
                                                                                   accommodation, isActive, deactivationReasons);

            AccommodationsChangeLogs.Add(creationLog);
        }
Example #16
0
    public void RemoveSupplierCodeOrDeactivateNotValid(Contracts.MultilingualAccommodation accommodation, DeactivationReasons deactivationReason)
    {
        if (!_accommodationDataStorage.SupplierActiveAccommodations.TryGetValue(accommodation.SupplierCode, out var existingAccommodation) ||
            existingAccommodation.SupplierAccommodationCodes.Count == 1)
        {
            ProcessDeactivation(accommodation.SupplierCode, deactivationReason, accommodation);
            return;
        }

        var dbAccommodation = new RichAccommodationDetails
        {
            Id          = existingAccommodation.HtId,
            Modified    = DateTimeOffset.UtcNow,
            IsCorrected = false
        };

        _accommodationChangeLogCollectorService.CollectSupplierCodeRemoveEvent(existingAccommodation.HtId,
                                                                               AccommodationChangeEventSources.Updater, _supplier, accommodation.SupplierCode, existingAccommodation.SupplierAccommodationCodes,
                                                                               SupplierCodeRemoveReasonConverter.Convert(deactivationReason));

        foreach (var supplierCode in existingAccommodation.SupplierAccommodationCodes)
        {
            dbAccommodation.SupplierAccommodationCodes.TryAdd(supplierCode.Key, supplierCode.Value);
        }

        dbAccommodation.SupplierAccommodationCodes.Remove(_supplier);

        _context.Attach(dbAccommodation);
        var entry = _context.Entry(dbAccommodation);

        entry.Property(ac => ac.Modified).IsModified    = true;
        entry.Property(ac => ac.IsCorrected).IsModified = true;
        entry.Property(ac => ac.SupplierAccommodationCodes).IsModified = true;
    }
        public Task AddDeactivationEvents(List <int> accommodationIds, AccommodationChangeEventSources source, DeactivationReasons deactivationReason, string?deactivationReasonDescription)
        {
            var deactivationLogs = accommodationIds.Select(id => AccommodationChangeLogConverter.GetDeactivationChangeLog(id, source, deactivationReason, deactivationReasonDescription)).ToList();

            return(AddAccommodationChangeLogs(deactivationLogs));
        }
        public Task AddActivationEvent(int accommodationId, AccommodationChangeEventSources source, DeactivationReasons deactivationReason,
                                       AccommodationKeyData?previousKeyData, AccommodationKeyData?currentKeyData)
        {
            var activationLog = AccommodationChangeLogConverter.GetActivationChangeLog(accommodationId, source, deactivationReason, previousKeyData, currentKeyData);

            return(AddAccommodationChangeLog(activationLog));
        }
        public Task AddCreationEvent(int accommodationId, AccommodationChangeEventSources source, Dictionary <string, string> supplierAccommodationCodes,
                                     MultilingualAccommodation accommodation, bool isActive, DeactivationReasons deactivationReason = default)
        {
            var creationLog = AccommodationChangeLogConverter.GetCreationChangeLog(accommodationId, source, supplierAccommodationCodes, accommodation, isActive, deactivationReason);

            return(AddAccommodationChangeLog(creationLog));
        }
        public Task AddDeactivationEvent(int accommodationId, AccommodationChangeEventSources source, DeactivationReasons deactivationReason,
                                         string?deactivationReasonDescription)
        {
            var deactivationLog = AccommodationChangeLogConverter.GetDeactivationChangeLog(accommodationId, source, deactivationReason, deactivationReasonDescription);

            return(AddAccommodationChangeLog(deactivationLog));
        }