private void ButtonDashboard_Click(object sender, RoutedEventArgs e)
        {
            TextblockPanelName.Text = "Dashboard";

            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();

            List <Resource> recs = ResourceCache.GetInstance().Resources;

            recs = ResourceCache.GetInstance().UpdateAllQSizes();
            recs = recs.OrderByDescending(r => r.QSize).ToList <Resource>();
            var emps = EmployeeCache.GetInstance().Employees;

            emps        = EmployeeCache.GetInstance().UpdateAllQSizes();
            emps        = emps.OrderByDescending(e => e.QSize).ToList <Employee>();
            DataContext = new DashboardViewModel
            {
                Resources        = new ObservableCollection <Resource>(recs),
                SelectedResource = recs[0],
                Employees        = new ObservableCollection <Employee>(emps),
                SelectedEmployee = emps[0]
            };
        }
Exemple #2
0
        public MixerSession FindMixerSession(int pid)
        {
            var mixerSessions = GetCachedMixerSessions();

            foreach (var mixerSession in mixerSessions)
            {
                foreach (var session in mixerSession.audioSessions)
                {
                    if (session.GetProcessID == pid)
                    {
                        return(mixerSession);
                    }
                }
            }

            // if mixer session was not found becuase the pid does not match the pid of any audio session try finding it by process name
            // this is necessary since chrome and some other applications have some weired process structure
            if (processCache.id != pid)
            {
                processCache = new ProcessCache(Process.GetProcessById(pid), pid);
            }
            Process process = processCache.process;

            foreach (var mixerSession in mixerSessions)
            {
                if (mixerSession.label.Equals(process.ProcessName))
                {
                    return(mixerSession);
                }
            }

            return(null);
        }
        private void ProjectViewNewProjectClickHandler(ProjectsViewModel viewModel)
        {
            TextblockPanelName.Text = "Create New Project";

            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            var resources = ResourceCache.GetInstance().Resources;

            resources = ResourceCache.GetInstance().UpdateAllQSizes();

            DataContext = new AddEditProjectViewModel
            {
                Project = new Project
                {
                    Id          = 0,
                    Processes   = new List <Process>(),
                    StartDate   = DateTimeOffset.UtcNow,
                    PoDate      = DateTimeOffset.UtcNow,
                    Quantity    = 1,
                    OrderStatus = Project.ProjectOrderStatus.WaitingQuote,
                },
                BackClickedHandler = AddEditProjectViewBackClickHandler,
                Customers          = CustomerCache.GetInstance().Customers,
                Processes          = new ObservableCollection <Process>(new List <Process>()),
                Resources          = resources.OrderByDescending(r => r.QSize).ToList <Resource>(),
                Employees          = EmployeeCache.GetInstance().Employees
            };
        }
 private void EmployeeSaveClickeHandler()
 {
     foreach (var process in ProcessCache.GetInstance().GetByEmployeeId(SelectedEmployee?.Id ?? 0))
     {
         ProcessCache.GetInstance().Update(process);
     }
     CommonFunctions.UpdateQs();
     ResourceCache.GetInstance().UpdateAllQSizes();
     EmployeeCache.GetInstance().UpdateAllQSizes();
     Refresh();
 }
