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); }
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)); }
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); }
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)); }
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); }
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)); }
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); }
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); }
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)); }
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); }
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)); }