示例#1
0
        public void ArrayRowsToDSChamCongTay(DataRow[] arrRow)
        {
            if (arrRow.Length == 0)
            {
                return;
            }
            object[,] ds = new object[arrRow.Length, 4];
            int i1 = 0, i2 = 0;

            foreach (DataRow row in arrRow)
            {
                ds[i2, 0] = row["UserEnrollNumber"];
                ds[i2, 1] = row["Ngay"];
                ds[i2, 2] = row["Cong"];
                ds[i2, 3] = row["PhuCap"];
                i2++;
            }
            for (i1 = 0; i1 < DSNgayCong.Count; i1++)
            {
                cNgayCong ngayCong = DSNgayCong[i1];
                if ((DateTime)ds[i2, 1] == ngayCong.NgayCong)
                {
                    ngayCong.TongCong   += (Single)ds[i2, 2];
                    ngayCong.TongPhuCap += (Single)ds[i2, 3];
                    i2++;
                    if (i2 >= arrRow.Length)
                    {
                        break;
                    }
                }
            }
        }
示例#2
0
        public void ArrayRowsToDSVang(DataRow[] arrRow)
        {
            if (arrRow.Length == 0)
            {
                return;
            }
            List <cLoaiVang> dsvang = new List <cLoaiVang>();

            foreach (DataRow row in arrRow)
            {
                int       iuen         = (int)row["UserEnrollNumber"];
                DateTime  TimeDate     = (DateTime)row["TimeDate"];
                string    absentCode   = (string)row["AbsentCode"];
                string    absentsymbol = (string)row["AbsentSymbol"];
                string    absentDesc   = (string)row["AbsentDescription"];
                Single    wkdayy       = (Single)row["Workingday"];
                Single    wktime       = (Single)row["WorkingTime"];
                cLoaiVang loaiVang     = new cLoaiVang()
                {
                    KyHieu = absentsymbol, Cong = wkdayy, MaLV = absentCode, MoTa = absentDesc, Ngay = TimeDate
                };
                // xác định ngày vắng, nếu ko tìm thấy thì continue, nếu tìm thấy thì add
                cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong == loaiVang.Ngay);
                if (ngayCong == null)
                {
                    continue;                                  // ko tìm thấy
                }
                // tìm thấy: add
                if (ngayCong.DSVang == null)
                {
                    ngayCong.DSVang = new List <cLoaiVang>();
                }
                ngayCong.DSVang.Add(loaiVang);
            }
        }
示例#3
0
 public void ArrayRowsToDSLamViecNgayNghi(DataRow[] arrRow_DSLamViecNgayNghi)
 {
     if (arrRow_DSLamViecNgayNghi.Length == 0)
     {
         return;
     }
     foreach (DataRow row in arrRow_DSLamViecNgayNghi)
     {
         DateTime  ngaynghi = (DateTime)row["Ngay"];
         Single    PCThem   = (Single)row["PCThem"];
         Single    PCDem    = (Single)row["PCDem"];
         cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong.Date == ngaynghi);
         ngayCong.PhuCap50   = ngayCong.TongCong * PCThem + ngayCong.PhuCap30 * PCDem;
         ngayCong.TongPhuCap = ngayCong.PhuCap30 + ngayCong.PhuCap50;
     }
 }
