private bool ValidarDatos()
        {
            if (txtDescripcion.Text.ToUpper().Trim().Equals(string.Empty))
            {
                MessageBox.Show("Complete la descripción", "Aviso");
                return(false);
            }
            if (txtDescripcion.Text.ToUpper().Trim().Equals("CORTESIA"))
            {
                MessageBox.Show("El nombre no puede ser CORTESIA", "Aviso");
                return(false);
            }

            listaPromocionZona    = new List <PromocionZona>();
            listaPromocionFuncion = new List <PromocionFuncion>();
            foreach (DataGridViewRow dtr in dgvZonas.Rows)
            {
                if (Convert.ToBoolean(dtr.Cells["Sel"].Value) == true)
                {
                    if (Convert.ToString(dtr.Cells["Precio"].Value).Equals(String.Empty))
                    {
                        MessageBox.Show("Debe ingresar todos los precios", "Aviso");
                        return(false);
                    }
                    else
                    {
                        PromocionZona pZona = new PromocionZona();
                        pZona.Zona   = dtr.DataBoundItem as Zona;
                        pZona.Precio = Convert.ToSingle(dtr.Cells["Precio"].Value);
                        listaPromocionZona.Add(pZona);
                    }
                }
            }


            if (listaPromocionZona.Count < 1)
            {
                MessageBox.Show("Debe seleccionar al menos una zona", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return(false);
            }


            foreach (DataGridViewRow dtr in dgvFunciones.Rows)
            {
                if (Convert.ToBoolean(dtr.Cells["SelF"].Value) == true)
                {
                    PromocionFuncion pFuncion = new PromocionFuncion();
                    pFuncion.Funcion = dtr.DataBoundItem as Funcion;
                    listaPromocionFuncion.Add(pFuncion);
                }
            }

            if (listaPromocionFuncion.Count < 1)
            {
                MessageBox.Show("Debe seleccionar al menos una función", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return(false);
            }

            return(true);
        }
        private void LoadData()
        {
            dgvZonas.AutoGenerateColumns     = false;
            dgvFunciones.AutoGenerateColumns = false;
            txtObra.Text                   = promocion.PromocionZonas[0].Zona.Obra.Nombre;
            txtDescripcion.Text            = promocion.Descripcion;
            listTipoPromocion              = servicio.GetListaTipoPromocion();
            cboTipoPromocion.DataSource    = listTipoPromocion;
            cboTipoPromocion.DisplayMember = "Descripcion";
            cboTipoPromocion.SelectedItem  = listTipoPromocion.Where(tx => tx.IdTipoPromocion == promocion.TipoPromocion.IdTipoPromocion).FirstOrDefault();
            cboEstado.SelectedIndex        = promocion.Estado == "Activo" ? 0 : 1;
            dtpFechaInicio.Value           = promocion.FechaInicio;
            dtpFechaFin.Value              = promocion.FechaFin;
            chkRequiereEmpresa.Checked     = promocion.RequiereEmpresa;

            listZona    = servicio.ListZonaByObra(promocion.PromocionZonas[0].Zona.Obra.IdObra);
            listFuncion = servicio.ListarFuncionByObraGrilla(promocion.PromocionZonas[0].Zona.Obra.IdObra);

            dgvFunciones.DataSource = listFuncion;
            dgvZonas.DataSource     = listZona;

            foreach (DataGridViewRow row in dgvZonas.Rows)
            {
                Zona          zona   = row.DataBoundItem as Zona;
                PromocionZona prZona = promocion.PromocionZonas.Where(tx => tx.Zona.IdZona == zona.IdZona).FirstOrDefault();
                if (prZona != null)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["Sel"];
                    chk.Value = true;
                    row.Cells["Precio"].Value = prZona.Precio;
                }
            }

            foreach (DataGridViewRow row in dgvFunciones.Rows)
            {
                Funcion          funcion   = row.DataBoundItem as Funcion;
                PromocionFuncion prFuncion = promocion.PromocionFunciones.Where(tx => tx.Funcion.IdFuncion == funcion.IdFuncion).FirstOrDefault();
                if (prFuncion != null)
                {
                    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells["SelF"];
                    chk.Value = true;
                }
            }
        }
        private void btnCrear_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                List <PromocionZona> listaPromocionZona = new List <PromocionZona>();
                bool isValid = true;
                foreach (DataGridViewRow dtr in dgvZonas.Rows)
                {
                    if (Convert.ToBoolean(dtr.Cells["Sel"].Value) == true)
                    {
                        if (Convert.ToString(dtr.Cells["Precio"].Value).Equals(String.Empty))
                        {
                            isValid = false;
                            break;
                        }
                        else
                        {
                            PromocionZona pZona = new PromocionZona();
                            pZona.Zona   = dtr.DataBoundItem as Zona;
                            pZona.Precio = Convert.ToSingle(dtr.Cells["Precio"].Value);
                            listaPromocionZona.Add(pZona);
                        }
                    }
                }

                if (!isValid)
                {
                    MessageBox.Show("Debe ingresar el precio", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                if (listaPromocionZona.Count < 1)
                {
                    MessageBox.Show("Debe seleccionar al menos una zona", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                List <PromocionFuncion> listaPromocionFuncion = new List <PromocionFuncion>();

                foreach (DataGridViewRow dtr in dgvFunciones.Rows)
                {
                    if (Convert.ToBoolean(dtr.Cells["SelF"].Value) == true)
                    {
                        PromocionFuncion pFuncion = new PromocionFuncion();
                        pFuncion.Funcion = dtr.DataBoundItem as Funcion;
                        listaPromocionFuncion.Add(pFuncion);
                    }
                }

                if (listaPromocionFuncion.Count < 1)
                {
                    MessageBox.Show("Debe seleccionar al menos una función", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }


                Promocion promocion = new Promocion()
                {
                    Descripcion        = txtDescripcion.Text.ToUpper().Trim(),
                    FechaFin           = dtpFechaFin.Value.Date,
                    FechaInicio        = dtpFechaInicio.Value.Date,
                    TipoPromocion      = cboTipoPromocion.SelectedItem as TipoPromocion,
                    RequiereEmpresa    = chkRequiereEmpresa.Checked,
                    PromocionFunciones = listaPromocionFuncion,
                    PromocionZonas     = listaPromocionZona
                };
                try
                {
                    if (servicio.InsertPromocion(promocion))
                    {
                        MessageBox.Show("Proceso realizado correctamente", "Aviso");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Ha ocurrido un error", "Aviso");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ocurrió un error: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("Complete todos los campos", "Aviso");
            }
        }
        public List <Promocion> ListPromocionByObra(int idObra)
        {
            OleDbCommand            cmd2             = new OleDbCommand();
            OleDbCommand            cmd3             = new OleDbCommand();
            string                  sql              = "SELECT * FROM TH_PROMOCION P INNER JOIN TH_TIPO_PROMOCION TP ON TP.IDTIPOPROMOCION = P.IDTIPOPROMOCION WHERE IDPROMOCION IN (SELECT PZ.IDPROMOCION FROM TH_PROMOCION_ZONA PZ INNER JOIN TH_ZONA Z ON Z.IDZONA = PZ.IDZONA WHERE Z.IDOBRA = @idObra)";
            OleDbParameter          pIdObra          = UtilDA.SetParameters("@idObra", OleDbType.Integer, idObra);
            Promocion               promocion        = null;
            PromocionZona           promocionZona    = null;
            PromocionFuncion        promocionFuncion = null;
            List <Promocion>        ListaPromocion   = new List <Promocion>();
            List <PromocionZona>    listaZona        = null;
            List <PromocionFuncion> listaFuncion     = null;

            using (var dtr = UtilDA.ExecuteReader(cmd, CommandType.Text, sql, cnx, pIdObra))
            {
                while (dtr.Read())
                {
                    promocion = new Promocion()
                    {
                        IdPromocion     = DataConvert.ToInt(dtr["IdPromocion"]),
                        Descripcion     = DataConvert.ToString(dtr["P.Descripcion"]),
                        Estado          = DataConvert.ToString(dtr["P.Estado"]),
                        FechaInicio     = DataConvert.ToDateTime(dtr["FechaInicio"]),
                        FechaFin        = DataConvert.ToDateTime(dtr["FechaFin"]),
                        FechaCreacion   = DataConvert.ToDateTime(dtr["P.FechaCrea"]),
                        UsuarioCreacion = DataConvert.ToString(dtr["P.UserCrea"]),
                        RequiereEmpresa = DataConvert.ToBool(dtr["RequiereEmpresa"]),
                        TipoPromocion   = new TipoPromocion()
                        {
                            IdTipoPromocion = DataConvert.ToInt(dtr["TP.IdTipoPromocion"]),
                            Descripcion     = DataConvert.ToString(dtr["TP.Descripcion"]),
                            Estado          = DataConvert.ToString(dtr["TP.FechaCrea"]),
                            UsuarioCreacion = DataConvert.ToString(dtr["TP.UserCrea"])
                        }
                    };
                    listaZona = new List <PromocionZona>();
                    string         SQLZONA      = "SELECT PZ.PRECIO,Z.IDZONA,Z.NOMBRE,Z.DESCRIPCION,Z.ESTADO,O.IdObra,O.Nombre FROM (TH_PROMOCION_ZONA PZ INNER JOIN TH_ZONA Z ON Z.IDZONA = PZ.IDZONA) INNER JOIN TH_OBRA O ON O.IDOBRA = Z.IDOBRA  WHERE PZ.idpromocion = @idPromocion";
                    OleDbParameter pIdPromocion = UtilDA.SetParameters("@idPromocion", OleDbType.Integer, promocion.IdPromocion);
                    using (var subdtr = UtilDA.ExecuteSubReader(cmd2, CommandType.Text, SQLZONA, cnx, pIdPromocion))
                    {
                        while (subdtr.Read())
                        {
                            promocionZona = new PromocionZona()
                            {
                                Promocion = promocion,
                                Precio    = DataConvert.ToSingle(subdtr["Precio"]),
                                Zona      = new Zona()
                                {
                                    IdZona      = DataConvert.ToInt(subdtr["IdZona"]),
                                    Nombre      = DataConvert.ToString(subdtr["Z.Nombre"]),
                                    Descripcion = DataConvert.ToString(subdtr["Descripcion"]),
                                    Estado      = DataConvert.ToString(subdtr["Estado"]),
                                    Obra        = new Obra()
                                    {
                                        IdObra = DataConvert.ToInt(subdtr["IdObra"]),
                                        Nombre = DataConvert.ToString(subdtr["O.Nombre"])
                                    }
                                }
                            };
                            listaZona.Add(promocionZona);
                        }
                    }

                    listaFuncion = new List <PromocionFuncion>();
                    string         SQLFUNCION          = "SELECT * FROM TH_PROMOCION_FUNCION PF INNER JOIN TH_FUNCION P ON P.IDFUNCION = PF.IDFUNCION WHERE PF.IDPROMOCION = @idPromocion";
                    OleDbParameter pIdPromocionFuncion = UtilDA.SetParameters("@idPromocion", OleDbType.Integer, promocion.IdPromocion);
                    using (var subdtr2 = UtilDA.ExecuteSubReader(cmd3, CommandType.Text, SQLFUNCION, cnx, pIdPromocionFuncion))
                    {
                        while (subdtr2.Read())
                        {
                            promocionFuncion = new PromocionFuncion()
                            {
                                Promocion = promocion,
                                Funcion   = new Funcion()
                                {
                                    IdFuncion = DataConvert.ToInt(subdtr2["P.IdFuncion"]),
                                    Dia       = DataConvert.ToInt(subdtr2["Dia"]),
                                    Horario   = DataConvert.ToString(subdtr2["Horario"]),
                                    Estado    = DataConvert.ToString(subdtr2["Estado"])
                                }
                            };
                            listaFuncion.Add(promocionFuncion);
                        }
                    }

                    promocion.PromocionFunciones = listaFuncion;
                    promocion.PromocionZonas     = listaZona;
                    ListaPromocion.Add(promocion);
                }
            }

            UtilDA.Close(cnx);
            return(ListaPromocion);
        }