public IActionResult ClockIn()
        {
            var     user      = _userManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult();
            var     timeSheet = FindUserTimeSheet(user.Id);
            ClockIn clockIn   = null;

            if (_context.ClockIns.Any(x => x.ClockOutTime == null && x.TimeSheetId == timeSheet.Id))
            {
                clockIn = _context.ClockIns.Last(x => x.ClockOutTime == null && x.TimeSheetId == timeSheet.Id);
            }

            bool clockedIn = false;

            if (clockIn != null)
            {
                clockedIn = true;
            }

            var viewModel = new ClockInViewModel {
                UserName   = user.FirstName + " " + user.LastName,
                OnClock    = clockedIn,
                EmployeeId = user.Id
            };

            return(View(viewModel));
        }
        public IActionResult ClockIn(bool In, ClockInViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.OnClock && In)
                {
                    ViewData["Info"] = "Currently Clocked In, clock out";
                    return(View(model));
                }

                if (!model.OnClock && In)
                {
                    var clockIn = new ClockIn
                    {
                        ClockInTime = DateTime.Now,
                        TimeSheetId = model.TimeSheetId
                    };
                    _context.ClockIns.Add(clockIn);
                    _context.SaveChanges();
                    return(RedirectToAction("Index", new { In = true, Time = clockIn.ClockInTime }));
                }
                if (model.OnClock && !In)
                {
                    var clockIn = _context.ClockIns.Last(x => x.TimeSheetId == model.TimeSheetId && x.ClockOutTime == null);
                    clockIn.ClockOutTime = DateTime.Now;
                    _context.ClockIns.Update(clockIn);
                    _context.SaveChanges();

                    return(RedirectToAction("Index", new { In = false, Time = clockIn.ClockOutTime }));
                }
            }
            return(View(model));
        }
Exemple #3
0
        public ClockInViewModel DeleteClockIn(string id)
        {
            var _unitOfWork = new UnitOfWork();
            var query       = _unitOfWork.AccountRepository.FirstOrDefault(x => x.gordon_id == id);

            if (query == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The account was not found."
                      };
            }

            var idParam = new SqlParameter("@ID_Num", id);

            var result = RawSqlQuery <ClockInViewModel> .query("DELETE_CLOCK_IN @ID_NUM", idParam); //run stored procedure


            if (result == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The data was not found."
                      };
            }



            ClockInViewModel y = new ClockInViewModel();

            return(y);
        }
Exemple #4
0
        public ClockInViewModel ClockIn(bool state, string id)
        {
            var _unitOfWork = new UnitOfWork();
            var query       = _unitOfWork.AccountRepository.FirstOrDefault(x => x.gordon_id == id);

            if (query == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The account was not found."
                      };
            }

            var idParam    = new SqlParameter("@ID_Num", id);
            var stateParam = new SqlParameter("@CurrentState", state);

            var result = RawSqlQuery <ClockInViewModel> .query("INSERT_TIMESHEETS_CLOCK_IN_OUT @ID_Num, @CurrentState", idParam, stateParam); //run stored procedure

            if (result == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The data was not found."
                      };
            }

            var currentState = state;

            ClockInViewModel y = new ClockInViewModel()
            {
                currentState = currentState
            };

            return(y);
        }
