Пример #1
0
 private static void ImportHouseNumberSubaddressFromCrab(Address address, ImportHouseNumberSubaddressFromCrab message)
 {
     address.ImportHouseNumberFromCrab(
         message.HouseNumberId,
         message.StreetNameId,
         message.HouseNumber,
         message.GrbNotation,
         message.Lifetime,
         message.Timestamp,
         message.Operator,
         message.Modification,
         message.Organisation);
 }
 public static AddressHouseNumberWasImportedFromCrab ToLegacyEvent(this ImportHouseNumberSubaddressFromCrab command)
 {
     return(new AddressHouseNumberWasImportedFromCrab(
                command.HouseNumberId,
                command.StreetNameId,
                command.HouseNumber,
                command.GrbNotation,
                command.Lifetime,
                command.Timestamp,
                command.Operator,
                command.Modification,
                command.Organisation));
 }
Пример #3
0
        public void ThenHouseNumberChanged(
            Fixture fixture,
            AddressId addressId,
            ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab)
        {
            importHouseNumberSubaddressFromCrab = importHouseNumberSubaddressFromCrab
                                                  .WithHouseNumber(new Fixture().Create <HouseNumber>());

            Assert(RegisteredAddressScenario(fixture)
                   .When(importHouseNumberSubaddressFromCrab)
                   .Then(addressId,
                         new AddressHouseNumberWasChanged(addressId, importHouseNumberSubaddressFromCrab.HouseNumber),
                         importHouseNumberSubaddressFromCrab.ToLegacyEvent()));
        }
 public static ImportHouseNumberSubaddressFromCrab WithCrabModification(this ImportHouseNumberSubaddressFromCrab command, CrabModification modification)
 {
     return(new ImportHouseNumberSubaddressFromCrab(
                command.HouseNumberId,
                command.SubaddressId,
                command.StreetNameId,
                command.HouseNumber,
                command.GrbNotation,
                command.Lifetime,
                command.Timestamp,
                command.Operator,
                modification,
                command.Organisation));
 }
        public void ThenAddressWasCorrectedToRetiredIfLifetimeIsFiniteAndCorrection(
            Fixture fixture,
            AddressId addressId,
            ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab)
        {
            importHouseNumberSubaddressFromCrab = importHouseNumberSubaddressFromCrab
                                                  .WithLifetime(new Fixture().Customize(new NodaTimeCustomization()).Customize(new WithFiniteLifetime()).Create <CrabLifetime>())
                                                  .WithCrabModification(CrabModification.Correction);

            Assert(RegisteredAddressScenario(fixture)
                   .When(importHouseNumberSubaddressFromCrab)
                   .Then(addressId,
                         new AddressWasCorrectedToRetired(addressId),
                         importHouseNumberSubaddressFromCrab.ToLegacyEvent()));
        }
