예제 #1
0
 public List <Attendance> getUnExistItemList(List <Attendance> listID, int headerID)
 {
     if (listID.Count == 0)
     {
         return(new List <Attendance>());
     }
     else
     {
         using (var db = new DIEMDANHAPIEntities())
         {
             var listIDString = $"{listID[0].MaNhanVien}";
             for (int index = 1; index < listID.Count; index++)
             {
                 listIDString += $",{listID[index].MaNhanVien}";
             }
             string sqlQuery = "select MaNV from DiemDanh_NangSuatLaoDong " +
                               "where HeaderID = @headerID and MaNV in (@listMaNV)";
             try
             {
                 List <String> IDs          = db.Database.SqlQuery <String>(sqlQuery, new SqlParameter("headerID", headerID), new SqlParameter("listMaNV", listIDString)).ToList();
                 var           filterIDList = listID.Where(x => !IDs.Contains(x.MaNhanVien)).ToList();
                 return(filterIDList);
             }
             catch (Exception ex)
             {
                 throw ex;
             }
         }
     }
 }
예제 #2
0
 //
 public void Insert(List <DiemDanh_NangSuatLaoDong> listAttendance)
 {
     using (var db = new DIEMDANHAPIEntities())
     {
         try
         {
             db.DiemDanh_NangSuatLaoDong.AddRange(listAttendance);
             db.SaveChanges();
         }
         catch (Exception ex)
         {
             throw ex;
         }
     }
 }
예제 #3
0
 public void Insert(int headerID)
 {
     using (var db = new DIEMDANHAPIEntities())
     {
         Header_DiemDanh_NangSuat_LaoDong_Detail header_detail = new Header_DiemDanh_NangSuat_LaoDong_Detail();
         header_detail.HeaderID = headerID;
         try
         {
             db.Header_DiemDanh_NangSuat_LaoDong_Detail.Add(header_detail);
             db.SaveChanges();
         }
         catch (Exception ex)
         {
             throw ex;
         }
     }
 }
예제 #4
0
 //
 public int getHeader(DateTime date, int session, DateTime timefetching)
 {
     using (var db = new DIEMDANHAPIEntities())
     {
         try
         {
             string sqlQuery = @"select headerId from Header_DiemDanh_NangSuat_LaoDong where (NgayDiemDanh = @date and Ca = @session and FetchDataTime = @fetchDataTime)";
             var    headerID = db.Database.SqlQuery <int>(sqlQuery, new SqlParameter("date", date), new SqlParameter("session", session), new SqlParameter("fetchDataTime", timefetching)).FirstOrDefault();
             //
             return(headerID);
         }
         catch (Exception ex)
         {
             throw ex;
         }
     }
 }
예제 #5
0
        public void Insert(Result data)
        {
            Header_DiemDanh_NangSuat_LaoDong header = new Header_DiemDanh_NangSuat_LaoDong();

            header.NgayDiemDanh  = data.dateFetching;
            header.Ca            = data.Session;
            header.Status        = data.success;
            header.Message       = data.message;
            header.VERSION       = data.VERSION;
            header.FetchDataTime = data.actualTimeFetching;
            using (var db = new DIEMDANHAPIEntities())
            {
                try
                {
                    db.Header_DiemDanh_NangSuat_LaoDong.Add(header);
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
예제 #6
0
        // get the first successful fetch API
        public int getFirstSuccessfullyFetch(DateTime date, int session)
        {
            //string sqlPhongBanTieuChi = "select a.MaPhongBan,a.MaTieuChi,b.TenTieuChi from PhongBan_TieuChi a left join TieuChi b on a.MaTieuChi = b.MaTieuChi\n" +
            //                "where MaPhongBan = @maphongban and Thang = @thang and Nam = @nam";

            //list = db.Database.SqlQuery<TieuChiABC>(sqlPhongBanTieuChi, new SqlParameter("maphongban", departmentID),
            //    new SqlParameter("thang", month),
            //    new SqlParameter("nam", year)).ToList<TieuChiABC>();
            using (var db = new DIEMDANHAPIEntities())
            {
                string sqlQuery = @"select headerId from Header_DiemDanh_NangSuat_LaoDong 
                              where FetchDataTime = (Select Min(FetchDataTime) from Header_DiemDanh_NangSuat_LaoDong where NgayDiemDanh = @date and Ca = @session and (Status = 1 or isCreatedManually =1)) ";
                try
                {
                    var minHeaderIDNull   = db.Database.SqlQuery <int?>(sqlQuery, new SqlParameter("date", date), new SqlParameter("session", session)).FirstOrDefault();
                    int minHeaderIDResult = minHeaderIDNull.HasValue ? minHeaderIDNull.Value : -1;
                    return(minHeaderIDResult);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
예제 #7
0
        public async Task FetchAndUpdateDatabase(DateTime time)
        {
            using (DIEMDANHAPIEntities db = new DIEMDANHAPIEntities()) {
                using (var transaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        // IDENTIFY THE NEXT TIME POINT IF SUCCESSS
                        int timePoint = handler.getTimeLines(time);
                        // FETCH API
                        Result dataReceived = await handler.fetchData(time);

                        //
                        int headerIDMin = headerDAO.getFirstSuccessfullyFetch(dataReceived.dateFetching, dataReceived.Session);
                        //
                        headerDAO.Insert(dataReceived);
                        //
                        if (dataReceived.success)
                        {
                            int currenHeaderID = headerDAO.getHeader(dataReceived.dateFetching, dataReceived.Session, dataReceived.actualTimeFetching);
                            if (headerIDMin == -1)
                            {
                                headerIDMin = currenHeaderID;
                                headerDetailDAO.Insert(headerIDMin);
                            }
                            //
                            var listHaveNotAdded = attendanceDAO.getUnExistItemList(dataReceived.data, headerIDMin);
                            List <DiemDanh_NangSuatLaoDong> attendanceList = new List <DiemDanh_NangSuatLaoDong>();
                            foreach (var item in listHaveNotAdded)
                            {
                                DiemDanh_NangSuatLaoDong ddEntity = new DiemDanh_NangSuatLaoDong();
                                ddEntity.HeaderID            = headerIDMin;
                                ddEntity.MaNV                = item.MaNhanVien;
                                ddEntity.ActualHeaderFetched = currenHeaderID;
                                ddEntity.DiLam               = true;
                                ddEntity.isFilledFromAPI     = true;
                                ddEntity.isChangedManually   = false;
                                ddEntity.ThoiGianXuongLo     = item.startTime;
                                ddEntity.ThoiGianLenLo       = item.endTime;
                                attendanceList.Add(ddEntity);
                            }
                            attendanceDAO.Insert(attendanceList);
                            DateTime nextTimePoint;
                            if (timePoint == 5)
                            {
                                // next 2 AM morning
                                nextTimePoint = new DateTime(time.Year, time.Month, time.Day + 1, 2, 0, 0);
                            }
                            else
                            {
                                nextTimePoint = new DateTime(time.Year, time.Month, time.Day, handler.timelinesHours[timePoint], handler.timelinesMinutes[timePoint], 0);
                            }

                            timer.Interval = nextTimePoint.Subtract(time).Seconds;
                        }
                        else
                        {
                            // 10 minutes each until successfully fetch
                            timer.Interval = 10 * 1000 * 60;
                        }

                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        WriteToFile(ex.Message);
                        transaction.Rollback();
                    }
                }
            }
        }