コード例 #1
0
        /// <summary>
        /// Syncs all People from OS2 database to DMZ database.
        /// </summary>
        public void SyncToDmz()
        {
            var i          = 0;
            var personList = _masterPersonRepo.AsQueryable().ToList();
            var max        = personList.Count;

            foreach (var person in personList)
            {
                i++;
                if (i % 10 == 0)
                {
                    Console.WriteLine("Syncing person " + i + " of " + max);
                }

                var dmzPerson = _dmzProfileRepo.AsQueryable().FirstOrDefault(x => x.Id == person.Id);

                var homeAddress = _personService.GetHomeAddress(person);

                var profile = new Profile
                {
                    Id            = person.Id,
                    FirstName     = person.FirstName,
                    LastName      = person.LastName,
                    HomeLatitude  = homeAddress != null ? homeAddress.Latitude : "0",
                    HomeLongitude = homeAddress != null ? homeAddress.Longitude : "0",
                    Initials      = person.Initials,
                    FullName      = person.FullName,
                    IsActive      = person.IsActive
                };

                profile = Encryptor.EncryptProfile(profile);

                if (dmzPerson == null)
                {
                    _dmzProfileRepo.Insert(profile);
                }
                else
                {
                    dmzPerson.FirstName     = profile.FirstName;
                    dmzPerson.LastName      = profile.LastName;
                    dmzPerson.HomeLatitude  = profile.HomeLatitude;
                    dmzPerson.HomeLongitude = profile.HomeLongitude;
                    dmzPerson.Initials      = profile.Initials;
                    dmzPerson.FullName      = profile.FullName;
                    dmzPerson.IsActive      = profile.IsActive;
                }
            }
            _dmzProfileRepo.Save();
            SyncEmployments();
        }
コード例 #2
0
        public void RemoveFromDmz(int personId)
        {
            var users = _dmzUserRepository.AsQueryable().Where(x => x.ProfileId == personId).ToList();

            _dmzUserRepository.DeleteRange(users);
            _dmzUserRepository.Save();
        }
コード例 #3
0
 public void SetUp()
 {
     _dmzRateList    = new List <Rate>();
     _masterRateList = new List <Core.DomainModel.Rate>();
     _dmzRepoMock    = NSubstitute.Substitute.For <IGenericDmzRepository <Core.DmzModel.Rate> >();
     _masterRepoMock = NSubstitute.Substitute.For <IGenericRepository <Core.DomainModel.Rate> >();
     _dmzRepoMock.WhenForAnyArgs(x => x.Insert(new Core.DmzModel.Rate())).Do(p => _dmzRateList.Add(p.Arg <Core.DmzModel.Rate>()));
     _dmzRepoMock.AsQueryable().Returns(_dmzRateList.AsQueryable());
     _uut = new RateSyncService(_dmzRepoMock, _masterRepoMock);
 }
コード例 #4
0
        /// <summary>
        /// Syncs all rates from OS2 database to DMZ database.
        /// </summary>
        public void SyncToDmz()
        {
            var i           = 0;
            var currentYear = DateTime.Now.Year;
            var rateList    = _masterRateRepo.AsQueryable().Where(x => x.Active && x.Year == currentYear).ToList();
            var max         = rateList.Count;

            foreach (var masterRate in rateList)
            {
                i++;
                if (i % 10 == 0)
                {
                    Console.WriteLine("Syncing rate " + i + " of " + max);
                }

                var rate = new Core.DmzModel.Rate()
                {
                    Id          = masterRate.Id,
                    Description = masterRate.Type.Description,
                    Year        = masterRate.Year.ToString()
                };

                var dmzRate = _dmzRateRepo.AsQueryable().FirstOrDefault(x => x.Id == rate.Id);

                if (dmzRate == null)
                {
                    _dmzRateRepo.Insert(rate);
                }
                else
                {
                    dmzRate.Description = rate.Description;
                    dmzRate.Year        = rate.Year;
                }
            }
            _dmzRateRepo.Save();
        }
