/// <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();
        }
Beispiel #2
0
        public AppLogin SyncToDmz(AppLogin appLogin)
        {
            var encryptedLogin = Encryptor.EncryptAppLogin(appLogin);
            var dmzLogin       = new UserAuth
            {
                UserName  = encryptedLogin.UserName,
                GuId      = encryptedLogin.GuId,
                Password  = encryptedLogin.Password,
                ProfileId = encryptedLogin.PersonId,
                Salt      = encryptedLogin.Salt
            };

            _dmzUserRepository.Insert(dmzLogin);
            _dmzUserRepository.Save();

            return(encryptedLogin);
        }
Beispiel #3
0
        /// <summary>
        /// Creates a MobileToken and inserts it into the database.
        /// </summary>
        /// <param name="token">MobileToken to be created.</param>
        /// <returns>The created MobileToken.</returns>
        public MobileToken Create(MobileToken token)
        {
            var randomToken = GenerateToken();

            //Check if tokens exists
            var exists = true;

            while (exists)
            {
                if (_repo.AsQueryable().Any(x => x.Token.Equals(randomToken)))
                {
                    randomToken = GenerateToken();
                }
                else
                {
                    exists = false;
                }
            }

            token.Token  = randomToken;
            token.Guid   = Guid.NewGuid();
            token.Status = MobileTokenStatus.Created;

            if (token.Status == MobileTokenStatus.Created)
            {
                token.StatusToPresent = "Oprettet";
            }

            if (token.Status == MobileTokenStatus.Activated)
            {
                token.StatusToPresent = "Aktiveret";
            }

            var createdToken = _repo.Insert(token);

            _repo.Save();

            var dmzToken = new Token
            {
                Status      = (int)createdToken.Status,
                GuId        = createdToken.Guid.ToString(),
                TokenString = createdToken.Token,
                ProfileId   = createdToken.PersonId,
            };

            dmzToken = Encryptor.EncryptToken(dmzToken);
            _tokenRepo.Insert(dmzToken);
            _tokenRepo.Save();

            return(createdToken);
        }
        /// <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();
        }
Beispiel #5
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);
                }
            }
        }