private void GuardarBTN_Click(object sender, EventArgs e)
         {
             bool solapa;
             bool hubosolapa = false;
             dgEscalafon.EndEdit();
           
             try
             {
                 
                 if (ValidarEscalafon())
                 {                     
                     int numCli = nroClienteCargado.Value;
                     //int numSer = int.Parse(mtServicio.Text);
                     int numSer = nroServicioCargado.Value;
                     int nroCon = CalcNroContrato(numCli, numSer);
                     Escalafon es = new Escalafon();
                     es.Cubierto = ContCubierto;
                     es.ListaEscalafonEmpleados = new List<EscalafonEmpleado>();

                     // ACA GUARDO TODOS LOS DATOS DEL DATAGRIDVIEW
                     
                     EscalafonEmpleado linea;
                     HorarioEscalafon hor = null;
                     DataGridViewCell cel = null;

                     foreach (DataGridViewRow fila in dgEscalafon.Rows)
                     {
                         linea = new EscalafonEmpleado();
                         linea.NroEmpleado = int.Parse(fila.Cells[0].Value.ToString());
                         linea.CodigoPuesto = fila.Cells[2].Value.ToString();
                         linea.CantidadHsLlamadaAntesHoraInicio = int.Parse(fila.Cells[3].Value.ToString().Substring(0, 1));
                         linea.AcargoDe = fila.Cells[11].Value.ToString();
                         linea.Horario = new List<HorarioEscalafon>();
                         solapa = false;
                         for (int i = 0; i < 7; i++)
                         {
                             cel = fila.Cells[dias[i]];
                             if (cel.Value.ToString().IndexOfAny(new Char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' }) == -1) //cel.Value.ToString() == "Descanso" || cel.Value.ToString() == "Licencia")
                             {
                                 hor = new HorarioEscalafon(dias[i], cel.Value.ToString());
                                 cel.Style.BackColor = Color.FromArgb(255, 255, 192);//Amarillito
                             }
                             else
                             {
                                 solapa = sistema.EsHorarioSolapado(nroCon, linea.NroEmpleado, dias[i], obtHIni(cel.Value.ToString()), obtHFin(cel.Value.ToString()));
                                 hor = new HorarioEscalafon(dias[i], obtHIni(cel.Value.ToString()), obtHFin(cel.Value.ToString()), solapa);
                                 if (solapa)
                                 {
                                     hubosolapa = true;
                                     cel.Style.BackColor = Color.Red;//Rojo
                                 }
                                 else
                                 {
                                     cel.Style.BackColor = Color.FromArgb(255, 255, 192);//Amarillito
                                 }
                             }
                             linea.Horario.Add(hor);
                         }
                         es.ListaEscalafonEmpleados.Add(linea);
                     }

                     if (datos.existeEscalafon(nroCon))
                         sistema.modificarEscalafon(nroCon, es);
                     else
                         sistema.altaEscalafon(numCli, numSer, nroCon, es);

                     sistema.marcarSolapados(nroCon, es);

                     if (hubosolapa)
                     {
                         MessageBox.Show("Datos guardados correctamente.\nEn los horarios en rojo el empleado ya trabaja.", "Guardado de Datos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                     }
                     else
                         MessageBox.Show("Datos guardados correctamente.", "Guardado de Datos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 }
                 else
                 {
                     Utilidades.ControladorUtilidades.writeToLog(new Exception("ValidacionEscalafon ERROR"));
                     MessageBox.Show(this, "Error en la celda seleccionada", "Línea no valida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                 }

             }
             catch (Exception ex)
             {
                 Utilidades.ControladorUtilidades.writeToLog(ex);
                 MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
         }
        public void marcarSolapados(int IdEscalafon, Escalafon EscSolapados)
        {
            int NroEmp;
            List<HoRaRioEScalaFOn> HorsSolap = new List<HoRaRioEScalaFOn>();
            List<HoRaRioEScalaFOn> HorsNOSolap = new List<HoRaRioEScalaFOn>();
            List<HoRaRioEScalaFOn> aux;
            try
            {
                foreach (EscalafonEmpleado ee in EscSolapados.ListaEscalafonEmpleados)
                {
                    NroEmp = ee.NroEmpleado;
                    foreach (HorarioEscalafon he in ee.Horario)
                    {
                        aux = datos.getHorariosEmpleadoDia(NroEmp, he.getDia(), IdEscalafon);
                        if (he.Solapea())
                        {
                            foreach (HoRaRioEScalaFOn h in aux)
                            {
                                if (h.TipoDia == 0)
                                {
                                    if (HorariosSolapados(he.getHoraIni(), he.getHoraFin(), h.HoRaInI, h.HoRaFIn))
                                    {
                                        HorsSolap.Add(h);
                                    }
                                }
                            }
                        }
                        else
                        {
                            foreach (HoRaRioEScalaFOn h in aux)
                            {
                                if (h.Solapa == 1)
                                {
                                    if (!EsHorarioSolapado((int)h.IDEscalafon, (int)h.NroEmpleado, h.DiA, h.HoRaInI, h.HoRaFIn))
                                        HorsNOSolap.Add(h);
                                }
                            }
                        }
                    }
                }

                datos.MarcarNoSolapados(HorsNOSolap);
                datos.MarcarSolapados(HorsSolap);
            }
            catch (Exception ex)
            {
                throw ex;
            }      
        }    
        public void modificarEscalafon(int nroEsc, Escalafon es)
        {
            try
            {
                datos.SetearCubierto(nroEsc, es.Cubierto);

                datos.eliminarLineasEscalafon(nroEsc);

                List<EScalaFOneMpLeadO> lhs = new List<EScalaFOneMpLeadO>();
                EScalaFOneMpLeadO lh = null;
                int i = 0;
                foreach (EscalafonEmpleado ldh in es.ListaEscalafonEmpleados)
                {
                    lh = new EScalaFOneMpLeadO();
                    lh.IDEscalafon = (uint)nroEsc;
                    lh.IDEscalafonEmpleado = (uint)i;
                    lh.NroEmpleado = (uint)ldh.NroEmpleado;
                    lh.CodigoPuesto = ldh.CodigoPuesto;
                    lh.HsLlamadaAntesHoraInicio = (sbyte)ldh.CantidadHsLlamadaAntesHoraInicio;
                    lh.AcArgoDe = ldh.AcargoDe;                   

                    //pasar los horarios por dia
                    HoRaRioEScalaFOn hd = null;
                  
                    foreach (HorarioEscalafon hpd in ldh.Horario)
                    {
                        hd = new HoRaRioEScalaFOn();
                        hd.IDEscalafon = (uint)nroEsc;
                        hd.IDEscalafonEmpleado = (uint)i;
                        hd.NroEmpleado = (uint)ldh.NroEmpleado;
                        if (hpd.EsLaborable())
                        {
                            hd.DiA = hpd.getDia();
                            hd.HoRaInI = hpd.getHoraIni();
                            hd.HoRaFIn = hpd.getHoraFin();
                            hd.TipoDia = 0;
                            hd.Solapa = (hpd.Solapea()) ? (sbyte)1 : (sbyte)0;
                        }
                        else
                        {
                            hd.DiA = hpd.getDia();
                            hd.TipoDia = (byte)hpd.getTipoDia();
                            hd.Solapa = 0;
                        }

                        lh.HoRaRioEScalaFOn.Add(hd);


                        //HORARIOS EMPLEADOS
                        //he = new HoRaRioSEmPleadOs();
                        //he.NroEmpleado = (uint)ldh.NroEmpleado;
                        //he.IDEscalafon = (uint)nroEsc;
                        //he.IDEscalafonEmpleado = (uint)i;
                        //he.Dia = hpd.getDia();
                        //he.TipoDia = (byte)hpd.getTipoDia();
                        //he.Solapa = (hpd.Solapea()) ? (sbyte)1 : (sbyte)0;

                        //datos.altaHorEmpleado(he);
                    }

                    lhs.Add(lh);
                    //con.LineAshOrAs.Add(lh);
                    i++;
                }

                datos.guardarLineasEscalafon(lhs);
                
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public Escalafon getEscalafon(int nroEsc)
        {
            EScalaFOn esc = datos.obtenerEscalafon(nroEsc);
            
            Escalafon aux = new Escalafon();
            aux.Cubierto = esc.Cubierto == 1;
            aux.ListaEscalafonEmpleados = new List<EscalafonEmpleado>();
            
            EscalafonEmpleado lhs = null;
            HorarioEscalafon hor = null;

            foreach (EScalaFOneMpLeadO lh in esc.EScalaFOneMpLeadO)
            {
                lhs = new EscalafonEmpleado();
                lhs.NroEmpleado = (int)lh.NroEmpleado;
                lhs.CodigoPuesto = lh.CodigoPuesto;
                lhs.CantidadHsLlamadaAntesHoraInicio = lh.HsLlamadaAntesHoraInicio;
                lhs.AcargoDe = lh.AcArgoDe;
                lhs.Horario = new List<HorarioEscalafon>();
                
                foreach (HoRaRioEScalaFOn h in lh.HoRaRioEScalaFOn)
                {
                    if (h.IDEscalafon == lh.IDEscalafon && h.IDEscalafonEmpleado == lh.IDEscalafonEmpleado)
                    {
                        if (h.TipoDia == 0)
                            hor = new HorarioEscalafon(h.DiA, h.HoRaInI, h.HoRaFIn, (h.Solapa == 1)? true:false);
                        else
                            hor = new HorarioEscalafon(h.DiA, (int)h.TipoDia);
                        
                        lhs.Horario.Add(hor);
                    }
                }
                aux.ListaEscalafonEmpleados.Add(lhs);
            }

            return aux;
        }
        public void altaEscalafon(int numCli, int numSer, int nroCon, Escalafon es)
        {
            try
            {
                EScalaFOn esc = null;

                esc = new EScalaFOn();
                esc.NumeroCliente = (uint)numCli;
                esc.NumeroServicio = (uint)numSer;
                esc.IDContrato = (uint)nroCon;
                esc.IDEscalafon = (uint)nroCon;

                if (es.Cubierto)
                    esc.Cubierto = 1;
                else
                    esc.Cubierto = 0;

                List<EScalaFOneMpLeadO> lhs = new List<EScalaFOneMpLeadO>();
                EScalaFOneMpLeadO lh = null;
                int i = 0;
                foreach (EscalafonEmpleado ldh in es.ListaEscalafonEmpleados)
                {
                    lh = new EScalaFOneMpLeadO();
                    lh.IDEscalafon = (uint)nroCon;
                    lh.IDEscalafonEmpleado = (uint)i;
                    lh.NroEmpleado = (uint)ldh.NroEmpleado;
                    lh.CodigoPuesto = ldh.CodigoPuesto;
                    lh.HsLlamadaAntesHoraInicio = (sbyte)ldh.CantidadHsLlamadaAntesHoraInicio;
                    lh.AcArgoDe = ldh.AcargoDe;

                    //pasar los horarios por dia
                    HoRaRioEScalaFOn hd = null;
                    //HoRaRioSEmPleadOs he = null;
                    foreach (HorarioEscalafon hpd in ldh.Horario)
                    {
                        hd = new HoRaRioEScalaFOn();
                        hd.IDEscalafon = (uint)nroCon;
                        hd.IDEscalafonEmpleado = (uint)i;
                        hd.NroEmpleado = (uint)ldh.NroEmpleado;
                        if (hpd.EsLaborable())
                        {
                            hd.DiA = hpd.getDia();
                            hd.HoRaInI = hpd.getHoraIni();
                            hd.HoRaFIn = hpd.getHoraFin();
                            hd.TipoDia = 0;
                            hd.Solapa = (hpd.Solapea()) ? (sbyte)1 : (sbyte)0;
                        }
                        else
                        {
                            hd.DiA = hpd.getDia();
                            hd.TipoDia = (byte)hpd.getTipoDia();
                            hd.Solapa = 0;
                        }

                        lh.HoRaRioEScalaFOn.Add(hd);

                        //HORARIOS EMPLEADOS
                        //he = new HoRaRioSEmPleadOs();
                        //he.NroEmpleado = (uint)ldh.NroEmpleado;
                        //he.IDEscalafon = (uint)nroCon;
                        //he.IDEscalafonEmpleado = (uint)i;
                        //he.Dia = hpd.getDia();
                        //he.TipoDia = (byte)hpd.getTipoDia();
                        //he.Solapa = (hpd.Solapea()) ? (sbyte)1 : (sbyte)0;

                        //datos.altaHorEmpleado(he);
                    }

                    lhs.Add(lh);
                    //con.LineAshOrAs.Add(lh);
                    i++;
                }

                datos.altaEscalafon(esc, lhs);
            }
            catch (Exception ex)
            {
              
                throw ex;
            }
        }