Пример #1
0
        private void AttStaffByShift(string EMP_ID, string SHI_ID, DateTime d1, SqlConnection con, string DEP_ID, string EMP_I1, Func.RecordSet rsca)
        {
            double MIN = T_String.IsNullTo0(T_String.GetDataFromSQL("MIN_HR", "FILC02A", "SHI_ID=N'" + SHI_ID + "'", con));

            string sql = "Select CRD_TM,DAT_TM from FILC01A where EMP_ID=N'" + EMP_ID
                         + "' and CRD_DT='" + d1.ToString("yyyy/MM/dd") + "' and (YSD_BT is null or YSD_BT=0)"
                         + " and CRD_TM>" + MIN + " ORDER BY CRD_TM ";

            Func.RecordSet rsdata = new Func.RecordSet(sql, con);
            if (rsca.rows <= 0)
            {
                return;
            }

            ArrayList Ca    = new ArrayList();
            ArrayList ATT   = new ArrayList();
            double    maxca = 0;
            int       cadem = 0;

            for (int i = 0; i < rsca.rows; i++)
            {
                Ca.Add(rsca.record(i, "ONN_TM"));
                Ca.Add(rsca.record(i, "OFF_TM"));
                double c1 = IsN(rsca.record(i, "ONN_TM"));
                double c2 = IsN(rsca.record(i, "ONN_TM"));
                if (cadem == 0 && (rsca.record(i, "TYP_ID") == "ATT_HR" || rsca.record(i, "TYP_ID") == "NIG_HR"))
                {
                    if (c1 > maxca)
                    {
                        maxca = c1;
                    }
                    else
                    {
                        cadem = 1;
                    }
                    if (c2 > maxca)
                    {
                        maxca = c2;
                    }
                    else
                    {
                        cadem = 1;
                    }
                }
            }
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            Ca.Add(0);
            int     dem    = 0;   // vi tri quet
            int     tg     = 0;
            int     count  = 0;   //so lan quet the
            int     tcqd   = 0;
            double  NIG_TM = 0;
            double  OVOT   = T_String.IsNullTo0(T_String.GetDataFromSQL("MAX_HR", "FILC02A", "SHI_ID=N'" + SHI_ID + "'", con));
            Boolean bif    = false;
            Boolean add12  = false;
            Boolean add13  = false;
            int     addtg  = 0;

            while (dem < Ca.Count || tg < rsdata.rows)
            {
                if (tg >= rsdata.rows)
                {
                    break;
                }
                if (dem >= Ca.Count)
                {
                    break;
                }
                int    t1     = IsN(rsdata.record(tg, "CRD_TM"));
                string DAT_TM = rsdata.record(tg, "DAT_TM");
                int    t2     = IsN(rsdata.record(tg + 1, "CRD_TM"));
                int    c1     = IsN(Ca[dem] + "");
                int    c2;
                if (OVOT != 0 && tcqd > 0 && OVOT < t1)
                {
                    break;
                }
                if (dem + 1 < Ca.Count)
                {
                    c2 = IsN(Ca[dem + 1] + "");
                }
                else
                {
                    c2 = IsN(Ca[dem] + "");
                }
                //=========Thu them gio quet the tu dong luc an com khi xet option [MEAL_ON]=1, QuangViet TG
                if (tg > 0 && PublicFunction.CUS_ID == "51")              //&& !bif)
                {
                    Boolean is12 = true;
                    int     itg;
                    //truong hop them 1300
                    if (IsN(rsdata.record(tg, "CRD_TM")) <= 1230 && IsN(rsdata.record(tg, "CRD_TM")) >= 1200)
                    {
                        for (int i1 = 0; i1 < rsdata.rows; i1++)
                        {
                            itg = IsN(rsdata.record(i1, "CRD_TM"));
                            if (itg > 1230 && itg < 1305)
                            {
                                is12 = false;
                            }
                            if (itg != IsN(rsdata.record(tg, "CRD_TM")) && itg >= 1200 && itg <= 1230)
                            {
                                is12 = false;
                            }
                        }
                        bif = IsN(rsdata.record(0, "CRD_TM")) < 1200 && IsN(rsdata.record(rsdata.rows - 1, "CRD_TM")) > 1300;
                        bif = bif & is12;
                        if (bif)
                        {
                            itg   = IsN(rsdata.record(0, "CRD_TM").Substring(rsdata.record(0, "CRD_TM").Length - 1, 1));
                            add13 = true;
                            if (itg == 0)
                            {
                                addtg = 1300;
                            }
                            else
                            {
                                addtg = 1200 + 60 - itg;
                            }
                            //ATT.Add(1200+60-itg);
                        }
                    }
                    //truong hop them 1200
//					if(!bif)
//					{
                    if (IsN(rsdata.record(tg, "CRD_TM")) > 1230 && IsN(rsdata.record(tg, "CRD_TM")) <= 1305)
                    {
                        is12 = true;
                        for (int i1 = 0; i1 < rsdata.rows; i1++)
                        {
                            itg = IsN(rsdata.record(i1, "CRD_TM"));
                            if (itg >= 1200 && itg < 1230)
                            {
                                is12 = false;
                            }
                            if (itg != IsN(rsdata.record(tg, "CRD_TM")) && itg > 1230 && itg <= 1305)
                            {
                                is12 = false;
                            }
                        }
                        bif = IsN(rsdata.record(0, "CRD_TM")) < 1200 && IsN(rsdata.record(rsdata.rows - 1, "CRD_TM")) > 1300;
                        bif = bif & is12;
                        if (bif)
                        {
                            itg   = IsN(rsdata.record(0, "CRD_TM").Substring(rsdata.record(0, "CRD_TM").Length - 1, 1));
                            add12 = true;
                            addtg = 1200 + itg;
                            //ATT.Add(1200+itg);
                        }
                    }

                    //truong hop them 1800
                    if (IsN(rsdata.record(tg, "CRD_TM")) <= 1745 && IsN(rsdata.record(tg, "CRD_TM")) >= 1730)
                    {
                        is12 = true;
                        for (int i1 = 0; i1 < rsdata.rows; i1++)
                        {
                            itg = IsN(rsdata.record(i1, "CRD_TM"));
                            if (itg > 1745 && itg < 1805)
                            {
                                is12 = false;
                            }
                            if (itg != IsN(rsdata.record(tg, "CRD_TM")) && itg >= 1730 && itg <= 1745)
                            {
                                is12 = false;
                            }
                        }
                        bif = IsN(rsdata.record(0, "CRD_TM")) <= 1630 && IsN(rsdata.record(rsdata.rows - 1, "CRD_TM")) >= 1805;
                        bif = bif & is12;
                        if (bif)
                        {
                            itg   = IsN(rsdata.record(0, "CRD_TM").Substring(rsdata.record(0, "CRD_TM").Length - 1, 1));
                            add13 = true;
                            if (itg == 0)
                            {
                                addtg = 1800;
                            }
                            else
                            {
                                addtg = 1700 + 60 - itg;
                            }
                            //ATT.Add(1200+60-itg);
                        }
                    }
                    //truong hop them 1730
                    if (IsN(rsdata.record(tg, "CRD_TM")) > 1745 && IsN(rsdata.record(tg, "CRD_TM")) <= 1805)
                    {
                        is12 = true;
                        for (int i1 = 0; i1 < rsdata.rows; i1++)
                        {
                            itg = IsN(rsdata.record(i1, "CRD_TM"));
                            if (itg >= 1700 && itg < 1745)
                            {
                                is12 = false;
                            }
                            if (itg != IsN(rsdata.record(tg, "CRD_TM")) && itg > 1745 && itg <= 1805)
                            {
                                is12 = false;
                            }
                        }
                        bif = IsN(rsdata.record(0, "CRD_TM")) <= 1630 && IsN(rsdata.record(rsdata.rows - 1, "CRD_TM")) >= 1805;
                        bif = bif & is12;
                        if (bif)
                        {
                            itg   = IsN(rsdata.record(0, "CRD_TM").Substring(rsdata.record(0, "CRD_TM").Length - 1, 1));
                            add12 = true;
                            addtg = 1730 + itg;
                            //ATT.Add(1200+itg);
                        }
                    }
                }
                //END MEAL_ON
                if (t1 == c1 || (dem + 1) == Ca.Count || c1 == 0)         // dung thoi gian
                {
                    //if(rsdata.rows<=tg+1 && (dem%2)==0 && (count%2)==1  && count!=0 && ( t2>c1 || t2==0) )
                    //trungthu
//					if( (ATT.Count%2)!=(count%2))
//					{
//						ATT.Add(0);
//						dem++;
//					}
                    if (add12)
                    {
                        ATT.Add(addtg);
                        add12 = false;
                    }
                    ATT.Add(t1);
                    if (add13)
                    {
                        ATT.Add(addtg);
                        add13 = false;
                    }
                    NIG_TM = TangQuaDem(EMP_ID, DAT_TM, tcqd, con, t1, NIG_TM, ATT);
                    count++;
                    dem++;
                    tg++;
                }
                else
                {
                    if (t1 < c1)                   // < kiem tra thoi gian crd ke tiep [di som]
                    {
                        //trungthu
//						if( (ATT.Count%2)!=(count%2))
//						{
//							ATT.Add(0);
//							dem++;
//						}
                        //end
                        if (add12)
                        {
                            ATT.Add(addtg);
                            add12 = false;
                        }
                        ATT.Add(t1);
                        //them gio com tu dong
                        if (add13)
                        {
                            ATT.Add(addtg);
                            add13 = false;
                        }
                        NIG_TM = TangQuaDem(EMP_ID, DAT_TM, tcqd, con, t1, NIG_TM, ATT);
                        count++;
                        dem++;
                        tg++;
                    }
                    else
                    {
                        if (Math.Abs(t1 - c1) < Math.Abs(t1 - c2))            // dung thoi gian
                        {
                            if (rsdata.rows <= tg + 1)                        // lan quet the cuoi trong ngay
                            {
                                //trungthu
//								if( (ATT.Count%2)!=(count%2))
//								{
//									ATT.Add(0);
//									dem++;
//								}
                                if (add12)
                                {
                                    ATT.Add(addtg);
                                    add12 = false;
                                }
                                ATT.Add(t1);
                                if (add13)
                                {
                                    ATT.Add(addtg);
                                    add13 = false;
                                }
                                NIG_TM = TangQuaDem(EMP_ID, DAT_TM, tcqd, con, t1, NIG_TM, ATT);
                                count++;
                                dem++;
                                tg++;
                            }
                            else
                            {
                                //trungthu
//								if( (ATT.Count%2)!=(count%2))
//								{
//									ATT.Add(0);
//									dem++;
//								}
                                if (add12)
                                {
                                    ATT.Add(addtg);
                                    add12 = false;
                                }
                                ATT.Add(t1);
                                if (add13)
                                {
                                    ATT.Add(addtg);
                                    add13 = false;
                                }
                                NIG_TM = TangQuaDem(EMP_ID, DAT_TM, tcqd, con, t1, NIG_TM, ATT);
                                count++;
                                dem++;
                                tg++;
                            }
                        }
                        else                         // kiem tra  tg ca ke tiep
                        {
                            if (dem < rsca.rows)
                            {
                                int    k = ((int)(dem / 2));
                                string h = "ONN_BT";
                                if (dem % 2 != 0)
                                {
                                    h = "OFF_BT";
                                }
                                //trungthu
//								if(rsca.record(k,h)=="True")
//									ATT.Add(0);
                            }
                            dem++;
                        }
                    }
                }
                if (rsdata.rows <= tg && tcqd == 0)            // tinh qua dem
                {
                    if ((count % 2) == 1 || cadem == 1)        // qua dem
                    {
                        int d = 0, dd = dem;
                        while (d < Ca.Count)
                        {
                            int m1 = IsN(Ca[d] + "");
                            int m2;
                            if (d + 1 < Ca.Count)
                            {
                                m2 = IsN(Ca[d + 1] + "");
                            }
                            else
                            {
                                m2 = IsN(Ca[d] + "");
                            }
                            if (m2 != 0 && m2 < m1)
                            {
                                d++;
                                dd = d;
                                break;
                            }
                            d++;
                        }
                        if (d == dd && d != Ca.Count)
                        {
                            sql = "Select CRD_TM,DAT_TM from FILC01A where EMP_ID=N'" + EMP_ID
                                  + "' and CRD_DT='" + d1.AddDays(1).ToString("yyyy/MM/dd") + "' ORDER BY CRD_TM";
                            rsdata = new Func.RecordSet(sql, con);
                            if (rsdata.rows <= 0)
                            {
                                break;
                            }
                            while (dem < dd)
                            {
                                if (dem < rsca.rows)
                                {
                                    int    k = ((int)(dem / 2));
                                    string h = "ONN_BT";
                                    if (dem % 2 != 0)
                                    {
                                        h = "OFF_BT";
                                    }
                                    //trungthu
//									if(rsca.record(k,h)=="True")
//										ATT.Add(0);
                                }
                                dem++;
                            }
                            tg   = 0;
                            tcqd = 1;
                        }
                    }
                }
            }
            string values = "", Insert = "";

            Insert = "Insert Into [" + table + "](EMP_ID,ATT_DT,DEP_ID,EMP_I1,SHI_ID,NIG_TM,"
                     + "ONN_01,OFF_01,ONN_02,OFF_02,ONN_03,OFF_03,ONN_04,OFF_04,ONN_05,OFF_05,"
                     + "ONN_06,OFF_06,OFF_07,ONN_07,OFF_08,ONN_08,ONN_09,OFF_09,ONN_10,OFF_10"
                     + ") Values";

            values = "N'" + EMP_ID + "',"
                     + "'" + d1.ToString("yyyy/MM/dd") + "',N'" + DEP_ID + "',N'" + EMP_I1 + "',"
                     + "N'" + SHI_ID + "','" + NIG_TM + "'";
            for (int i = 1; i <= 10; i++)
            {
                if ((i * 2) - 2 >= ATT.Count)
                {
                    values += ",0";
                }
                else
                {
                    values += "," + ATT[(i * 2) - 2];
                }
                if ((i * 2) - 1 >= ATT.Count)
                {
                    values += ",0";
                }
                else
                {
                    values += "," + ATT[(i * 2) - 1];
                }
            }
            sql = Insert + "(" + values + ")";
//			SqlConnection conat=new SqlConnection(PublicFunction.C_con.ConnectionString);
//			conat.Open();
            try
            {
                PublicFunction.SQL_Execute(sql, con);
            }
            catch (SqlException ex)
            {
                err.Text += ex.Message;
            }
            //			sql="update ["+table+"] set EMP_I1=N'"+EMP_I1+"' where EMP_ID=N'"+EMP_ID+"' and ATT_DT='"+d1.ToString("yyyy/MM/dd")+"'";
            //			PublicFunction.SQL_Execute(sql,con);
            TaAttendance tm = new TaAttendance(EMP_ID, d1.ToString("yyyy/MM/dd"), con, Ca, ATT, SHI_ID, rsca, Set, rsTypeShift);

            tm.tb     = table;
            tm.NIG_TM = NIG_TM;
            //tm.rsType=rsType;
            tm.UpdateSql();
        }
