Example #1
0
        public void RevisarIncidencias()
        {
            foreach (Incidencia incidencia in incidencias)
            {
                try
                {
                    int cant = new IncidenciaBL().GetCantidad(incidencia);
                    string[] descAd = incidencia.DescripcionAdicional.Split(" ".ToCharArray());

                    for (int i = 0; i < cant * 2; i += 2)
                    {
                        ArticuloXLocal artxlocal = new ArticuloXLocalBL().findArticuloXLocal(Convert.ToInt32(descAd[i]), incidencia.Local.Id);
                        int indice = estaIncluido(artxlocal);
                        if (indice>0)
                            articulos[indice].Cantidad+=Convert.ToInt32(descAd[i+1]);
                        else
                        {
                            artxlocal.Cantidad+=Convert.ToInt32(descAd[i+1]);
                            articulos.Add(artxlocal);
                        }
                    }
                }
                catch (NullReferenceException ex){ }
            }
        }
        public void CargarLinea(Articulo articulo)
        {
            ArticuloBL artBL = new ArticuloBL();
            ArticuloXLocal artxlocal =new ArticuloXLocalBL().findArticuloXLocal(articulo.Id, empleado.Local.Id);
            if ( artxlocal == null)
            {
                Utils.Utils.Error(this, "El local no contiene el articulo que solicito");
            }
            else
            {
                try
                {
                    if (!articuloIngresado(articulo))
                    {
                        object[] arreglo = { articulo.Id, articulo.Titulo, "" };
                        dgvArticulos.Rows.Add(arreglo);
                        guardarLinea(articulo);
                    }
                    else Utils.Utils.Error(this, "El articulo ya esta en la lista");

                }
                catch (NullReferenceException ex)
                {
                    Utils.Utils.Error(this, "El articulo no ha sido encontrado");
                }
            }
        }
        private void frmDetalleSolicitudEmitida_Load(object sender, EventArgs e)
        {
            ArticuloXLocalBL artxlocalBL = new ArticuloXLocalBL();
            txbFechaEstimada.Text = solicitud.FechaEsperada.Value.ToShortDateString();
            txbLocalSolicitante.Text = solicitud.LocalOrigen.Nombre;
            txbMovimiento.Text = solicitud.Movimiento;
            txbSolicitado.Text = solicitud.LocalDestino.Nombre;

            try
            {
                foreach (SolicitudTransferenciaLinea linea in solicitud.SolicitudTransferenciaSolicitudTransferenciaLineafk)
                {
                    int cant = 0;

                    if (linea.NroSolicitudTransferencia.Estado != "Emitida")
                        cant = new SolicitudTransferenciaBL().GetCantidadAceptada(linea.NroSolicitudTransferencia, linea.ArticuloXLocal);
                    object[] arreglo = { linea.Id, linea.ArticuloXLocal.Articulo.Titulo, linea.Cantidad,cant  };
                    dgvSolEmitida.Rows.Add(arreglo);
                }
            }
            catch (NullReferenceException ex)
            {
                Utils.Utils.Error(this, "No hay Solicitudes Emitidas");
            }
        }