Exemple #5
0
        public IActionResult ClockIn()
        {
            if (User.IsInRole("Administrator") || User.IsInRole("Payroll"))
            {
                return(RedirectToAction("Index", "Home"));
            }

            var     user      = _userManager.FindByNameAsync(User.Identity.Name).GetAwaiter().GetResult();
            var     timeSheet = FindTimeSheet(user.Id);
            ClockIn clockIn   = null;

            if (_context.ClockIns.Any(x => x.TimeSheetId == timeSheet.Id))
            {
                if (_context.ClockIns.Any(x => x.TimeSheetId == timeSheet.Id && x.ClockOutTime == null))
                {
                    clockIn = _context.ClockIns.Last(x => x.TimeSheetId == timeSheet.Id && x.ClockOutTime == null);
                }
            }

            bool clockedIn = clockIn != null;

            var viewModel = new ClockInViewModel
            {
                UserId             = user.Id,
                UserName           = user.FirstName + " " + user.LastName,
                TimeSheetId        = timeSheet.Id,
                CurrentlyClockedIn = clockedIn
            };

            ViewBag.Info = "Hello World";

            return(View(viewModel));
        }
        public async void ClockOutTests()
        {
            var c = new ClockController();


            var loginViewModel = new ClockInViewModel
            {
                token = "TdqvLaLw76Sky/m0KAC7Fjj4B9HVVBqDA1RoAhgoWyg=",
            };

            var res = await c.ClockIn(loginViewModel);

            Xunit.Assert.True(res.success);


            var res2 = await c.ClockIn(loginViewModel);

            Xunit.Assert.False(res2.success);
        }
Exemple #7
0
        public IEnumerable <ClockInViewModel> ClockOut(string id)
        {
            var _unitOfWork = new UnitOfWork();
            var query       = _unitOfWork.AccountRepository.FirstOrDefault(x => x.gordon_id == id);

            if (query == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The account was not found."
                      };
            }

            var idParam = new SqlParameter("@ID_Num", id);

            var result = RawSqlQuery <ClockInViewModel> .query("GET_TIMESHEETS_CLOCK_IN_OUT @ID_NUM", idParam); //run stored procedure


            if (result == null)
            {
                throw new ResourceNotFoundException()
                      {
                          ExceptionMessage = "The data was not found."
                      };
            }


            var clockOutModel = result.Select(x =>
            {
                ClockInViewModel y = new ClockInViewModel();

                y.currentState = x.currentState;

                y.timestamp = x.timestamp;


                return(y);
            });



            return(clockOutModel);
        }
Exemple #8
0
        private void ValidateClocks(List <UserClockTypeViewModel> clocktypes
                                    , ClockInViewModel vm, WorkplacePersonnel workplacePersonnel, EngineContext db)
        {
            foreach (var clocktype in clocktypes)
            {
                switch (clocktype.type)
                {
                case ClockType.Wifi:
                    if (vm.scanResults != null && vm.scanResults.Count == 0)
                    {
                        throw new Exception("هیچ دستگاه wifi ای شناسایی نشد");
                    }
                    DetectWifiDevice(workplacePersonnel.Workplace, vm.scanResults);

                    break;

                case ClockType.CameraSelfie:
                    if (vm.bitmapdata != null && vm.bitmapdata.Length == 0)
                    {
                        throw new Exception("هیچ تصویری دریافت نگردید");
                    }
                    break;

                case ClockType.GPS:
                    if (vm.location == null)
                    {
                        throw new Exception("اطلاعات gps خالی است");
                    }
                    IsInsideGPSArea(workplacePersonnel.Workplace, vm.location);
                    break;

                case ClockType.QRCode:
                    if (vm.qRCodeContent == null)
                    {
                        throw new Exception("اطلاعات QRCode خالی است");
                    }

                    CompareQRCode(workplacePersonnel, vm.qRCodeContent);
                    break;
                }
            }
        }
        public async void ClockInTests()
        {
            var c = new ClockController();

            InitWorkplaceAndPersonnel();


            var loginViewModel = new ClockInViewModel
            {
                scanResults = new List <ScanResult>
                {
                    new ScanResult
                    {
                        hessid   = 61,
                        wifiSsid = "anjir_1875",
                        SSID     = "ssvd",
                        BSSID    = "sscm5"
                    },
                },
                qRCodeContent = "vlkwlkrnf;sjdsfd",
                location      = new List <MyLocation>
                {
                    new MyLocation
                    {
                        latitude  = 51.1651,
                        longitude = 35.651651,
                        speed     = 515156,
                    }
                },
                bitmapdata = new long[5],
                token      = "TdqvLaLw76Sky/m0KAC7Fjj4B9HVVBqDA1RoAhgoWyg=",
            };

            var res = await c.ClockIn(loginViewModel);

            Xunit.Assert.True(res.success);
        }
