public void Execute(object parameter)
        {
            var args = (parameter as object[])[1] as AddingNewItemEventArgs;

            var newDependency = new ProcessDependency();

            this.appContext.ProcessDependencies.Add(newDependency);
            args.NewItem = this.mapper.Map <ProcessDependencyPageDependencyItemViewModel>(newDependency);
        }
Пример #2
0
        /// <summary>
        /// Merupakan fungsi yang menghitung nilai hari yang berlaku pada sebuah process
        /// hari yang berlaku untuk sebuah process dilihat dari nilai hari maksimun yang dimiliki olah proses yang menjadi dependency proses tersebut
        /// </summary>
        /// <param name="processDependency">sebuah class processDependency yang berarti dependency yang dimiliki ssebuah proses</param>
        /// <param name="currentProductProcessDailyScheduleList">sebuah list dari processDailySchedule yang dimiliki oleh process yang akad dihitung nilai harinya</param>
        /// <returns>sebuah class processday yang berisikan angka hari kapan process dimulai dan seberapa lama hari tersebut digunakan </returns>
        private ProcessDay GetProcessDay(ProcessDependency processDependency, List <ProcessDailySchedule> currentProductProcessDailyScheduleList)
        {
            ProcessDay processDayData = new ProcessDay()
            {
                StartDay = 1, UsedDay = 0
            };

            int maxDay = currentProductProcessDailyScheduleList.Where(x => x.MasterProcessID == processDependency.PredecessorProcessID).Max(m => m.Day);                                                                  //processDependency.MasterProcessPredecessor.ProcessDailySchedules.Max(x => x.Day);
            ProcessDailySchedule processDailyScheduleWithMaximumDay = currentProductProcessDailyScheduleList.Where(x => x.Day == maxDay && x.MasterProcessID == processDependency.PredecessorProcessID).FirstOrDefault(); // processDependency.MasterProcessPredecessor.ProcessDailySchedules.Where(x => x.Day == maxDay).Sum(x => x.UsedDay);

            processDayData.UsedDay = processDailyScheduleWithMaximumDay.UsedDay;

            if (processDayData.UsedDay < 1)
            {
                processDayData.StartDay = maxDay;
            }
            else
            {
                processDayData.StartDay = maxDay + 1;
                processDayData.UsedDay  = 0;
            }
            return(processDayData);
        }
        public ProcessDependency GetProcessDependencyRecord(string recordID, string UserID)
        {
            ProcessDependency c  = new ProcessDependency();
            SqlDataReader     dr = null;

            try
            {
                SqlParameter[] Parameters = { new SqlParameter("@SNo", (recordID)), new SqlParameter("@UserID", Convert.ToInt32(UserID)) };
                dr = SqlHelper.ExecuteReader(ReadConnectionString.WebConfigConnectionString, CommandType.StoredProcedure, "GetRecordProcessDependencyTrans", Parameters);
                if (dr.Read())
                {
                    c.SNo             = Convert.ToInt32(dr["SNo"]);
                    c.Text_AirlineSNo = dr["AirlineName"].ToString();
                    c.AirlineSNo      = Convert.ToInt32(dr["AirlineSNo"]);

                    c.Text_CitySNo = dr["CityName"].ToString();
                    c.CitySNo      = dr["CitySNo"].ToString() != ""? Convert.ToInt32(dr["CitySNo"]) : 0;

                    c.Text_AirportSNo = dr["AirportName"].ToString();
                    c.AirportSNo      = dr["AirportSNo"].ToString() != ""? Convert.ToInt32(dr["AirportSNo"]):0;

                    c.Text_TerminalSNo = dr["TerminalName"].ToString();
                    c.TerminalSNo      = dr["TerminalSNo"].ToString() != "" ? Convert.ToInt32(dr["TerminalSNo"]) : 0;

                    c.Text_TransactionType = dr["TransactionTypeName"].ToString();
                    c.TransactionType      = dr["TransactionType"].ToString() != "" ? Convert.ToInt32(dr["TransactionType"]) : 0;

                    c.hdnEditSno = dr["SNo"].ToString() != "" ? Convert.ToInt32(dr["SNo"]) : 0;
                }
            }
            catch (Exception ex)
            {
                dr.Close();
            }
            return(c);
        }
