public TimeSheetActivity GetUserActiveActivity(string userId, bool includeTask)
        {
            List <int> timesheetIds = db.TimeSheets.Where(k => k.UserId == userId)
                                      .Select(k => k.ID).ToList();

            if (timesheetIds.Count == 0)
            {
                return(null);
            }

            var dbActiveActivity = db.TimeSheetActivities
                                   .Include(k => k.TimeSheetTask)
                                   .Include(k => k.IpAddress)
                                   .FirstOrDefault(k => timesheetIds.Contains(k.TimeSheetTask.TimeSheetId) && !k.ToDate.HasValue && !k.DeletedAt.HasValue);

            if (dbActiveActivity == null)
            {
                return(null);
            }

            TimeSheetActivity activity = _mapper.Map <TimeSheetActivity>(dbActiveActivity);

            if (includeTask)
            {
                var dbTask = db.ProjectTasks.First(k => k.ID == activity.TimeSheetTask.ProjectTaskId);

                activity.ProjectTask = _mapper.Map <ProjectTask>(dbTask);
            }

            //activity.ProjectTask = db.ProjectTasks.First(k=>k.ID == activity.TimeSheetTask)

            return(activity);
        }
        public ProjectTask GetActivityTask(int id)
        {
            //db.SaveChanges();

            TimeSheetActivity activity = Get(id);

            if (activity == null)
            {
                return(null);
            }

            var dbTimeSheetTask = db.TimeSheetTasks.First(k => k.ID == activity.TimeSheetTaskId);

            var dbProject = db.ProjectTasks.AsNoTracking()
                            .First(k => k.ID == dbTimeSheetTask.ProjectTaskId);

            //dbProject.Team = null;
            //dbProject.Category = null;
            //dbProject.Tasks = null;

            //if (dbProject.Parent != null)
            //{
            //    dbProject.Parent.Team = null;
            //    dbProject.Parent.Category = null;
            //    dbProject.Parent.Tasks = null;
            //}

            return(_mapper.Map <ProjectTask>(dbProject));
        }
        //public TimeSheetActivity Add(TimeSheetActivity activity, string ipAddress)
        //{
        //    try
        //    {
        //        //TimeSheetTaskId,
        //        //ipAddress

        //        if (activity.TimeSheetTaskId == 0)
        //        {
        //            return null;
        //        }

        //        bool ipAdded = _ipAddressMethods.AddIfNotExist(ipAddress);

        //        if (ipAdded)
        //        {
        //            activity.Address = ipAddress;
        //        }

        //        var dbActivity = _mapper.Map<DataSets.TimeSheetActivity>(activity);

        //        var record_pending = db.TimeSheetActivities.Add(dbActivity);

        //        if (db.SaveChanges() > 0)
        //        {
        //            return Get(record_pending.Entity.ID);
        //        }

        //        return null;
        //    }
        //    catch (Exception ex)
        //    {
        //        return null;
        //    }
        //}

        //public TimeSheetActivity Update(TimeSheetActivity activity, string ipAddress)
        //{
        //    try
        //    {
        //        DataSets.TimeSheetActivity dbActivity = db.TimeSheetActivities.FirstOrDefault(k => k.ID == activity.ID);

        //        if (dbActivity == null)
        //        {
        //            return null;
        //        }

        //        #region ACTIVITY LOG


        //        TimeSheetActivityLog log = _mapper.Map<TimeSheetActivityLog>(dbActivity);
        //        log.DateAdded = DateTime.Now;
        //        log.TimeSheetActivityId = dbActivity.ID;
        //        log.ID = 0;
        //        _activityLogs.Add(log);

        //        #endregion

        //        bool ipAdded = _ipAddressMethods.AddIfNotExist(ipAddress);

        //        dbActivity.Address = ipAdded ? activity.Address : null;
        //        dbActivity.FromDate = activity.FromDate;
        //        dbActivity.ToDate = activity.ToDate;
        //        dbActivity.Message = activity.Message;

        //        db.SaveChanges();

        //        return Get(dbActivity.ID);
        //    }
        //    catch (Exception ex)
        //    {
        //        return null;
        //    }
        //}

        public TimeSheetActivity Get(int id)
        {
            DataSets.TimeSheetActivity dbActivity = db.TimeSheetActivities
                                                    //.Include(k => k.TimeSheetTask)
                                                    .Include(k => k.IpAddress)
                                                    .FirstOrDefault(k => k.ID == id);

            if (dbActivity == null)
            {
                return(null);
            }

            TimeSheetActivity activity = _mapper.Map <TimeSheetActivity>(dbActivity);

            // get ip title
            //if (dbActivity.IpAddress != null)
            //{
            //    DataSets.IpAddress address = db.IpAddresses.FirstOrDefault(k => k.Address == dbActivity.IpAddress);

            //    if (address != null)
            //    {
            //        activity.IpAddressDisplay = address.Title;
            //    }
            //}

            return(activity);
        }
