/// <summary> /// Timesheet (tuntikirjaus) entries /// </summary> /// <param name="payrollPeriod">BsonDocument payrollPeriod</param> /// <param name="config">config["fields"]</param> /// <param name="exportTask">All viable information for the task</param> /// <returns>Collection of EntriesToPayroll of Timesheet></returns> private EntriesToPayroll <Timesheet> GetTimesheetToExport() { UpdateExportStatus("Part 2 - Getting worker hours"); MongoCollection <BsonDocument> entriesCollection = database.GetCollection("timesheetentry"); #if (DATE) var andQueries = new List <IMongoQuery>(); //Filter based on dates andQueries.Add(Query.GTE("starttimestamp", startDate)); andQueries.Add(Query.LT("endtimestamp", (DateTime.Now))); MongoCursor <BsonDocument> cursor = entriesCollection.Find(Query.And(andQueries)); cursor = entriesCollection.Find(Query.And(andQueries)); #else MongoCursor <BsonDocument> cursor = entriesCollection.FindAll(); #endif var entries = new EntriesToPayroll <Timesheet>(); foreach (var item in cursor) { try { Timesheet entry = new Timesheet(); //document entry.Document = item; BsonDocument payType = timesheetEntryDetailPaytypeCache[((ObjectId)(item["timesheetentrydetailpaytype"][0]))]; entry.PayTypeId = Convert.ToString(payType.GetValue("identifier", "")); entry.PayType = payType; entry.PayTypeName = payType["name"].ToString(); entry._id = (ObjectId)item[0]; entry.ApprovedByWorker = (bool)item.GetValue("approvedbyworker", false); entry.ApprovedByManager = (bool)item.GetValue("approvedbymanager", false); //User Info from cache BsonDocument user = userCache[((ObjectId)(item["user"][0]))]; entry.UserName = item.GetValue("__user__displayname", "noname").ToString(); //Profitcenter if (item.GetValue("profitcenter", string.Empty) != string.Empty) { BsonDocument profitcenter = profitcenterCache[((ObjectId)(item["profitcenter"][0]))]; entry.ProfitCenter = profitcenter["identifier"].ToString(); } else if (user.GetValue("profitcenter", string.Empty) != string.Empty) { BsonDocument profitcenter = profitcenterCache[((ObjectId)(user["profitcenter"][0]))]; entry.ProfitCenter = profitcenter["identifier"].ToString(); } else { BsonDocument profitcenter = profitcenterCache[((ObjectId)(user["profitcenter"][0]))]; entry.ProfitCenter = profitcenter["identifier"].ToString(); } //NOTE: Removed by request of Oskari Jauhianen 2016-05-27 //Only profitcenter that starts with 1 //if (entry.ProfitCenter.StartsWith("1") == false) // continue; entry.UserIdentifier = user["identifier"].ToString(); entry.StartDate = item["starttimestamp"].ToLocalTime(); entry.EndDate = item["endtimestamp"].ToLocalTime(); //Should use this notation if value does not exists entry.Hours = Convert.ToInt32(item.GetValue("duration", 0)); //Tämä oli showstopperi vanhasta versiosta... 2016-06-12 //entry.Hours = (entry.EndDate - entry.StartDate).TotalMilliseconds; //Project info if (item["project"][0] == null) { UpdateExportStatus("Timesheet entry does not contain project, entry " + item[0]); throw new Exception("Timesheet entry does not contain project , entry " + item[0]); } //Project and workorder info BsonDocument project = database.GetCollection("project").FindOne(Query.EQ(DBQuery.Id, item["project"][0])); entry.ProjectNumber = project["identifier"].ToString(); //CLA info //entry.ClaGroup = claidentifier; entries.Add(entry); //Debug.WriteLine(entry.PayTypeName); } catch (Exception ex) { UpdateExportStatus(string.Format("timesheetentry {0} has problem\n Exception\n{1}", item["_id"], ex.ToString())); } } //Timetracking and parent UpdateExportStatus("Part 2 - Finished worker hours total " + entries.Count); //**********tähän jäätiin 2016-06-12 ja varmaan oikea //return entries; //var counterX = 0; foreach (var item in entries) { //If detail if (item.Document.GetValue("parent", null) != null) { var found = entries.Where(p => p.Document[0] == item.Document["parent"][0]).FirstOrDefault(); if (found == null) { continue; } found.Hours -= item.Hours; } } return(entries); //#if(DEBUG) // Debug.WriteLine(counterX); //#endif // //Pass 2 for timesheetentrydetails // // pass2: // // UpdateExportStatus("Part 2 - Getting worker details"); // // entriesCollection = database.GetCollection("timesheetentrydetail"); // //#if (DATE) // // //Filter on dates // // andQueries = new List<IMongoQuery>(); // // andQueries.Add(Query.GTE("created", startDate)); // // andQueries.Add(Query.LT("created", (DateTime.Now))); // // cursor = entriesCollection.Find(Query.And(andQueries)); // //#else // // //cursor = timesheetEntries.Find(Query.And(andQueries)); // // cursor = entriesCollection.FindAll(); // //#endif // // foreach (var item in cursor) // // { // // try // // { // // Timesheet entry = new Timesheet(); // // entry.Document = item; // // entry.IsTimesheetEntryDetail = true; // // BsonDocument payType = timesheetEntryDetailPaytypeCache[((ObjectId)(item["timesheetentrydetailpaytype"][0]))]; // // entry.PayTypeId = Convert.ToString(payType.GetValue("identifier", "no paytype")); // // entry.PayTypeName = Convert.ToString(payType.GetValue("name", "no paytype name")); // // BsonArray test = (BsonArray)item.GetValue("timesheetentry", null); // // if (test.Count < 1) // // continue; // // BsonDocument timeSheetEntry = database.GetCollection("timesheetentry").FindOne(Query.EQ(DBQuery.Id, item["timesheetentry"][0])); // // if (timeSheetEntry == null) // // continue; // // entry._id = (ObjectId)timeSheetEntry[0]; // // BsonDocument user = userCache[((ObjectId)(timeSheetEntry["user"][0]))]; // // if ((bool)user["internalworker"] == false) // // continue; // // BsonDocument profitcenter = profitcenterCache[((ObjectId)(user["profitcenter"][0]))]; // // entry.ProfitCenter = profitcenter["identifier"].ToString(); // // //NOTE: Removed by request of Oskari Jauhianen 2016-05-27 // // //Only profitcenter that starts with 1 // // //if (entry.ProfitCenter.StartsWith("1") == false) // // // continue; // // entry.Hours = Convert.ToInt32(item.GetValue("duration", 0)); // // entries.Add(entry); // // } // // catch (Exception ex) // // { // // UpdateExportStatus(string.Format("timesheetentrydetail {0} has problem\n Exception\n{1}", item["_id"], ex.ToString())); // // } // // } // // UpdateExportStatus("Part 2 - Finished worker details total " + entries.Count); // // UpdateExportStatus("Part 3 - Starting details with timesheetentries"); // // //Timetracking and parent // // foreach (var item in entries) // // { // // //BsonDocument tempTimeSheetEntry = database.GetCollection("timesheetentry").FindOne(Query.EQ(DBQuery.Id, item._id)); // // //If detail // // if (item.Document.GetValue("timesheetentry", null) != null) // // { // // var found = entries.Where(p => p.Document[0] == item.Document["timesheetentry"][0]).FirstOrDefault(); // // if (found == null) // // continue; // // found.Hours -= item.Hours; // // //************* // // item.StartDate = found.StartDate; // // item.UserIdentifier = found.UserIdentifier; // // item.UserName = found.UserName; // // item.ProjectNumber = found.ProjectNumber; // // } // // } // // UpdateExportStatus("Part 3 - Finished details with timesheetentries"); // // long stopBytes = System.GC.GetTotalMemory(true); // // UpdateExportStatus(string.Format("Absences & WorkSheets Time eleapsed={0} minutes", (sw.Elapsed.TotalMinutes))); // // UpdateExportStatus("Number of details written " + entries.Count); // return entries; }