private void Importar() { string sColumnasFalt = this.ValidarColumnas(); if (sColumnasFalt != "") { UtilLocal.MensajeAdvertencia("El archivo especificado no tiene el formato correcto. Falta especificar las siguientes columnas:\n\n" + sColumnasFalt); return; } this.HabilitarControlesProceso(false); this.prgProgreso.Inicializar(this.dgvProceso.Rows.Count, 1); foreach (DataGridViewRow oFila in this.dgvProceso.Rows) { this.prgProgreso.EjecutarPaso(true); if (oFila.DefaultCellStyle.ForeColor == Color.Green) { continue; } // Se valida que no se repita el número de parte string sNumeroDeParte = Util.Cadena(oFila.Cells["NumeroDeParte"].Value); if (Datos.Exists <Parte>(c => c.NumeroParte == sNumeroDeParte && c.Estatus)) { if (UtilLocal.MensajePregunta(string.Format("El Número de Parte especificado ya existe. Aún así deseas importar el registro: {0} - {1}" , oFila.Cells["NumeroDeParte"].Value, oFila.Cells["Nombre"].Value)) != DialogResult.Yes) { this.PonerErrorFila(oFila, "El número de parte especificado ya existe en la base de datos. Revisar."); continue; } } // Se obtiene los Ids (Proveedor, Marca, ..) string sProveedor = Util.Cadena(oFila.Cells["Proveedor"].Value); var oProveedor = Datos.GetEntity <Proveedor>(c => c.NombreProveedor == sProveedor && c.Estatus); if (oProveedor == null) { this.PonerErrorFila(oFila, "El Proveedor especificado es inválido."); continue; } string sMarca = Util.Cadena(oFila.Cells["Marca"].Value); var oMarca = Datos.GetEntity <MarcaParte>(c => c.NombreMarcaParte == sMarca && c.Estatus); if (oMarca == null) { this.PonerErrorFila(oFila, "La Marca especificada es inválida."); continue; } string sLinea = Util.Cadena(oFila.Cells["Linea"].Value); var oLinea = Datos.GetEntity <Linea>(c => c.NombreLinea == sLinea && c.Estatus); if (oLinea == null) { this.PonerErrorFila(oFila, "La Línea especificada es inválida."); continue; } string sSubsistema = Util.Cadena(oFila.Cells["Subsistema"].Value); var oSubsistema = Datos.GetEntity <Subsistema>(c => c.NombreSubsistema == sSubsistema && c.Estatus); if (oSubsistema == null) { this.PonerErrorFila(oFila, "El Subsistema especificado es inválido."); continue; } string sUnidadDeMedida = Util.Cadena(oFila.Cells["UnidadDeMedida"].Value); var oUnidadDeMedida = Datos.GetEntity <Medida>(c => c.NombreMedida == sUnidadDeMedida && c.Estatus); if (oUnidadDeMedida == null) { this.PonerErrorFila(oFila, "La Unidad de Medida es inválida."); continue; } // Se genera el registro de la parte var oParte = new Parte() { NumeroParte = Util.Cadena(oFila.Cells["NumeroDeParte"].Value), NombreParte = Util.Cadena(oFila.Cells["Nombre"].Value), ProveedorID = oProveedor.ProveedorID, MarcaParteID = oMarca.MarcaParteID, LineaID = oLinea.LineaID, SubsistemaID = oSubsistema.SubsistemaID, MedidaID = oUnidadDeMedida.MedidaID, UnidadEmpaque = Util.Entero(oFila.Cells["UnidadDeEmpaque"].Value), AplicaComision = (Util.Cadena(oFila.Cells["AplicaComision"].Value).ToLower() == PartesImportar.CadenaVerdadero), Etiqueta = (Util.Cadena(oFila.Cells["Etiqueta"].Value).ToLower() == PartesImportar.CadenaVerdadero), Es9500 = true }; // Se genera el registro del precio var oPartePrecio = new PartePrecio() { Costo = Util.Decimal(oFila.Cells["Costo"].Value), PorcentajeUtilidadUno = Util.Decimal(oFila.Cells["PorUtil1"].Value), PorcentajeUtilidadDos = Util.Decimal(oFila.Cells["PorUtil2"].Value), PorcentajeUtilidadTres = Util.Decimal(oFila.Cells["PorUtil3"].Value), PorcentajeUtilidadCuatro = Util.Decimal(oFila.Cells["PorUtil4"].Value), PorcentajeUtilidadCinco = Util.Decimal(oFila.Cells["PorUtil5"].Value), PrecioUno = Util.Decimal(oFila.Cells["Precio1"].Value), PrecioDos = Util.Decimal(oFila.Cells["Precio2"].Value), PrecioTres = Util.Decimal(oFila.Cells["Precio3"].Value), PrecioCuatro = Util.Decimal(oFila.Cells["Precio4"].Value), PrecioCinco = Util.Decimal(oFila.Cells["Precio5"].Value), }; // Se guardan los datos Guardar.Parte(oParte, oPartePrecio); // Se colorea la fila oFila.ErrorText = ""; oFila.DefaultCellStyle.ForeColor = Color.Green; } this.prgProgreso.EjecutarPaso(false); this.HabilitarControlesProceso(true); }
private bool Agregar9500() { // Se valida la parte de "Partes" if (!this.ctlPartes.Validar()) { return(false); } // Se pide el efectivo, si aplica if (!this.ctlCobro.CompletarCobro()) { return(false); } // Se valida que exista una Medida genérica, para las nuevas partes if (Datos.GetEntity <Medida>(q => q.MedidaID == Cat.Medidas.Pieza && q.Estatus) == null) { UtilLocal.MensajeAdvertencia("No existe una Medida genérica para asignarle a las partes nuevas. No se puede continuar."); return(false); } // Se solicitan la autorizaciones, si se requiere int iAutorizoID = 0; if (this.ctlPartes.AutorizacionRequeridaPrecio || this.ctlPartes.AutorizacionRequeridaAnticipo) { string sPermiso = (this.ctlPartes.AutorizacionRequeridaPrecio ? "Autorizaciones.Ventas.9500.PrecioFueraDeRango" : "Autorizaciones.Ventas.9500.NoAnticipo"); var Res = UtilLocal.ValidarObtenerUsuario(sPermiso, "Autorización"); iAutorizoID = (Res.Respuesta == null ? 0 : Res.Respuesta.UsuarioID); } // Se procede a guardar los datos DateTime dAhora = DateTime.Now; // Se genera la Cotización 9500 var o9500 = this.ctlPartes.Generar9500(); o9500.Fecha = dAhora; o9500.RealizoUsuarioID = this.ctlCobro.VendodorID; if (this.ctlCobro.ComisionistaID > 0) { o9500.ComisionistaClienteID = this.ctlCobro.ComisionistaID; } // Se genera el detalle del 9500 var oParteGanancia = this.ctlPartes.ObtenerParteGanancia(null); var o9500Detalle = new List <Cotizacion9500Detalle>(); foreach (var Parte9500 in this.ctlPartes.Detalle) { // Si la parte no existe, se agrega if (Parte9500.Value.ParteID <= 0) { int iFila = UtilLocal.findRowIndex(this.ctlPartes.dgvPartes, "Llave", Parte9500.Key); string sNumeroDeParte = Util.Cadena(this.ctlPartes.dgvPartes["NumeroDeParte", iFila].Value); string sDescripcion = Util.Cadena(this.ctlPartes.dgvPartes["Descripcion", iFila].Value); var oLinea = Datos.GetEntity <Linea>(q => q.LineaID == Parte9500.Value.LineaID && q.Estatus); Parte oParte = new Parte() { NumeroParte = sNumeroDeParte, LineaID = Parte9500.Value.LineaID, MarcaParteID = Parte9500.Value.MarcaParteID, ProveedorID = Parte9500.Value.ProveedorID, NombreParte = sDescripcion, Es9500 = true, SubsistemaID = oLinea.SubsistemaID.Valor() }; // Se agregan los precios PartePrecio oPartePrecio = null; if (oParteGanancia != null) { oPartePrecio = new PartePrecio() { Costo = Parte9500.Value.Costo, PorcentajeUtilidadUno = oParteGanancia.PorcentajeDeGanancia1, PorcentajeUtilidadDos = oParteGanancia.PorcentajeDeGanancia2, PorcentajeUtilidadTres = oParteGanancia.PorcentajeDeGanancia3, PorcentajeUtilidadCuatro = oParteGanancia.PorcentajeDeGanancia4, PorcentajeUtilidadCinco = oParteGanancia.PorcentajeDeGanancia5, PrecioUno = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia1), PrecioDos = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia2), PrecioTres = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia3), PrecioCuatro = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia4), PrecioCinco = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia5) }; } // Se guarda Guardar.Parte(oParte, oPartePrecio); Parte9500.Value.ParteID = oParte.ParteID; } // Se agrega la parte al detalle del 9500 o9500Detalle.Add(Parte9500.Value); } // Se guardan los datos de 9500 Guardar.c9500(o9500, o9500Detalle); // Se genera la venta con el anticipo var oVenta = new Venta() { ClienteID = o9500.ClienteID, RealizoUsuarioID = o9500.RealizoUsuarioID }; var oPrecioAnticipo = Datos.GetEntity <PartePrecio>(c => c.ParteID == Cat.Partes.AnticipoClientes && c.Estatus); var oVentaDetalle = new VentaDetalle() { ParteID = Cat.Partes.AnticipoClientes, Cantidad = 1, PrecioUnitario = o9500.Anticipo, Costo = oPrecioAnticipo.Costo.Valor(), CostoConDescuento = (oPrecioAnticipo.CostoConDescuento ?? oPrecioAnticipo.Costo.Valor()) }; Guardar.Venta(oVenta, new List <VentaDetalle>() { oVentaDetalle }); // Se guarda el dato de la venta con el anticipo en el registro de 9500 o9500.AnticipoVentaID = oVenta.VentaID; Datos.Guardar <Cotizacion9500>(o9500); // Se guardan las autorizaciones, si hubiera if (this.ctlPartes.AutorizacionRequeridaPrecio) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500PrecioFueraDeRango, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID); } if (this.ctlPartes.AutorizacionRequeridaAnticipo) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500SinAnticipo, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID); } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Cotización 9500 guardada correctamente."); return(true); }