Пример #6
0
        public void RemoveViaHouseNumberThenAddressRemovedException(
            AddressId addressId,
            AddressWasRegistered addressWasRegistered,
            AddressWasRemoved addressWasRemoved,
            ImportHouseNumberSubaddressFromCrab importHouseNumberFromCrab,
            ImportSubaddressFromCrab importSubaddressFromCrab)
        {
            importHouseNumberFromCrab = importHouseNumberFromCrab.WithCrabModification(CrabModification.Delete);

            Assert(new Scenario()
                   .Given(addressId,
                          addressWasRegistered,
                          importSubaddressFromCrab.ToLegacyEvent(),
                          addressWasRemoved)
                   .When(importHouseNumberFromCrab)
                   .Then(addressId, importHouseNumberFromCrab.ToLegacyEvent()));
        }
        protected List <dynamic> CreateCommandsInOrder(
            ImportMode importMode,
            int id,
            DateTime from,
            DateTime until)
        {
            var importSubaddressCommands = new List <ImportSubaddressFromCrab>();
            List <ImportSubaddressFromCrab>         importSubaddressHistCommands;
            List <ImportSubaddressStatusFromCrab>   importSubaddressStatusCommands;
            List <ImportSubaddressStatusFromCrab>   importSubaddressStatusHistCommands;
            List <ImportSubaddressPositionFromCrab> importSubaddressPositionCommands;
            List <ImportSubaddressPositionFromCrab> importSubaddressPositionHistCommands;
            var importHouseNumberSubaddressCommands = new List <ImportHouseNumberSubaddressFromCrab>();
            List <ImportHouseNumberSubaddressFromCrab> importHouseNumberSubaddressCommandsHist;
            var importSubaddressMailCantonCommands = new List <ImportSubaddressMailCantonFromCrab>();
            List <ImportSubaddressMailCantonFromCrab> importSubaddressMailCantonCommandsHist;

            using (var context = _crabEntitiesFactory())
            {
                var importSubaddressFromCrab = AdresSubadresQueries.GetTblSubadresBySubadresId(id, context);
                if (importSubaddressFromCrab != null)
                {
                    importSubaddressCommands = new List <ImportSubaddressFromCrab> {
                        CrabSubaddressMapper.Map(importSubaddressFromCrab)
                    }
                }
                ;

                importSubaddressHistCommands = CrabSubaddressMapper.Map(AdresSubadresQueries.GetTblSubadresHistBySubadresId(id, context)).ToList();

                importSubaddressStatusCommands     = CrabSubaddressStatusMapper.Map(AdresSubadresQueries.GetTblSubadresstatussesBySubadresId(id, context)).ToList();
                importSubaddressStatusHistCommands = CrabSubaddressStatusMapper.Map(AdresSubadresQueries.GetTblSubadresstatussesHistBySubadresId(id, context)).ToList();

                importSubaddressPositionCommands     = CrabSubaddressPositionMapper.Map(AdresSubadresQueries.GetTblAdrespositiesBySubadresId(id, context)).ToList();
                importSubaddressPositionHistCommands = CrabSubaddressPositionMapper.Map(AdresSubadresQueries.GetTblAdrespositiesHistBySubadresId(id, context)).ToList();

                var allHouseNumbers = importSubaddressHistCommands.Select(x => (int)x.HouseNumberId).ToList();
                if (importSubaddressFromCrab != null)
                {
                    allHouseNumbers.Add((int)importSubaddressCommands.First().HouseNumberId);
                }

                allHouseNumbers = allHouseNumbers.Distinct().ToList();

                foreach (var houseNumber in allHouseNumbers)
                {
                    var tblHuisNummerByHuisnummerId = AdresHuisnummerQueries.GetTblHuisNummerByHuisnummerId(houseNumber, context);
                    if (tblHuisNummerByHuisnummerId != null)
                    {
                        var importHouseNumberSubadresFromCrab = CrabSubaddressHouseNumberMapper.Map(tblHuisNummerByHuisnummerId, id);
                        if (importHouseNumberSubadresFromCrab != null)
                        {
                            importHouseNumberSubaddressCommands.Add(importHouseNumberSubadresFromCrab);
                        }
                    }

                    importSubaddressMailCantonCommands.AddRange(
                        CrabSubaddressMailCantonMapper.GetCommandsFor(AdresHuisnummerQueries.GetTblHuisnummerPostkantonsByHuisnummerId(houseNumber, context), id));
                }

                importHouseNumberSubaddressCommandsHist =
                    CrabSubaddressHouseNumberMapper.Map(AdresHuisnummerQueries.GetTblHuisNummerHistByHuisnummerIds(allHouseNumbers, context), id).ToList();

                importSubaddressMailCantonCommandsHist =
                    CrabSubaddressMailCantonMapper.GetCommandsFor(AdresHuisnummerQueries.GetTblHuisnummerPostKantonHistsByHuisnummerIds(allHouseNumbers, context),
                                                                  id).ToList();
            }

            var allSubaddressCommands = importSubaddressHistCommands.Select(x =>
                                                                            Tuple.Create <dynamic, int, int, string>(x, 2, 0, $"Subadres {x.SubaddressId}"))
                                        .Concat(importSubaddressCommands.Select(x =>
                                                                                Tuple.Create <dynamic, int, int, string>(x, 2, 1, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressStatusHistCommands.Select(x =>
                                                                                          Tuple.Create <dynamic, int, int, string>(x, 3, 0, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressStatusCommands.Select(x =>
                                                                                      Tuple.Create <dynamic, int, int, string>(x, 3, 1, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressPositionHistCommands.Select(x =>
                                                                                            Tuple.Create <dynamic, int, int, string>(x, 3, 2, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressPositionCommands.Select(x =>
                                                                                        Tuple.Create <dynamic, int, int, string>(x, 3, 3, $"Subadres {x.SubaddressId}")))
                                        .Concat(importHouseNumberSubaddressCommandsHist.Select(x =>
                                                                                               Tuple.Create <dynamic, int, int, string>(x, 0, 0, $"Subadres {x.SubaddressId}")))
                                        .Concat(importHouseNumberSubaddressCommands.Select(x =>
                                                                                           Tuple.Create <dynamic, int, int, string>(x, 0, 1, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressMailCantonCommandsHist.Select(x =>
                                                                                              Tuple.Create <dynamic, int, int, string>(x, 1, 0, $"Subadres {x.SubaddressId}")))
                                        .Concat(importSubaddressMailCantonCommands.Select(x =>
                                                                                          Tuple.Create <dynamic, int, int, string>(x, 1, 1, $"Subadres {x.SubaddressId}")))
                                        .ToList();

            var addressCommands = allSubaddressCommands
                                  .Where(x => x.Item1.Timestamp > from.ToCrabInstant() && x.Item1.Timestamp <= until.ToCrabInstant());

            if (importMode == ImportMode.Update) //if an update changes the subaddress' house number, make sure the commands for that house number are also sent
            {
                var houseNumbersForUpdate = importSubaddressCommands
                                            .Concat(importSubaddressHistCommands)
                                            .Where(x => x.Timestamp > from.ToCrabInstant() && x.Timestamp <= until.ToCrabInstant())
                                            .Select(x => x.HouseNumberId).ToList();

                if (houseNumbersForUpdate.Any())
                {
                    var houseNumbersBeforeUpdate = importSubaddressCommands
                                                   .Concat(importSubaddressHistCommands)
                                                   .Where(x => x.Timestamp <= from.ToCrabInstant())
                                                   .Select(x => x.HouseNumberId).ToList();

                    var newHouseNumbers = houseNumbersForUpdate.Except(houseNumbersBeforeUpdate);

                    foreach (var newHouseNumber in newHouseNumbers)
                    {
                        addressCommands = addressCommands.Concat(allSubaddressCommands.Except(addressCommands).Where(x =>
                                                                                                                     //(x.Item1 is ImportSubaddressFromCrab importSubaddressFromCrab && importSubaddressFromCrab.HouseNumberId == newHouseNumber) ||
                                                                                                                     (x.Item1 is ImportSubaddressMailCantonFromCrab importSubaddressMailCantonFromCrab && importSubaddressMailCantonFromCrab.HouseNumberId == newHouseNumber) ||
                                                                                                                     (x.Item1 is ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab && importHouseNumberSubaddressFromCrab.HouseNumberId == newHouseNumber)));
                    }
                }
            }

            addressCommands = addressCommands.OrderBy(x => x.Item1.Timestamp)
                              .ThenBy(x => x.Item2)
                              .ThenBy(x => x.Item3);

            var commands = new List <dynamic>();

            ImportHouseNumberSubaddressFromCrab initialImportHouseNumberSubaddressFromCrab = null;

            if (importMode == ImportMode.Init)
            {
                initialImportHouseNumberSubaddressFromCrab = importHouseNumberSubaddressCommands
                                                             .Concat(importHouseNumberSubaddressCommandsHist)
                                                             .OrderBy(x => (Instant)x.Timestamp)
                                                             .First(x => x.HouseNumberId == addressCommands.First <ImportSubaddressFromCrab>().HouseNumberId);

                commands.Add(initialImportHouseNumberSubaddressFromCrab);
            }

            foreach (var adresCommand in addressCommands)
            {
                if (importMode == ImportMode.Update || !adresCommand.Item1.Equals(initialImportHouseNumberSubaddressFromCrab))
                {
                    commands.Add(adresCommand.Item1);
                }
            }

            return(commands);
        }