示例#1
0
        public void Horas(int ID)
        {
            string   Fecha1 = PrimeraFecha;
            string   Fecha2 = SegundaFecha;
            TimeSpan dias   = DateTime.Parse(Fecha2) - DateTime.Parse(Fecha1);

            for (int i = 0; dias.Days >= i; i++)
            {
                #region Local variables
                DateTime NuevaFecha = DateTime.Parse(Fecha1);

                NuevaFecha = NuevaFecha.AddDays(i);
                #region Dia feriado pa to el mundo
                if (metodos.EsDiaFeriado(NuevaFecha.ToShortDateString()))
                {
                    float th = 9;
                    if (NuevaFecha.DayOfWeek == DayOfWeek.Friday)
                    {
                        th = 8;
                    }
                    var EmployeeHours = WorkedTime.Where(x => x.ID == ID).FirstOrDefault();
                    if (EmployeeHours == null)
                    {
                        HorasTrabajadas ht = new HorasTrabajadas(ID, th, NuevaFecha);
                        WorkedTime.Add(ht);
                    }
                    else
                    {
                        EmployeeHours.HorasT += th;
                    }
                    var DayExist = DayHours.Where(x => x.ID == ID && x.Fecha.ToShortDateString().Equals(NuevaFecha.ToShortDateString())).FirstOrDefault();
                    if (DayExist == null)
                    {
                        HorasTrabajadas dh = new HorasTrabajadas(ID, th, NuevaFecha);
                        DayHours.Add(dh);
                    }
                }
                #endregion

                DataTable UsuariosSeleccionados = metodos.HorasTrabajadasEmpleados(ID, NuevaFecha.ToShortDateString());
                int       count = UsuariosSeleccionados.Rows.Count;

                //TimeSpan horasT = new TimeSpan(); //no used anymore
                #endregion

                #region Ponches de menos de 2 minutos
                //another for, a neccesary evil
                for (int Z = 0; Z < count; Z++) // removes checktimes with less than 2 minutes timespan
                {
                    if ((Z + 1) < count)
                    {
                        DateTime dateFrom = DateTime.Parse(UsuariosSeleccionados.Rows[Z]["CHECKTIME"].ToString());
                        DateTime dateTo   = DateTime.Parse(UsuariosSeleccionados.Rows[Z + 1]["CHECKTIME"].ToString());
                        if ((dateTo - dateFrom).TotalMinutes < 2)
                        {
                            UsuariosSeleccionados.Rows.RemoveAt(Z + 1);
                            count--;
                        }
                    }
                }
                #endregion
                int ret = 0;
                Math.DivRem(count, 2, out ret);
                #region Ponches huerfanos
                if (ret != 0)
                {
                    DataRow r = UsuariosSeleccionados.NewRow();
                    r["USERID"]    = UsuariosSeleccionados.Rows[count - 1]["USERID"];
                    r["CHECKTIME"] = UsuariosSeleccionados.Rows[count - 1]["CHECKTIME"];
                    UsuariosSeleccionados.Rows.Add(r);
                    UsuariosSeleccionados.AcceptChanges();
                    //ponche huerfano
                }
                #endregion
                #region La suma
                //sums stuff up
                for (int Z = 0; Z < count; Z += 2)
                {
                    if ((Z + 1) < count)
                    {
                        DateTime dateFrom = DateTime.Parse(UsuariosSeleccionados.Rows[Z]["CHECKTIME"].ToString());
                        DateTime dateTo   = DateTime.Parse(UsuariosSeleccionados.Rows[Z + 1]["CHECKTIME"].ToString());
                        //horasT = (horasT + (dateTo.TimeOfDay - dateFrom.TimeOfDay));
                        //horasT = (horasT + (dateFrom.TimeOfDay - dateTo.TimeOfDay));
                        TimeSpan ts = (dateTo.TimeOfDay - dateFrom.TimeOfDay);       //añadimos las horas separadas ya que estas seran divididas en dayHours y WorkedTime
                        AddHoras(ID, NuevaFecha.ToShortDateString(), ts.ToString()); // tambien siempre es bueno mantener las tandas separadas, las tandas estaran guardadas en horasTrabajadas
                    }
                }
                #endregion
                //AddHoras(ID, NuevaFecha.ToShortDateString(), horasT.ToString());
            }
        }