Exemple #1
0
        /// <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;
        }