private void btnAceptar_Click(object sender, EventArgs e)
        {
            ACargoDe = ACargoCB.SelectedItem.ToString();

            if (mtFuncionario.Text != "" && mtHoraFin.MaskCompleted && mtHoraInicio.MaskCompleted)
            {
                DateTime aux;
                if (DateTime.TryParse(FechaCorresponde.ToShortDateString() + " " + mtHoraInicio.Text, out aux))
                {
                    HoraInicio = aux;
                    if (DateTime.TryParse(FechaCorresponde.ToShortDateString() + " " + mtHoraFin.Text, out aux))
                    {
                        HoraFin = aux;

                        if (HoraInicio.CompareTo(HoraFin) >= 0)
                        {
                            // Si HoraInicio es mayor o igual a HoraFin, consulto si la hora fin es del dia siguiente;
                            DialogResult res = MessageBox.Show("La HoraFin es inferior a la HoraInicio. La HoraFin corresponde al dia de maƱana?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                            if (res == DialogResult.Yes)
                            {
                                MotivoCambioDiarioForm mcdf = new MotivoCambioDiarioForm(FechaCorresponde);
                                DialogResult dr = mcdf.ShowDialog(this);
                                if (dr == DialogResult.OK)
                                {
                                    MotivoCambio = mcdf.motivoCambio;
                                    HoraFin = HoraFin.AddDays(1);
                                    this.Close();
                                }
                            }
                            else
                                btnCancelar.PerformClick();

                        }
                        else
                        {
                            MotivoCambioDiarioForm mcdf = new MotivoCambioDiarioForm(FechaCorresponde);
                            DialogResult dr = mcdf.ShowDialog(this);
                            if (dr == DialogResult.OK)
                            {
                                MotivoCambio = mcdf.motivoCambio;
                                //HoraFin.AddDays(1);
                                this.Close();
                            }
                            else
                                btnCancelar.PerformClick();
                        }
                    }
                    else
                        MessageBox.Show(this, "El formato de la HoraFin no es un formato de hora valido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                    MessageBox.Show(this, "El formato de la HoraInicio no es un formato de hora valido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show(this, "Debe ingresar todos los datos.", "Ingreso de Datos", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private void cambiarHora(bool cambiarEntrada, string texto)
        {
            ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Iniciando...");
            long idhge = int.Parse(dgvHoras.SelectedRows[0].Cells["IDHorasGeneradasEscalafon"].Value.ToString());
            int idFuncSeleccionado = (int)listaFuncsCargados[idhge].NroEmpleado;
            string nombreFunc = dgvHoras.SelectedRows[0].Cells["Funcionario"].Value.ToString();
            DateTime horaini = listaFuncsCargados[idhge].HoraEntrada;
            DateTime horafin = listaFuncsCargados[idhge].HoraSalida;
            CambiarHoraFuncionario changeHourForm = new CambiarHoraFuncionario(idFuncSeleccionado, nombreFunc, texto, horaini, horafin, cambiarEntrada);
            DialogResult dg = changeHourForm.ShowDialog(this);

            if (dg == DialogResult.OK)
            {
                ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "DialogResult.OK");
                // Chequeamos que no existan los horarios solapados.
                HoRaSGeneraDaSEScalaFOn hstemp = new HoRaSGeneraDaSEScalaFOn();
                hstemp.NroEmpleado = listaFuncsCargados[idhge].NroEmpleado;
                if (cambiarEntrada)
                {
                    hstemp.HoraEntrada = changeHourForm.getFechaHoraNueva();
                    hstemp.HoraSalida = listaFuncsCargados[idhge].HoraSalida;
                }
                else
                {
                    hstemp.HoraEntrada = listaFuncsCargados[idhge].HoraEntrada;
                    hstemp.HoraSalida = changeHourForm.getFechaHoraNueva();
                }
                try
                {
                    ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Antes sistema.aplicarControlesAltaHoraGeneradaEscalafon");
                    sistema.aplicarControlesAltaHoraGeneradaEscalafon(listaFuncsCargados[idhge].FechaCorrespondiente, idhge, hstemp);
                    ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Despues de sistema.aplicarControlesAltaHoraGeneradaEscalafon");
                    MotivoCambioDiarioForm mcdf = new MotivoCambioDiarioForm(DateTime.Parse(mtFecha.Text));
                    dg = mcdf.ShowDialog(this);
                    ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Despues de showDialog");
                    if (dg == DialogResult.OK)
                    {
                        int numFila = dgvHoras.SelectedRows[0].Index;

                        //long idhge = (long)dgvHoras.Rows[numFila].Cells["IdHorasGeneradasEscalafon"].Value;
                        //int nroEmp = (int)listaFuncsCargados[idhge].NroEmpleado;
                        ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Antes de changeHourForm.getFechaHoraNueva()");
                        DateTime FechaHoraNueva = changeHourForm.getFechaHoraNueva();
                        mcdf.motivoCambio.NroEmpleado = listaFuncsCargados[idhge].NroEmpleado;
                        mcdf.motivoCambio.NumeroCliente = uint.Parse(ucCliente.ClienteNRO);
                        mcdf.motivoCambio.NumeroServicio = servicio.NumeroServicio;
                        ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Despues de mcdf.motivoCambio.NumeroServicio = servicio.NumeroServicio;");
                        //DateTime DateNueva = DateTime.Parse(mtFecha.Text + " " + HoraNueva);
                        ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Antes datos.cambiarHoraFuncionarioControlDiario");
                        datos.cambiarHoraFuncionarioControlDiario(idhge, (int)listaFuncsCargados[idhge].NroEmpleado, FechaHoraNueva, cambiarEntrada, mcdf.motivoCambio);
                        ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Despues datos.cambiarHoraFuncionarioControlDiario");
                        if (cambiarEntrada)
                        {
                            listaFuncsCargados[idhge].HoraEntrada = FechaHoraNueva;
                            dgvHoras.Rows[numFila].Cells["HoraEntrada"].Value = FechaHoraNueva.ToString("HH:mm");
                        }
                        else
                        {
                            listaFuncsCargados[idhge].HoraSalida = FechaHoraNueva;
                            dgvHoras.Rows[numFila].Cells["HoraSalida"].Value = FechaHoraNueva.ToString("HH:mm");
                        }
                        TimeSpan ts = new TimeSpan(listaFuncsCargados[idhge].HoraSalida.Ticks - listaFuncsCargados[idhge].HoraEntrada.Ticks);
                        dgvHoras.Rows[numFila].Cells["TotalHs"].Value = impHora(ts);
                        aplicarFormatoCeldaHora(numFila, listaFuncsCargados[idhge].HoraEntrada, listaFuncsCargados[idhge].HoraSalida);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                ControladorUtilidades.writeToLog(this.Name, "cambiarHora", "Fin.");
            }
        }
        private void quitarFuncionarioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                int idFuncSeleccionado = int.Parse(dgvHoras.SelectedRows[0].Cells["NroEmpleado"].Value.ToString());
                string nombreFunc = dgvHoras.SelectedRows[0].Cells["Funcionario"].Value.ToString();

                DialogResult res = MessageBox.Show("Seguro que quiere quitar el Funcionario: " + idFuncSeleccionado + " - " + nombreFunc, "Quitar Funcionario?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (res == DialogResult.Yes)
                {
                    DateTime fechaCorresponde = DateTime.Parse(mtFecha.Text);
                    MotivoCambioDiarioForm mcdf = new MotivoCambioDiarioForm(fechaCorresponde);
                    res = mcdf.ShowDialog(this);
                    if (res == DialogResult.OK)
                    {
                        int numFila = dgvHoras.SelectedRows[0].Index;

                        long idhge = (long)dgvHoras.Rows[numFila].Cells["IdHorasGeneradasEscalafon"].Value;
                        int nroEmp = int.Parse(dgvHoras.Rows[numFila].Cells["NroEmpleado"].Value.ToString());
                        //string HoraNueva = changeHourForm.getHoraNueva();
                        mcdf.motivoCambio.NroEmpleado = (uint)nroEmp;
                        mcdf.motivoCambio.NumeroCliente = uint.Parse(ucCliente.ClienteNRO);
                        mcdf.motivoCambio.NumeroServicio = servicio.NumeroServicio;

                        datos.quitarFuncionarioControlDiario(idhge, mcdf.motivoCambio);
                        listaFuncsCargados.Remove(idhge);
                        dgvHoras.Rows.RemoveAt(numFila);
                    }
                    
               
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void cambiarFuncionario_Click(object sender, EventArgs e)
        {   
            try
            {
                ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "Inicia metodo");
                MotIVOsCamBiosDiARioS motivoCambio = null;
                int idFuncSeleccionado = int.Parse(dgvHoras.SelectedRows[0].Cells["NroEmpleado"].Value.ToString() );
                string nombreFunc = dgvHoras.SelectedRows[0].Cells["Funcionario"].Value.ToString();
                DateTime fecha = DateTime.Parse(mtFecha.Text);
                ControlDiarioCambiarFuncionario change = new ControlDiarioCambiarFuncionario(idFuncSeleccionado,nombreFunc, fecha);
                ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "Antes de ShowDialog ControlDiarioCambiarFuncionario");
                DialogResult dg = change.ShowDialog(this);

                if (dg == DialogResult.OK)
                {
                    ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "DialogResult OK");
                    int numFila = dgvHoras.SelectedRows[0].Index;
                    long idhge = (long)dgvHoras.Rows[numFila].Cells["IdHorasGeneradasEscalafon"].Value;
                    
                    // Chequeamos que no existan los horarios solapados.
                    HoRaSGeneraDaSEScalaFOn hstemp = new HoRaSGeneraDaSEScalaFOn();
                    hstemp.NroEmpleado = change.FuncionarioNuevo.NroEmpleado;
                    hstemp.HoraEntrada = listaFuncsCargados[idhge].HoraEntrada;
                    hstemp.HoraSalida = listaFuncsCargados[idhge].HoraSalida;
                    try
                    {
                        ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "Antes de sistema.AplicarControlesAltaHoraGeneradaEscalafon");
                        sistema.aplicarControlesAltaHoraGeneradaEscalafon(listaFuncsCargados[idhge].FechaCorrespondiente, hstemp);
                        ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "Despues de sistema.AplicarControlesAltaHoraGeneradaEscalafon");
                        //
                        MotivoCambioDiarioForm mcdf = new MotivoCambioDiarioForm(DateTime.Parse(mtFecha.Text));
                        dg = mcdf.ShowDialog(this);
                        if (dg == DialogResult.OK)
                        {

                            motivoCambio = mcdf.motivoCambio;

                            //motivoCambio.IDHorasGeneradasEscalafon = idhge;
                            motivoCambio.NumeroCliente = uint.Parse(ucCliente.ClienteNRO);
                            motivoCambio.NroEmpleado = (uint)idFuncSeleccionado;
                            motivoCambio.NumeroServicio = servicio.NumeroServicio;
                            datos.cambiarFuncionarioControlDiario(idhge, (int)change.FuncionarioNuevo.NroEmpleado, motivoCambio);
                            listaFuncsCargados[idhge].NroEmpleado = change.FuncionarioNuevo.NroEmpleado;
                            dgvHoras.Rows[numFila].Cells["NroEmpleado"].Value = change.FuncionarioNuevo.NroEmpleado;
                            dgvHoras.Rows[numFila].Cells["Funcionario"].Value = change.FuncionarioNuevo.Nombre + " " + change.FuncionarioNuevo.Apellido;

                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    ControladorUtilidades.writeToLog(this.Name, "cambiarFuncionario_Click", "Fin.");
                }
            }catch(Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }