public ReleaseModels.Milestone SaveMilestone(MilestoneInputModel obj) { var conn = new SqlConnection("Data Source=localhost\\SQLENTERPRISE;Initial Catalog=Planner;Integrated Security=SSPI;MultipleActiveResultSets=true"); int milestoneId = 0; try { using (conn) { conn.Open(); var cmd = new SqlCommand("sp_upsert_milestone", conn); cmd.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = obj.Id; cmd.Parameters.Add("@Title", System.Data.SqlDbType.VarChar).Value = obj.Title; cmd.Parameters.Add("@Description", System.Data.SqlDbType.VarChar).Value = obj.Description ?? ""; cmd.Parameters.Add("@Date", System.Data.SqlDbType.VarChar).Value = obj.Date.ToDateTimeFromDutchString(); cmd.Parameters.Add("@Time", System.Data.SqlDbType.VarChar).Value = obj.Time ?? ""; cmd.Parameters.Add("@PhaseId", System.Data.SqlDbType.Int).Value = obj.PhaseId; cmd.CommandType = System.Data.CommandType.StoredProcedure; var result = cmd.ExecuteScalar(); var newId = result == null ? 0 : int.Parse(result.ToString()); // it's an update (case 1) or an insert (case 2) milestoneId = newId == 0 ? obj.Id : newId; // completely renew the Deliverables for the Milestone as set in the client app var cmdDelCross = new SqlCommand(string.Format("Delete from MilestoneDeliverables where MilestoneId = {0}", milestoneId), conn); cmdDelCross.ExecuteNonQuery(); if (obj.Deliverables != null && obj.Deliverables.Count > 0) { var cmdInserMilestoneDeliverable = new SqlCommand("sp_insert_milestonedeliverable", conn); cmdInserMilestoneDeliverable.Parameters.Add("@MilestoneId", System.Data.SqlDbType.Int).Value = milestoneId; cmdInserMilestoneDeliverable.Parameters.Add("@DeliverableId", System.Data.SqlDbType.Int).Value = 0; /*cmdInserMilestoneDeliverable.Parameters.Add("@HoursRemaining", System.Data.SqlDbType.Int).Value = 0; cmdInserMilestoneDeliverable.Parameters.Add("@InitialEstimate", System.Data.SqlDbType.Int).Value = 0; cmdInserMilestoneDeliverable.Parameters.Add("@Owner", System.Data.SqlDbType.VarChar).Value = string.Empty; cmdInserMilestoneDeliverable.Parameters.Add("@State", System.Data.SqlDbType.VarChar).Value = string.Empty;*/ cmdInserMilestoneDeliverable.CommandType = System.Data.CommandType.StoredProcedure; foreach (var itm in obj.Deliverables) { cmdInserMilestoneDeliverable.Parameters["@DeliverableId"].Value = itm.Id; /*cmdInserMilestoneDeliverable.Parameters["@HoursRemaining"].Value = itm.HoursRemaining; cmdInserMilestoneDeliverable.Parameters["@InitialEstimate"].Value = itm.InitialHoursEstimate; cmdInserMilestoneDeliverable.Parameters["@Owner"].Value = itm.Owner ?? ""; cmdInserMilestoneDeliverable.Parameters["@State"].Value = itm.State ?? "";*/ cmdInserMilestoneDeliverable.ExecuteNonQuery(); } } } var rel = this.GetReleaseSummary(obj.PhaseId); this.GenerateStatusRecords(rel); var msrep = new MilestoneRepository(); var milestone = msrep.GetItemById(milestoneId); return milestone; } catch (Exception ex) { throw; } }
public JsonResult GetReleaseProgress(int phaseid, int milestoneId) { // get complete progress data per artefact var rep = new ReleaseRepository(); var progress = rep.GetArtefactsProgress(phaseid, milestoneId); // get burndown for total var msRep = new MilestoneRepository(); var ms = msRep.GetItemById(milestoneId); try { // TODO: determine startdate by using the Phase startdate to which the Milestone is connected var uc = new GetBurndownData(new Milestone { Id = milestoneId, Date = ms.Date, Release = new Release { Id = phaseid } }, DateTime.Now.AddDays(-40)); var burndown = uc.Execute(); return this.Json(new { Progress = progress, Burndown = burndown }, JsonRequestBehavior.AllowGet); } catch (ConditionNotMetException ex) { HttpContext.Response.StatusDescription = string.Format("A condition has not been met: {0}", ex.Message); HttpContext.Response.StatusCode = 400; return this.Json(string.Format("A condition has not been met: {0}", ex.Message), JsonRequestBehavior.AllowGet); } catch (ProcessException ex) { HttpContext.Response.StatusDescription = string.Format("A use case processing exception has occurred: {0}", ex.Message); HttpContext.Response.StatusCode = 400; return this.Json(string.Format("A use case processing exception has occurred: {0}", ex.Message), JsonRequestBehavior.AllowGet); } catch (Exception ex) { HttpContext.Response.StatusDescription = string.Format("An exception has occurred: {0}", ex.Message); HttpContext.Response.StatusCode = 500; return this.Json(string.Format("An exception has occurred: {0}", ex.Message), JsonRequestBehavior.AllowGet); } }