Пример #4
0
        public ActionResult Create(int productID, MasterProcessViewModel masterProcess)
        {
            var masterProcessList = GetMasterProcessList(productID);

            ViewBag.ProcessGroupID = new SelectList(db.ProcessGroups, "ID", "Name");
            ViewBag.ProductID      = Convert.ToString(productID);
            var viewModel = new MasterProcessViewModel
            {
                MasterProcessCollections = masterProcessList
            };

            int currentProcessOrder = 1;

            if (masterProcessList.LastOrDefault() != null)
            {
                currentProcessOrder = Convert.ToInt32(masterProcessList.LastOrDefault().ProcessOrder) + 1;
            }

            try
            {
                var username = User.Identity.Name;

                Products currentProduct = db.Products.Find(productID);
                // TODO: Add master process
                var newMasterProcess = new MasterProcess
                {
                    ProductID      = productID,
                    ProcessGroupID = masterProcess.ProcessGroupID,
                    Name           = masterProcess.Name,
                    ProcessOrder   = currentProcessOrder,//masterProcess.ProcessOrder,
                    ManHour        = masterProcess.ManHour,
                    ManPower       = masterProcess.ManPower,
                    CycleTime      = masterProcess.CycleTime,
                    Created        = DateTime.Now,
                    CreatedBy      = username,
                    LastModified   = DateTime.Now,
                    LastModifiedBy = username
                };
                currentProduct.IsTotalDayCalculated = false;
                currentProduct.TotalDay             = currentProduct.TotalDay == null ? 0 : currentProduct.TotalDay;
                currentProduct.MasterProcess.Add(newMasterProcess);
                //db.MasterProcesses.Add(newMasterProcess);
                db.SaveChanges();

                #region Add Master Process Dependency
                //this region have function to add dependency of masterProcess
                var newMasterProcessId = newMasterProcess.ID;
                foreach (int processID in masterProcess.SelectedProcess)
                {
                    var newProcessDependency = new ProcessDependency
                    {
                        MasterProcessID      = newMasterProcessId,
                        PredecessorProcessID = processID,
                        Created        = DateTime.Now,
                        CreatedBy      = username,
                        LastModified   = DateTime.Now,
                        LastModifiedBy = username
                    };

                    db.ProcessDependencies.Add(newProcessDependency);
                }
                db.SaveChanges();
                #endregion

                ViewBag.Message = "Success";
                return(View(viewModel));
            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
            }
            return(View("Error"));
        }
Пример #5
0
        public ActionResult Edit(int id, MasterProcessViewModel masterProcess)
        {
            bool     needCleanDailySchedule = false;
            var      masterProcessData      = db.MasterProcesses.Find(id);
            var      username          = User.Identity.Name;
            Products currentProduct    = db.Products.Find(masterProcessData.ProductID);
            var      masterProcessList = GetMasterProcessListThatCreatedBeforeItProcess(masterProcessData.ProductID, masterProcessData.ID);

            ViewBag.ProcessGroupID = new SelectList(db.ProcessGroups, "ID", "Name", masterProcessData.ProcessGroupID);
            ViewBag.ProductID      = Convert.ToString(currentProduct.ID);

            var viewModel = new MasterProcessViewModel
            {
                MasterProcessCollections = masterProcessList
            };

            try
            {
                // TODO: Edit master Proses

                masterProcessData.ProcessGroupID = masterProcess.ProcessGroupID;
                masterProcessData.Name           = masterProcess.Name;
                masterProcessData.ManHour        = masterProcess.ManHour;
                masterProcessData.ManPower       = masterProcess.ManPower;

                if (masterProcessData.CycleTime != masterProcess.CycleTime)
                {
                    currentProduct.IsTotalDayCalculated = false;
                    currentProduct.LastModified         = DateTime.Now;
                    currentProduct.LastModifiedBy       = username;
                    needCleanDailySchedule = true;
                }

                masterProcessData.CycleTime      = masterProcess.CycleTime;
                masterProcessData.LastModified   = DateTime.Now;
                masterProcessData.LastModifiedBy = username;
                db.SaveChanges();

                List <int> processPredecessorIDList = masterProcessData.ProcessDependencies.Select(x => (int)x.PredecessorProcessID).ToList();
                List <int> distinct1 = processPredecessorIDList.Except(masterProcess.SelectedProcess).ToList();
                List <int> distinct2 = masterProcess.SelectedProcess.Except(processPredecessorIDList).ToList();

                if (distinct2.Count > 0 || distinct1.Count > 0)
                {
                    #region Add Master Process Dependency
                    //this region have function to add dependency of masterProcess
                    if (distinct2.Count > 0)
                    {
                        foreach (int processID in distinct2)
                        {
                            var newProcessDependency = new ProcessDependency
                            {
                                MasterProcessID      = masterProcessData.ID,
                                PredecessorProcessID = processID,
                                Created        = DateTime.Now,
                                CreatedBy      = username,
                                LastModified   = DateTime.Now,
                                LastModifiedBy = username
                            };

                            db.ProcessDependencies.Add(newProcessDependency);
                        }
                    }

                    if (distinct1.Count > 0)
                    {
                        foreach (int processID in distinct1)
                        {
                            List <ProcessDependency> processDependenciesList = db.ProcessDependencies.Where(x => x.MasterProcessID == masterProcessData.ID && x.PredecessorProcessID == processID).ToList();

                            db.ProcessDependencies.RemoveRange(processDependenciesList);
                        }
                    }

                    currentProduct.IsTotalDayCalculated = false;
                    currentProduct.LastModified         = DateTime.Now;
                    currentProduct.LastModifiedBy       = username;

                    if (db.SaveChanges() > 0)
                    {
                        needCleanDailySchedule = true;
                    }

                    if (needCleanDailySchedule)
                    {
                        foreach (MasterProcess mp in currentProduct.MasterProcess)
                        {
                            db.ProcessDailySchedules.RemoveRange(mp.ProcessDailySchedules);
                        }
                        db.SaveChanges();
                    }
                    #endregion
                }

                ViewBag.Message = "Success";
                return(View(viewModel));
            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
            }
            return(View(viewModel));
        }
