private void cargarVentana(int numCli, int numSer)
        {
            try
            {
                //Servicio serv = sistema.obtenerServicioCliente(numCli, numerosSer[ind]);
                Servicio serv = sistema.obtenerServicioCliente(numCli, numSer);

                nroServicioCargado = serv.getNumero();
                mtServicio.Text = serv.getNumero().ToString();
                txtServicio.Text = serv.getNombre();                

                int nroCon = CalcNroContrato(numCli, numSer);
                if (!datos.existeContrato(nroCon))
                {
                    GraficosPL.Visible = false;
                    //ConLBL.Visible = false;
                    //cubiertoTB.Visible = false;
                    //CubiertoLBL.Visible = false;
                    LimpiarHporCubrir();
                    GuardarBTN.Enabled = false;
                    splitContainer1.Panel2.Enabled = false;
                    VerContratoBTN.Enabled = false;
                    MessageBox.Show("Este servicio no tiene contrato.\nNo se puede generar escalafón.", "Servicio sin Contrato", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    GraficosPL.Visible = true;                                        
                    GuardarBTN.Enabled = true;
                    splitContainer1.Panel2.Enabled = true;
                    VerContratoBTN.Enabled = true;

                    Escalafon esc = null;
                    int nroEsc = CalcNroContrato(numCli, numSer);
                    if (datos.existeEscalafon(nroEsc))
                    {
                        esc = sistema.getEscalafon(nroEsc);

                        int i = 0;
                        DataGridViewRow insr = null;
                        foreach (EscalafonEmpleado l in esc.ListaEscalafonEmpleados)
                        {
                            insr = new DataGridViewRow();

                            object[] param = { l.NroEmpleado.ToString(), datos.getNombreEmpleado(l.NroEmpleado), l.CodigoPuesto, l.CantidadHsLlamadaAntesHoraInicio.ToString() + " Hs" };

                            insr.CreateCells(dgEscalafon, param);

                            dgEscalafon.Rows.Add(insr);

                            foreach (HorarioEscalafon h in l.Horario)
                            {
                                if (h.EsLaborable())
                                {
                                    dgEscalafon.Rows[i].Cells[h.getDia()].Value = h.getHoraIni() + " a " + h.getHoraFin();
                                    if (h.Solapea())
                                        dgEscalafon.Rows[i].Cells[h.getDia()].Style.BackColor = Color.Red;
                                }
                                else
                                {
                                    switch (h.getTipoDia())
                                    {
                                        case 1:
                                            dgEscalafon.Rows[i].Cells[h.getDia()].Value = "EnOtroServ";
                                            break;
                                        case 2:
                                            dgEscalafon.Rows[i].Cells[h.getDia()].Value = "Descanso";
                                            break;
                                        case 3:
                                            dgEscalafon.Rows[i].Cells[h.getDia()].Value = "Licencia";
                                            break;
                                        default:
                                            dgEscalafon.Rows[i].Cells[h.getDia()].Value = "Error";
                                            break;
                                    }

                                }

                            }

                            dgEscalafon.Rows[i].Cells[11].Value = l.AcargoDe;
                            i++;
                        }
                    }

                    // Cargar las hs por dia del contrato en el dvg            
                    contrato = sistema.getContrato(CalcNroContrato(numCli, numSer));
                    //try
                    //{
                        hporCubrir = contrato.getTotalesHoras();
                        CargarHporCubrir();
                        ActualizarHporCubrir();
                    //}
                    //catch { }
                    VerContratoBTN.Enabled = true;
                }            
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void ActualizarHporCubrir()
        {
            int numCli = int.Parse(mtCliente.Text);
            int numSer = int.Parse(mtServicio.Text);
            
            int nroCon = CalcNroContrato(numCli, numSer);
            try
            {
                if (datos.existeContrato(nroCon))
                {
                    contrato = sistema.getContrato(nroCon);
                    hporCubrir = contrato.getTotalesHoras();
                    CargarHporCubrir();

                    int totLineas = dgEscalafon.RowCount;
                    if (totLineas > 0)
                    {
                        if (ValidarEscalafon())
                        {
                            for (int i = 0; i < totLineas; i++)
                            {
                                hporCubrir = restar(hporCubrir, ObtenerHorasFila(i));
                            }

                            CargarHporCubrir();
                        }
                        else
                            MessageBox.Show(this, "Error en la celda seleccionada", "Línea no valida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void modificarContrato(int NumeroContrato, ConSeguridadFisica Contrato)
        {
            try
            {
                datos.modificarContrato(NumeroContrato, Contrato.getFechaIni(), Contrato.getFechaFin(), Contrato.GetCostoFijo(), Contrato.getHorasExtras(), Contrato.getPagaDescanso(), Contrato.getAjuste(), Contrato.getObservaciones(), Contrato.getMonto(), Contrato.getPagarExtrasDespuesDeHs(), Contrato.getHorasComunesDeterminadas(), Contrato.getHorasExPorDia());

                datos.eliminarLineasContrato(NumeroContrato);

                List<LineAshOrAs> lhs = new List<LineAshOrAs>();
                LineAshOrAs lh = null;
                int i = 0;
                foreach (LineaDeHoras ldh in Contrato.getLineas())
                {
                    lh = new LineAshOrAs();
                    lh.IDContrato = (uint)NumeroContrato;
                    lh.NroLinea = (sbyte)i;
                    lh.Puesto = ldh.getPuesto();
                    lh.Armado = (ldh.getArmado()) ? (sbyte)1 : (sbyte)0;
                    lh.Cantidad = (sbyte)ldh.getCantEmp();
                    lh.PrecioXhOra = ldh.getCostoH();

                    //pasar los horarios por dia
                    HoRaRioDiA hd = null;
                    foreach (HorarioXDia hpd in ldh.getHorario())
                    {
                        hd = new HoRaRioDiA();
                        hd.IDContrato = (uint)NumeroContrato;
                        hd.NroLinea = (sbyte)i;
                        hd.Dia = hpd.getDia();
                        hd.HoraIni = hpd.getHoraIni();
                        hd.HoraFin = hpd.getHoraFin();

                        lh.HoRaRioDiA.Add(hd);
                    }

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

                datos.guardarLineasContrato(lhs);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }       
        public ConSeguridadFisica getContrato(int NumeroContrato)
        {
            ConSeguridadFisica aux = null;
            try
            {
                ContraToS con = datos.obtenerContrato(NumeroContrato);

                string[] HsExtXDia = null;
                if (con.HorasComunesDeterminadas == 1)
                {
                    HoRaSComUnescoNtRatOs hec = datos.obtenerHorasExtrasContrato(con.IDContratos);
                    HsExtXDia = new string[7];
                    HsExtXDia[0] = hec.Lunes;
                    HsExtXDia[1] = hec.Martes;
                    HsExtXDia[2] = hec.Miercoles;
                    HsExtXDia[3] = hec.Jueves;
                    HsExtXDia[4] = hec.Viernes;
                    HsExtXDia[5] = hec.Sabado;
                    HsExtXDia[6] = hec.Domingo;
                }

                aux = new ConSeguridadFisica((con.PagaDescanso == (sbyte)1) ? true : false, (con.HorasExtras == (sbyte)1) ? true : false, 0, 0, 0, con.FechaIni.Value, con.FechaFin, con.Ajuste, con.Observaciones, (con.CostoFijo == (sbyte)1) ? true : false, con.Costo.Value, con.PagarExtrasDespuesDeHs, (con.HorasComunesDeterminadas == 1) ? true : false, HsExtXDia);

                LineaDeHoras lhs = null;
                HorarioXDia hor = null;

                foreach (LineAshOrAs lh in con.LineAshOrAs)
                {
                    lhs = new LineaDeHoras(lh.Puesto, (lh.Armado == (sbyte)1) ? true : false, lh.PrecioXhOra.Value, (int)(lh.Cantidad), 0, 0);

                    foreach (HoRaRioDiA h in lh.HoRaRioDiA)
                    {
                        if (h.IDContrato == lh.IDContrato && h.NroLinea == lh.NroLinea)
                        {
                            hor = new HorarioXDia(h.Dia, h.HoraIni, h.HoraFin);
                            lhs.addDia(hor);
                        }
                    }
                    aux.addLinea(lhs);
                }
            }
            catch (Exception ex)
            {
                
                throw ex;
            }

            return aux;
        }
        public void altaContrato(int NumeroContrato, ConSeguridadFisica cont)
        {
            ContraToS con = null;
      
            con = new ContraToS();
            
            con.TipodeContrato=0;
            con.IDContratos = (uint)NumeroContrato;
            con.FechaIni = cont.getFechaIni();
            con.FechaFin = cont.getFechaFin();
            if (cont.GetCostoFijo())
                con.CostoFijo = 1;
            else
                con.CostoFijo = 0;
            if (cont.getHorasExtras())
            {
                con.HorasExtras = 1;
                con.PagarExtrasDespuesDeHs = (short)cont.getPagarExtrasDespuesDeHs().Value;                
            }
            else
                con.HorasExtras = 0;

            if (cont.getPagaDescanso())
                con.PagaDescanso = 1;
            else
                con.PagaDescanso = 0;
                
            con.Ajuste = cont.getAjuste();
            con.Observaciones = cont.getObservaciones();
            con.Costo = cont.getMonto();

            List<LineAshOrAs> lhs = new List<LineAshOrAs>();
            LineAshOrAs lh = null;            
            int i=0;
            foreach (LineaDeHoras ldh in cont.getLineas())
            {
                lh = new LineAshOrAs();
                lh.IDContrato = (uint)NumeroContrato;                
                lh.NroLinea = (sbyte)i;
                lh.Puesto = ldh.getPuesto();
                lh.Armado = (ldh.getArmado()) ? (sbyte)1 : (sbyte)0;
                lh.Cantidad = (sbyte)ldh.getCantEmp();
                lh.PrecioXhOra = ldh.getCostoH();
                
                //pasar los horarios por dia
                HoRaRioDiA hd = null;
                foreach (HorarioXDia hpd in ldh.getHorario())
                {
                    hd = new HoRaRioDiA();
                    hd.IDContrato = (uint)NumeroContrato;
                    hd.NroLinea = (sbyte)i;
                    hd.Dia = hpd.getDia();
                    hd.HoraIni = hpd.getHoraIni();
                    hd.HoraFin = hpd.getHoraFin();

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

            HoRaSComUnescoNtRatOs HsExt = null;
            con.HorasComunesDeterminadas = (cont.getHorasComunesDeterminadas()) ? (sbyte)1 : (sbyte)0;
            if (cont.getHorasComunesDeterminadas())
            {
                string[] heXdia = cont.getHorasExPorDia();

                HsExt = new HoRaSComUnescoNtRatOs();
                HsExt.IDContraToS = (uint)NumeroContrato;
                HsExt.Lunes = heXdia[0];
                HsExt.Martes = heXdia[1];
                HsExt.Miercoles = heXdia[2];
                HsExt.Jueves = heXdia[3];
                HsExt.Viernes = heXdia[4];
                HsExt.Sabado = heXdia[5];
                HsExt.Domingo = heXdia[6];
            }
            datos.altaContrato(con, lhs, HsExt);
        }
        private void GuardarBTN_Click(object sender, EventArgs e)
        {
            try
            {
                bcUC.Focus();
                if (checkDatosObligatorios())
                {
                    int numCli = int.Parse(bcUC.ClienteNRO);
                    int numSer = int.Parse(NroMTB.Text);
                    DateTime dti = DateTime.ParseExact(FIniMTB.Text, @"dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo);
                    DateTime? dtf = null;
                    if (FinCKB.Checked)
                        dtf = DateTime.ParseExact(FFinMTB.Text, @"dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo);
                    bool costo = (CostoCB.SelectedItem.ToString() == "Fijo");
                    bool hx = HorasExtrasCHK.Checked;
                    bool pd = PagaDescansoCKBX.Checked;
                    float monto = 0;
                    if (MontoTB.Text != "")
                        monto = int.Parse(MontoTB.Text);
                    int nroCon = CalcNroContrato(numCli, numSer);
                    int? PagarExtrasLuegoDeHs;                    
                    if (hx)
                        PagarExtrasLuegoDeHs = int.Parse(cmbDespuesDeHs.SelectedItem.ToString());
                    else
                        PagarExtrasLuegoDeHs = null;
                    bool HsExtrasDet = DetHorasComunesCB.Checked;
                    string[] HsExtXDia = null;
                    if (HsExtrasDet)
                    {
                        ValidarHorasComunesDGV();
                        HsExtXDia = new string[7];
                        for (int i = 0; i < 7; i++)
                        {
                            HsExtXDia[i] = HorasComunesDGV.Rows[0].Cells[i].Value.ToString();
                        }
                    }

                    ConSeguridadFisica con = new ConSeguridadFisica(pd, hx, 0, 0, 0, dti, dtf, AjusteTB.Text, ObsTB.Text, costo, monto, PagarExtrasLuegoDeHs, HsExtrasDet, HsExtXDia);

                    // ACA GUARDO TODOS LOS DATOS DEL DATAGRIDVIEW

                    LineaDeHoras linea = null;
                    HorarioXDia hor = null;
                    DataGridViewCell cel = null;
                    string precio;
                    foreach (DataGridViewRow fila in CargaHorariaDGV.Rows)
                    {
                        if (fila.Cells[0].RowIndex + 1 < CargaHorariaDGV.RowCount)
                        {
                            if (fila.Cells["Armado"].Value == null)
                                fila.Cells["Armado"].Value = "0";
                            precio = fila.Cells["PrecioXHora"].Value.ToString().Split(' ')[1];
                            linea = new LineaDeHoras(fila.Cells["Puesto"].Value.ToString(), (fila.Cells["Armado"].Value.ToString() == "1") ? true : false, float.Parse(precio), int.Parse(fila.Cells["Cantidad"].Value.ToString()), 0, 0);
                            for (int i = 0; i < 7; i++)
                            {
                                cel = fila.Cells[dias[i]];
                                if (cel.Value.ToString() != @"N/T")
                                {
                                    hor = new HorarioXDia(dias[i], obtHIni(cel.Value.ToString()), obtHFin(cel.Value.ToString()));
                                    linea.addDia(hor);
                                }
                            }
                            con.addLinea(linea);
                        }
                    }

                    if (datos.existeContrato(nroCon))
                        sistema.modificarContrato(nroCon, con);                       
                    else
                        sistema.altaContrato(nroCon, con);

                    MessageBox.Show("Datos guardados correctamente.", "Guardado de Datos", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    /*
                    if (datos.existeContrato(nroCon))
                        datos.modificarContrato(nroCon, dti, dtf, costo, hx, AjusteTB.Text, ObsTB.Text, monto);
                    else
                        sistema.altaContratoServicioCliente(numCli, numSer, CalcNroContrato(numCli,numSer), dti, dtf, costo,  hx, AjusteTB.Text, ObsTB.Text, monto);
                    */
                    //CancelarBTN.PerformClick();

                }
                else                
                    MessageBox.Show(this, msgError, "Contrato no válido", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }        
        }