コード例 #5
0
        public void SetUp()
        {
            _dmzRepoMock       = NSubstitute.Substitute.For <IGenericDmzRepository <Profile> >();
            _masterRepoMock    = NSubstitute.Substitute.For <IGenericRepository <Person> >();
            _personServiceMock = NSubstitute.Substitute.For <IPersonService>();


            _dmzRepoMock.WhenForAnyArgs(x => x.Delete(new Profile())).Do(p => _dmzProfileList.Remove(p.Arg <Profile>()));

            _personServiceMock.GetHomeAddress(new Person()).ReturnsForAnyArgs(new PersonalAddress()
            {
                Latitude  = "1",
                Longitude = "2"
            });

            _dmzRepoMock.WhenForAnyArgs(x => x.Insert(new Profile())).Do(t => _dmzProfileList.Add(t.Arg <Profile>()));

            _dmzProfileList   = new List <Profile>();
            _masterPersonList = new List <Person>()
            {
                new Person()
                {
                    Id          = 1,
                    IsActive    = true,
                    FirstName   = "Test",
                    LastName    = "Testesen",
                    Initials    = "TT",
                    FullName    = "Test Testesen [TT]",
                    Employments = new List <Employment>()
                    {
                        new Employment()
                        {
                            Id       = 1,
                            PersonId = 1,
                            Position = "Tester",
                            OrgUnit  = new OrgUnit()
                            {
                                LongDescription = "IT Minds"
                            }
                        }
                    }
                },
                new Person()
                {
                    Id          = 2,
                    FirstName   = "Lars",
                    IsActive    = true,
                    LastName    = "Testesen",
                    Initials    = "LT",
                    FullName    = "Lars Testesen [LT]",
                    Employments = new List <Employment>()
                    {
                        new Employment()
                        {
                            Id       = 1,
                            PersonId = 2,
                            Position = "Tester2",
                            OrgUnit  = new OrgUnit()
                            {
                                LongDescription = "IT Minds"
                            }
                        }
                    }
                },
                new Person()
                {
                    Id          = 3,
                    IsActive    = true,
                    FirstName   = "Preben",
                    LastName    = "Testesen",
                    Initials    = "PT",
                    FullName    = "Preben Testesen [PT]",
                    Employments = new List <Employment>()
                    {
                        new Employment()
                        {
                            Id       = 1,
                            PersonId = 3,
                            Position = "Tester3",
                            OrgUnit  = new OrgUnit()
                            {
                                LongDescription = "IT Minds"
                            }
                        }
                    }
                }
            };


            _masterRepoMock.AsQueryable().ReturnsForAnyArgs(_masterPersonList.AsQueryable());
            _dmzRepoMock.AsQueryable().ReturnsForAnyArgs(_dmzProfileList.AsQueryable());

            _uut = new PersonSyncService(_dmzRepoMock, _masterRepoMock, _personServiceMock);
        }
