Ejemplo n.º 1
0
 public AttendanceLogUpdate GetAttendanceLogInfo(AttendanceLogSearchResult model)
 {
     try
     {
         AttendanceLogSearchResult data = (from a in db.AttendanceLog.AsNoTracking()
                                           join e in db.Employee.AsNoTracking() on a.EmployeeId equals e.EmployeeId
                                           where a.AttendanceLogId.Equals(model.AttendanceLogId)
                                           select new AttendanceLogSearchResult()
         {
             AttendanceLogId = a.AttendanceLogId,
             EmployeeId = a.EmployeeId,
             EmployeeCode = e.Code,
             EmployeeName = e.Name,
             DepartmentId = e.DepartmentId
         }).FirstOrDefault();
         var listEmployee           = GetListEmployee(data.DepartmentId);
         AttendanceLogUpdate result = new AttendanceLogUpdate()
         {
             ListEmployee             = listEmployee,
             AtendanceLogSearchResult = data
         };
         return(result);
     }
     catch (Exception ex)
     {
         throw new ErrorException(ErrorMessage.ERR001, ex.InnerException);
     }
 }
Ejemplo n.º 2
0
        public HttpResponseMessage GetAttendanceLogInfo(AttendanceLogSearchResult model)
        {
            try
            {
                var result = attendanceLogBusiness.GetAttendanceLogInfo(model);

                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Ejemplo n.º 3
0
        private void UpdateTimeAttendanceLog(List <DateTime> listDate, AttendanceLogSearchResult attendanceLogNeedUpdateModel, string employeeId, string timeIn, string timeOut)
        {
            //listDate: list date trong bảng AttendanceLog của đối tượng sẽ chuyển đến
            if (listDate[0] > attendanceLogNeedUpdateModel.Date) //Nếu date cần cập nhật nhỏ hơn < min date của đối tượng chuyển đến thì timeIn = date này
            {
                var timeAttendanceLog = db.TimeAttendanceLog.FirstOrDefault(u => u.Date.Day.Equals(attendanceLogNeedUpdateModel.Date.Day) && u.EmployeeId.Equals(employeeId));
                //cập nhật thời gian vào trong timeAttendanceLog = thời gian của attendanceLog
                timeAttendanceLog.TimeIn = attendanceLogNeedUpdateModel.Date;
                timeAttendanceLog.Total  = TimeSpanCalculate((DateTime)timeAttendanceLog.TimeIn, (DateTime)timeAttendanceLog.TimeOut);

                //timeBegin: thời gian băt đầu vào gồm cả ngày tháng, timeIn: thời gian bắt đầu vào chỉ có giờ (8:30)
                var timeBegin = DateTime.Parse(attendanceLogNeedUpdateModel.Date.ToShortDateString() + " " + timeIn);

                if (timeBegin > attendanceLogNeedUpdateModel.Date)
                {
                    timeAttendanceLog.LateMinutes = 0;
                }
                else
                {
                    timeAttendanceLog.LateMinutes = TimeSpanCalculate(timeBegin, attendanceLogNeedUpdateModel.Date);
                }
            }

            if (listDate[listDate.Count - 1] < attendanceLogNeedUpdateModel.Date)
            {
                var timeAttendanceLog = db.TimeAttendanceLog.FirstOrDefault(u => u.Date.Day.Equals(attendanceLogNeedUpdateModel.Date.Day) && u.EmployeeId.Equals(employeeId));

                timeAttendanceLog.TimeOut = attendanceLogNeedUpdateModel.Date;
                timeAttendanceLog.Total   = TimeSpanCalculate((DateTime)timeAttendanceLog.TimeIn, (DateTime)timeAttendanceLog.TimeOut);

                //timeOut: Giờ quy định ra(18:00)
                var timeEnd = DateTime.Parse(attendanceLogNeedUpdateModel.Date.ToShortDateString() + " " + timeOut);
                if (timeEnd < attendanceLogNeedUpdateModel.Date)
                {
                    timeAttendanceLog.EarlyMinutes = 0;
                }
                else
                {
                    timeAttendanceLog.EarlyMinutes = TimeSpanCalculate(attendanceLogNeedUpdateModel.Date, timeEnd);
                }
            }
        }
Ejemplo n.º 4
0
        private void AddTimeAttendanceLog(AttendanceLogSearchResult attendanceLogNeedUpdateModel, string employeeId, string TimeIn, string TimeOut)
        {
            TimeAttendanceLog add = new TimeAttendanceLog();

            add.TimeAttendanceLogId = Guid.NewGuid().ToString();
            add.Date       = DateTime.Parse(attendanceLogNeedUpdateModel.Date.ToShortDateString());
            add.EmployeeId = employeeId;
            add.ImageIn    = attendanceLogNeedUpdateModel.ImageLink;
            add.TimeIn     = attendanceLogNeedUpdateModel.Date;
            add.TimeOut    = attendanceLogNeedUpdateModel.Date;
            add.Total      = 0;
            add.ImageOut   = attendanceLogNeedUpdateModel.ImageLink;

            var timeBegin = DateTime.Parse(attendanceLogNeedUpdateModel.Date.ToShortDateString() + " " + TimeIn); //giờ quy định vào(8:30)

            if (timeBegin > attendanceLogNeedUpdateModel.Date)
            {
                add.LateMinutes = 0;
            }
            else
            {
                add.LateMinutes = TimeSpanCalculate(timeBegin, attendanceLogNeedUpdateModel.Date);
            }

            var timeEnd = DateTime.Parse(attendanceLogNeedUpdateModel.Date.ToShortDateString() + " " + TimeOut); // Giờ quy định ra(18:00)

            if (timeEnd < attendanceLogNeedUpdateModel.Date)
            {
                add.EarlyMinutes = 0;
            }
            else
            {
                add.EarlyMinutes = TimeSpanCalculate(attendanceLogNeedUpdateModel.Date, timeEnd);
            }
            db.TimeAttendanceLog.Add(add);
        }
Ejemplo n.º 5
0
        public int UpdateAttendanceLog(AttendanceLogSearchResult model)
        {
            var timeIn  = db.SystemParam.Where(r => r.ParamName.Equals(Constants.ConfigTimeIn)).FirstOrDefault().ParamValue;
            var timeOut = db.SystemParam.Where(r => r.ParamName.Equals(Constants.ConfigTimeOut)).FirstOrDefault().ParamValue;

            using (var trans = db.Database.BeginTransaction())
            {
                List <DateTime> listDate            = new List <DateTime>();
                List <DateTime> listDateOldEmployee = new List <DateTime>();

                try
                {
                    var attendanceLogNeedUpdate = db.AttendanceLog.FirstOrDefault(u => u.AttendanceLogId.Equals(model.AttendanceLogId));
                    AttendanceLogSearchResult attendanceLogNeedUpdateModel = new AttendanceLogSearchResult()
                    {
                        AttendanceLogId = attendanceLogNeedUpdate.AttendanceLogId,
                        CameraIPAddress = attendanceLogNeedUpdate.CameraIPAdress,
                        ClientIPAddress = attendanceLogNeedUpdate.ClientIPAddress,
                        Confidence      = attendanceLogNeedUpdate.Confidence,
                        ImageLink       = attendanceLogNeedUpdate.ImageLink,
                        EmployeeId      = attendanceLogNeedUpdate.EmployeeId,
                        Date            = (DateTime)attendanceLogNeedUpdate.Date
                    };

                    if (attendanceLogNeedUpdate != null)
                    {
                        //Update cho nhân viên mới
                        listDate = (from a in db.AttendanceLog.AsNoTracking()
                                    where a.EmployeeId.Equals(model.EmployeeId) &&
                                    attendanceLogNeedUpdate.Date.Value.Day.Equals(a.Date.Value.Day)
                                    select a.Date.Value).ToList();

                        if (listDate.Count > 0)
                        {
                            listDate.Sort();
                            var listTimeAttendanceLog = db.TimeAttendanceLog.Where(r => r.EmployeeId.Equals(model.EmployeeId) && r.Date.Day.Equals(attendanceLogNeedUpdate.Date.Value.Day)).ToList();

                            //Thêm mới bảng TimeAttendanceLog khi nhân viên này chưa có bản ghi nào trong TimeAttendanceLog
                            if (listTimeAttendanceLog.Count() == 0)
                            {
                                AddTimeAttendanceLog(attendanceLogNeedUpdateModel, model.EmployeeId, timeIn, timeOut);
                                attendanceLogNeedUpdate.EmployeeId = model.EmployeeId;
                            }
                            else
                            {
                                //Update bảng TimeAttendanceLog khi đã có bản ghi trong đó
                                UpdateTimeAttendanceLog(listDate, attendanceLogNeedUpdateModel, model.EmployeeId, timeIn, timeOut);
                                attendanceLogNeedUpdate.EmployeeId = model.EmployeeId;
                            }
                        }
                        else
                        {
                            AddTimeAttendanceLog(attendanceLogNeedUpdateModel, model.EmployeeId, timeIn, timeOut);
                            attendanceLogNeedUpdate.EmployeeId = model.EmployeeId;
                        }

                        //Update cho nhân viên cũ sau khi chuyển đổi
                        listDateOldEmployee = (from a in db.AttendanceLog.AsNoTracking()
                                               where a.EmployeeId.Equals(model.EmployeeOldId) &&
                                               attendanceLogNeedUpdate.Date.Value.Day.Equals(a.Date.Value.Day)
                                               select a.Date.Value).ToList();

                        var timeBegin = DateTime.Parse(((DateTime)attendanceLogNeedUpdateModel.Date).ToShortDateString() + " " + timeIn);  //giờ quy định vào(8:30)
                        var timeEnd   = DateTime.Parse(((DateTime)attendanceLogNeedUpdateModel.Date).ToShortDateString() + " " + timeOut); // Giờ quy định ra(18:00)

                        if (listDateOldEmployee.Count == 1)
                        {
                            //Xóa bản ghi của nhân viên cũ bên bảng TimeAttendanceLog
                            var oldEmployee = db.TimeAttendanceLog.FirstOrDefault(r => r.EmployeeId.Equals(model.EmployeeOldId) && r.Date.Day.Equals(attendanceLogNeedUpdateModel.Date.Day));
                            db.TimeAttendanceLog.Remove(oldEmployee);
                        }
                        else if (listDateOldEmployee.Count == 2)
                        {
                            //Xóa giá trị date trong list sẽ bị chuyển đổi cho nhân vien khác
                            listDateOldEmployee.Remove(attendanceLogNeedUpdateModel.Date);

                            var oldEmployee = db.TimeAttendanceLog.FirstOrDefault(r => r.EmployeeId.Equals(model.EmployeeOldId) && r.Date.Day.Equals(attendanceLogNeedUpdateModel.Date.Day));
                            oldEmployee.TimeIn  = listDateOldEmployee[0];
                            oldEmployee.TimeOut = listDateOldEmployee[0];
                            oldEmployee.Total   = 0;
                            if (timeBegin > oldEmployee.TimeIn)
                            {
                                oldEmployee.LateMinutes = 0;
                            }
                            else
                            {
                                oldEmployee.LateMinutes = TimeSpanCalculate(timeBegin, (DateTime)oldEmployee.TimeIn);
                            }

                            if (timeEnd < oldEmployee.TimeOut)
                            {
                                oldEmployee.EarlyMinutes = 0;
                            }
                            else
                            {
                                oldEmployee.EarlyMinutes = TimeSpanCalculate((DateTime)oldEmployee.TimeOut, timeEnd);
                            }
                        }
                        else
                        {
                            //Xóa giá trị date trong list sẽ bị chuyển đổi cho nhân vien khác
                            listDateOldEmployee.Remove(attendanceLogNeedUpdateModel.Date);

                            listDateOldEmployee.Sort();
                            var oldEmployee = db.TimeAttendanceLog.FirstOrDefault(r => r.EmployeeId.Equals(model.EmployeeOldId) && r.Date.Day.Equals(attendanceLogNeedUpdateModel.Date.Day));
                            oldEmployee.TimeIn  = listDateOldEmployee[0];
                            oldEmployee.TimeOut = listDateOldEmployee[listDateOldEmployee.Count - 1];

                            oldEmployee.Total = TimeSpanCalculate((DateTime)oldEmployee.TimeIn, (DateTime)oldEmployee.TimeOut);

                            if (timeBegin > oldEmployee.TimeIn)
                            {
                                oldEmployee.LateMinutes = 0;
                            }
                            else
                            {
                                oldEmployee.LateMinutes = TimeSpanCalculate(timeBegin, (DateTime)oldEmployee.TimeIn);
                            }

                            if (timeEnd < oldEmployee.TimeOut)
                            {
                                oldEmployee.EarlyMinutes = 0;
                            }
                            else
                            {
                                oldEmployee.EarlyMinutes = TimeSpanCalculate((DateTime)oldEmployee.TimeOut, timeEnd);
                            }
                        }

                        trans.Commit();
                        db.SaveChanges();
                    }
                    else
                    {
                        return(Constants.NOT_FOUND);
                    }

                    return(Constants.OK);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new ErrorException(ErrorMessage.ERR001, ex.InnerException);
                }
            }
        }