Exemple #10
0
        public ActionResult Clock(ClockInViewModel viewModel)
        {
            try
            {
                ViewBag.ClockInResult = false;

                var emp = db.Employees.SearchByCardNumberOrId(viewModel.Credentials);

                if (emp.Disabled)
                {
                    ViewBag.ClockMessage = "This isn't an active employee.";
                    return(View());
                }

                var empId = emp.EmployeeId;

                var tc = new TimeClock(db);

                if (tc.ClockInOrOut(empId))
                {
                    ViewBag.ClockMessage  = "Welcome, " + emp.FirstName + "! You have clocked in.";
                    ViewBag.ClockInResult = true;
                }
                else
                {
                    ViewBag.ClockMessage = "You have clocked out, " + emp.FirstName + ". Have a nice day!";
                }
            } catch (NullReferenceException)
            {
                ViewBag.ClockMessage = "There's no one assigned to that number.";
            } catch (Exception)
            {
                ViewBag.ClockMessage = "Something happened! 8(";
            }

            return(View());
        }
 public IActionResult ClockBack(ClockInViewModel model)
 {
     using (_dbContext)
     {
         var    response = ResponseModelFactory.CreateInstance;
         string today    = DateTime.Now.ToString("yyyy-MM-dd");
         //var worktime = _dbContext.WorkTime.FirstOrDefault();
         //if (worktime == null)
         //{
         //    response.SetFailed("未获取到上下班时间,请通知管理员设置。");
         //    return Ok(response);
         //}
         var query = _dbContext.Attendance.FirstOrDefault(x => x.SystemUserUuid == model.UserUUID && x.ColckDate == today);
         if (query == null)
         {
             response.SetFailed("当前人员信息不存在,打卡失败。");
             return(Ok(response));
         }
         else
         {
             if (model.TimeState == "am")
             {
                 if (string.IsNullOrEmpty(query.AmstartTime))
                 {
                     response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                     return(Ok(response));
                 }
                 else
                 {
                     if (string.IsNullOrEmpty(query.AmendTime))
                     {
                         if (!string.IsNullOrEmpty(model.AmendTime))
                         {
                             query.AmendTime  = model.AmendTime;
                             query.AmendPlace = model.AmendPlace;
                             query.EndState   = 1;
                             //if (Convert.ToDateTime(model.AmendTime) > Convert.ToDateTime(worktime.EndTime))
                             //{
                             //    query.EndState = 1;
                             //}
                             //else
                             //{
                             //    query.EndState = 2;
                             //}
                         }
                         else
                         {
                             response.SetFailed("未获取到下班打卡时间,请重新打卡。");
                             return(Ok(response));
                         }
                     }
                     else
                     {
                         response.SetFailed("下班已打卡,无需重复打卡。");
                         return(Ok(response));
                     }
                     _dbContext.SaveChanges();
                 }
             }
             else
             {
                 if (string.IsNullOrEmpty(query.PmstartTime))
                 {
                     response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                     return(Ok(response));
                 }
                 else
                 {
                     if (string.IsNullOrEmpty(query.PmendTime))
                     {
                         if (!string.IsNullOrEmpty(model.PmendTime))
                         {
                             query.PmendTime  = model.PmendTime;
                             query.PmendPlace = model.PmendPlace;
                             query.EndState   = 1;
                             //if (Convert.ToDateTime(model.PmendTime) > Convert.ToDateTime(worktime.EndTime))
                             //{
                             //    query.EndState = 1;
                             //}
                             //else
                             //{
                             //    query.EndState = 2;
                             //}
                         }
                         else
                         {
                             response.SetFailed("未获取到下班打卡时间,请重新打卡。");
                             return(Ok(response));
                         }
                     }
                     else
                     {
                         response.SetFailed("下班已打卡,无需重复打卡。");
                         return(Ok(response));
                     }
                     _dbContext.SaveChanges();
                 }
             }
         }
         response.SetSuccess("打卡成功");
         response.SetData(query);
         return(Ok(response));
     }
 }
 public IActionResult ClockIn(ClockInViewModel model)
 {
     using (_dbContext)
     {
         var    response = ResponseModelFactory.CreateInstance;
         string today    = DateTime.Now.ToString("yyyy-MM-dd");
         //var worktime = _dbContext.WorkTime.FirstOrDefault();
         //if (worktime == null)
         //{
         //    response.SetFailed("未获取到上下班时间,请通知管理员设置。");
         //    return Ok(response);
         //}
         var query = _dbContext.Attendance.FirstOrDefault(x => x.SystemUserUuid == model.UserUUID && x.ColckDate == today);
         if (query == null)
         {
             var entity = new Attendance();
             entity.AttendanceUuid  = Guid.NewGuid();
             entity.SystemUserUuid  = model.UserUUID;
             entity.ColckDate       = today;
             entity.StartState      = 0;
             entity.EndState        = 0;
             entity.Type            = model.Type;
             entity.Name            = model.UserName;
             entity.GarbageRoomUuid = model.GarbageRoomUuid;
             //上午
             if (DateTime.Now.Hour < 12)
             {
                 if (!string.IsNullOrEmpty(model.AmstartTime))
                 {
                     entity.AmstartTime  = model.AmstartTime;
                     entity.AmstartPlace = model.AmstartPlace;
                     entity.StartState   = 1;
                     //if (Convert.ToDateTime(model.AmstartTime) < Convert.ToDateTime(worktime.StartTime))
                     //{
                     //    entity.StartState = 1;
                     //}
                     //else
                     //{
                     //    entity.StartState = 2;
                     //}
                 }
                 else
                 {
                     response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                     return(Ok(response));
                 }
             }
             //下午
             else
             {
                 if (!string.IsNullOrEmpty(model.PmstartTime))
                 {
                     entity.PmstartTime  = model.PmstartTime;
                     entity.PmstartPlace = model.PmstartPlace;
                     entity.StartState   = 1;
                     //if (Convert.ToDateTime(model.PmstartTime) < Convert.ToDateTime(worktime.StartTime))
                     //{
                     //    entity.StartState = 1;
                     //}
                     //else
                     //{
                     //    entity.StartState = 2;
                     //}
                 }
                 else
                 {
                     response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                     return(Ok(response));
                 }
             }
             _dbContext.Attendance.Add(entity);
             _dbContext.SaveChanges();
         }
         else
         {
             //上午
             if (DateTime.Now.Hour < 12)
             {
                 if (string.IsNullOrEmpty(query.AmstartTime))
                 {
                     if (!string.IsNullOrEmpty(model.AmstartTime))
                     {
                         query.StartState = 1;
                         //if (Convert.ToDateTime(model.AmstartTime) < Convert.ToDateTime(worktime.StartTime))
                         //{
                         //    query.StartState = 1;
                         //}
                         //else
                         //{
                         //    query.StartState = 2;
                         //}
                         query.AmstartTime  = model.AmstartTime;
                         query.AmstartPlace = model.AmstartPlace;
                     }
                     else
                     {
                         response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                         return(Ok(response));
                     }
                 }
                 else
                 {
                     response.SetFailed("上班已打卡,无需重复打卡。");
                     return(Ok(response));
                 }
             }
             //下午
             else
             {
                 if (string.IsNullOrEmpty(query.PmstartTime))
                 {
                     if (!string.IsNullOrEmpty(model.PmstartTime))
                     {
                         query.StartState = 1;
                         //if (Convert.ToDateTime(model.PmstartTime) < Convert.ToDateTime(worktime.StartTime))
                         //{
                         //    query.StartState = 1;
                         //}
                         //else
                         //{
                         //    query.StartState = 2;
                         //}
                         query.PmstartTime  = model.PmstartTime;
                         query.PmstartPlace = model.PmstartPlace;
                     }
                     else
                     {
                         response.SetFailed("未获取到上班打卡时间,请重新打卡。");
                         return(Ok(response));
                     }
                 }
                 else
                 {
                     response.SetFailed("上班已打卡,无需重复打卡。");
                     return(Ok(response));
                 }
             }
             _dbContext.SaveChanges();
         }
         response.SetSuccess("打卡成功");
         response.SetData(query);
         return(Ok(response));
     }
 }
