public IEnumerable <TimeSheetJson> GetPreviousPeriod(WorkHourJson workHourJson)
        {
            List <TimeSheetJson> result = new List <TimeSheetJson>();

            if (workHourJson == null)
            {
                workHourJson      = new WorkHourJson();
                workHourJson.Date = DateTime.Now;
            }
            var                  startDate           = workHourJson.Date;
            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            ProjectManager       projectManager      = new Domain.ProjectManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            //SyncWithPWA(uow);
            User          currUser      = new UserHelper().GetCurrent();
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currUser);

            var dt = startDate.AddDays(-1);

            DateTime fromDate = dt.AddDays(-displayPeriod.NumOfDays);
            DateTime toDate   = dt;

            if (displayPeriod.IsWeekly)
            {
                fromDate = dt.StartOfWeek(DayOfWeek.Saturday);
                toDate   = dt.EndOfWeek(DayOfWeek.Friday);

                IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
                result = TimeSheetAssembler.ToJsonsForRegister(presHours, workHours);
            }
            else
            {
                IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
                if (presHours.Count() < displayPeriod.NumOfDays)
                {
                    fromDate  = timeSheetManager.GetFirstPresenceHour().Date;
                    toDate    = fromDate.AddDays(displayPeriod.NumOfDays);
                    presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                }
                result = TimeSheetAssembler.ToJsonsForRegister(presHours, workHours);
            }



            return(result);
        }
        public IEnumerable <TimeSheetJson> GetCurrentPeriodConfirm(List <TimeSheetValueJson> workHourJsons)
        {
            List <TimeSheetJson> result = new List <TimeSheetJson>();


            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            //SyncWithPWA(uow);
            User currUser = new UserHelper().GetCurrent();
            User user     = userManager.GetByID(Guid.Parse(workHourJsons[0].UserId));


            DateTime fromDate = workHourJsons[0].Date;

            DateTime toDate = workHourJsons[workHourJsons.Count() - 1].Date;;

            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);

            return(result);
        }
        public IEnumerable <TimeSheetJson> GetTimeSheetsByUserIdForFirstTime(Guid userID)
        {
            List <TimeSheetJson> result              = new List <TimeSheetJson>();
            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            ProjectManager       projectManager      = new Domain.ProjectManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            User          currentUser                = new UserHelper().GetCurrent();
            User          user          = userManager.GetByID(userID);
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currentUser);



            DateTime fromDate = DateTime.Now.AddDays(-7);
            DateTime toDate   = DateTime.Now;



            if (displayPeriod.IsWeekly)
            {
                fromDate = DateTime.Today.StartOfWeek(DayOfWeek.Saturday);
                toDate   = DateTime.Today.EndOfWeek(DayOfWeek.Friday);
            }
            else
            {
                toDate = fromDate.AddDays(displayPeriod.NumOfDays);
            }

            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(user, fromDate, toDate);
            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(user, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
            return(result);
        }
        public IEnumerable <TimeSheetJson> GetCurrentPeriod(List <TimeSheetValueJson> workHourJsons)
        {
            List <TimeSheetJson> result           = new List <TimeSheetJson>();
            UnitOfWork           uow              = new UnitOfWork();
            UserManager          userManager      = new UserManager(uow);
            TimeSheetManager     timeSheetManager = new TimeSheetManager(uow);
            User     currUser = new UserHelper().GetCurrent();
            DateTime fromDate = workHourJsons[0].Date;
            DateTime toDate   = workHourJsons[workHourJsons.Count() - 1].Date;
            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForRegister(presHours, workHours);
            return(result);
        }