Exemple #5
0
        //private void UpdateQs()
        //{

        //    //Set Q No. TO 0 if the process is completed
        //    foreach (var process in ProcessCache.GetInstance().Processes)
        //    {
        //        var q = ProcessQCache.GetInstance().GetByProcess(process);
        //        if(q == null)
        //        {
        //            //if no q entry, make a new entry.
        //            q = ProcessQCache.GetInstance().Insert(new ProcessQ
        //            {
        //                ProcessId = process.Id,
        //                QNumber = 0
        //            });
        //        }
        //        if (process.Status == Process.ProcessStatus.Completed)
        //        {
        //            q.QNumber = 0;
        //            ProcessQCache.GetInstance().Update(q);
        //        }
        //    }
        //    //For each resource,
        //    foreach (var resource in ResourceCache.GetInstance().Resources)
        //    {
        //        //get incomplete processes...
        //        var incompleteProcs = ProcessCache.GetInstance().GetByResourceId(resource.Id).FindAll(p => p.Status != Process.ProcessStatus.Completed).ToList<Process>();
        //        //order them ascending order of existing q numbers... if a ProcessQ isn't available, temporarily assign it a large value so that they get to the end of the q in next step
        //        var procsInQueueOrder = incompleteProcs.OrderBy(p => ProcessQCache.GetInstance().GetByProcess(p)?.QNumber ?? long.MaxValue);
        //        long index = 0;
        //        foreach (var process in procsInQueueOrder)
        //        {
        //            index++;
        //            var q = ProcessQCache.GetInstance().GetByProcess(process);
        //            if (q != null)
        //            {
        //                q.QNumber = index;
        //                ProcessQCache.GetInstance().Update(q);
        //            }
        //            else if (q == null)
        //            {
        //                ProcessQCache.GetInstance().Insert(
        //                    new ProcessQ
        //                    {
        //                        ProcessId = process.Id,
        //                        QNumber = index
        //                    });
        //            }
        //        }
        //    }
        //}

        private void DeleteProcessClickHandler()
        {
            //delete q number of this process first..
            ProcessQCache.GetInstance().Delete(ProcessQCache.GetInstance().GetByProcess(SelectedProcess));
            //now delete the process.
            ProcessCache.GetInstance().Delete(SelectedProcess);
            Processes.Remove(SelectedProcess);

            //Run the Q update logic now..
            CommonFunctions.UpdateQs();
            Resources = ResourceCache.GetInstance().UpdateAllQSizes();
        }
Exemple #6
0
 public static void UpdateQs()
 {
     //Set Q No. TO 0 if the process is completed
     foreach (var process in ProcessCache.GetInstance().Processes)
     {
         var q = ProcessQCache.GetInstance().GetByProcess(process);
         if (q == null)
         {
             //if no q entry, make a new entry.
             q = ProcessQCache.GetInstance().Insert(new ProcessQ
             {
                 ProcessId = process.Id,
                 QNumber   = 0
             });
         }
         if (process.Status == Process.ProcessStatus.Completed)
         {
             q.QNumber = 0;
             ProcessQCache.GetInstance().Update(q);
         }
     }
     //For each resource,
     foreach (var resource in ResourceCache.GetInstance().Resources)
     {
         //get incomplete processes...
         var incompleteProcs = ProcessCache.GetInstance().GetByResourceId(resource.Id).FindAll(p => p.Status != Process.ProcessStatus.Completed).ToList <Process>();
         //order them ascending order of existing q numbers... if a ProcessQ isn't available, temporarily assign it a large value so that they get to the end of the q in next step
         var  procsInQueueOrder = incompleteProcs.OrderBy(p => ProcessQCache.GetInstance().GetByProcess(p)?.QNumber ?? long.MaxValue);
         long index             = 0;
         foreach (var process in procsInQueueOrder)
         {
             index++;
             var q = ProcessQCache.GetInstance().GetByProcess(process);
             if (q != null)
             {
                 q.QNumber = index;
                 ProcessQCache.GetInstance().Update(q);
             }
             else if (q == null)
             {
                 ProcessQCache.GetInstance().Insert(
                     new ProcessQ
                 {
                     ProcessId = process.Id,
                     QNumber   = index
                 });
             }
         }
     }
 }
Exemple #7
0
        internal void Refresh()
        {
            var projectId = Project?.Id;

            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            Resources = ResourceCache.GetInstance().Resources;
            Resources = ResourceCache.GetInstance().UpdateAllQSizes();
            Employees = EmployeeCache.GetInstance().Employees;
            if (projectId.Value > 0)
            {
                Project   = ProjectCache.GetInstance().GetById(projectId.Value);
                Processes = new ObservableCollection <Process>(Project.Processes);
            }
        }
        private void ProjectViewOpenProectClickHandler(ProjectsViewModel viewModel)
        {
            TextblockPanelName.Text = "Project Details";
            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            var resources = ResourceCache.GetInstance().Resources;

            resources = ResourceCache.GetInstance().UpdateAllQSizes();

            DataContext = new AddEditProjectViewModel
            {
                Project            = viewModel.SelectedProject,
                BackClickedHandler = AddEditProjectViewBackClickHandler,
                Customers          = CustomerCache.GetInstance().Customers,
                Processes          = new ObservableCollection <Process>(viewModel.SelectedProject.Processes),
                Resources          = resources.OrderByDescending(r => r.QSize).ToList <Resource>(),
                Employees          = EmployeeCache.GetInstance().Employees
            };
        }