Пример #6
0
        public ActionResult CalculateTotalDay(int productID)
        {
            Products productData = db.Products.Find(productID);
            var      username    = User.Identity.Name;

            try
            {
                foreach (MasterProcess item in productData.MasterProcess)
                {
                    if (item.ProcessDailySchedules.Count() > 0)
                    {
                        db.ProcessDailySchedules.RemoveRange(item.ProcessDailySchedules);
                        db.SaveChanges();
                    }
                }

                ProcessDay processDayData = new ProcessDay()
                {
                    StartDay = 0, UsedDay = 0
                };

                List <ProcessDailySchedule> currentProductProcessDailyScheduleList = new List <ProcessDailySchedule>();

                List <MasterProcess> orderedMasterProcessesList = productData.MasterProcess.OrderBy(o => o.ID).ThenBy(o => o.ProcessDependencies.Count()).ToList();
                foreach (MasterProcess item in orderedMasterProcessesList)
                {
                    if (item.ProcessDependencies.Count() == 0)//set process as first processes
                    {
                        processDayData.StartDay = 1;
                        processDayData.UsedDay  = 0;
                    }
                    else if (item.ProcessDependencies.Count() == 1)//Set Start Day for Process that have dependency only 1
                    {
                        ProcessDependency processDependency = new ProcessDependency();
                        processDependency = item.ProcessDependencies.FirstOrDefault();

                        processDayData = GetProcessDay(processDependency, currentProductProcessDailyScheduleList);
                    }
                    else//Set Start Day for Process that have dependency more than 1
                    {
                        ProcessDay maxprocessDay = new ProcessDay()
                        {
                            StartDay = 0, UsedDay = 0
                        };
                        processDayData.StartDay = 0;
                        processDayData.UsedDay  = 0;
                        foreach (ProcessDependency pdItem in item.ProcessDependencies)
                        {
                            maxprocessDay = GetProcessDay(pdItem, currentProductProcessDailyScheduleList);
                            if (processDayData.StartDay < maxprocessDay.StartDay || (processDayData.StartDay == maxprocessDay.StartDay && processDayData.UsedDay < maxprocessDay.UsedDay))
                            {
                                processDayData.StartDay = maxprocessDay.StartDay;
                                processDayData.UsedDay  = maxprocessDay.UsedDay;
                            }
                        }
                    }

                    decimal currentProcessCycleTime = item.CycleTime;
                    int     startDay = processDayData.StartDay;
                    decimal usedDay  = 0;
                    decimal currentProcessUsedDay = 1 - processDayData.UsedDay; //find the capacity of currentDay for currentProcess

                    if (currentProcessUsedDay <= currentProcessCycleTime)       //if currentCapacity smaller then processCycletime, so the capacity of the da is fully used
                    {
                        usedDay = 1;
                    }
                    else //if no, current usedDay is sum of processCycleTime and usedDay
                    {
                        usedDay = processDayData.UsedDay + currentProcessCycleTime;
                        currentProcessUsedDay = usedDay;
                    }

                    do
                    {
                        DateTime now = DateTime.Now;
                        currentProductProcessDailyScheduleList.Add(new ProcessDailySchedule()
                        {
                            MasterProcessID = item.ID,
                            Day             = startDay,
                            UsedDay         = usedDay,
                            Created         = now,
                            LastModified    = now,
                            LastModifiedBy  = username,
                            CreatedBy       = username
                        });

                        currentProcessCycleTime -= currentProcessUsedDay;
                        startDay++;

                        if (currentProcessCycleTime > 1)
                        {
                            currentProcessUsedDay = usedDay = 1;
                        }
                        else
                        {
                            currentProcessUsedDay = usedDay = currentProcessCycleTime;
                        }
                    } while (currentProcessCycleTime > 0);
                }

                int totalDay = currentProductProcessDailyScheduleList.Max(x => x.Day);
                //ProcessDailySchedule lastProcessDailySchedule = currentProductProcessDailyScheduleList.Where(x => x.Day == totalDay).OrderByDescending(x => x.UsedDay).FirstOrDefault();

                //if()
                db.ProcessDailySchedules.AddRange(currentProductProcessDailyScheduleList);
                if (db.SaveChanges() > 0)
                {
                    productData.TotalDay             = totalDay;
                    productData.IsTotalDayCalculated = true;
                    productData.LastModifiedBy       = username;
                    productData.LastModified         = DateTime.Now;
                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
            }
            return(RedirectToAction("Details", "Product", new { id = productID }));
        }