Пример #2
0
        private void cmd_cal_Click(object sender, System.EventArgs e)
        {
            if (MessageBox.Show(this, PublicFunction.L_Get_Msg("msg", 78), this.Text, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            ArrayList a = new ArrayList();

            for (int n = 1; n < vs.Rows.Count; n++)
            {
                if (vs.Rows[n].UserData + "" == "1")
                {
                    a.Add(n);
                    string st = vs.Rows[n]["NOT_DR"] + "";
                    if (st.IndexOf("Sign") < 0)
                    {
                        vs.Rows[n]["NOT_OR"] = vs.Rows[n]["NOT_DR"];
                    }
                }
            }
            nav_TBarClick(nav.cmd_save, new ToolBarButtonClickEventArgs(nav.cmd_save));
            Func.RecordSet rsTypeShift = new Func.RecordSet("Select * from GP_SYS_SHIFT", PublicFunction.C_con);
            Func.RecordSet Set         = new Func.RecordSet("Select * from GP_SYS_SETTING", PublicFunction.C_con);
            SqlConnection  con         = new SqlConnection(PublicFunction.C_con.ConnectionString);

            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }
            int dem = 0, i = 0;

            for (int m = 0; m < a.Count; m++)
            {
                i = (int)a[m];
                string   EMP_ID = vs.Rows[i]["EMP_ID"] + "";
                DateTime d1     = DateTime.Parse(vs.Rows[i]["ATT_DT"] + "");

                string         SHI_ID = vs.Rows[i]["SHI_ID"] + "";
                string         sql    = "Select * from FILC02B where SHI_ID=N'" + SHI_ID + "' ORDER BY SEQ_NO";
                Func.RecordSet rsca   = new Func.RecordSet(sql, con);

                ArrayList Ca  = new ArrayList();
                ArrayList ATT = new ArrayList();
                for (int j = 0; j < rsca.rows; j++)
                {
                    Ca.Add(rsca.record(j, "ONN_TM"));
                    Ca.Add(rsca.record(j, "OFF_TM"));
                }
                Ca.Add(0);
                Ca.Add(0);
                Ca.Add(0);
                Ca.Add(0);
                for (int j = 1; j <= 10; j++)
                {
                    ATT.Add(T_String.IsNullTo00(vs.Rows[i]["ONN_" + j.ToString("00")] + ""));
                    ATT.Add(T_String.IsNullTo00(vs.Rows[i]["OFF_" + j.ToString("00")] + ""));
                }
                TaAttendance tm = new TaAttendance(EMP_ID, d1.ToString("yyyy/MM/dd"), con, Ca, ATT, SHI_ID, rsca, Set, rsTypeShift);
                tm.tb     = "FILC06A";
                tm.NIG_TM = T_String.IsNullTo00(vs.Rows[i]["NIG_TM"] + "");
                tm.NOT_DD = vs.Rows[i]["NOT_DR"] + "";
                tm.UpdateSql();
                ForCal(EMP_ID, d1.ToString("yyyy/MM/dd"));
                dem++;
            }
            int vat = T_String.GetMax("MAX(SEQ_NO)", "FILC10A");

            for (int m = 0; m < a.Count; m++)
            {
                string   EMP_ID = vs.Rows[i]["EMP_ID"] + "";
                DateTime d1     = DateTime.Parse(vs.Rows[i]["ATT_DT"] + "");
                TaAttendance.AbsentToVacate(EMP_ID, d1.ToString("yyyy/MM/dd"), con, "FILC06A");
            }
            if (T_String.GetMax("MAX(SEQ_NO)", "FILC10A") > vat)
            {
                frmTaAbsentVacate dlg = new frmTaAbsentVacate();
                dlg.Tag = this.Tag;
                dlg.ShowDialog();
            }
            if (dem > 0)
            {
                int row = vs.Row;
                nav.Show_VS(nav.Where + "");
                if (row > 0 && vs.Rows.Count > 1)
                {
                    vs.Row = row;
                }
            }
            vs.Tag = "";
            CheckCols();
        }