示例#4
0
 internal void KBNgayLe(DataTable tableNgayLe)
 {
     // duyệt từng ngày lễ nếu có, 1. thêm vào danh sách loại vắng  2. tính công nếu trưởng phó thì ko tính pc lễ, 3. nếu  bộ phận khác thì tính double
     foreach (DataRow row in tableNgayLe.Rows)
     {
         DateTime ngayle = (DateTime)row["HDate"];
         string   mota   = row["Holiday"].ToString();
         // xác định ngày công nào là ngày lễ
         cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong.Date == ngayle);
         //thêm vào danh sách vắng
         if (ngayCong.DSVang == null)
         {
             ngayCong.DSVang = new List <cLoaiVang>();
         }
         cLoaiVang loaiVang = new cLoaiVang {
             Cong = 1f, KyHieu = "L", MaLV = "L", MoTa = mota, Ngay = ngayle
         };
         ngayCong.DSVang.Add(loaiVang);
     }
 }
        public List <cNgayCong> TinhCongTheoNgay(List <cChkInOut> pDSVaoRa, DateTime ngayBD, DateTime ngayKT, int UserEnrollNumber)
        {
            log.Debug("UserEnrollNumber " + UserEnrollNumber);
            List <cNgayCong> kq = new List <cNgayCong>();
            DateTime         ngaydem;

            if (pDSVaoRa.Count == 0)
            {
                ngaydem = ngayBD.Date;
                while (ngaydem <= ngayKT)   // <= vì lấy luôn ngày KT : vắng mặt
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1.0d);
                }
                return(kq);
            }

            int vtriBD = 0;

            ngaydem = ngayBD.Date;

            while (ngaydem <= ngayKT.Date)
            {
                if (vtriBD >= pDSVaoRa.Count)   // hết DS nhưng ngaydem <= ngày KT ==> ghi lại những ngày sau là vắng mặt
                {
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1d);
                    }
                    continue;
                }

                // chưa hết DS, bắt đầu từ ngày của DSVaoRa tại vtbd, đó là ngày có mặt
                cChkInOut CIO = pDSVaoRa[vtriBD];
                XL.TinhCongTheoCa(CIO, CIO.ThuocCa);
                DateTime ngayCoMat = CIO.ThuocNgayCong;

                // ghi lại những ngày vắng mặt trước ngày có mặt
                while (ngaydem < ngayCoMat)   // ko có = vì chỉ chạy đến trước ngày của tmpVaoRa thôi
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1.0d);
                }
                //ngaydem = ngày có mặt. stop, tmpVaoRa là vào ra đầu tiên trong ngày
                #region collapse
                cNgayCong ngayCOcheck = new cNgayCong()
                {
                    HasCheck   = true, NgayCong = ngayCoMat, TinhPC150 = true, TinhPC200 = false,// mặc định khởi tạo ngày có tính PC 50%, nếu tồn tại ít nhất 1 ca nào ko tính pc 50% thì set cả ngày ko tính pc 50%
                    TongGioLam = CIO.TGLamTinhCong, TongGioLamDem = CIO.TGLamDem, TongGioThuc = CIO.TongGioThuc,
                    TongTre    = CIO.VaoTre, TongSom = CIO.RaaSom,
                    TongCong   = CIO.Cong,
                    PhuCapDem  = ((CIO.TGLamDem.TotalHours > 0f)
                    ? ((float)(CIO.TGLamDem.TotalHours / 8f) * 0.3f)
                    : 0f)
                                 // công thức cũ (tính phụ cấp tăng ca theo công) là : + (((tmpVaoRa.Cong > 1f) ? (tmpVaoRa.Cong - 1f) * 0.5f : 0f))
                                 // đổi lại công thức mới (tính phụ cấp theo giờ) là : + (((tmpVaoRa.TGLamTinhCong.TotalHours > 8f) ? (((float)tmpVaoRa.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f : 0f))
                };
                if (CIO.QuaDem == true)
                {
                    ngayCOcheck.QuaDem = true;                     // set qua đêm nếu có
                }
                if (ngayCOcheck.TinhPC150)
                {
                    if (CIO.TinhPC150 == false)
                    {
                        ngayCOcheck.TinhPC150 = false;
                    }

                    if (ngayCOcheck.TinhPC150)
                    {
                        ngayCOcheck.PhuCapThem = (((CIO.TGLamTinhCong.TotalHours > 8f)
                                                        ? ((((float)CIO.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f)
                                                        : 0f));
                    }
                    else
                    {
                        ngayCOcheck.PhuCapThem = 0f;
                    }
                }
                else
                {
                    ngayCOcheck.PhuCapThem = 0f;
                }

                ngayCOcheck.TongPhuCap = ngayCOcheck.PhuCapDem + ngayCOcheck.PhuCapThem;

                ngayCOcheck.them(CIO);
                #endregion


                // sau khi tạo ngày công mới vào ra đó là vào ra đầu tiên thì chuyển sang VAORA next
                vtriBD++;
                // nếu hết ds thì ngưng, add tmpNgayCong1 vào danh sách ngày công (do chưa add)
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1.0d);
                    }
                    continue;
                }
                // chưa hết DSVàoRa, xem các vào ra kế tiếp, nếu cùng ngày công thì add thêm vào tmpNgayCong1
                while (vtriBD < pDSVaoRa.Count && ThamSo.GetDate(pDSVaoRa[vtriBD].TimeStrDaiDien) == ngayCOcheck.NgayCong)
                {
                    cChkInOut CIO_1 = pDSVaoRa[vtriBD];
                    XL.TinhCongTheoCa(CIO_1, CIO_1.ThuocCa);

                    #region collapse
                    ngayCOcheck.TongGioThuc   += CIO_1.TongGioThuc;
                    ngayCOcheck.TongGioLam    += CIO_1.TGLamTinhCong;
                    ngayCOcheck.TongGioLamDem += CIO_1.TGLamDem;
                    ngayCOcheck.TongTre       += CIO_1.VaoTre;
                    ngayCOcheck.TongSom       += CIO_1.RaaSom;
                    ngayCOcheck.TongCong      += CIO_1.Cong;
                    ngayCOcheck.PhuCapDem      = ((ngayCOcheck.TongGioLamDem.TotalHours > 0f)
                                                   ? ((float)(ngayCOcheck.TongGioLamDem.TotalHours / 8f) * 0.3f)
                                                   : 0f);
                    #endregion
                    if (CIO_1.QuaDem == true)
                    {
                        ngayCOcheck.QuaDem = true;                       // set qua đêm nếu có
                    }
                    if (ngayCOcheck.TinhPC150)
                    {
                        if (CIO.TinhPC150 == false)
                        {
                            ngayCOcheck.TinhPC150 = false;
                        }

                        if (ngayCOcheck.TinhPC150)
                        {
                            ngayCOcheck.PhuCapThem = (((ngayCOcheck.TongGioLam.TotalHours > 8f)
                                                            ? ((((float)ngayCOcheck.TongGioLam.TotalHours - 8f) / 8f) * 0.5f)
                                                            : 0f));
                        }
                        else
                        {
                            ngayCOcheck.PhuCapThem = 0f;
                        }
                    }
                    else
                    {
                        ngayCOcheck.PhuCapThem = 0f;
                    }

                    ngayCOcheck.TongPhuCap = ngayCOcheck.PhuCapDem + ngayCOcheck.PhuCapThem;

                    ngayCOcheck.them(CIO_1);

                    vtriBD++;
                }
                //thoát khỏi vòng lặp: hoặc hết ds hoặc chuyển sang ngày mới
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong tmpNgayCong = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(tmpNgayCong);
                        ngaydem = ngaydem.AddDays(1.0d);
                    }
                }
                else
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngaydem.AddDays(1.0d);
                }
            }

            return(kq);
        }