Example #4
0
        public void RevisarIncidencias()
        {
            foreach (Incidencia incidencia in incidencias)
            {
                try
                {
                    int cant = new IncidenciaBL().GetCantidad(incidencia);
                    string[] descAd = incidencia.DescripcionAdicional.Split(" ".ToCharArray());

                    for (int i = 0; i < cant * 2; i += 2)
                    {
                        ArticuloXLocal artxlocal = new ArticuloXLocalBL().findArticuloXLocal(Convert.ToInt32(descAd[i]), incidencia.Local.Id);
                        int indice = estaIncluido(artxlocal);
                        if (indice>=0)
                            if ((incidencia.TipoIncidencia == "Merma") || (incidencia.TipoIncidencia == "InventarioPerdida"))
                                articulos[indice].Cantidad -= Convert.ToInt32(descAd[i+1]);
                            else
                                articulos[indice].Cantidad += Convert.ToInt32(descAd[i + 1]);
                        else
                        {
                            if ((incidencia.TipoIncidencia == "Merma") || (incidencia.TipoIncidencia == "InventarioPerdida"))
                                artxlocal.Cantidad -= Convert.ToInt32(descAd[i + 1]);
                            else
                                artxlocal.Cantidad += Convert.ToInt32(descAd[i + 1]);
                            articulos.Add(artxlocal);
                        }
                    }
                }
                catch (NullReferenceException ex) { System.Console.WriteLine(ex); }
            }
        }
        public void CargarLinea(Articulo articulo)
        {
            ArticuloXLocalBL artxlocalBL = new ArticuloXLocalBL();
            ArticuloXLocal artxlocal= new ArticuloXLocal();
            try
            {
                if (cmbMovimiento.Text.Equals("SALIDA"))
                   artxlocal = artxlocalBL.findArticuloXLocal(articulo.Id, ((Local)cmbLocalOrigen.SelectedItem).Id);
                else
                    artxlocal = artxlocalBL.findArticuloXLocal(articulo.Id, ((Local)cmbLocalDestino.SelectedItem).Id);
                if (!articuloIngresado(artxlocal))
                {
                    object[] arreglo = { artxlocal.Id, articulo.Titulo, artxlocal.Cantidad, "" };
                    dgvArticulos.Rows.Add(arreglo);
                    guardarLinea(artxlocal);
                }
                else Utils.Utils.Error(this, "El articulo ya esta en la lista");

            }
            catch (NullReferenceException ex)
            {
                Utils.Utils.Error(this, "El local no contiene el articulo que solicito");
            }
        }
 private void frmDetalleSolicitudRecepcion_Load(object sender, EventArgs e)
 {
     ArticuloXLocalBL artxlocalBL = new ArticuloXLocalBL();
     txbFechaEstimada.Text = solicitud.FechaEsperada.Value.ToShortDateString();
     txbLocalSolicitante.Text = solicitud.LocalOrigen.Nombre;
     txbMovimiento.Text = solicitud.Movimiento;
     txbSolicitado.Text = solicitud.LocalDestino.Nombre;
     try
     {
         foreach (SolicitudTransferenciaLinea linea in solicitud.SolicitudTransferenciaSolicitudTransferenciaLineafk)
         {
             object[] arreglo = { linea.Id,linea.ArticuloXLocal.Articulo.Titulo,artxlocalBL.findArticuloXLocal(linea.ArticuloXLocal.Articulo.Id, linea.NroSolicitudTransferencia.LocalOrigen.Id).Cantidad,linea.ArticuloXLocal.Cantidad, linea.Cantidad, linea.Cantidad };
             dgvSolRecep.Rows.Add(arreglo);
         }
     }
     catch (NullReferenceException ex)
     {
         Utils.Utils.Error(this, "Error al cargar de BD");
     }
 }
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (dgvProductos.RowCount == 0)
            {
                if (txtNroDocumento.Text.Equals(""))
                    Utils.Utils.Mensaje("Ingrese el documento asociado a la entrada de productos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                else
                    Utils.Utils.Mensaje("Cargue los datos del documento ingresado", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            /* variables para generar la incidencia */
            bool hayIncidencia = false;
            string descripcionIncidencia = "";
            int cantidadArticulosDiferentes = 0;
            int cantidadDeltaTotal = 0;

            bool ok= true;
            /* Grabo movimiento */
            BE.Movimiento movEntrada = new BE.Movimiento();
            movEntrada.Local = this.local;
            movEntrada.Fecha = System.DateTime.Now;
            movEntrada.TipoMovimiento = "Ingreso";
            new MovimientoBL().Grabar(movEntrada);

            /* Grabo nota de ingreso */
            NotaIngresoSalida notaIngreso = new NotaIngresoSalida();
            notaIngreso.Fecha = System.DateTime.Now;
            notaIngreso.Local = this.local;
            notaIngreso.NroMovimiento = movEntrada;
            new NotaIngresoSalidaBL().Grabar(notaIngreso);

            /* Grabo el detalle de la nota de ingreso y verifico incidencias */
            List<NotaIngresoSalidaLinea> notaLineas = new List<NotaIngresoSalidaLinea>();
            foreach (DataGridViewRow fila in dgvProductos.Rows)
            {
                NotaIngresoSalidaLinea notaIngresoLinea = new NotaIngresoSalidaLinea();
                notaIngresoLinea.CodNota = notaIngreso;
                int cantIngresada = 0;
                if ((fila.Cells["cantIngresada"].Value!= null)
                    &&(int.TryParse(fila.Cells["cantIngresada"].Value.ToString(), out cantIngresada))
                    && int.Parse(fila.Cells["cantPedida"].Value.ToString()) >= cantIngresada)
                    notaIngresoLinea.Cantidad = cantIngresada;
                else
                {
                    ok = false;
                    fila.Cells["cantIngresada"].Style.BackColor = Color.RosyBrown;
                }
                if ((notaIngresoLinea.CodAnaquel = (Anaquel)fila.Cells["cboAnaquel"].Value) == null)
                {
                    ok = false;
                    fila.Cells["cboAnaquel"].Style.BackColor = Color.RosyBrown;
                }
                if (ok)
                {
                    notaLineas.Add(notaIngresoLinea);
                    if (int.Parse(fila.Cells["cantPedida"].Value.ToString()) != int.Parse(fila.Cells["cantIngresada"].Value.ToString()))
                    {
                        hayIncidencia = true;
                        descripcionIncidencia += fila.Cells["codigo"];
                        int diferencia = int.Parse(fila.Cells["cantPedida"].Value.ToString()) - int.Parse(fila.Cells["cantIngresada"].Value.ToString());
                        descripcionIncidencia += " " + diferencia.ToString() + " ";
                        cantidadArticulosDiferentes++;
                        cantidadDeltaTotal += diferencia;
                    }
                }
            }

            if (ok)
            {
                /* Agregar el articulo por local a la lista */
                int i = 0;
                if (ordenCompra != null)
                {
                    foreach (OrdenCompraLinea auxOCL in ordenCompra.OrdenCompraOrdenCompraLineafk)
                    {
                        ArticuloXLocal axl = new ArticuloXLocalBL().findArticuloXLocal(auxOCL.ArticuloXProveedor.Articulo.Id, local.Id);
                        if (axl != null) axl.Cantidad += notaLineas[i].Cantidad;
                        else
                        {
                            axl = new ArticuloXLocal();
                            axl.Local = this.local;
                            axl.Cantidad = notaLineas[i].Cantidad;
                            axl.Articulo = auxOCL.ArticuloXProveedor.Articulo;
                        }
                        new ArticuloXLocalBL().Actualizar(axl);
                        notaLineas[i].ArticuloXLocal = axl;
                        i++;
                    }

                }
                else if (consignacion != null)
                {
                    foreach (DocumentoConsignacionLinea auxConsigL in consignacion.DocumentoConsignacionDocumentoConsignacionLineafk)
                    {
                        ArticuloXLocal axl = new ArticuloXLocalBL().findArticuloXLocal(auxConsigL.ArticuloXProveedor.Articulo.Id, local.Id);
                        if (axl != null) axl.Cantidad += notaLineas[i].Cantidad;
                        else
                        {
                            axl = new ArticuloXLocal();
                            axl.Local = this.local;
                            axl.Cantidad = notaLineas[i].Cantidad;
                            axl.Articulo = auxConsigL.ArticuloXProveedor.Articulo;
                        }
                        new ArticuloXLocalBL().Actualizar(axl);
                        notaLineas[i].ArticuloXLocal = axl;
                        i++;
                    }
                }
                else if (transferencia != null)
                {
                    foreach (TransferenciaLinea auxTransfL in transferencia.TransferenciaTransferenciaLineafk)
                    {
                        ArticuloXLocal axl = new ArticuloXLocalBL().findArticuloXLocal(auxTransfL.ArticuloXLocal.Articulo.Id, local.Id);
                        if (axl != null) axl.Cantidad += notaLineas[i].Cantidad;
                        else
                        {
                            axl = new ArticuloXLocal();
                            axl.Local = this.local;
                            axl.Cantidad = notaLineas[i].Cantidad;
                            axl.Articulo = auxTransfL.ArticuloXLocal.Articulo;
                        }
                        new ArticuloXLocalBL().Actualizar(axl);
                        notaLineas[i].ArticuloXLocal = axl;
                        i++;
                    }
                }

                if (hayIncidencia)
                {
                    //Ingresar incidencia
                    Incidencia incidencia = new Incidencia();
                    incidencia.DescripcionAdicional = descripcionIncidencia + " - AUTO - Ingreso de articulos por " + cboTipoMovimiento.Text + " inconsistente con documento nro. " + txtNroDocumento.Text;
                    incidencia.Estado = "Creada";
                    incidencia.Fecha = DateTime.Now;
                    incidencia.Local = this.local;
                    incidencia.TipoIncidencia = "Recepción";
                    incidencia.NroMovimiento = movEntrada;

                    //creacion de objetos incidencialinea
                    IncidenciaLinea incidlinea1 = new IncidenciaLinea();
                    IncidenciaLinea incidlinea2 = new IncidenciaLinea();
                    //Cantidad de articulos diferentes
                    incidlinea1.Cantidad = cantidadArticulosDiferentes;
                    incidlinea1.NroIncidencia = incidencia;
                    //cantidad total de arituclos dañados
                    incidlinea2.Cantidad = cantidadDeltaTotal;
                    incidlinea2.NroIncidencia = incidencia;

                    //GRABAR MOVIMIENTO E INCIDENCIA
                    //new MovimientoBL().Grabar(movEntrada);
                    //new NotaIngresoSalidaBL().Grabar(notaIngreso);
                    new IncidenciaBL().Grabar(incidencia);
                    new IncidenciaLineaBL().Grabar(incidlinea1);
                    new IncidenciaLineaBL().Grabar(incidlinea2);

                }
                new NotaIngresoSalidaLineaBL().Grabar(notaLineas);
                Utils.Utils.Mensaje("Se han registrado los productos ingresados", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Dispose();
            }
            else Utils.Utils.Error(this, "Ha ocurrido un error en la grabación");
        }
        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            int cantidadDevolucion;
            DocumentoLineaBL objDocLineaBL = new DocumentoLineaBL();
            ArticuloXLocalBL objArtxLocal=new ArticuloXLocalBL();
            PackBL objPackBL=new PackBL();
            IList<DocumentoLinea> lineasNotaCredito=new List<DocumentoLinea>();
            List<NotaIngresoSalidaLinea> lineasNotaIngreso = new List<NotaIngresoSalidaLinea>();
            ArticuloXPackBL objArtxPack=new ArticuloXPackBL();
            bool crearDevolucion = false; //si al menos una de las cantidades devueltas>0 ,se procede a registrar la devolucion

            calcularDevolucion();

            for (int i = 0; i < dgvArticulos.Rows.Count; i++) //actualizando los docs lineas q son de articulos
            {
               cantidadDevolucion=Int32.Parse(dgvArticulos.Rows[i].Cells["CantidadDevolucion"].Value.ToString());

               if (cantidadDevolucion>0){

                   crearDevolucion = true;

                   //docLineaVenta
                   listaArticulos[i].CantidadDevuelta = listaArticulos[i].CantidadDevuelta + cantidadDevolucion;
                   objDocLineaBL.Grabar(listaArticulos[i]); //las lineas fueron actualizadas cada vez q se calculaban los montos de devolucion

                   //actualizamos la cantidad de articulos en EL LOCAL EN Q SE REALIZA LA DEVOLUCION
                   ArticuloXLocal artxlocal=objArtxLocal.findArticuloEnLocal(listaArticulos[i].ArticuloXLocal.Articulo.Id,empleado.Local.Id);
                   artxlocal.Cantidad=artxlocal.Cantidad+cantidadDevolucion;
                   objArtxLocal.Actualizar(artxlocal);

                   DocumentoLinea lineaNotaCredito=new DocumentoLinea();

                   lineaNotaCredito.Cantidad=cantidadDevolucion;
                   lineaNotaCredito.Impuesto=listaArticulos[i].Impuesto;
                   lineaNotaCredito.PrecioLinea=(float)(listaArticulos[i].PrecioLinea*cantidadDevolucion/listaArticulos[i].Cantidad);
                   lineaNotaCredito.ArticuloXLocal=listaArticulos[i].ArticuloXLocal;
                   lineaNotaCredito.CantidadDevuelta=0;
                   lineaNotaCredito.DescuentoXArticulo=listaArticulos[i].DescuentoXArticulo;

                   NotaIngresoSalidaLinea lineaNotaIngreso = new NotaIngresoSalidaLinea();
                   lineaNotaIngreso.Cantidad = cantidadDevolucion;
                   lineaNotaIngreso.ArticuloXLocal = artxlocal;

                   lineasNotaIngreso.Add(lineaNotaIngreso);
                   lineasNotaCredito.Add(lineaNotaCredito);
               }
            }

            for (int i = 0; i < dgvPacks.Rows.Count; i++)
            {
                cantidadDevolucion = Int32.Parse(dgvPacks.Rows[i].Cells["CantidadDev"].Value.ToString());

                if (cantidadDevolucion > 0)
                {
                    crearDevolucion = true;

                    //Pack
                    listaPacks[i].Pack.CantidadUtilizada = listaPacks[i].Pack.CantidadUtilizada - cantidadDevolucion;
                    objPackBL.Grabar(listaPacks[i].Pack);

                    //Doclinea Venta
                    listaPacks[i].CantidadDevuelta = listaPacks[i].CantidadDevuelta + cantidadDevolucion;
                    objDocLineaBL.Grabar(listaPacks[i]);

                    //ArticuloXLocal

                    IList<ArticuloXPack> articulosPack = objArtxPack.findArticulosXPack(listaPacks[i].Pack.Id);

                    foreach (ArticuloXPack artxpack in articulosPack)
                    {
                        ArticuloXLocal artxlocal = objArtxLocal.findArticuloEnLocal(artxpack.Articulo.Id, empleado.Local.Id);
                        artxlocal.Cantidad = artxlocal.Cantidad + artxpack.CantidadPack * cantidadDevolucion;
                        objArtxLocal.Actualizar(artxlocal);

                        //creamos una linea de ingreso para el producto del pack
                        NotaIngresoSalidaLinea lineaNotaIngreso = new NotaIngresoSalidaLinea();
                        lineaNotaIngreso.Cantidad = cantidadDevolucion*artxpack.CantidadPack;
                        lineaNotaIngreso.ArticuloXLocal = artxlocal;

                        lineasNotaIngreso.Add(lineaNotaIngreso);
                    }

                    DocumentoLinea lineaNotaCredito = new DocumentoLinea();

                    lineaNotaCredito.Cantidad = cantidadDevolucion;
                    lineaNotaCredito.Impuesto = listaPacks[i].Impuesto;
                    lineaNotaCredito.PrecioLinea = (float)(listaPacks[i].Pack.PrecioPack*cantidadDevolucion);
                    lineaNotaCredito.CantidadDevuelta = 0;
                    lineaNotaCredito.Pack = listaPacks[i].Pack;

                    lineasNotaCredito.Add(lineaNotaCredito);
                }
            }

            //creamos el DOCUMENTO

            if (crearDevolucion)
            {

                Documento documento = new Documento();
                documento.FechaEmision = DateTime.Today;
                documento.Estado = "Registrado";
                documento.Total = totalDevolucion;
                documento.Caja = new RegistroCajaBL().DameCaja(empleado);
                documento.NroDocumentoVenta = Int32.Parse(empleado.Local.Id + "" + empleado.Id);
                documento.Cliente = documentoVentaActual.Cliente;
                documento.FechaAnulacion = DateTime.Today;

                //creamos la NOTA DE CREDITO

                NotaCredito notaCred = new NotaCredito();
                notaCred.MontoDevolucion = totalDevolucion;
                notaCred.Motivo = richTxtMotivo.Text;
                notaCred.DocVenta = new DocVentaBL().findById(documentoVentaActual.Id.ToString());

                new NotaCreditoBL().Devolver(documento, notaCred, lineasNotaCredito, lineasNotaIngreso);
                Utils.Utils.OK(Utils.Utils.REGISTRO_OK);
            }

            else

                Utils.Utils.Error(null,"No se puede registrar la Nota de Crédito porque ningún producto fue devuelto");
        }
Example #9
0
        private void llenarGrilla()
        {
            incidencias = new IncidenciaBL().GetAllBajas();

            dgvIncidencias.Rows.Clear();
            if (incidencias != null)
            {
                if (incidencias.Count > 0)
                {
                    try
                    {
                        RevisarIncidencias();
                        //crea una lista de articuloxlocal a partir de las lineas de incidencia
                        foreach (ArticuloXLocal articulo in articulos)
                        {
                            string cantidades = "0";
                            ArticuloXLocal art=new ArticuloXLocalBL().findArticuloXLocalxId(articulo.Id);
                            if (art!=null)
                            {
                                cantidades = art.Cantidad.ToString();
                            }
                            String[] datos = { Convert.ToString(articulo.Id), articulo.Articulo.Titulo, articulo.Local.Nombre, cantidades, articulo.Cantidad.ToString() };
                            dgvIncidencias.Rows.Add(datos);
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex);
                    }
                }
                else
                    Utils.Utils.Mensaje("No se obtuvieron resultados", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Example #10
0
        /*public Incidencia cargarIncidenciaLinea(int nroIncidencia)
        {
            string squery = null;
            try
            {
                return new IncidenciaDA().cargarIncidenciaLinea(nroIncidencia);
            }
            catch (Exception e)
            {
                return null;
            }
        }*/
        public List<object[]> GetListaDatosDevolucion(Incidencia incidencia, Local local)
        {
            List<object[]> listaObjetos = null;
            int cant = new IncidenciaBL().GetCantidad(incidencia);
            string[] listaIncidencias = incidencia.DescripcionAdicional.Split(" ".ToCharArray());

            for (int i = 0; i < cant*2 ;i+=2 )
                {
                    int idArticulo = 0;
                    int.TryParse(listaIncidencias[i],out idArticulo);
                    ArticuloXLocal axl = new ArticuloXLocalBL().findArticuloEnLocal(idArticulo, local.Id);
                    int cantidadDevuelta = 0;
                    int.TryParse(listaIncidencias[i+1],out cantidadDevuelta);
                    object [] dupla = {axl, cantidadDevuelta};
                    listaObjetos.Add(dupla);
                }

            return listaObjetos;
        }
        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            int cantidadDevolucion;
            DocumentoLineaBL objDocLineaBL = new DocumentoLineaBL();
            ArticuloXLocalBL objArtxLocal=new ArticuloXLocalBL();
            PackBL objPackBL=new PackBL();
            IList<DocumentoLinea> lineasNotaCredito=new List<DocumentoLinea>();
            List<NotaIngresoSalidaLinea> lineasNotaIngreso = new List<NotaIngresoSalidaLinea>();
            ArticuloXPackBL objArtxPack=new ArticuloXPackBL();
            bool crearDevolucion = false; //si al menos una de las cantidades devueltas>0 ,se procede a registrar la devolucion

            calcularDevolucion();

            if (dgvArticulos.Rows.Count == 0 && dgvPacks.Rows.Count == 0)
            {
                Utils.Utils.Error(null, "No se ha ingresado un documento de venta");
                return;
            }

            if (empleado.Local.Estado=="Inactivo"){
                Utils.Utils.Error(null, "No se puede registrar la devolucion ya que el local se encuentra inactivo");
                return;
            }

            for (int i = 0; i < dgvArticulos.Rows.Count; i++)
            {
                dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.White;
            }

            for (int i = 0; i < dgvPacks.Rows.Count; i++)
            {
                dgvPacks.Rows[i].DefaultCellStyle.BackColor = Color.White;
            }

            for (int i = 0; i < dgvArticulos.Rows.Count; i++) //actualizando los docs lineas q son de articulos
            {
               cantidadDevolucion=Int32.Parse(dgvArticulos.Rows[i].Cells["CantidadDevolucion"].Value.ToString());

               if (cantidadDevolucion > 0)
               {
                   crearDevolucion = true;

                   //docLineaVenta
                   listaArticulos[i].CantidadDevuelta = listaArticulos[i].CantidadDevuelta + cantidadDevolucion;
                   objDocLineaBL.Grabar(listaArticulos[i]); //las lineas fueron actualizadas cada vez q se calculaban los montos de devolucion

                   //actualizamos la cantidad de articulos en EL LOCAL EN Q SE REALIZA LA DEVOLUCION
                   ArticuloXLocal artxlocal = objArtxLocal.findArticuloEnLocal(listaArticulos[i].ArticuloXLocal.Articulo.Id, empleado.Local.Id);
                   artxlocal.Cantidad = artxlocal.Cantidad + cantidadDevolucion;
                   objArtxLocal.Actualizar(artxlocal);

                   DocumentoLinea lineaNotaCredito = new DocumentoLinea();

                   lineaNotaCredito.Cantidad = cantidadDevolucion;
                   lineaNotaCredito.Impuesto = listaArticulos[i].Impuesto;
                   lineaNotaCredito.PrecioLinea = (float)(listaArticulos[i].PrecioLinea * cantidadDevolucion / listaArticulos[i].Cantidad);
                   lineaNotaCredito.ArticuloXLocal = listaArticulos[i].ArticuloXLocal;
                   lineaNotaCredito.CantidadDevuelta = 0;
                   lineaNotaCredito.DescuentoXArticulo = listaArticulos[i].DescuentoXArticulo;

                   NotaIngresoSalidaLinea lineaNotaIngreso = new NotaIngresoSalidaLinea();
                   lineaNotaIngreso.Cantidad = cantidadDevolucion;
                   lineaNotaIngreso.ArticuloXLocal = artxlocal;

                   lineasNotaIngreso.Add(lineaNotaIngreso);
                   lineasNotaCredito.Add(lineaNotaCredito);
               }
               else
               {
                   dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown;
               }
            }

            for (int i = 0; i < dgvPacks.Rows.Count; i++)
            {
                cantidadDevolucion = Int32.Parse(dgvPacks.Rows[i].Cells["CantidadDev"].Value.ToString());

                if (cantidadDevolucion > 0)
                {
                    crearDevolucion = true;

                    //Pack
                    listaPacks[i].Pack.CantidadUtilizada = listaPacks[i].Pack.CantidadUtilizada - cantidadDevolucion;
                    objPackBL.Grabar(listaPacks[i].Pack);

                    //Doclinea Venta
                    listaPacks[i].CantidadDevuelta = listaPacks[i].CantidadDevuelta + cantidadDevolucion;
                    objDocLineaBL.Grabar(listaPacks[i]);

                    //ArticuloXLocal

                    IList<ArticuloXPack> articulosPack = objArtxPack.findArticulosXPack(listaPacks[i].Pack.Id);

                    foreach (ArticuloXPack artxpack in articulosPack)
                    {
                        ArticuloXLocal artxlocal = objArtxLocal.findArticuloEnLocal(artxpack.Articulo.Id, empleado.Local.Id);
                        artxlocal.Cantidad = artxlocal.Cantidad + artxpack.CantidadPack * cantidadDevolucion;
                        objArtxLocal.Actualizar(artxlocal);

                        //creamos una linea de ingreso para cada producto del pack
                        NotaIngresoSalidaLinea lineaNotaIngreso = new NotaIngresoSalidaLinea();
                        lineaNotaIngreso.Cantidad = cantidadDevolucion*artxpack.CantidadPack;
                        lineaNotaIngreso.ArticuloXLocal = artxlocal;

                        lineasNotaIngreso.Add(lineaNotaIngreso);
                    }

                    DocumentoLinea lineaNotaCredito = new DocumentoLinea();

                    lineaNotaCredito.Cantidad = cantidadDevolucion;
                    lineaNotaCredito.Impuesto = listaPacks[i].Impuesto;
                    lineaNotaCredito.PrecioLinea = (float)(listaPacks[i].Pack.PrecioPack*cantidadDevolucion);
                    lineaNotaCredito.CantidadDevuelta = 0;
                    lineaNotaCredito.Pack = listaPacks[i].Pack;

                    lineasNotaCredito.Add(lineaNotaCredito);
                }

                else
                {
                    dgvPacks.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown;

                }
            }

            //creamos el DOCUMENTO

            if (crearDevolucion)
            {

                Documento documento = new Documento();
                documento.FechaEmision = DateTime.Today;
                documento.FechaAnulacion = null;
                documento.TipoDocumento = "NotaCredito";
                documento.Estado = "Registrado";
                documento.Total = totalDevolucion;
                documento.Subtotal = subtotal;
                documento.Caja = new RegistroCajaBL().DameCaja(empleado);
               // documento.NroDocumentoVenta = Int32.Parse(empleado.Local.Id + "" +1710);
                documento.Cliente = documentoVentaActual.Cliente;

                //creamos la NOTA DE CREDITO

                NotaCredito notaCred = new NotaCredito();
                notaCred.MontoDevolucion = totalDevolucion;
                notaCred.Motivo = richTxtMotivo.Text;
                notaCred.DocVenta = new DocVentaBL().findById(documentoVentaActual.Id.ToString());

                new NotaCreditoBL().Devolver(documento, notaCred, lineasNotaCredito, lineasNotaIngreso);

                Utils.Utils.OK(Utils.Utils.REGISTRO_OK);

                if (Utils.Utils.ContinuarOperacion("Desea exportar el documento?"))
                {
                    NotaCreditoDatos dsNotaCredito = new NotaCreditoBL().exportarDocumento(documento.NroDocumentoVenta.ToString());//, notaCred, lineasNotaCredito);

                    new frmDocumentoNotaCredito(dsNotaCredito).ShowDialog(this);
                }

                limpiarCampos();
            }

            else

                Utils.Utils.Error(null,"Las cantidades sombreadas no son válidas");
        }
        private void btnImprimirTomaControl_Click(object sender, EventArgs e)
        {
            if (revisionesPendientes == null || dgvRevisiones.SelectedRows.Count == 0)
            {
                Utils.Utils.Error(null, "Debe seleccionar una revisión pendiente");
                return;
            }

            String cadenaId = dgvRevisiones.SelectedRows[0].Cells["Revision"].Value.ToString();
            RevisionInventario revision = null;
            foreach (RevisionInventario rev in revisionesPendientes)
            {
                if (rev.Id.ToString() == cadenaId)
                {
                    revision = rev;
                    break;
                }
            }

            Revisiones dsRevision = new Revisiones();

            Local local = revision.Local;

            #region "Local"
            Revisiones.LocalRow filaLocal = dsRevision.Local.NewLocalRow();

            filaLocal.Direccion = local.Direccion;
            filaLocal.estado = local.Estado;
            filaLocal.fechaApertura = local.FechaApertura == null ? DateTime.MinValue : local.FechaApertura.Value;
            filaLocal.IdLocal = local.Id;
            filaLocal.Nombre = local.Nombre;
            filaLocal.Telefono = local.Telefono;

            dsRevision.Local.AddLocalRow(filaLocal);
            #endregion

            #region "RevisionInventario"
            dsRevision.RevisionInventario.AddRevisionInventarioRow(
                revision.FechaRevision == null ? DateTime.MinValue : revision.FechaRevision.Value,
                revision.HoraRevision == null ? DateTime.MinValue : revision.HoraRevision.Value,
                revision.Empleado.Id,
                filaLocal,
                revision.NroControl.Id,
                revision.Descripcion);
            #endregion
            ArticuloXLocalBL artxlocBL = new ArticuloXLocalBL();

            //Guille
            IList<ArticuloXLocal> listaArtXLoc = artxlocBL.buscarTodosEnLocal(local.Id);
            int i = 1;
            //hasta aqui

            foreach (ArticuloXLocal articuloXLocal in local.LocalArticuloXLocalfk)
            {
                #region "Articulo"
                Articulo articulo = articuloXLocal.Articulo;

                Revisiones.ArticuloRow filaArticulo = dsRevision.Articulo.FindByIdArticulo(articulo.Id);

                if (filaArticulo == null)
                {
                    filaArticulo = dsRevision.Articulo.NewArticuloRow();

                    filaArticulo.Anho = articulo.Anho;
                    filaArticulo.AutorDirector = articulo.AutorDirector;
                    filaArticulo.Categoria = articulo.Categoria.Id;
                    filaArticulo.CodigoArticulo = articulo.CodigoArticulo;
                    filaArticulo.Edicion = articulo.Edicion;
                    filaArticulo.EditorialProductora = articulo.EditorialProductora;
                    filaArticulo.Estado = articulo.Estado;
                    filaArticulo.Formato = articulo.Formato;
                    filaArticulo.IdArticulo = articulo.Id;
                    filaArticulo.IndIGV = articulo.IndIGV;
                    filaArticulo.ISBN = articulo.ISBN;
                    filaArticulo.PrecioVenta = articulo.PrecioVenta;
                    filaArticulo.Tipo = articulo.Tipo;
                    filaArticulo.Titulo = articulo.Titulo;

                    dsRevision.Articulo.AddArticuloRow(filaArticulo);
                }
                #endregion

                #region "ArticuloXLocal"
                Revisiones.ArticuloXLocalRow filaArticuloXLocal = dsRevision.ArticuloXLocal.NewArticuloXLocalRow();

                filaArticuloXLocal.ArticuloRow = filaArticulo;
                filaArticuloXLocal.Cantidad = articuloXLocal.Cantidad==null?0:articuloXLocal.Cantidad.Value;
                filaArticuloXLocal.IdArticulo = articuloXLocal.Articulo.Id;
                filaArticuloXLocal.IdArticuloXLocal = articuloXLocal.Id;
                filaArticuloXLocal.IdLocal = articuloXLocal.Local.Id;
                filaArticuloXLocal.LocalRow = filaLocal;

                dsRevision.ArticuloXLocal.AddArticuloXLocalRow(filaArticuloXLocal);
                #endregion
            }

            foreach (Zona zona in local.LocalZonafk)
            {
                #region "Zona"
                Revisiones.ZonaRow filaZona = dsRevision.Zona.NewZonaRow();

                filaZona.Anaqueles = zona.Anaqueles == null ? 0 : zona.Anaqueles.Value;
                filaZona.CodZona = zona.Id;
                filaZona.DescZona = zona.DescZona;
                filaZona.IdLocal = zona.Local.Id;
                //filaZona.LocalRow = filaLocal;

                dsRevision.Zona.AddZonaRow(filaZona);
                #endregion

                foreach (Anaquel anaquel in zona.ZonaAnaquelfk)
                {
                    #region "Anaquel"
                    Revisiones.AnaquelRow filaAnaquel = dsRevision.Anaquel.NewAnaquelRow();

                    filaAnaquel.CodAnaquel = anaquel.Id;
                    filaAnaquel.CodZona = anaquel.CodZona.Id;
                    filaAnaquel.Divisiones = anaquel.Divisiones == null ? 0 : anaquel.Divisiones.Value;
                    filaAnaquel.Nombre = anaquel.Nombre;
                    filaAnaquel.ZonaRow = filaZona;

                    dsRevision.Anaquel.AddAnaquelRow(filaAnaquel);
                    #endregion
                    //Guille
                    List<AnaquelXArticuloXLocal> AnaqXArtXLoc = new List<AnaquelXArticuloXLocal>();

                    foreach (ArticuloXLocal art in listaArtXLoc)
                    {

                        AnaquelXArticuloXLocal AnXArXLo = new AnaquelXArticuloXLocal();
                        AnXArXLo.ArticuloXLocal = art;
                        AnXArXLo.CodAnaquel = anaquel;
                        AnXArXLo.Cantidad = 0;
                        AnXArXLo.Id = i;
                        i++;
                        AnaqXArtXLoc.Add(AnXArXLo);
                    }

                    //hasta aqui

                    foreach (AnaquelXArticuloXLocal anaquelXArticuloXLocal in AnaqXArtXLoc)
                    {
                        #region "AnaquelXArticuloXLocal"
                        Revisiones.AnaquelXArticuloXLocalRow filaAnaquelXArticuloXLocal = dsRevision.AnaquelXArticuloXLocal.NewAnaquelXArticuloXLocalRow();

                        filaAnaquelXArticuloXLocal.AnaquelRow = filaAnaquel;
                        Revisiones.ArticuloXLocalRow filaArticuloXLocal = dsRevision.ArticuloXLocal.FindByIdArticuloXLocal(anaquelXArticuloXLocal.ArticuloXLocal.Id);
                        filaAnaquelXArticuloXLocal.ArticuloXLocalRow = filaArticuloXLocal;
                        filaAnaquelXArticuloXLocal.Cantidad = anaquelXArticuloXLocal.Cantidad == null ? 0 : anaquelXArticuloXLocal.Cantidad.Value;
                        filaAnaquelXArticuloXLocal.CodAnaquel = anaquelXArticuloXLocal.CodAnaquel.Id;
                        filaAnaquelXArticuloXLocal.IdAnaquelXArticuloXLocal = anaquelXArticuloXLocal.Id;
                        filaAnaquelXArticuloXLocal.IdArticuloXLocal = (int)filaArticuloXLocal["IdArticuloXLocal"];

                        dsRevision.AnaquelXArticuloXLocal.AddAnaquelXArticuloXLocalRow(filaAnaquelXArticuloXLocal);
                        #endregion
                    }
                    AnaqXArtXLoc = null;
                }
            }
            new frmVistaReporteRevision(dsRevision).ShowDialog(this);
        }
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            bool ok= true;
            /* Grabo movimiento */
            Movimiento movEntrada = new Movimiento();
            movEntrada.Local = this.local;
            movEntrada.Fecha = System.DateTime.Now;
            new MovimientoBL().Grabar(movEntrada);

            /* Grabo nota de ingreso */
            NotaIngresoSalida notaIngreso = new NotaIngresoSalida();
            notaIngreso.Fecha = System.DateTime.Now;
            notaIngreso.Local = this.local;
            notaIngreso.NroMovimiento = movEntrada;
            new NotaIngresoSalidaBL().Grabar(notaIngreso);

            /* Grabo el detalle de la nota de ingreso y verifico incidencias */
            List<NotaIngresoSalidaLinea> notaLineas = new List<NotaIngresoSalidaLinea>();
            foreach (DataGridViewRow fila in dgvProductos.Rows)
            {
                NotaIngresoSalidaLinea notaIngresoLinea = new NotaIngresoSalidaLinea();
                notaIngresoLinea.CodNota = notaIngreso;
                int cantIngresada = 0;
                if ((fila.Cells["cantIngresada"].Value!= null)&&(int.TryParse(fila.Cells["cantIngresada"].Value.ToString(), out cantIngresada)))
                    notaIngresoLinea.Cantidad = cantIngresada;
                else
                {
                    ok = false;
                    fila.Cells["cantIngresada"].Style.BackColor = Color.RosyBrown;
                }
                if ((notaIngresoLinea.CodAnaquel = (Anaquel)fila.Cells["cboAnaquel"].Value) == null)
                {
                    ok = false;
                    fila.Cells["cboAnaquel"].Style.BackColor = Color.RosyBrown;
                }
                if (ok)
                {
                    notaLineas.Add(notaIngresoLinea);
                    if (int.Parse(fila.Cells["cantPedida"].Value.ToString()) != int.Parse(fila.Cells["cantIngresada"].Value.ToString()))
                    {
                        //Ingresar incidencia
                        Incidencia incidencia = new Incidencia();
                        incidencia.DescripcionAdicional = "AUTO - Ingreso de articulos por "+ cboTipoMovimiento.Text +  " inconsistente con documento nro. " + txtNroDocumento.Text;
                        incidencia.Estado = "CREADA";
                        incidencia.Fecha = DateTime.Today;
                        incidencia.Local = this.local;
                        incidencia.TipoIncidencia = "RECEPCION";
                        incidencia.NroMovimiento = movEntrada;
                        new IncidenciaBL().Grabar(incidencia);
                    }
                }
            }

            if (ok)
            {
                /* Agregar el articulo por local a la lista */
                int i = 0;
                foreach (OrdenCompraLinea auxOCL in ordenCompra.OrdenCompraOrdenCompraLineafk)
                {
                    ArticuloXLocal axl = new ArticuloXLocalBL().findArticuloXLocal(auxOCL.ArticuloXProveedor.Articulo.Id, local.Id);
                    if (axl != null) axl.Cantidad += notaLineas[i].Cantidad;
                    else
                    {
                        axl = new ArticuloXLocal();
                        axl.Local = this.local;
                        axl.Cantidad = notaLineas[i].Cantidad;
                        axl.Articulo = auxOCL.ArticuloXProveedor.Articulo;
                    }
                    new ArticuloXLocalBL().Actualizar(axl);
                    notaLineas[i].ArticuloXLocal = axl;
                    i++;
                }

                new NotaIngresoSalidaLineaBL().Grabar(notaLineas);
                Utils.Utils.Mensaje("Se han registrado los productos ingresados", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Dispose();
            }
            else Utils.Utils.Error(this, "Ha ocurrido un error en la grabación");
        }