Example #4
0
        public bool AddActivity(TimeSheetActivity model)
        {
            var query =
                @"
                INSERT INTO timesheet_activity(cd_user,dh_input,dc_activity) VALUES(@cd_user,@dh_input,@dc_activity)
            ";

            using (var dbCon = new SQLiteConnection(string.Concat("Data Source=", base.db_path)))
                return(dbCon.Execute(query, new { cd_user = model.cd_user, dh_input = model.dh_input, dc_activity = model.dc_activity }) > 0);
        }
Example #5
0
        public bool AddActivity(DateTime dh_input, string dc_activity)
        {
            var model = new TimeSheetActivity
            {
                dh_input    = dh_input,
                cd_user     = this._IUserService.Me.cd_user,
                dc_activity = dc_activity
            };

            return(this._ITimeSheetRepository.AddActivity(model));
        }
        public IActionResult GetUserActiveActivity(string userId, bool includeTask)
        {
            try
            {
                TimeSheetActivity activity = _activitiesMethods.GetUserActiveActivity(userId, includeTask);

                return(Ok(activity));
            }
            catch (ClientException ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, new { message = ex.Message }));
            }
        }
        public User GetActivityUser(int id)
        {
            TimeSheetActivity activity = Get(id);

            if (activity == null)
            {
                return(null);
            }

            var dbTimeSheetProject = db.TimeSheetTasks.First(k => k.ID == activity.TimeSheetTaskId);

            string userId = db.TimeSheets.First(k => k.ID == dbTimeSheetProject.TimeSheetId).UserId;

            var dbUser = db.Users.Include(k => k.Team).First(k => k.Id == userId);

            return(_mapper.Map <DataContract.User>(dbUser));
        }
Example #8
0
        public JsonResult NeedsCorrection(TimeSheetStatusViewModel vm)
        {
            var employee          = _employeeRepository.GetBy(u => u.UserId == WebUser.Id, "User,User.Person");
            var selectedTimeSheet = _timeSheetRepository.Get(vm.Id);

            if (selectedTimeSheet != null)
            {
                selectedTimeSheet.State = TimeSheetState.NeedsCorrection;
                selectedTimeSheet.ApprovedByEmployeeId = employee.Id;
                selectedTimeSheet.ApproverComments     = vm.Comments;

                _timeSheetRepository.Update(selectedTimeSheet);
                _unitOfWork.Commit();

                // Log Activity
                var activity = new TimeSheetActivity
                {
                    TimeSheetId     = selectedTimeSheet.Id,
                    Title           = "Needs Correction",
                    Comment         = $"{WebUser.Name} rejected the TimeSheet at {DateTime.UtcNow:G} with comments {vm.Comments}",
                    CreatedByUserId = WebUser.Id
                };

                _timeSheetActivityRepository.Create(activity);
                _unitOfWork.Commit();

                // Notify the user online
                var submittedByUser = _userRepository.Get(selectedTimeSheet.CreatedByUserId);
                if (submittedByUser?.Person != null)
                {
                    var message = $"Your timesheet for {selectedTimeSheet.Date.ToShortDateString()} needs correction";
                    _notificationService.NotifyUser("Timesheet Needs Correction", message, submittedByUser.Code);
                }

                // Send Email, Email Template name is hard corded - Need to change later
                // Replace the hard coded emails with settings or a team.
#if !DEBUG
                _emailComposerService.TimeSheetNeedsCorrection(selectedTimeSheet.Id);
#endif

                return(Json(true));
            }

            return(Json(false));
        }