示例#5
0
        public async Task <IActionResult> GetPreviousPeriodConfirm(string ver, string type, Guid?userId, DateTime date)
        {
            UserManager          userManager         = new UserManager(this._uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(this._uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(this._uow);
            //SyncWithPWA(uow);
            User          currUser      = new UserHelper().GetCurrent(this._uow, this.UserName);
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currUser);

            DateTime fromDate;
            DateTime toDate;
            DateTime dt;

            if (type == "previous")
            {
                dt = date.AddDays(-1);

                fromDate = dt.AddDays(-displayPeriod.NumOfDays);
                toDate   = dt;
            }
            else
            {
                dt = date.AddDays(1);

                fromDate = dt;
                toDate   = dt.AddDays(displayPeriod.NumOfDays);
            }


            if (displayPeriod.IsWeekly)
            {
                fromDate = dt.StartOfWeek(DayOfWeek.Saturday);
                toDate   = dt.EndOfWeek(DayOfWeek.Friday);
            }
            else
            {
                IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                if (presHours.Count() < displayPeriod.NumOfDays)
                {
                    fromDate = timeSheetManager.GetFirstPresenceHour().Date;
                    toDate   = fromDate.AddDays(displayPeriod.NumOfDays);
                }
            }

            return(await GetTimeSheet(ver, userId, fromDate, toDate));
        }
        public IEnumerable <TimeSheetJson> GetTimeSheetsByUserId(GetThisMonthDataByUserJson json)
        {
            List <TimeSheetJson> result              = new List <TimeSheetJson>();
            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            ProjectManager       projectManager      = new Domain.ProjectManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            User          currentUser                = new UserHelper().GetCurrent();
            User          user          = userManager.GetByID(Guid.Parse(json.userid.ToString()));
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currentUser);
            DateTime      fromDate      = DateTime.Now.AddDays(-7);
            DateTime      toDate;

            if (json.values != null)
            {
                if (json.values.Count > 0)
                {
                    fromDate = json.values[0].Date;
                    toDate   = json.values[json.values.Count() - 1].Date;
                }
            }


            if (displayPeriod.IsWeekly)
            {
                fromDate = DateTime.Today.StartOfWeek(DayOfWeek.Saturday);
                toDate   = DateTime.Today.EndOfWeek(DayOfWeek.Friday);
            }
            else
            {
                toDate = fromDate.AddDays(displayPeriod.NumOfDays);
            }

            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(user, fromDate, toDate);
            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(user, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
            return(result);
        }
        public IEnumerable <TimeSheetJson> GetTimeSheetsByDateAndNumberOfDay(PeriodNumberDateJson period)
        {
            List <TimeSheetJson> result              = new List <TimeSheetJson>();
            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            ProjectManager       projectManager      = new Domain.ProjectManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            var displayPeriod = DisplayPeriodUtilities.ConvertPeriodNumberDateJsonToDisplayPeriod(period);
            //SyncWithPWA(uow);
            User currUser = new UserHelper().GetCurrent();

            displayPeriodMnager.Save(displayPeriod);
            DateTime fromDate = displayPeriod.StartDate;
            DateTime toDate   = fromDate.AddDays(displayPeriod.NumOfDays);
            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForRegister(presHours, workHours);

            return(result);
        }
        public IEnumerable <TimeSheetJson> GetTimeSheets()
        {
            List <TimeSheetJson> result              = new List <TimeSheetJson>();
            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            ProjectManager       projectManager      = new Domain.ProjectManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            User          currUser = new UserHelper().GetCurrent();
            DateTime      fromDate;
            DateTime      toDate        = DateTime.MaxValue;
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currUser);

            if (displayPeriod != null)
            {
                fromDate = displayPeriod.StartDate;
                if (displayPeriod.IsWeekly)
                {
                    fromDate = DateTime.Today.StartOfWeek(DayOfWeek.Saturday);
                    toDate   = DateTime.Today.EndOfWeek(DayOfWeek.Friday);
                }
                else
                {
                    toDate = fromDate.AddDays(displayPeriod.NumOfDays);
                }
            }
            else
            {
                fromDate = DateTime.Today.StartOfWeek(DayOfWeek.Saturday);
                toDate   = DateTime.Today.EndOfWeek(DayOfWeek.Friday);
            }
            IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
            IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);

            result = TimeSheetAssembler.ToJsonsForRegister(presHours, workHours);
            return(result);
        }
        public FinalReport AssembleDailyOnProjects(ReportParametersFromToJson parametres)
        {
            var result = new FinalReport();

            UnitOfWork       uow              = new UnitOfWork();
            var              currentUser      = new UserHelper().GetCurrent();
            TimeSheetManager TimeSheetManager = new TimeSheetManager(uow);
            var              from             = DateUtility.GetMiladiDate(parametres.FromDate);
            var              to          = DateUtility.GetMiladiDate(parametres.ToDate);
            var              currentDate = from;

            var workHours = TimeSheetManager.GetWorkHoursByUser(currentUser, from, to);



            //سطر ها


            while (currentDate.Date <= to)
            {
                var row = new ReportRow();
                row.ID    = Guid.NewGuid();
                row.Title = DateUtility.GetPersianDate(currentDate);
                result.Rowes.Add(row);
                currentDate = currentDate.AddDays(1).Date;
            }

            var SumTotal = new ReportRow();

            SumTotal.ID    = Guid.NewGuid();
            SumTotal.Title = "جمع کل";
            result.Rowes.Add(SumTotal);


            //ستون ها

            foreach (var wh in workHours.GroupBy(x => x.ProjectId).Select(y => y.FirstOrDefault()).ToList())
            {
                var field = new Field();
                field.ID    = wh.ProjectId;
                field.Title = wh.Project.Title;
                result.Fields.Add(field);

                foreach (var row in result.Rowes)
                {
                    if (row.Title == "جمع کل")
                    {
                        var sumWorkHour           = workHours.Where(x => x.ProjectId == wh.ProjectId).Sum(x => x.Hours);
                        var fieldValuesumWorkHour = new FieldValue();
                        fieldValuesumWorkHour.CalculativeValue = sumWorkHour;
                        fieldValuesumWorkHour.FieldId          = field.ID;
                        fieldValuesumWorkHour.RowId            = row.ID;
                        fieldValuesumWorkHour.Value            = DateUtility.ConvertToTimeSpan(sumWorkHour);
                        row.Values.Add(fieldValuesumWorkHour);
                    }
                    else
                    {
                        var sumWorkHour           = workHours.Where(x => x.Date == DateUtility.GetMiladiDate(row.Title) && x.ProjectId == wh.ProjectId).Sum(x => x.Hours);
                        var fieldValuesumWorkHour = new FieldValue();
                        fieldValuesumWorkHour.CalculativeValue = sumWorkHour;
                        fieldValuesumWorkHour.FieldId          = field.ID;
                        fieldValuesumWorkHour.RowId            = row.ID;
                        fieldValuesumWorkHour.Value            = DateUtility.ConvertToTimeSpan(sumWorkHour);
                        row.Values.Add(fieldValuesumWorkHour);
                    }
                }
            }

            var Aggregation = new Field();

            Aggregation.Title = "جمع کارکرد";
            Aggregation.ID    = Guid.NewGuid();
            result.Fields.Add(Aggregation);

            var PresenceTotal = new Field();

            PresenceTotal.Title = "جمع حضور";
            PresenceTotal.ID    = Guid.NewGuid();
            result.Fields.Add(PresenceTotal);

            var DifferenceTotal = new Field();

            DifferenceTotal.Title = "جمع اختلاف";
            DifferenceTotal.ID    = Guid.NewGuid();
            result.Fields.Add(DifferenceTotal);

            foreach (var row in result.Rowes)
            {
                if (row.Title == "جمع کل")
                {
                    var sumworkHourTotal = workHours.Sum(X => X.Hours);
                    var fildvalueWork    = new FieldValue();
                    fildvalueWork.FieldId = Guid.NewGuid();
                    fildvalueWork.RowId   = row.ID;
                    fildvalueWork.Value   = DateUtility.ConvertToTimeSpan(sumworkHourTotal);
                    row.Values.Add(fildvalueWork);

                    double sumPresenceHourTotal = 0;
                    sumPresenceHourTotal = TimeSheetManager.GetPresHoursByUser(currentUser, from, to).Sum(x => x.Hours);
                    var fildvaluePresenceTotal = new FieldValue();
                    fildvaluePresenceTotal.FieldId = Guid.NewGuid();
                    fildvaluePresenceTotal.RowId   = row.ID;
                    fildvaluePresenceTotal.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHourTotal);
                    row.Values.Add(fildvaluePresenceTotal);


                    var fildvalueDifferencTotal = new FieldValue();
                    fildvalueDifferencTotal.FieldId = Guid.NewGuid();
                    fildvalueDifferencTotal.RowId   = row.ID;
                    fildvalueDifferencTotal.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHourTotal - sumworkHourTotal);
                    row.Values.Add(fildvalueDifferencTotal);
                }
                else
                {
                    var sumworkHour   = row.Values.Sum(y => y.CalculativeValue);
                    var fildvalueWork = new FieldValue();
                    fildvalueWork.FieldId = Guid.NewGuid();
                    fildvalueWork.RowId   = row.ID;
                    fildvalueWork.Value   = DateUtility.ConvertToTimeSpan(sumworkHour);
                    row.Values.Add(fildvalueWork);
                    double sumPresenceHour = 0;

                    sumPresenceHour = TimeSheetManager.GetPresenceHourByUserIdAndDate(currentUser.ID, DateUtility.GetMiladiDate(row.Title)) != null
                    ? TimeSheetManager.GetPresenceHourByUserIdAndDate(currentUser.ID, DateUtility.GetMiladiDate(row.Title)).Hours : 0;

                    var fildvaluePresence = new FieldValue();
                    fildvaluePresence.FieldId = Guid.NewGuid();
                    fildvaluePresence.RowId   = row.ID;
                    fildvaluePresence.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHour);
                    row.Values.Add(fildvaluePresence);

                    var fildvalueDifferenc = new FieldValue();
                    fildvalueDifferenc.FieldId = Guid.NewGuid();
                    fildvalueDifferenc.RowId   = row.ID;
                    fildvalueDifferenc.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHour - sumworkHour);
                    row.Values.Add(fildvalueDifferenc);
                }
            }



            result.HeaderTitle      = "گزارش روزانه پروژه ها";
            result.FirstColumnTitle = "تاریخ";



            return(result);
        }
        public FinalReport AssemblePersonnelsAndProjects(ReportParametersJson parametres)
        {
            var result = new FinalReport();

            UnitOfWork       uow              = new UnitOfWork();
            var              currentUser      = new UserHelper().GetCurrent();
            TimeSheetManager TimeSheetManager = new TimeSheetManager(uow);
            UserManager      userManager      = new UserManager(uow);
            DateTime         from             = DateUtility.GetMiladiDate(parametres.FromDate);
            DateTime         to = DateUtility.GetMiladiDate(parametres.ToDate);

            var workHours = TimeSheetManager.GetByUserIdsAndProjectIds(parametres.UserIds, parametres.ProjetIds, from, to);



            //سطر ها


            foreach (var group in workHours.GroupBy(x => x.EmployeeID))
            {
                var row = new ReportRow();
                row.ID    = group.First().EmployeeID;
                row.Title = group.First().Employee.UserTitle;
                result.Rowes.Add(row);
            }

            var SumTotal = new ReportRow();

            SumTotal.ID    = Guid.NewGuid();
            SumTotal.Title = "جمع کل";
            result.Rowes.Add(SumTotal);


            //ستون ها

            foreach (var wh in workHours.GroupBy(x => x.ProjectId).Select(y => y.FirstOrDefault()).ToList())
            {
                var field = new Field();
                field.ID    = wh.ProjectId;
                field.Title = wh.Project.Title;
                result.Fields.Add(field);

                foreach (var row in result.Rowes)
                {
                    if (row.Title == "جمع کل")
                    {
                        var sumWorkHour           = workHours.Where(x => x.ProjectId == wh.ProjectId).Sum(x => x.Hours);
                        var fieldValuesumWorkHour = new FieldValue();
                        fieldValuesumWorkHour.CalculativeValue = sumWorkHour;
                        fieldValuesumWorkHour.FieldId          = field.ID;
                        fieldValuesumWorkHour.RowId            = row.ID;
                        fieldValuesumWorkHour.Value            = DateUtility.ConvertToTimeSpan(sumWorkHour);
                        row.Values.Add(fieldValuesumWorkHour);
                    }
                    else
                    {
                        var sumWorkHour           = workHours.Where(x => x.EmployeeID == row.ID && x.ProjectId == wh.ProjectId).Sum(x => x.Hours);
                        var fieldValuesumWorkHour = new FieldValue();
                        fieldValuesumWorkHour.CalculativeValue = sumWorkHour;
                        fieldValuesumWorkHour.FieldId          = field.ID;
                        fieldValuesumWorkHour.RowId            = row.ID;
                        fieldValuesumWorkHour.Value            = DateUtility.ConvertToTimeSpan(sumWorkHour);
                        row.Values.Add(fieldValuesumWorkHour);
                    }
                }
            }

            var Aggregation = new Field();

            Aggregation.Title = "جمع کل";
            Aggregation.ID    = Guid.NewGuid();
            result.Fields.Add(Aggregation);

            var PresenceTotal = new Field();

            PresenceTotal.Title = "جمع حضور";
            PresenceTotal.ID    = Guid.NewGuid();
            result.Fields.Add(PresenceTotal);

            var DifferenceTotal = new Field();

            DifferenceTotal.Title = "جمع اختلاف";
            DifferenceTotal.ID    = Guid.NewGuid();
            result.Fields.Add(DifferenceTotal);

            foreach (var row in result.Rowes)
            {
                //توسعه
                var sumworkHour   = row.Values.Sum(y => y.CalculativeValue);
                var fildvalueWork = new FieldValue();
                fildvalueWork.FieldId = Guid.NewGuid();
                fildvalueWork.RowId   = row.ID;
                fildvalueWork.Value   = DateUtility.ConvertToTimeSpan(sumworkHour);
                row.Values.Add(fildvalueWork);

                if (userManager.GetByID(row.ID) != null)
                {
                    var user              = userManager.GetByID(row.ID);
                    var sumPresenceHour   = TimeSheetManager.GetPresHoursByUser(user, from, to).ToList().Sum(x => x.Hours);
                    var fildvaluePresence = new FieldValue();
                    fildvaluePresence.FieldId = Guid.NewGuid();
                    fildvaluePresence.RowId   = row.ID;
                    fildvaluePresence.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHour);
                    row.Values.Add(fildvaluePresence);
                    var fildvalueDifference = new FieldValue();
                    fildvalueDifference.FieldId = Guid.NewGuid();
                    fildvalueDifference.RowId   = row.ID;
                    fildvalueDifference.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHour - sumworkHour);
                    row.Values.Add(fildvalueDifference);
                }
                else
                {
                    double sumPresenceHourTotal = 0;
                    foreach (var userIds in parametres.UserIds)
                    {
                        var user = userManager.GetByID(userIds);
                        sumPresenceHourTotal += TimeSheetManager.GetPresHoursByUser(user, from, to).ToList().Sum(x => x.Hours);
                    }

                    var fildvaluePresenceTotal = new FieldValue();
                    fildvaluePresenceTotal.FieldId = Guid.NewGuid();
                    fildvaluePresenceTotal.RowId   = row.ID;
                    fildvaluePresenceTotal.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHourTotal);
                    row.Values.Add(fildvaluePresenceTotal);

                    var fildvalueDifferencTotale = new FieldValue();
                    fildvalueDifferencTotale.FieldId = Guid.NewGuid();
                    fildvalueDifferencTotale.RowId   = row.ID;
                    fildvalueDifferencTotale.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHourTotal - sumworkHour);
                    row.Values.Add(fildvalueDifferencTotale);
                }
            }



            result.HeaderTitle      = "گزارش پروژه ها به تفکیک ماه";
            result.FirstColumnTitle = "نام شخص";
            return(result);
        }
        //Assemble Bounch of projects
        public FinalReport AssembleBreakingProjectsByMonth(ReportParametersFromToJson parametres)
        {
            var result = new FinalReport();

            UnitOfWork       uow              = new UnitOfWork();
            var              currentUser      = new UserHelper().GetCurrent();
            TimeSheetManager TimeSheetManager = new TimeSheetManager(uow);
            var              workHours        = TimeSheetManager.GetWorkHoursByUser
                                                    (currentUser, DateUtility.GetMiladiDate(parametres.FromDate), DateUtility.GetMiladiDate(parametres.ToDate)).ToList();


            var from        = DateUtility.GetMiladiDate(parametres.FromDate);
            var to          = DateUtility.GetMiladiDate(parametres.ToDate);
            var currentDate = from;

            foreach (var group in workHours.GroupBy(x => x.ProjectId))
            {
                var row = new ReportRow();
                row.ID    = group.First().ProjectId;
                row.Title = group.First().Project.Title;
                result.Rowes.Add(row);
            }

            var SumTotal = new ReportRow();

            SumTotal.ID    = Guid.NewGuid();
            SumTotal.Title = "جمع کل کارکرد";
            result.Rowes.Add(SumTotal);
            var sumPresenceHours = new ReportRow();

            sumPresenceHours.ID    = Guid.NewGuid();
            sumPresenceHours.Title = "جمع کل حضور";
            result.Rowes.Add(sumPresenceHours);
            var sumDifference = new ReportRow();

            sumDifference.ID    = Guid.NewGuid();
            sumDifference.Title = "اختلاف";
            result.Rowes.Add(sumDifference);


            while (currentDate.Date <= to)
            {
                var firstDayOfMonth = DateUtility.GetMiladiDate(DateUtility.GetPersianYear(currentDate) + "/" + DateUtility.GetPersianMonth(currentDate) + "/" + "1");
                var day             = "30";
                if (DateUtility.GetPersianMonth(currentDate) < 7)
                {
                    day = "31";
                }
                var LastDayOfMonth = DateUtility.GetMiladiDate(DateUtility.GetPersianYear(currentDate) + "/" + DateUtility.GetPersianMonth(currentDate) + "/" + day);
                var field          = new Field();
                field.ID    = Guid.NewGuid();
                field.Title = DateUtility.GetPersianYear(currentDate) + "/" + DateUtility.GetPersianMonth(currentDate);
                result.Fields.Add(field);
                double workhours     = 0;
                double presencehours = 0;

                foreach (var row in result.Rowes)
                {
                    if (row.Title == "جمع کل کارکرد")
                    {
                        var sumWorkHour = workHours.Where(x => x.Date.Date <= LastDayOfMonth && x.Date.Date >= firstDayOfMonth).Sum(x => x.Hours);
                        workhours = sumWorkHour;
                        var fieldValuesumWorkHour = new FieldValue();
                        fieldValuesumWorkHour.FieldId = field.ID;
                        fieldValuesumWorkHour.RowId   = row.ID;
                        fieldValuesumWorkHour.Value   = DateUtility.ConvertToTimeSpan(sumWorkHour);
                        row.Values.Add(fieldValuesumWorkHour);
                    }
                    else if (row.Title == "جمع کل حضور")
                    {
                        var sumPresenceHour = TimeSheetManager.GetPresHoursByUser(currentUser, firstDayOfMonth, LastDayOfMonth).Sum(x => x.Hours);
                        presencehours = sumPresenceHour;
                        var fieldValuesumPresenceHour = new FieldValue();
                        fieldValuesumPresenceHour.FieldId = field.ID;
                        fieldValuesumPresenceHour.RowId   = row.ID;
                        fieldValuesumPresenceHour.Value   = DateUtility.ConvertToTimeSpan(sumPresenceHour);
                        row.Values.Add(fieldValuesumPresenceHour);
                    }
                    else if (row.Title == "اختلاف")
                    {
                        var sumdifference = presencehours - workhours;;

                        var fieldValuesumdifference = new FieldValue();
                        fieldValuesumdifference.FieldId = field.ID;
                        fieldValuesumdifference.RowId   = row.ID;
                        fieldValuesumdifference.Value   = DateUtility.ConvertToTimeSpan(sumdifference);
                        row.Values.Add(fieldValuesumdifference);
                    }
                    else
                    {
                        var value      = workHours.Where(x => x.ProjectId == row.ID && x.Date.Date <= LastDayOfMonth && x.Date.Date >= firstDayOfMonth).Sum(x => x.Hours);
                        var fieldValue = new FieldValue();
                        fieldValue.FieldId = field.ID;
                        fieldValue.RowId   = row.ID;
                        fieldValue.Value   = DateUtility.ConvertToTimeSpan(value);
                        row.Values.Add(fieldValue);
                    }
                }



                currentDate = LastDayOfMonth.AddDays(1).Date;
            }
            var Aggregation = new Field();

            Aggregation.Title = "مجموع";
            Aggregation.ID    = Guid.NewGuid();
            result.Fields.Add(Aggregation);

            foreach (var row in result.Rowes)
            {
                var sum       = workHours.Where(x => x.ProjectId == row.ID).Sum(y => y.Hours);
                var fildvalue = new FieldValue();
                fildvalue.FieldId = Guid.NewGuid();
                fildvalue.RowId   = row.ID;
                fildvalue.Value   = DateUtility.ConvertToTimeSpan(sum);
                row.Values.Add(fildvalue);
            }



            result.HeaderTitle      = "گزارش پروژه ها به تفکیک ماه";
            result.FirstColumnTitle = "عنوان پروژه";
            return(result);
        }
        public IEnumerable <TimeSheetJson> GetNextPeriodConfirm(TimeSheetValueJson workHourJson)
        {
            List <TimeSheetJson> result = new List <TimeSheetJson>();

            if (workHourJson == null)
            {
                workHourJson      = new TimeSheetValueJson();
                workHourJson.Date = DateTime.Now.AddDays(-7);
            }

            UnitOfWork           uow                 = new UnitOfWork();
            UserManager          userManager         = new UserManager(uow);
            TimeSheetManager     timeSheetManager    = new TimeSheetManager(uow);
            DisplayPeriodManager displayPeriodMnager = new DisplayPeriodManager(uow);
            //SyncWithPWA(uow);
            User          currUser      = new UserHelper().GetCurrent();
            User          user          = userManager.GetByID(Guid.Parse(workHourJson.UserId));
            DisplayPeriod displayPeriod = displayPeriodMnager.GetDisplayPeriod(currUser);
            DateTime      toDate        = workHourJson.Date.AddDays(1);

            DateTime fromDate;
            var      type = workHourJson.Value.GetType();

            if (displayPeriod != null)
            {
                fromDate = displayPeriod.StartDate;
                if (displayPeriod.IsWeekly)
                {
                    var Condition = workHourJson.Value.Equals(true) || workHourJson.Date.AddDays(7) < DateTime.Now;
                    if (DateTime.Now > workHourJson.Date && Condition)
                    {
                        fromDate = toDate.StartOfWeek(DayOfWeek.Saturday);
                        toDate   = toDate.EndOfWeek(DayOfWeek.Friday);
                        IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                        IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);

                        result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
                    }
                    else
                    {
                        fromDate = DateTime.Now.StartOfWeek(DayOfWeek.Saturday);
                        toDate   = DateTime.Now.EndOfWeek(DayOfWeek.Friday);
                        IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                        IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
                        result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
                    }
                }
                else
                {
                    toDate = fromDate.AddDays(displayPeriod.NumOfDays);
                    IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                    if (presHours.Count() < displayPeriod.NumOfDays)
                    {
                        fromDate  = DateTime.Now;
                        toDate    = fromDate.AddDays(displayPeriod.NumOfDays);
                        presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                    }
                    IEnumerable <WorkHour> workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
                    result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
                }
            }
            else
            {
                fromDate = DateTime.Now.StartOfWeek(DayOfWeek.Saturday);
                toDate   = DateTime.Now.EndOfWeek(DayOfWeek.Friday);
                IEnumerable <PresenceHour> presHours = timeSheetManager.GetPresHoursByUser(currUser, fromDate, toDate);
                IEnumerable <WorkHour>     workHours = timeSheetManager.GetWorkHoursByUser(currUser, fromDate, toDate);
                result = TimeSheetAssembler.ToJsonsForConfirm(presHours, workHours, user);
            }



            return(result);
        }