示例#6
0
        public List <cNgayCong> TinhCongTheoNgay(List <cChkInOut> pDSVaoRa, DateTime ngayBD, DateTime ngayKT, bool macdinhtinhpc50)
        {
            List <cNgayCong> kq = new List <cNgayCong>();
            DateTime         ngaydem;

            if (pDSVaoRa.Count == 0)
            {
                ngaydem = ngayBD.Date;
                while (ngaydem <= ngayKT)                   // <= vì lấy luôn ngày KT : vắng mặt
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
                return(kq);
            }

            int vtriBD = 0;

            ngaydem = ngayBD.Date;

            while (ngaydem <= ngayKT.Date)
            {
                if (vtriBD >= pDSVaoRa.Count)                   // hết DS nhưng ngaydem <= ngày KT ==> ghi lại những ngày sau là vắng mặt
                {
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1d);
                    }
                    continue;
                }

                // chưa hết DS, bắt đầu từ ngày của DSVaoRa tại vtbd, đó là ngày có mặt
                cChkInOut CIO = pDSVaoRa[vtriBD];
                XL.TinhCongTheoCa(CIO, CIO.ThuocCa);
                DateTime ngayCoMat = CIO.ThuocNgayCong;

                // ghi lại những ngày vắng mặt trước ngày có mặt
                while (ngaydem < ngayCoMat)                   // ko có = vì chỉ chạy đến trước ngày của tmpVaoRa thôi
                {
                    cNgayCong ngayKOcheck = new cNgayCong()
                    {
                        NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                    };
                    kq.Add(ngayKOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
                //ngaydem = ngày có mặt. stop, tmpVaoRa là vào ra đầu tiên trong ngày
                #region collapse

                double    pcdem       = Convert.ToDouble(Properties.Settings.Default.PCDem / 100);
                double    pctc        = Convert.ToDouble(Properties.Settings.Default.PCTangCuong / 100);
                cNgayCong ngayCOcheck = new cNgayCong()
                {
                    HasCheck  = true,
                    NgayCong  = ngayCoMat,
                    TinhPC150 = macdinhtinhpc50,                    // mặc định khởi tạo ngày có tính PC 50%, nếu tồn tại ít nhất 1 ca nào ko tính pc 50% thì set cả ngày ko tính pc 50%
                    TG        = new ThoiGian()
                    {
                        LamTinhCong = CIO.TG.LamTinhCong, LamTinhPC30 = CIO.TG.LamTinhPC30
                    },
                    TongGioThuc = CIO.TongGioThuc,
                    TongTre     = CIO.VaoTre,
                    TongSom     = CIO.RaaSom,
                    TongCong    = Math.Round(CIO.Cong, 2),
                    PhuCap30    = Math.Round(((CIO.TG.LamTinhPC30.TotalHours > 0d)
                                        ? ((CIO.TG.LamTinhPC30.TotalHours / 8d) * pcdem)
                                        : 0d), 2)
                                  // công thức cũ (tính phụ cấp tăng ca theo công) là : + (((tmpVaoRa.Cong > 1f) ? (tmpVaoRa.Cong - 1f) * 0.5f : 0f))
                                  // đổi lại công thức mới (tính phụ cấp theo giờ) là : + (((tmpVaoRa.TGLamTinhCong.TotalHours > 8f) ? (((float)tmpVaoRa.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f : 0f))
                };

                if (CIO.QuaDem == true)
                {
                    ngayCOcheck.QuaDem = true;                                     // set qua đêm nếu có
                }
                if (CIO.TinhPC150 != macdinhtinhpc50)
                {
                    ngayCOcheck.TinhPC150 = CIO.TinhPC150;
                }
                if (ngayCOcheck.TinhPC150)
                {
                    ngayCOcheck.PhuCap50 = Math.Round((((CIO.TG.LamTinhCong.TotalHours > 8d)
                                                                                                                   ? (((CIO.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc)
                                                                                                                   : 0d)), 2);
                }
                else
                {
                    ngayCOcheck.PhuCap50 = 0d;
                }

                ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2);
                ngayCOcheck.them(CIO);
                #endregion


                // sau khi tạo ngày công mới vào ra đó là vào ra đầu tiên thì chuyển sang VAORA next
                vtriBD++;
                // nếu hết ds thì ngưng, add tmpNgayCong1 vào danh sách ngày công (do chưa add)
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong ngayKOcheck = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(ngayKOcheck);
                        ngaydem = ngaydem.AddDays(1.0d);
                    }
                    continue;
                }
                // chưa hết DSVàoRa, xem các vào ra kế tiếp, nếu cùng ngày công thì add thêm vào tmpNgayCong1
                while (vtriBD < pDSVaoRa.Count && ThamSo.GetDate(pDSVaoRa[vtriBD].TimeStrDaiDien) == ngayCOcheck.NgayCong)
                {
                    cChkInOut CIO_1 = pDSVaoRa[vtriBD];
                    XL.TinhCongTheoCa(CIO_1, CIO_1.ThuocCa);

                    #region collapse
                    ngayCOcheck.TongGioThuc    += CIO_1.TongGioThuc;
                    ngayCOcheck.TG.LamTinhCong += CIO_1.TG.LamTinhCong;
                    ngayCOcheck.TG.LamTinhPC30 += CIO_1.TG.LamTinhPC30;
                    ngayCOcheck.TongTre        += CIO_1.VaoTre;
                    ngayCOcheck.TongSom        += CIO_1.RaaSom;
                    ngayCOcheck.TongCong       += Math.Round(CIO_1.Cong, 2);

                    ngayCOcheck.PhuCap30 = Math.Round(((ngayCOcheck.TG.LamTinhPC30.TotalHours > 0d)
                                                                                                   ? ((ngayCOcheck.TG.LamTinhPC30.TotalHours / 8d) * pcdem)
                                                                                                   : 0d), 2);
                    #endregion
                    if (CIO_1.QuaDem == true)
                    {
                        ngayCOcheck.QuaDem = true;                                           // set qua đêm nếu có
                    }
                    if (CIO_1.TinhPC150 != macdinhtinhpc50)
                    {
                        ngayCOcheck.TinhPC150 = CIO_1.TinhPC150;
                    }
                    if (ngayCOcheck.TinhPC150)
                    {
                        ngayCOcheck.PhuCap50 = Math.Round((((ngayCOcheck.TG.LamTinhCong.TotalHours > 8d)
                                                                                                                           ? (((ngayCOcheck.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc)
                                                                                                                           : 0d)), 2);
                    }
                    else
                    {
                        ngayCOcheck.PhuCap50 = 0d;
                    }

                    ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2);
                    ngayCOcheck.them(CIO_1);

                    vtriBD++;
                }
                //thoát khỏi vòng lặp: hoặc hết ds hoặc chuyển sang ngày mới
                if (vtriBD >= pDSVaoRa.Count)
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngayCOcheck.NgayCong.AddDays(1d);
                    while (ngaydem <= ngayKT.Date)
                    {
                        cNgayCong tmpNgayCong = new cNgayCong()
                        {
                            NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(),
                        };
                        kq.Add(tmpNgayCong);
                        ngaydem = ngaydem.AddDays(1d);
                    }
                }
                else
                {
                    kq.Add(ngayCOcheck);
                    ngaydem = ngaydem.AddDays(1d);
                }
            }

            return(kq);
        }