Example #9
0
        public ActionResult UpdateSheet(TimeSheetModel timeSheet)
        {
            var date = timeSheet.Date.DateFromUsFormat();

            // Check for duplicates
            var exists = _timeSheetRepository.Any(t => t.CreatedByUserId == WebUser.Id && t.Date == date.Date && t.Id != timeSheet.Id);

            if (exists)
            {
                return(Json(false));
            }

            var selectedSheet = _timeSheetRepository.Get(timeSheet.Id);

            if (selectedSheet != null)
            {
                selectedSheet.Title      = $"{WebUser.Name}'s {"TimeSheet for "} {timeSheet.Date}";
                selectedSheet.Date       = date.Date;
                selectedSheet.State      = TimeSheetState.PendingApproval;
                selectedSheet.TotalHours = timeSheet.Rows.Sum(r => r.Effort);
                selectedSheet.Comments   = timeSheet.Comments;

                selectedSheet.UpdatedByUserId = WebUser.Id;

                _timeSheetRepository.Update(selectedSheet);
                _unitOfWork.Commit();

                // Remove Existing
                var existingRows = _timeSheetLineItemRepository.GetAllBy(t => t.TimeSheetId == timeSheet.Id).ToList();
                foreach (var existingRow in existingRows)
                {
                    _timeSheetLineItemRepository.Delete(existingRow);
                }

                _unitOfWork.Commit();

                // Add Fresh
                foreach (var lineItem in timeSheet.Rows)
                {
                    var newTimeSheetLineItem = new TimeSheetLineItem
                    {
                        TimeSheetId = selectedSheet.Id,
                        ProjectId   = lineItem.ProjectId,
                        TaskId      = lineItem.TaskId,
                        TaskSummary = lineItem.TaskSummary,
                        Effort      = lineItem.Effort,
                        Comments    = lineItem.Comments,
                        WorkType    = lineItem.WorkType
                    };

                    _timeSheetLineItemRepository.Create(newTimeSheetLineItem);
                }

                _unitOfWork.Commit();

                // Log Activity
                var activity = new TimeSheetActivity
                {
                    TimeSheetId     = selectedSheet.Id,
                    Title           = "Updated",
                    Comment         = $"{WebUser.Name} updated the TimeSheet at {DateTime.UtcNow.ToString("G")} with state {selectedSheet.State} & hours {selectedSheet.TotalHours}",
                    CreatedByUserId = WebUser.Id
                };

                _timeSheetActivityRepository.Create(activity);
                _unitOfWork.Commit();

                // Notify the reporting manager online
                var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id, "ReportingPerson");
                if (loginEmployee?.ReportingPerson != null)
                {
                    var message = $"{WebUser.Name} has updated the timesheet with {selectedSheet.TotalHours} hours";
                    _notificationService.NotifyUser("Timesheet Updated", message, loginEmployee.ReportingPerson.Code);
                }

                // Send Email, Email Template name is hard corded - Need to change later
                // Replace the hard coded emails with settings or a team.
#if !DEBUG
                _emailComposerService.TimeSheetUpdated(selectedSheet.Id);
#endif

                return(Json(true));
            }

            return(Json(false));
        }
Example #10
0
        public ActionResult CreateSheet(TimeSheetModel timeSheet)
        {
            var date   = timeSheet.Date.DateFromUsFormat();
            var exists = _timeSheetRepository.Any(t => t.CreatedByUserId == WebUser.Id && t.Date == date.Date);

            if (!exists)
            {
                var newTimeSheet = new TimeSheet
                {
                    State           = TimeSheetState.PendingApproval,
                    Title           = $"{WebUser.Name}'s {"TimeSheet for "} {timeSheet.Date}",
                    Date            = date.Date,
                    TotalHours      = timeSheet.Rows.Sum(r => r.Effort),
                    Comments        = timeSheet.Comments,
                    CreatedByUserId = WebUser.Id
                };

                _timeSheetRepository.Create(newTimeSheet);

                foreach (var lineItem in timeSheet.Rows)
                {
                    var newTimeSheetLineItem = new TimeSheetLineItem
                    {
                        TimeSheetId = newTimeSheet.Id,
                        ProjectId   = lineItem.ProjectId,
                        TaskId      = lineItem.TaskId,
                        TaskSummary = lineItem.TaskSummary,
                        Effort      = lineItem.Effort,
                        Comments    = lineItem.Comments,
                        WorkType    = lineItem.WorkType
                    };

                    _timeSheetLineItemRepository.Create(newTimeSheetLineItem);
                }

                _unitOfWork.Commit();

                // Log Activity
                var activity = new TimeSheetActivity
                {
                    TimeSheetId     = newTimeSheet.Id,
                    Title           = "Created",
                    Comment         = $"{WebUser.Name} created the TimeSheet at {DateTime.UtcNow.ToString("G")} with state {newTimeSheet.State} & hours {newTimeSheet.TotalHours}",
                    CreatedByUserId = WebUser.Id
                };

                _timeSheetActivityRepository.Create(activity);
                _unitOfWork.Commit();

                //Update if there is a missing timesheet entry
                var missedList = _missedTimeSheetRepository.GetAllBy(m => m.UserId == newTimeSheet.CreatedByUserId && m.Date == newTimeSheet.Date && m.FilledOn == null);
                foreach (var missedTimeSheet in missedList)
                {
                    missedTimeSheet.FilledOn = DateTime.UtcNow;
                    _missedTimeSheetRepository.Update(missedTimeSheet);
                }

                _unitOfWork.Commit();

                // Notify the reporting manager online
                var loginEmployee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id, "ReportingPerson");
                if (loginEmployee?.ReportingPerson != null)
                {
                    var message = $"{WebUser.Name} has submitted the timesheet with {newTimeSheet.TotalHours} hours";
                    _notificationService.NotifyUser("Timesheet Submitted", message, loginEmployee.ReportingPerson.Code);
                }

                // Send Email, Email Template name is hard corded - Need to change later
                // Replace the hard coded emails with settings or a team.
#if !DEBUG
                _emailComposerService.TimeSheetSubmitted(newTimeSheet.Id);
#endif

                return(Json(true));
            }

            return(Json(false));
        }
