Ejemplo n.º 1
0
        public static void UpdateSeedUserInfo(this DbAppContext context, User userInfo)
        {
            User user = context.GetUserByGuid(userInfo.Guid);

            if (user == null)
            {
                context.Users.Add(userInfo);
            }
            else
            {
                user.Active    = userInfo.Active;
                user.Email     = userInfo.Email;
                user.GivenName = userInfo.GivenName;
                // user.Guid = userInfo.Guid;
                user.Initials = userInfo.Initials;
                user.SmAuthorizationDirectory = userInfo.SmAuthorizationDirectory;
                user.SmUserId = userInfo.SmUserId;
                user.Surname  = userInfo.Surname;
                user.District = userInfo.District;

                // Sync Roles
                if (user.UserRoles != null)
                {
                    foreach (UserRole item in user.UserRoles)
                    {
                        context.Entry(item).State = EntityState.Deleted;
                    }

                    foreach (UserRole item in userInfo.UserRoles)
                    {
                        user.UserRoles.Add(item);
                    }
                }

                // Sync Groups
                if (user.GroupMemberships != null)
                {
                    foreach (GroupMembership item in user.GroupMemberships)
                    {
                        context.Entry(item).State = EntityState.Deleted;
                    }

                    foreach (GroupMembership item in userInfo.GroupMemberships)
                    {
                        user.GroupMemberships.Add(item);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        static public DateTime?GetEquipmentSeniorityEffectiveDate(this DbAppContext context, int equipmentId)
        {
            DateTime? result    = null;
            Equipment equipment = context.Equipments.FirstOrDefault(x => x.Id == equipmentId);

            if (equipment != null)
            {
                result = equipment.SeniorityEffectiveDate;
            }
            context.Entry(equipment).State = EntityState.Detached;
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Update user
        /// </summary>
        /// <param name="context"></param>
        /// <param name="userInfo"></param>
        public static void UpdateSeedUserInfo(this DbAppContext context, User userInfo)
        {
            // adding system Account if not there in the database
            ImportUtility.InsertSystemUser(context, SystemId);

            User user = context.GetUserByGuid(userInfo.Guid);

            if (user == null)
            {
                userInfo.AppCreateUserid        = SystemId;
                userInfo.AppCreateTimestamp     = DateTime.UtcNow;
                userInfo.AppLastUpdateUserid    = SystemId;
                userInfo.AppLastUpdateTimestamp = DateTime.UtcNow;

                context.Users.Add(userInfo);
            }
            else
            {
                user.Active    = userInfo.Active;
                user.Email     = userInfo.Email;
                user.GivenName = userInfo.GivenName;
                user.Initials  = userInfo.Initials;
                user.SmAuthorizationDirectory = userInfo.SmAuthorizationDirectory;
                user.SmUserId = userInfo.SmUserId;
                user.Surname  = userInfo.Surname;
                user.District = userInfo.District;

                // Sync Roles
                if (user.UserRoles != null)
                {
                    foreach (UserRole item in user.UserRoles)
                    {
                        context.Entry(item).State = EntityState.Deleted;
                    }

                    foreach (UserRole item in userInfo.UserRoles)
                    {
                        item.AppCreateUserid        = SystemId;
                        item.AppCreateTimestamp     = DateTime.UtcNow;
                        item.AppLastUpdateUserid    = SystemId;
                        item.AppLastUpdateTimestamp = DateTime.UtcNow;

                        user.UserRoles.Add(item);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Assign blocks for an equipment list
        /// </summary>
        /// <param name="context"></param>
        /// <param name="localAreaId"></param>
        /// <param name="equipmentType"></param>
        public static void AssignBlocksNonDumpTruck(this DbAppContext context, int localAreaId, int equipmentType)
        {
            int primaryCount = 0;
            int openCount    = 0;

            var data = context.Equipments
                       .Include(x => x.Owner)
                       .Include(x => x.DistrictEquipmentType.EquipmentType)
                       .Where(x => x.Status == Equipment.STATUS_APPROVED &&
                              x.LocalArea.Id == localAreaId &&
                              x.DistrictEquipmentType.Id == equipmentType)
                       .OrderByDescending(x => x.Seniority)
                       .Select(x => x)
                       .ToList();

            List <int> primaryBlockOwners = new List <int>();

            foreach (Equipment equipment in data)
            {
                // The primary block has a restriction such that each owner can only appear in the primary block once
                bool primaryFound = equipment.Owner != null && primaryBlockOwners.Contains(equipment.Owner.Id);

                if (primaryFound || primaryCount >= 10) // has to go in open block
                {
                    equipment.BlockNumber = DistrictEquipmentType.OPEN_BLOCK_NON_DUMP_TRUCK;
                    openCount++;
                    equipment.NumberInBlock = openCount;
                }
                else // can go in primary block
                {
                    if (equipment.Owner != null)
                    {
                        primaryBlockOwners.Add(equipment.Owner.Id);
                    }

                    equipment.BlockNumber = DistrictEquipmentType.PRIMARY_BLOCK;
                    primaryCount++;
                    equipment.NumberInBlock = primaryCount;
                }

                context.Equipments.Update(equipment);
                context.SaveChanges();
                context.Entry(equipment).State = EntityState.Detached;
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Hangfire job to do the Annual Rollover tasks
        /// </summary>
        /// <param name="context"></param>
        /// <param name="connectionstring"></param>
        /// <param name="configuration"></param>
        public static void AnnualRolloverJob(PerformContext context, string connectionstring, IConfiguration configuration)
        {
            try
            {
                // open a connection to the database
                DbContextOptionsBuilder <DbAppContext> options = new DbContextOptionsBuilder <DbAppContext>();
                options.UseNpgsql(connectionstring);
                DbAppContext dbContext = new DbAppContext(null, options.Options);

                // get processing rules
                SeniorityScoringRules scoringRules = new SeniorityScoringRules(configuration);

                // update progress bar
                IProgressBar progress = context.WriteProgressBar();
                context.WriteLine("Starting Annual Rollover Job");

                progress.SetValue(0);

                // get all equipment types
                List <EquipmentType> equipmentTypes = dbContext.EquipmentTypes.ToList();

                // The annual rollover will process all local areas in turn
                List <LocalArea> localAreas = dbContext.LocalAreas.ToList();

                foreach (LocalArea localArea in localAreas.WithProgress(progress))
                {
                    if (localArea.Name != null)
                    {
                        context.WriteLine("Local Area: " + localArea.Name);
                    }
                    else
                    {
                        context.WriteLine("Local Area ID: " + localArea.Id);
                    }

                    foreach (EquipmentType equipmentType in equipmentTypes)
                    {
                        // it this a dumptruck?
                        bool isDumpTruck = equipmentType.IsDumpTruck;

                        // get rules for scoring and seniority block
                        int seniorityScoring = isDumpTruck ? scoringRules.GetEquipmentScore("DumpTruck") : scoringRules.GetEquipmentScore();
                        int blockSize        = isDumpTruck ? scoringRules.GetBlockSize("DumpTruck") : scoringRules.GetBlockSize();
                        int totalBlocks      = isDumpTruck ? scoringRules.GetTotalBlocks("DumpTruck") : scoringRules.GetTotalBlocks();

                        using (DbAppContext etContext = new DbAppContext(null, options.Options))
                        {
                            List <Equipment> data = etContext.Equipments
                                                    .Include(x => x.LocalArea)
                                                    .Include(x => x.DistrictEquipmentType.EquipmentType)
                                                    .Where(x => x.Status == Equipment.StatusApproved &&
                                                           x.LocalArea.Id == localArea.Id &&
                                                           x.DistrictEquipmentType.EquipmentType.Id == equipmentType.Id)
                                                    .Select(x => x)
                                                    .ToList();

                            foreach (Equipment equipment in data)
                            {
                                // rollover the year
                                equipment.ServiceHoursThreeYearsAgo = equipment.ServiceHoursTwoYearsAgo;
                                equipment.ServiceHoursTwoYearsAgo   = equipment.ServiceHoursLastYear;
                                equipment.ServiceHoursLastYear      = equipment.GetYtdServiceHours(dbContext);
                                equipment.CalculateYearsOfService(DateTime.UtcNow);

                                // blank out the override reason
                                equipment.SeniorityOverrideReason = "";

                                // update the seniority score
                                equipment.CalculateSeniority(seniorityScoring);

                                etContext.Equipments.Update(equipment);
                                etContext.SaveChanges();
                                etContext.Entry(equipment).State = EntityState.Detached;
                            }
                        }

                        // now update the rotation list
                        using (DbAppContext abContext = new DbAppContext(null, options.Options))
                        {
                            int localAreaId     = localArea.Id;
                            int equipmentTypeId = equipmentType.Id;

                            AssignBlocks(abContext, localAreaId, equipmentTypeId, blockSize, totalBlocks);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Hangfire job to do the Annual Rollover tasks.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="connectionstring"></param>
        public static void AnnualRolloverJob(PerformContext context, string connectionstring)
        {
            // open a connection to the database.
            DbContextOptionsBuilder <DbAppContext> options = new DbContextOptionsBuilder <DbAppContext>();

            options.UseNpgsql(connectionstring);

            DbAppContext dbContext = new DbAppContext(null, options.Options);

            var progress = context.WriteProgressBar();

            context.WriteLine("Starting Annual Rollover Job");

            progress.SetValue(0);

            var equipmentTypes = dbContext.EquipmentTypes.ToList();

            // The annual rollover will process all local areas in turn.
            var localareas = dbContext.LocalAreas.ToList();

            // since this action is meant to run at the end of March, YTD calcs will always start from the year prior.
            int startingYear = DateTime.UtcNow.Year - 1;

            foreach (var localarea in localareas.WithProgress(progress))
            {
                if (localarea.Name != null)
                {
                    context.WriteLine("Local Area: " + localarea.Name);
                }
                else
                {
                    context.WriteLine("Local Area ID: " + localarea.Id);
                }

                foreach (EquipmentType equipmentType in equipmentTypes)
                {
                    using (DbAppContext etContext = new DbAppContext(null, options.Options))
                    {
                        var data = etContext.Equipments
                                   .Include(x => x.LocalArea)
                                   .Include(x => x.DistrictEquipmentType.EquipmentType)
                                   .Where(x => x.Status == Equipment.STATUS_APPROVED &&
                                          x.LocalArea.Id == localarea.Id &&
                                          x.DistrictEquipmentType.EquipmentType.Id == equipmentType.Id)
                                   .Select(x => x)
                                   .ToList();

                        foreach (Equipment equipment in data)
                        {
                            // rollover the year
                            equipment.ServiceHoursThreeYearsAgo = equipment.ServiceHoursTwoYearsAgo;
                            equipment.ServiceHoursTwoYearsAgo   = equipment.ServiceHoursLastYear;
                            equipment.ServiceHoursLastYear      = equipment.GetYTDServiceHours(dbContext, startingYear);
                            equipment.CalculateYearsOfService(DateTime.UtcNow.Year);

                            // blank out the override reason
                            equipment.SeniorityOverrideReason = "";

                            // update the seniority score
                            equipment.CalculateSeniority();
                            etContext.Equipments.Update(equipment);
                            etContext.SaveChanges();
                            etContext.Entry(equipment).State = EntityState.Detached;
                        }
                    }

                    // now update the rotation list
                    using (DbAppContext abContext = new DbAppContext(null, options.Options))
                    {
                        AssignBlocks(abContext, localarea.Id, equipmentType);
                    }
                }
            }
        }