Exemple #9
0
        public void Consume(QueueMessageModel model)
        {
            var job = model.Data as Job;

            if (job == null)
            {
                return;
            }

            var key    = string.Format(CACHED_JOB_KEY, job.Id);
            var status = _cacheManager.Get <ProcessCache <JobStatus> >(key);

            if (status != null)
            {
                //Injection time is early than Last completed time
                //Injection time is set in JobInjector
                if (job.CheckPointTime < status.CompletedTimeUtc)
                {
                    return;
                }

                if (status.Value == JobStatus.Running)
                {
                    //Check the service is still running by heartbeat, otherwise maybe crashed
                    var heatBeat = _cacheManager.Get <CacheEntity <int> >(status.MachineKey);
                    if (heatBeat != null)
                    {
                        return;
                    }
                }
            }

            //Set Cache to stop other thread, Default to cache for 1 day
            var cacheEntity = new ProcessCache <JobStatus>()
            {
                IpAddress     = HostInfo.IpAddress,
                MacAddress    = HostInfo.MacAddress,
                MachineKey    = HostInfo.MachineKey,
                ProcessId     = Process.GetCurrentProcess().Id,
                ThreadId      = Thread.CurrentThread.ManagedThreadId,
                CreateTimeUtc = DateTime.UtcNow,
                Value         = JobStatus.Running
            };

            _cacheManager.Set(key, cacheEntity, 60 * 24);

            try
            {
                var type = _jobHooks.FirstOrDefault(m => m.FullName == job.FullName);
                if (type != null)
                {
                    var hook = _lifetimeScope.Resolve(type) as IJobHook;
                    Execute(hook, job.Id);
                }

                cacheEntity.Value = JobStatus.Completed;
            }
            catch (Exception ex)
            {
                _log.Error(ex.Message, ex);
                cacheEntity.Value = JobStatus.Stopped;
            }
            finally
            {
                cacheEntity.CompletedTimeUtc = DateTime.UtcNow;
                _cacheManager.Set(key, cacheEntity, 60 * 24); //Update
            }
        }
Exemple #10
0
        private void SaveClickHandler()
        {
            try
            {
                if (Project?.Customer == null)
                {
                    MessageBox.Show("Please select a customer!", "Incomplete Data", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }
                if (!DeadlineDisplay.HasValue)
                {
                    MessageBox.Show("Please enter a deadline date for this project!", "Incomplete Data", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }
                foreach (var process in Processes)
                {
                    if (!double.TryParse(process.DurationHours, out double result))
                    {
                        MessageBox.Show("Enter a valid duration for the process " + process.Name, "Incomplete Data", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        return;
                    }
                    if (process.ExecutingEmployee == null)
                    {
                        MessageBox.Show("Select an employee for the process " + process.Name, "Incomplete Data", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        return;
                    }
                    if (process.ExecutingResource == null)
                    {
                        MessageBox.Show("Select a resource for the process " + process.Name, "Incomplete Data", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        return;
                    }
                }
                if (Project.Id == 0)
                {
                    Project = ProjectCache.GetInstance().Insert(Project);
                }
                else
                {
                    ProjectCache.GetInstance().Update(Project);
                }
                var projectId = Project.Id;
                foreach (var process in Processes)
                {
                    process.ProjectId = projectId;

                    if (process.Id == 0)
                    {
                        _ = ProcessCache.GetInstance().Insert(process);
                    }
                    else
                    {
                        ProcessCache.GetInstance().Update(process);
                    }
                }
                CommonFunctions.UpdateQs();
                BackClickedHandler?.Invoke(this);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }