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 llenarGrillas() { double totalImpuestos; float descuentoUnit, precioVenta, total; int filaArt = 0; int filaPack = 0; dgvArticulos.Rows.Clear(); dgvPacks.Rows.Clear(); listaArticulos = new List<DocumentoLinea>(); listaPacks = new List<DocumentoLinea>(); listaLineasDevolucion = new List<DocumentoLinea>(); this.totalDevolucion = 0; IList<DocumentoLinea> listadocLinea = new DocumentoLineaBL().findByIdDocumento(this.documentoVenta.Id.ToString()); DescuentoXArticuloBL objDescXArtBL = new DescuentoXArticuloBL(); foreach (DocumentoLinea linea in listadocLinea) { if (linea.Pack == null) { descuentoUnit = 0; precioVenta = (float)linea.PrecioLinea / (float)linea.Cantidad; if (linea.DescuentoXArticulo != null) //si es un articulo con descuento { // DescuentoXArticulo descxArt=objDescXArtBL.findById(linea.DescuentoXArticulo.ToString()); //descuentoUnit =(float)descxArt.PorcentajeDescuento; descuentoUnit = linea.DescuentoXArticulo.PorcentajeDescuento; } totalImpuestos = linea.PrecioLinea * linea.Impuesto; total = (float)(precioVenta*(linea.Cantidad-linea.CantidadDevuelta) + totalImpuestos - descuentoUnit *linea.Cantidad); object[] row = { linea.ArticuloXLocal.Articulo.CodigoArticulo, linea.ArticuloXLocal.Articulo.Titulo, linea.ArticuloXLocal.Articulo.Tipo,linea.Impuesto, precioVenta,descuentoUnit,linea.Cantidad,linea.CantidadDevuelta,0,0}; dgvArticulos.Rows.Add(row); listaArticulos.Add(linea); filaArt++; } else //si la linea trata de un pack,agregamos este a la grilla de packs { object[] row = { linea.Pack.CodigoPack, linea.Pack.Nombre, linea.Pack.PrecioPack, linea.Cantidad,linea.CantidadDevuelta, 0, 0 }; dgvPacks.Rows.Add(row); listaPacks.Add(linea); filaPack++; } } agregarControlesGrilla(); this.lblTotalVentas.Text = documentoVenta.Total.ToString(); if (documentoVenta.Cliente != null) this.lblCliente.Text = documentoVenta.Cliente.Nombre; this.linkNroDocumento.Text = documentoVenta.NroDocumentoVenta.ToString(); this.lblFechaVenta.Text = documentoVenta.FechaEmision.ToString(); documentoVentaActual = documentoVenta; documentoVenta = null; }
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 btnAceptar_Click(object sender, EventArgs e) { // llenarCategoriaClientes(); if (validarCampos()) { bool ok = true; for (int i = 0; i < dgvArticulos.Rows.Count; i++) { dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.White; } // total = 0; for (int i = 0; i < dgvArticulos.Rows.Count; i++) { string strCantidad = dgvArticulos.Rows[i].Cells["cantidad"].Value.ToString();//cantidad string strPorcentaje = dgvArticulos.Rows[i].Cells["Porcentaje"].Value.ToString(); int intCantidad; float floatPorcentaje; if ((!String.IsNullOrEmpty(strCantidad) && int.TryParse(strCantidad, out intCantidad) && intCantidad > 0) && (!String.IsNullOrEmpty(strPorcentaje) && float.TryParse(strPorcentaje, out floatPorcentaje) && floatPorcentaje > 0)) { if (floatPorcentaje >= 0 && floatPorcentaje <= 100) { listadescuentoXArt[i].CantidadDisponible = intCantidad; listadescuentoXArt[i].PorcentajeDescuento = floatPorcentaje; } else { ok = false; dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown; } } else { ok = false; dgvArticulos.Rows[i].DefaultCellStyle.BackColor = Color.RosyBrown; } } if (ok) { descuento.Nombre = this.txtNombre.Text; descuento.FechaInicio = this.dtpFechaInicio.Value.Date; descuento.FechaFin = this.dtpFechaFin.Value.Date; descuento.CantidadUtilizada = int.Parse(this.lblCantidadUtilizada.Text); descuento.CodigoDescuento = this.txtCodigoDescuento.Text; if (descuento.FechaInicio.Value <= DateTime.Today && descuento.FechaFin.Value >= DateTime.Today) descuento.Estado = "Activo"; else descuento.Estado = "Inactivo"; DescuentoBL objdescuentoBL = new DescuentoBL(); objdescuentoBL.Grabar(descuento); if (descuento.CantidadUtilizada == 0) { //graba articulos participantes DescuentoXArticuloBL objDescXart = new DescuentoXArticuloBL(); foreach (DescuentoXArticulo descxpack in listaArtEliminados) objDescXart.Eliminar(descxpack); for (int i = 0; i < dgvArticulos.Rows.Count; i++)// listaArtxPack.Count; i++) { listadescuentoXArt[i].Descuento = descuento; listadescuentoXArt[i].CantidadDisponible = int.Parse(dgvArticulos.Rows[i].Cells["cantidad"].Value.ToString()); listadescuentoXArt[i].PorcentajeDescuento = float.Parse(dgvArticulos.Rows[i].Cells["Porcentaje"].Value.ToString()); objDescXart.Grabar(listadescuentoXArt[i]); } //graba categoria de clientes participantes if (listaDescuentoxCat != null) foreach (DescuentoXCategoriaCliente descxcat in listaDescuentoxCat) objcatCliente.Eliminar(descxcat); foreach (int index in chkClientes.CheckedIndices) { DescuentoXCategoriaCliente descxCatCliente = new DescuentoXCategoriaCliente(); descxCatCliente.Descuento = descuento; descxCatCliente.CategoriaCliente = categorias[index]; objcatCliente.Grabar(descxCatCliente); } } Utils.Utils.OK(Utils.Utils.REGISTRO_OK); this.Close(); } else { Utils.Utils.Error(null, "Las cantidades sombreadas no son válidas"); } } }
private void llenarGrillas() { double totalImpuestos; float descuentoUnit, precioVenta, total; int filaArt = 0; int filaPack = 0; limpiarCampos(); DescuentoXArticuloBL objDescXArtBL = new DescuentoXArticuloBL(); foreach (DocumentoLinea linea in documentoVenta.DocumentoDocumentoLineafk) { if (linea.Pack == null) { descuentoUnit = 0; precioVenta = (float)linea.PrecioLinea / (float)linea.Cantidad; if (linea.DescuentoXArticulo != null) //si es un articulo con descuento { descuentoUnit = linea.DescuentoXArticulo.PorcentajeDescuento; } totalImpuestos = linea.PrecioLinea * linea.Impuesto; total = (float)(precioVenta*(linea.Cantidad-linea.CantidadDevuelta) + totalImpuestos - descuentoUnit *linea.Cantidad); object[] row = { linea.ArticuloXLocal.Articulo.CodigoArticulo, linea.ArticuloXLocal.Articulo.Titulo, linea.ArticuloXLocal.Articulo.Tipo,linea.Impuesto, precioVenta,descuentoUnit,linea.Cantidad,linea.CantidadDevuelta,0,0}; dgvArticulos.Rows.Add(row); listaArticulos.Add(linea); filaArt++; } else //si la linea trata de un pack,agregamos este a la grilla de packs { object[] row = { linea.Pack.CodigoPack, linea.Pack.Nombre, linea.Pack.PrecioPack, linea.Cantidad,linea.CantidadDevuelta, 0, 0 }; dgvPacks.Rows.Add(row); listaPacks.Add(linea); filaPack++; } } this.lblTotalVentas.Text = documentoVenta.Total.ToString("0.00"); if (documentoVenta.Cliente != null) this.lblCliente.Text = documentoVenta.Cliente.Nombre; this.linkNroDocumento.Text = documentoVenta.NroDocumentoVenta.ToString(); this.lblFechaVenta.Text =((DateTime)(documentoVenta.FechaEmision)).ToShortDateString(); this.lblTipoDoc.Text = documentoVenta.TipoDocumento; if (documentoVenta.Cliente!=null) { this.lblCliente.Text = documentoVenta.Cliente.Nombre; } documentoVentaActual = documentoVenta; documentoVenta = null; }