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); }
/// <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); }
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")); }
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)); }
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 })); }