private void btnCalcularTotal_Click(object sender, EventArgs e) { double subtotal = 0; double totalIGV = 0; Single DescDescuentos = (Single)0.0; Single DescPack = (Single)0.0; Single DesCategoria = (Single)0.0; Single DescuentoTotal = (Single)0.0; foreach (DocumentoLinea linea in lineasDocumento) { subtotal += linea.PrecioLinea; totalIGV += linea.PrecioLinea * linea.Impuesto; } txtSubtotal.Text = subtotal.ToString("0.00"); txtTotalIGV.Text = totalIGV.ToString("0.00"); if (cliente != null) { /*$$$$$$$$$$ INICIO DESCUENTOS $$$$$$$$$$$$$$$$$*/ //obtengo la linea de documento para analizarla IList<DocumentoLinea> lineasDocumentoCopy = new List<DocumentoLinea>(); //lineasDocumentoCopy = lineasDocumento; foreach (DocumentoLinea doclin in lineasDocumento) { DocumentoLinea objdoc = new DocumentoLinea(); objdoc.Cantidad = doclin.Cantidad; objdoc.PrecioLinea = doclin.PrecioLinea; objdoc.ArticuloXLocal = new ArticuloXLocal(); objdoc.ArticuloXLocal.Articulo = new Articulo(); objdoc.ArticuloXLocal.Articulo.Id = doclin.ArticuloXLocal.Articulo.Id; objdoc.ArticuloXLocal.Articulo.PrecioVenta = doclin.ArticuloXLocal.Articulo.PrecioVenta; lineasDocumentoCopy.Add(objdoc); } /*########### ANALISIS DE PACKSS ###############*/ //Obtengo todos los Packs de la categoria de mi cliente IList<PackXCategoriaCliente> PacksActualesCategoria = new List<PackXCategoriaCliente>(); //le paso el id de categoria del cliente PackXCategoriaClienteBL objPacksCategoria = new PackXCategoriaClienteBL(); PacksActualesCategoria = objPacksCategoria.FindByIdCliente(cliente.CategoriaCliente.Id); IList<ArticuloXPack> ArticulosPack = new List<ArticuloXPack>(); foreach (PackXCategoriaCliente objPack in PacksActualesCategoria) { ArticuloXPackBL objArPack = new ArticuloXPackBL(); ArticulosPack = objArPack.findArticulosXPack(objPack.Pack.Id); //obtengo todos los articulos de ese //para la lista de articulos verifica si estan todas las cantidades en mi linea actual bool cumple = true; int cantidadPacks = -1; foreach (ArticuloXPack objArtpack in ArticulosPack) { bool esArt = false; foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0 && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0 && objArtpack.CantidadPack > 0) { int dif = (int)lineaDoc.Cantidad - (int)objArtpack.CantidadPack; if (cantidadPacks != -1) cantidadPacks = Math.Min(cantidadPacks, dif / (int)objArtpack.CantidadPack); else cantidadPacks = dif / (int)objArtpack.CantidadPack; esArt = true; } if (esArt) break; } if (!esArt) cumple = false; if (!cumple) break; } if (cumple) {//ese pack se puede extraer de la linea actual //extraemos todos los productos cantidadPacks = Math.Min(cantidadPacks, (int)objPack.Pack.CantidadPacks); foreach (ArticuloXPack objArtpack in ArticulosPack) { if (cantidadPacks <= 0) break; foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0 && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0) { lineaDoc.Cantidad -= objArtpack.CantidadPack * cantidadPacks; //para guardar que se uso ese pack } } } Single PrecioOriginal = (Single)0.0; foreach (ArticuloXPack objArtpack in ArticulosPack) PrecioOriginal += (Single)objArtpack.CantidadPack * (Single)cantidadPacks * objArtpack.Articulo.PrecioVenta; if (cantidadPacks > 0) { objPack.Pack.CantidadPacks -= cantidadPacks; objPack.Pack.CantidadUtilizada += cantidadPacks; DescPack += (PrecioOriginal - objPack.Pack.PrecioPack * cantidadPacks); } // se actualizo la linea auxiliars } //fin de iteracion de un PACK } /*########### FIN DE ANALISIS DE PACKSS ###############*/ /*########### ANALISIS DE DESCUENTOS ###############*/ IList<DescuentoXCategoriaCliente> DescuentosActualesCategoria = new List<DescuentoXCategoriaCliente>(); //obtiene todos los descuentos de la categoria cliente DescuentoXCategoriaClienteBL objDescuentoXCategoriaClienteBL = new DescuentoXCategoriaClienteBL(); DescuentosActualesCategoria = objDescuentoXCategoriaClienteBL.FindById(cliente.CategoriaCliente.Id); IList<DescuentoXArticulo> ArticulosDescuento = new List<DescuentoXArticulo>(); //itero sobre cada articulo para que descuente solo una vez foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { bool desconto = false; foreach (DescuentoXCategoriaCliente objDescuentos in DescuentosActualesCategoria) { //obtengo todos los articulos de ese descuento if (desconto) break; DescuentoXArticuloBL objDeArt = new DescuentoXArticuloBL(); ArticulosDescuento = objDeArt.Find(objDescuentos.Descuento); foreach (DescuentoXArticulo objArticulo in ArticulosDescuento) { if (desconto) break; if (objArticulo.Articulo.Id == lineaDoc.ArticuloXLocal.Articulo.Id && lineaDoc.Cantidad > 0) { Single porce = objArticulo.PorcentajeDescuento / (Single)100.0; DescDescuentos += (Single)porce * (Single)lineaDoc.Cantidad * (Single)lineaDoc.ArticuloXLocal.Articulo.PrecioVenta; desconto = true; } } } } } /*########### ANALISIS DE DESCUENTOS ###############*/ DescDescuentos = DescDescuentos + (Single)0.0; DescPack = DescPack + (Single)0.0; DescuentoTotal = DescDescuentos + DescPack; txtPromo.Text = DescDescuentos.ToString("0.00"); txtDescuento.Text = DescuentoTotal.ToString("0.00"); txtDesPac.Text = DescPack.ToString("0.00"); /*SOLO POR AHORA*/ Single total2 = (Single)totalIGV - DescuentoTotal; txtTotal.Text = total2.ToString("0.00"); /*$$$$$$$$$$ FIN DESCUENTOS $$$$$$$$$$$$$$$$$*/ }
private void btnCalcularTotal_Click(object sender, EventArgs e) { double TotalFin = 0; double subtotal = 0; double totalIGV = 0; Single DescDescuentos = (Single)0.0; Single DescPack = (Single)0.0; Single DesCategoria = (Single)0.0; Single DescuentoTotal = (Single)0.0; foreach (DocumentoLinea linea in lineasDocumento) { subtotal += linea.PrecioLinea; if (linea.Impuesto >= 0.012) totalIGV += linea.PrecioLinea * 0.19; } TotalFin = subtotal + totalIGV; if (cliente != null) { /*$$$$$$$$$$ INICIO DESCUENTOS $$$$$$$$$$$$$$$$$*/ //obtengo la linea de documento para analizarla IList<DocumentoLinea> lineasDocumentoCopy; lineasDocumentoCopy = lineasDocumento; /*########### ANALISIS DE PACKSS ###############*/ //Obtengo todos los Packs de la categoria de mi cliente IList<PackXCategoriaCliente> PacksActualesCategoria = new List<PackXCategoriaCliente>(); //le paso el id de categoria del cliente PackXCategoriaClienteBL objPacksCategoria = new PackXCategoriaClienteBL(); PacksActualesCategoria = objPacksCategoria.FindByIdCliente(cliente.CategoriaCliente.Id); IList<ArticuloXPack> ArticulosPack = new List<ArticuloXPack>(); lineasPack = new List<DocumentoLinea>(); //recorro todos los packs foreach (PackXCategoriaCliente objPack in PacksActualesCategoria) { ArticuloXPackBL objArPack = new ArticuloXPackBL(); //obtengo todos los articulos de ese ArticulosPack = objArPack.findArticulosXPack(objPack.Pack.Id); //para la lista de articulos verifica si estan todas las cantidades en mis lineas actual bool cumple = true; int cantidadPacks = -1; foreach (ArticuloXPack objArtpack in ArticulosPack) { bool esArt = false; foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0 && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0 && objArtpack.CantidadPack > 0) { int dif = (int)lineaDoc.Cantidad; if (cantidadPacks != -1) cantidadPacks = Math.Min(cantidadPacks, dif / (int)objArtpack.CantidadPack); else cantidadPacks = dif / (int)objArtpack.CantidadPack; esArt = true; } if (esArt) break; } //si el articulo de ese pack no se encuentra en mi linea if (!esArt) cumple = false; // este pack ya no cumple if (!cumple) break; } //despues de recorrer todos mis articulos del pack if (cumple) { //ese pack se puede extraer de la linea actual //extraemos todos los productos cantidadPacks = Math.Min(cantidadPacks, (int)objPack.Pack.CantidadPacks); foreach (ArticuloXPack objArtpack in ArticulosPack) { if (cantidadPacks <= 0) break; foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { if (lineaDoc.ArticuloXLocal.Articulo.Id == objArtpack.Articulo.Id && lineaDoc.Cantidad > 0 && lineaDoc.Cantidad >= objArtpack.CantidadPack && objArtpack.Pack.CantidadPacks > 0) { lineaDoc.Cantidad -= objArtpack.CantidadPack * cantidadPacks; //para guardar que se uso ese pack } } } DocumentoLinea lineaPack = new DocumentoLinea(); lineaPack.ArticuloXLocal = null; lineaPack.Cantidad = cantidadPacks; lineaPack.CantidadDevuelta = 0; lineaPack.DescuentoXArticulo = null; lineaPack.Documento = documento; lineaPack.Impuesto = 0; lineaPack.Pack = objPack.Pack; lineaPack.PrecioLinea = cantidadPacks * objPack.Pack.PrecioPack; lineasPack.Add(lineaPack); Single PrecioOriginal = (Single)0.0; foreach (ArticuloXPack objArtpack in ArticulosPack) PrecioOriginal += objArtpack.Articulo.PrecioVenta * (Single)objArtpack.CantidadPack; PrecioOriginal *= cantidadPacks; if (cantidadPacks > 0) { objPack.Pack.CantidadPacks -= cantidadPacks; objPack.Pack.CantidadUtilizada += cantidadPacks; DescPack += (PrecioOriginal - objPack.Pack.PrecioPack * cantidadPacks); new PackBL().Grabar(objPack.Pack); } // se actualizo la linea auxiliars } //fin de iteracion de un PACK } /*########### FIN DE ANALISIS DE PACKSS ###############*/ /*########### ANALISIS DE DESCUENTOS ###############*/ IList<DescuentoXCategoriaCliente> DescuentosActualesCategoria = new List<DescuentoXCategoriaCliente>(); //obtiene todos los descuentos de la categoria cliente DescuentoXCategoriaClienteBL objDescuentoXCategoriaClienteBL = new DescuentoXCategoriaClienteBL(); DescuentosActualesCategoria = objDescuentoXCategoriaClienteBL.FindById(cliente.CategoriaCliente.Id); IList<DescuentoXArticulo> ArticulosDescuento = new List<DescuentoXArticulo>(); //itero sobre cada articulo para que descuente solo una vez foreach (DocumentoLinea lineaDoc in lineasDocumentoCopy) { bool desconto = false; foreach (DescuentoXCategoriaCliente objDescuentos in DescuentosActualesCategoria) { //obtengo todos los articulos de ese descuento if (desconto) break; DescuentoXArticuloBL objDeArt = new DescuentoXArticuloBL(); ArticulosDescuento = objDeArt.Find(objDescuentos.Descuento); foreach (DescuentoXArticulo objArticulo in ArticulosDescuento) { if (desconto) break; if (objArticulo.Articulo.Id == lineaDoc.ArticuloXLocal.Articulo.Id && lineaDoc.Cantidad > 0) { Single porce = objArticulo.PorcentajeDescuento / (Single)100.0; Single Desunico = (Single)porce * (Single)lineaDoc.Cantidad * (Single)lineaDoc.ArticuloXLocal.Articulo.PrecioVenta; DescDescuentos += Desunico; desconto = true; lineaDoc.DescuentoXArticulo = objArticulo; //tenemos q crear otro DocumentoLinea lineaPack = new DocumentoLinea(); lineaPack.ArticuloXLocal = lineaDoc.ArticuloXLocal; lineaPack.Cantidad = lineaDoc.Cantidad; lineaPack.CantidadDevuelta = 0; lineaPack.Documento = documento; lineaPack.DescuentoXArticulo = objArticulo; //lineaPack.Impuesto = lineaDoc.ArticuloXLocal.Articulo.IndIGV[0] == 'S' ? (float)0.19 * (lineaDoc.ArticuloXLocal.Articulo.PrecioVenta - lineaDoc.ArticuloXLocal.Articulo.PrecioVenta * (lineaPack.DescuentoXArticulo.PorcentajeDescuento)/(float)100) : 0; lineaPack.Impuesto = lineaDoc.Impuesto; lineaPack.Pack = null; lineaPack.PrecioLinea = (float)lineaDoc.Cantidad * lineaDoc.ArticuloXLocal.Articulo.PrecioVenta; lineasPack.Add(lineaPack); lineaDoc.Cantidad = 0; objDescuentos.Descuento.CantidadUtilizada++; new DescuentoBL().Grabar(objDescuentos.Descuento); } } } } foreach (DocumentoLinea linea in lineasDocumentoCopy) { if (linea.Cantidad > 0) { lineasPack.Add(linea); } } } else{ lineasPack = lineasDocumento; } double TotalFin2 = 0; double subtotal2 = 0; double totalIGV2 = 0; foreach (DocumentoLinea linea in lineasPack) { subtotal2 += linea.PrecioLinea; if (linea.Impuesto >= 0.012) totalIGV2 += linea.PrecioLinea * 0.19; } TotalFin2 = subtotal2 + totalIGV2; txtSubtotal.Text = subtotal.ToString("0.00"); txtTotalIGV.Text = totalIGV.ToString("0.00"); /*########### ANALISIS DE DESCUENTOS ###############*/ DescDescuentos = DescDescuentos + (Single)0.0; DescPack = DescPack + (Single)0.0; DescuentoTotal = DescDescuentos + DescPack; txtPromo.Text = DescDescuentos.ToString("0.00"); txtDescuento.Text = DescuentoTotal.ToString("0.00"); txtDesPac.Text = DescPack.ToString("0.00"); /*SOLO POR AHORA*/ Single total2 = (Single)TotalFin2 - DescDescuentos; txtTotal.Text = total2.ToString("0.00"); /*$$$$$$$$$$ FIN DESCUENTOS $$$$$$$$$$$$$$$$$*/ }
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"); }
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"); }