private void RecalculateSelectedDay() { frmRecalculateHours oRec = new frmRecalculateHours { Location = Cursor.Position }; oRec.openType = frmRecalculateHours.OpenType.Hours; if (oRec.ShowDialog() == DialogResult.OK) { ListViewGroup oLvg = oSelectedHour.Group; WorkItemsDay oDay = new WorkItemsDay(((WorkItemsDay)oLvg.Tag).Date); List <ListViewItem> lstRemove = new List <ListViewItem>(); foreach (ListViewItem oItem in oLvg.Items) { oDay.WorkItems.Add((WorkItemHours)oItem.Tag); lstRemove.Add(oItem); } lstRemove.ForEach(x => lvwHistory.Items.Remove(x)); oDay.CalculateHaxComHours(oRec.dHours); foreach (WorkItemHours oHours in oDay.WorkItems) { lvwHistory.Items.Add(WorkItemHoursToLVWItem(oLvg, oHours)); } } }
public static List <WorkItemsDay> GroupItemsPerDay(List <WorkItemRegister> itemList) { DateTime dateFrom = itemList.Select(x => x.DateFrom).Min(); DateTime dateThru = itemList.Select(x => x.DateFrom).Max(); List <WorkItemsDay> groupedList = new List <WorkItemsDay>(); WorkItemsDay oRow; WorkItemHours oTemp; for (var day = dateFrom.Date; day.Date <= dateThru.Date; day = day.AddDays(1)) { oRow = new WorkItemsDay(day); foreach (WorkItemRegister wi in itemList.Where(x => x.DateFrom.Date == day.Date)) { oTemp = oRow.WorkItems.Where(x => x.ID == wi.ID).FirstOrDefault(); if (oTemp == null) { oTemp = new WorkItemHours(wi); oRow.WorkItems.Add(oTemp); } else { oTemp.Hours = oTemp.Hours.Add(wi.timeSpan); } } groupedList.Add(oRow); } return(groupedList); }
private void LoadNewItems() { List <WorkItemsDay> oItems = new List <WorkItemsDay>(); WorkItemsDay oTemp; foreach (DataSource oDataSource in oDataSources) { switch (oDataSource.Type) { case Datasourcetype.Outlook: Outlook oDS = new Outlook(); var oMeetings = oDS.GetAllCalendarItems(dtpFrom.Value, new DateTimeOffset[] { }); foreach (DateTime oDate in oMeetings.Select(x => x.Date.Date).Distinct()) { oTemp = oItems.FirstOrDefault(x => x.Date == oDate); if (oTemp == null) { oTemp = new WorkItemsDay(oDate); oItems.Add(oTemp); } oTemp.WorkItems.AddRange( oMeetings.Where(x => x.Date.Date == oDate) .Select(x => new WorkItemHours() { FixedHours = true, Hours = TimeSpan.FromHours((double)x.DurationInHours), HaxComHours = x.DurationInHours, Title = x.Name, ID = "meeting", TfsId = 0, FromDatasource = oDataSource, ProjectId = 0, ClientId = 166, SubClientId = 5, Function = 41, // meeting BillingType = BillingType.Capitalized, Description = x.Name, })); } break; case Datasourcetype.TFS: var oTFSItems = WorkItemMapper.GetHistoricalWorkitemsByUser(oDataSource.ServerUrl, oDataSource.ProjectName, oDataSource.User, dtpFrom.Value, oDataSource); foreach (DateTime oDate in oTFSItems.Select(x => x.Date.Date).Distinct()) { oTemp = oItems.FirstOrDefault(x => x.Date == oDate); if (oTemp == null) { oTemp = new WorkItemsDay(oDate); oItems.Add(oTemp); } oTemp.WorkItems.AddRange(oTFSItems.Where(x => x.Date.Date == oDate).Select(x => x.WorkItems).FirstOrDefault()); } break; } } UpdateListview(oItems, true); }
private void LoadTFSCSV() { frmLoginSendHaxCom oLogin = new frmLoginSendHaxCom { LoginURL = TimeKeeperBaseURL }; oLogin.openMode = frmLoginSendHaxCom.OpenMode.Search; oLogin.optDays.Enabled = false; oLogin.optSel.Enabled = false; if (oLogin.ShowDialog() == DialogResult.OK) { List <WorkItemsDay> oItems = new List <WorkItemsDay>(); List <CsvReg> regs = getHaxComTFSTime(oLogin.PHPSession, dtpFrom.Value, DateTime.Today, oLogin.chkAll.Checked, (oLogin.CHKBug.Checked || oLogin.chkPBI.Checked || oLogin.chkOther.Checked), oLogin.chkMeeting.Checked, oLogin.chkPrjtLess.Checked, oLogin.chkNonBillable.Checked, oLogin.chkCapitalized.Checked); var oDataSource = oDataSources.First(x => x.Type == Datasourcetype.TFS); var outlookDataSource = oDataSources.FirstOrDefault(x => x.Type == Datasourcetype.Outlook); //gets rest of TFS data using the TFS IDS var tfsItems = WorkItemMapper.GetHistoricalWorkitemsByIDs(oDataSource.ServerUrl, oDataSource.ProjectName, oDataSource.User, regs.Select(x => x.TFSId).Distinct()); //assembles the listview foreach (DateTime dDate in regs.Select(x => x.Date).Distinct()) { var oTemp = new WorkItemsDay(dDate); foreach (CsvReg oReg in regs.Where(x => x.Date == dDate)) { if (oReg.TFSId == 0) //meetings { var oWI = new WorkItemHours(); oWI.HaxComID = oReg.EntryID; oWI.ID = "meeting"; oWI.ProjectId = 0; oWI.ClientId = 166; oWI.SubClientId = 5; oWI.Function = 41; //dev meeting oWI.Description = oReg.Title; oWI.Title = oReg.Title; oWI.FromDatasource = outlookDataSource; oWI.BillingType = BillingType.Capitalized; oWI.HaxComHours = oReg.Hours; oTemp.WorkItems.Add(oWI); } else { var oTFSI = tfsItems.FirstOrDefault(x => x.ID == oReg.TFSId.ToString()); if (oTFSI != null) { string sType = oTFSI.Type.ToUpperInvariant(); if (oLogin.chkAll.Checked || (sType == "BUG" && oLogin.CHKBug.Checked) || (sType == "USER STORY" && oLogin.chkPBI.Checked) || (sType != "BUG" && sType != "PRODUCT BACKLOG ITEM" && oLogin.chkOther.Checked)) { oTemp.WorkItems.Add(WorkItemToWIHours(oTFSI, oReg.EntryID, oDataSource, oReg.Hours)); } } } } oItems.Add(oTemp); } UpdateListview(oItems, false); } }
public static List <WorkItemsDay> GetHistoricalWorkitemsByUser(string tfsURL, string projectName, string userName, DateTime dFilter, DataSource oDataSource) { try { Uri tfsUrl = new Uri(tfsURL); TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsUrl); collection.EnsureAuthenticated(); var workItemStore = collection.GetService <WorkItemStore>(); var Ids = workItemStore.Query("select [System.Id] from WorkItems " + "where " + (projectName != "*" ? "[System.TeamProject] = '" + projectName + "' " + "and " : "") + "(ever [System.ChangedBy] ='" + userName + "' or [System.AssignedTo] ='" + userName + "')" + (oDataSource.ExcludeTasks ? " and [Work Item Type] <> 'Task'" : "")); var itemList = new List <WorkItemRegister>(); DateTime dAcum; WorkItemRegister oWIR = new WorkItemRegister(); foreach (WorkItem wi in Ids) { dAcum = wi.CreatedDate; foreach (Revision revision in wi.Revisions) { if (revision.Fields["Assigned To"].Value.ToString() == userName) { if (oWIR.ID == null) { string PrjCode = ""; if (wi.Fields.Contains("Project Code")) { PrjCode = wi.Fields["Project Code"].Value.ToString(); } else if (wi.Fields.Contains("ProjectCode")) { PrjCode = wi.Fields["ProjectCode"].Value.ToString(); } oWIR = new WorkItemRegister(revision.Fields["ID"].Value.ToString(), revision.Fields["Title"].Value.ToString(), revision.Fields["Changed By"].Value.ToString(), PrjCode, revision.Fields["Work Item Type"].Value.ToString()) { DateFrom = dAcum }; } } else { if (oWIR.ID != null) { oWIR.DateTo = (DateTime)revision.Fields["Changed Date"].Value; itemList.Add(oWIR); oWIR = new WorkItemRegister(); } } if (revision.Index == wi.Revisions.Count - 1) { dAcum = DateTime.Now; } else { dAcum = (DateTime)revision.Fields["Changed Date"].Value; } } if (oWIR.ID != null) { oWIR.DateTo = dAcum; itemList.Add(oWIR); oWIR = new WorkItemRegister(); } } var SplittedItemList = new List <WorkItemRegister>(); DateTime dTempF; DateTime dTempT; foreach (WorkItemRegister oRow in itemList) { dTempF = oRow.DateFrom; while (dTempF < oRow.DateTo) { dTempT = dTempF.AddDays(1).Date; if (dTempT > oRow.DateTo) { dTempT = oRow.DateTo; } SplittedItemList.Add(oRow.DuplicateWithDates(dTempF, dTempT)); dTempF = dTempT; } } dTempF = dFilter;//SplittedItemList.Select(x => x.DateFrom).Min(); dTempT = SplittedItemList.Select(x => x.DateFrom).Max(); List <WorkItemsDay> groupedList = new List <WorkItemsDay>(); WorkItemHours oTemp; for (var day = dTempF.Date; day.Date <= dTempT.Date; day = day.AddDays(1)) { WorkItemsDay oRow = new WorkItemsDay(day); foreach (WorkItemRegister wi in SplittedItemList.Where(x => x.DateFrom.Date == day.Date)) { oTemp = oRow.WorkItems.FirstOrDefault(x => x.ID == wi.ID); if (oTemp == null) { oTemp = new WorkItemHours(wi) { FromDatasource = oDataSource }; oRow.WorkItems.Add(oTemp); } else { oTemp.Hours = oTemp.Hours.Add(wi.timeSpan); } } groupedList.Add(oRow); } return(groupedList); } catch (Exception ex) { Console.WriteLine("Exception retrieving data: {0}", ex.Message); return(new List <WorkItemsDay>()); } }