Exemple #13
0
        public async Task <ClockInViewModelResult> ClockIn(ClockInViewModel vm)
        {
            try
            {
                using (var db = new EngineContext())
                {
                    string username = SecurityService.GetUsernameFromToken(vm.token);


                    //یافتن پرسنل
                    var workplacePersonnel = db.WorkplacePersonnels.FirstOrDefault(p => p.Username == username);
                    if (workplacePersonnel == null)
                    {
                        throw new Exception("کاربر یافت نشد");
                    }


                    // کلاک ورود
                    // آیا قبلا وارد شده است
                    var biometricDate =
                        db.BiometricDatas.FirstOrDefault(b =>
                                                         b.WorkplacePersonnelId == workplacePersonnel.Id &&
                                                         b.Date.Year == DateTime.Now.Year &&
                                                         b.Date.Month == DateTime.Now.Month &&
                                                         b.Date.Day == DateTime.Now.Day
                                                         );

                    if (biometricDate == null)
                    {
                        biometricDate = db.BiometricDatas.Create();
                    }

                    var lastBiometricDateTime =
                        biometricDate.BiometricDataTimes.OrderBy(d => d.InsertDateTime).LastOrDefault();


                    string clocktypestr = "وارد";
                    if (lastBiometricDateTime == null ||
                        (lastBiometricDateTime.TimeIn.HasValue && lastBiometricDateTime.TimeOut.HasValue))
                    {
                        var clocktypes = workplacePersonnel.Workplace.UserClockTypes;

                        // ولیدیشن نوع کلاک ها
                        ValidateClocks(clocktypes, vm, workplacePersonnel, db);

                        // هیچ کلاکی نزده است
                        lastBiometricDateTime        = db.BiometricDataTimes.Create();
                        lastBiometricDateTime.TimeIn = DateTime.Now;
                        lastBiometricDateTime.ClockInViewModels.Add(vm);


                        //ذخیره
                        biometricDate.BiometricDataTimes.Add(lastBiometricDateTime);
                        workplacePersonnel.BiometricDatas.Add(biometricDate);

                        db.Entry(workplacePersonnel).State = EntityState.Modified;


                        await db.SaveChangesAsync();
                    }
                    else
                    {
                        // throw new Exception("شما قبلا ساعت ورود زده اید");

                        if (lastBiometricDateTime.TimeOut.HasValue)
                        {
                            throw new Exception("شما قبلا ساعت خروج زده اید");
                        }

                        // هیچ کلاکی نزده است
                        lastBiometricDateTime.TimeOut = DateTime.Now;

                        //ذخیره

                        db.Entry(lastBiometricDateTime).State = EntityState.Modified;
                        clocktypestr = "خارج";
                        await db.SaveChangesAsync();
                    }


                    var hour = EngineUtility.ConvertTimeSpanToStr(lastBiometricDateTime.TimeIn.Value.TimeOfDay);
                    return(await Task.FromResult(new ClockInViewModelResult
                    {
                        success = true,
                        message = $@" {clocktypestr } در {hour} "
                    }));
                }
            }
            catch (Exception e)
            {
                return(await Task.FromResult(new ClockInViewModelResult
                {
                    success = false,
                    message = e.Message
                }));

                throw;
            }
        }