コード例 #6
0
        /// <summary>
        /// Synchronizes all DriveReports from DMZ to OS2 database.
        /// </summary>
        public void SyncFromDmz()
        {
            var reports = _dmzDriveReportRepo.AsQueryable().Where(x => x.SyncedAt == null).ToList();
            var max     = reports.Count;

            for (var i = 0; i < max; i++)
            {
                var coordinatesFailed = false;
                var dmzReport         = reports[i];
                dmzReport.Profile = Encryptor.DecryptProfile(dmzReport.Profile);
                Console.WriteLine("Syncing report " + i + " of " + max + " from DMZ.");
                var rate      = _rateRepo.AsQueryable().First(x => x.Id.Equals(dmzReport.RateId));
                var points    = new List <DriveReportPoint>();
                var viaPoints = new List <DriveReportPoint>();
                for (var j = 0; j < dmzReport.Route.GPSCoordinates.Count; j++)
                {
                    var gpsCoord = dmzReport.Route.GPSCoordinates.ToArray()[j];
                    gpsCoord = Encryptor.DecryptGPSCoordinate(gpsCoord);

                    points.Add(new DriveReportPoint
                    {
                        Latitude  = gpsCoord.Latitude,
                        Longitude = gpsCoord.Longitude,
                    });

                    if (gpsCoord.IsViaPoint || j == 0 || j == dmzReport.Route.GPSCoordinates.Count - 1)
                    {
                        try
                        {
                            var address = _coordinates.GetAddressFromCoordinates(new Address
                            {
                                Latitude  = gpsCoord.Latitude,
                                Longitude = gpsCoord.Longitude
                            });

                            viaPoints.Add(new DriveReportPoint()
                            {
                                Latitude     = gpsCoord.Latitude,
                                Longitude    = gpsCoord.Longitude,
                                StreetName   = address.StreetName,
                                StreetNumber = address.StreetNumber,
                                ZipCode      = address.ZipCode,
                                Town         = address.Town,
                            });
                        }
                        catch (AddressCoordinatesException e)
                        {
                            coordinatesFailed = true;
                            _logger.Log("Indberetning tilhørende " + dmzReport.Profile.FullName + " med formål \"" + dmzReport.Purpose + "\" har ugyldige koordinater og blev ikke synkroniseret.", "dmz", e, 2);
                            break;
                        }
                    }
                }

                if (coordinatesFailed)
                {
                    continue;
                }

                var licensePlate = _licensePlateRepo.AsQueryable().FirstOrDefault(x => x.PersonId.Equals(dmzReport.ProfileId) && x.IsPrimary);
                var plate        = licensePlate != null ? licensePlate.Plate : "UKENDT";

                var newReport = new Core.DomainModel.DriveReport
                {
                    IsFromApp          = true,
                    Distance           = dmzReport.Route.TotalDistance,
                    KilometerAllowance = dmzReport.Route.GPSCoordinates.Count > 0 ? KilometerAllowance.Calculated : KilometerAllowance.Read,
                    // Date might not be correct. Depends which culture is delivered from app.
                    // https://msdn.microsoft.com/en-us/library/cc165448.aspx
                    DriveDateTimestamp   = (Int32)(Convert.ToDateTime(dmzReport.Date).Subtract(new DateTime(1970, 1, 1)).TotalSeconds),
                    CreatedDateTimestamp = (Int32)(Convert.ToDateTime(dmzReport.Date).Subtract(new DateTime(1970, 1, 1)).TotalSeconds),
                    StartsAtHome         = dmzReport.StartsAtHome,
                    EndsAtHome           = dmzReport.EndsAtHome,
                    Purpose           = dmzReport.Purpose,
                    PersonId          = dmzReport.ProfileId,
                    EmploymentId      = dmzReport.EmploymentId,
                    KmRate            = rate.KmRate,
                    TFCode            = rate.Type.TFCode,
                    UserComment       = dmzReport.ManualEntryRemark,
                    Status            = ReportStatus.Pending,
                    FullName          = dmzReport.Profile.FullName,
                    LicensePlate      = plate,
                    Comment           = "",
                    DriveReportPoints = viaPoints
                };

                newReport.RouteGeometry = GeoService.Encode(points);

                try {
                    _driveService.Create(newReport);
                    reports[i].SyncedAt = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                    _dmzDriveReportRepo.Save();
                } catch (Exception e)
                {
                    _logger.Log("En ukendt fejl opstod under synkronisering af indberetning tilhørende " + reports[i].Profile.FullName + ". Indberetningen blev ikke synkroniseret.", "dmz", e, 2);
                }
            }
        }