Example #11
0
        public ActionResult Update(LeaveUpdateModel vm)
        {
            if (ModelState.IsValid)
            {
                Employee currentUser = new Employee();


                if (vm.RequestedForUserId.Value != 0)
                {
                    currentUser = _employeeRepository.GetBy(l => l.Id == vm.RequestedForUserId);
                }
                else
                {
                    currentUser = _employeeRepository.GetBy(l => l.UserId == WebUser.Id);
                }
                if (currentUser.ReportingPersonId.HasValue)

                {
                    if (currentUser != null)
                    {
                        // Preprocess based on Duration, we dont get the end if it's a single day or half day
                        if (vm.Duration != LeaveDuration.MultipleDays)
                        {
                            vm.End = vm.Start;
                        }
                        var newLeave = new Leave
                        {
                            LeaveTypeId     = vm.LeaveTypeId,
                            Duration        = vm.Duration,
                            Start           = vm.Start,
                            End             = vm.End,
                            Reason          = vm.Reason,
                            Status          = LeaveStatus.Pending,
                            ApproverId      = currentUser.ReportingPersonId ?? 2,
                            Count           = vm.Count,
                            CreatedByUserId = WebUser.Id
                        };
                        if (vm.RequestedForUserId.HasValue && vm.RequestedForUserId != 0)
                        {
                            newLeave.RequestedForUserId = vm.RequestedForUserId;
                        }
                        else
                        {
                            var employee = _employeeRepository.GetBy(r => r.UserId == WebUser.Id);
                            newLeave.RequestedForUserId = employee.Id;
                        }
                        _leaveRepository.Create(newLeave);
                        _unitOfWork.Commit();

                        var employeeId    = newLeave.RequestedForUserId;
                        var loginEmployee = _employeeRepository.GetBy(r => r.Id == employeeId);
                        var userEmployee  = _userRepository.GetBy(r => r.Id == loginEmployee.UserId, "Person");

                        if (vm.Duration == LeaveDuration.FirstHalf || vm.Duration == LeaveDuration.SecondHalf)
                        {
                            var date   = vm.Start;
                            var exists = _timeSheetRepository.Any(t => t.CreatedByUserId == userEmployee.Id && t.Date == date.Date);
                            if (!exists)
                            {
                                var newTimeSheet = new TimeSheet
                                {
                                    State           = TimeSheetState.PendingApproval,
                                    Title           = $"{userEmployee.Person.Name}'s {"TimeSheet for "} {vm.Start.ToShortDateString()}",
                                    Date            = date.Date,
                                    TotalHours      = 4,
                                    Comments        = null,
                                    CreatedByUserId = userEmployee.Id
                                };

                                _timeSheetRepository.Create(newTimeSheet);

                                var project = _projectRepository.GetBy(i => i.Title == "Leave");
                                var newTimeSheetLineItem = new TimeSheetLineItem
                                {
                                    TimeSheetId = newTimeSheet.Id,
                                    ProjectId   = project.Id,
                                    TaskId      = null,
                                    TaskSummary = "Leave",
                                    Effort      = 4,
                                    Comments    = null,
                                    WorkType    = 2
                                };
                                _timeSheetLineItemRepository.Create(newTimeSheetLineItem);
                                _unitOfWork.Commit();

                                // Log Activity
                                var activity = new TimeSheetActivity
                                {
                                    TimeSheetId     = newTimeSheet.Id,
                                    Title           = "Created",
                                    Comment         = $"{userEmployee.Person.Name} created the TimeSheet at {DateTime.UtcNow.ToString("G")} with state {newTimeSheet.State} & hours {newTimeSheet.TotalHours}",
                                    CreatedByUserId = userEmployee.Id
                                };
                                _timeSheetActivityRepository.Create(activity);
                                _unitOfWork.Commit();
                            }
                        }
                        if (vm.Duration == LeaveDuration.OneFullDay)
                        {
                            var date   = vm.Start;
                            var exists = _timeSheetRepository.Any(t => t.CreatedByUserId == userEmployee.Id && t.Date == date.Date);
                            if (!exists)
                            {
                                var newTimeSheet = new TimeSheet
                                {
                                    State           = TimeSheetState.PendingApproval,
                                    Title           = $"{userEmployee.Person.Name}'s {"TimeSheet for "} {vm.Start.ToShortDateString()}",
                                    Date            = date.Date,
                                    TotalHours      = 8,
                                    Comments        = null,
                                    CreatedByUserId = userEmployee.Id
                                };
                                _timeSheetRepository.Create(newTimeSheet);

                                var project = _projectRepository.GetBy(i => i.Title == "Leave");
                                var newTimeSheetLineItem = new TimeSheetLineItem
                                {
                                    TimeSheetId = newTimeSheet.Id,
                                    ProjectId   = project.Id,
                                    TaskId      = null,
                                    TaskSummary = "Leave",
                                    Effort      = 8,
                                    Comments    = null,
                                    WorkType    = 2
                                };
                                _timeSheetLineItemRepository.Create(newTimeSheetLineItem);
                                _unitOfWork.Commit();

                                var activity = new TimeSheetActivity
                                {
                                    TimeSheetId     = newTimeSheet.Id,
                                    Title           = "Created",
                                    Comment         = $"{userEmployee.Person.Name} created the TimeSheet at {DateTime.UtcNow.ToString("G")} with state {newTimeSheet.State} & hours {newTimeSheet.TotalHours}",
                                    CreatedByUserId = userEmployee.Id
                                };
                                _timeSheetActivityRepository.Create(activity);
                                _unitOfWork.Commit();
                            }
                        }
                        if (vm.Duration == LeaveDuration.MultipleDays)
                        {
                            List <DateTime> allDates          = new List <DateTime>();
                            List <DateTime> datesForTimesheet = new List <DateTime>();
                            for (DateTime dates = vm.Start; dates <= vm.End; dates = dates.AddDays(1))
                            {
                                allDates.Add(dates);
                            }
                            foreach (var datetime in allDates)
                            {
                                if (datetime.DayOfWeek != DayOfWeek.Saturday && datetime.DayOfWeek != DayOfWeek.Sunday)
                                {
                                    datesForTimesheet.Add(datetime);
                                }
                            }
                            var date   = vm.Start;
                            var exists = _timeSheetRepository.Any(t => t.CreatedByUserId == userEmployee.Id && t.Date == date.Date);
                            if (!exists)
                            {
                                foreach (var timesheetdate in datesForTimesheet)
                                {
                                    var newTimeSheet = new TimeSheet
                                    {
                                        State           = TimeSheetState.PendingApproval,
                                        Title           = $"{userEmployee.Person.Name}'s {"TimeSheet for "}{timesheetdate.ToShortDateString()}",
                                        Date            = timesheetdate,
                                        TotalHours      = 8,
                                        Comments        = null,
                                        CreatedByUserId = userEmployee.Id
                                    };
                                    _timeSheetRepository.Create(newTimeSheet);

                                    var project = _projectRepository.GetBy(i => i.Title == "Leave");
                                    var newTimeSheetLineItem = new TimeSheetLineItem
                                    {
                                        TimeSheetId = newTimeSheet.Id,
                                        ProjectId   = project.Id,
                                        TaskId      = null,
                                        TaskSummary = "Leave",
                                        Effort      = 8,
                                        Comments    = null,
                                        WorkType    = 2
                                    };
                                    _timeSheetLineItemRepository.Create(newTimeSheetLineItem);
                                    _unitOfWork.Commit();

                                    // Log Activity
                                    var activity = new TimeSheetActivity
                                    {
                                        TimeSheetId     = newTimeSheet.Id,
                                        Title           = "Created",
                                        Comment         = $"{userEmployee.Person.Name} created the TimeSheet at {DateTime.UtcNow.ToString("G")} with state {newTimeSheet.State} & hours {newTimeSheet.TotalHours}",
                                        CreatedByUserId = userEmployee.Id
                                    };
                                    _timeSheetActivityRepository.Create(activity);
                                    _unitOfWork.Commit();
                                }
                            }
                        }

#if !DEBUG
                        // _emailComposerService.TestEmailSend(vm);
                        _emailComposerService.LeaveApplicationEmail(newLeave.Id);
                        //  _emailComposerService.TimeSheetSubmitted(newTimeSheet.Id);
#endif

                        return(Json(true));
                    }
                }
            }


            return(Json(false));
        }