コード例 #7
0
        public void SetUp()
        {
            _emplRepo               = NSubstitute.Substitute.For <IGenericRepository <Employment> >();
            _logger                 = NSubstitute.Substitute.For <ILogger>();
            _dmzRepoMock            = NSubstitute.Substitute.For <IGenericDmzRepository <Core.DmzModel.DriveReport> >();
            _coordinatesMock        = NSubstitute.Substitute.For <IAddressCoordinates>();
            _masterRepoMock         = NSubstitute.Substitute.For <IGenericRepository <Core.DomainModel.DriveReport> >();
            _driveReportServiceMock = NSubstitute.Substitute.For <IDriveReportService>();
            _rateRepoMock           = NSubstitute.Substitute.For <IGenericRepository <Rate> >();
            _licensePlateRepoMock   = NSubstitute.Substitute.For <IGenericRepository <LicensePlate> >();
            _routeMock              = NSubstitute.Substitute.For <IRoute <RouteInformation> >();
            _routeMock.GetRoute(DriveReportTransportType.Car, new List <Address>()).ReturnsForAnyArgs(new RouteInformation()
            {
                GeoPoints = "geogeo"
            });

            _coordinatesMock.GetAddressFromCoordinates(new Address()).ReturnsForAnyArgs(new Address()
            {
                Latitude     = "1",
                Longitude    = "1",
                StreetName   = "Katrinebjergvej",
                StreetNumber = "93B",
                ZipCode      = 8200,
                Town         = "Aarhus N"
            });

            _dmzRepoMock.WhenForAnyArgs(x => x.Delete(new Core.DmzModel.DriveReport())).Do(p => _dmzReportList.Remove(p.Arg <Core.DmzModel.DriveReport>()));

            _driveReportServiceMock.WhenForAnyArgs(x => x.Create(new Core.DomainModel.DriveReport())).Do(rep => _masterReportList.Add(rep.Arg <Core.DomainModel.DriveReport>()));

            _dmzRepoMock.WhenForAnyArgs(x => x.Insert(new Core.DmzModel.DriveReport())).Do(t => _dmzReportList.Add(t.Arg <Core.DmzModel.DriveReport>()));

            _rateRepoMock.AsQueryable().ReturnsForAnyArgs(new List <Rate>()
            {
                new Rate()
                {
                    Id     = 1,
                    KmRate = 12,
                    Active = true,
                    Year   = 2015,
                    Type   = new RateType()
                    {
                        Id = 1,
                        RequiresLicensePlate = true,
                        TFCode      = "1234",
                        Description = "TestDescription"
                    }
                }
            }.AsQueryable());

            _licensePlateRepoMock.AsQueryable().ReturnsForAnyArgs(new List <LicensePlate>()
            {
                new LicensePlate()
                {
                    Id          = 1,
                    PersonId    = 1,
                    Plate       = "TestPlate",
                    IsPrimary   = true,
                    Description = "TestDesc",
                }
            }.AsQueryable());

            _dmzReportList = new List <DriveReport>()
            {
                new DriveReport()
                {
                    Id                = 1,
                    Purpose           = "Test",
                    StartsAtHome      = false,
                    EndsAtHome        = false,
                    ManualEntryRemark = "ManualEntry",
                    Date              = "2015-05-27",
                    EmploymentId      = 1,
                    ProfileId         = 1,
                    RateId            = 1,
                    Profile           = new Profile()
                    {
                        FullName = "Test Testesen [TT]"
                    },
                    Route = new Route()
                    {
                        Id             = 1,
                        GPSCoordinates = new List <GPSCoordinate>()
                        {
                            new GPSCoordinate()
                            {
                                Latitude  = StringCipher.Encrypt("1", Encryptor.EncryptKey),
                                Longitude = StringCipher.Encrypt("1", Encryptor.EncryptKey),
                            },
                            new GPSCoordinate()
                            {
                                Latitude  = StringCipher.Encrypt("2", Encryptor.EncryptKey),
                                Longitude = StringCipher.Encrypt("2", Encryptor.EncryptKey),
                            }
                        }
                    }
                },
                new DriveReport()
                {
                    Id                = 2,
                    Purpose           = "Test2",
                    StartsAtHome      = true,
                    EndsAtHome        = true,
                    ManualEntryRemark = "ManualEntry",
                    Date              = "2015-05-26",
                    EmploymentId      = 1,
                    ProfileId         = 1,
                    RateId            = 1,
                    Profile           = new Profile()
                    {
                        FullName = "Test Testesen [TT]"
                    },
                    Route = new Route()
                    {
                        Id             = 2,
                        GPSCoordinates = new List <GPSCoordinate>()
                        {
                            new GPSCoordinate()
                            {
                                Latitude  = StringCipher.Encrypt("1", Encryptor.EncryptKey),
                                Longitude = StringCipher.Encrypt("1", Encryptor.EncryptKey),
                            },
                            new GPSCoordinate()
                            {
                                Latitude  = StringCipher.Encrypt("2", Encryptor.EncryptKey),
                                Longitude = StringCipher.Encrypt("2", Encryptor.EncryptKey),
                            }
                        }
                    }
                }
            };

            _masterRepoMock.AsQueryable().ReturnsForAnyArgs(_masterReportList.AsQueryable());
            _dmzRepoMock.AsQueryable().ReturnsForAnyArgs(_dmzReportList.AsQueryable());

            _uut = new DriveReportSyncService(_dmzRepoMock, _masterRepoMock, _rateRepoMock, _licensePlateRepoMock, _driveReportServiceMock, _routeMock, _coordinatesMock, _emplRepo, _logger);
        }