private void GuardarDatos() { // Se solicita la autorización var oResU = UtilLocal.ValidarObtenerUsuario("Administracion.Master.Modificar"); if (oResU.Error) { return; } int iUsuarioID = oResU.Respuesta.UsuarioID; // Se muestra progreso de avance this.IniciarTerminarProgreso(true); // Se inicia el proceso de guardado Datos.StartPersistentContext(); int iErroresVal = 0; var oCambios = new List <ParteCambio>(); var oVarCostos = new Dictionary <int, decimal>(); foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { this.pgrGuardar.EjecutarPaso(true); if (!Fila.Visible) { continue; } if (!Util.Logico(Fila.Cells["Procesar"].Value)) { continue; } int iParteID = Util.Entero(Fila.Cells["ParteID"].Value); bool bCambioParte = (Util.Entero(Fila.Cells["CambioParte"].Value) == Cat.TiposDeAfectacion.Modificar); bool bCambioPrecio = (Util.Entero(Fila.Cells["CambioPrecio"].Value) == Cat.TiposDeAfectacion.Modificar); // Se valida el Proveedor - Marca - Línea int iProveedorID = 0, iMarcaID = 0, iLineaID = 0; if (bCambioParte || bCambioPrecio) { iProveedorID = Util.Entero(Fila.Cells["ProveedorID"].Value); iMarcaID = Util.Entero(Fila.Cells["MarcaID"].Value); iLineaID = Util.Entero(Fila.Cells["LineaID"].Value); if (!Datos.Exists <ProveedorMarcaParte>(q => q.ProveedorID == iProveedorID && q.MarcaParteID == iMarcaID && q.Estatus) || !Datos.Exists <LineaMarcaParte>(q => q.MarcaParteID == iMarcaID && q.LineaID == iLineaID && q.Estatus)) { Fila.ErrorText = "Proveedor - Marca - Línea inválido."; // Fila.DefaultCellStyle.ForeColor = Color.Red; iErroresVal++; continue; } } // Se guardan los datos de la parte, si aplica if (bCambioParte) { var oParte = Datos.GetEntity <Parte>(q => q.ParteID == iParteID && q.Estatus); string sNumeroDeParte = Util.Cadena(Fila.Cells["NumeroDeParte"].Value); string sDescripcion = Util.Cadena(Fila.Cells["Descripcion"].Value); int iUnidadDeMedidaID = Util.Entero(Fila.Cells["UnidadDeMedidaID"].Value); decimal mUnidadDeEmpaque = Util.Decimal(Fila.Cells["UnidadDeEmpaque"].Value); decimal mTiempoDeReposicion = Util.Decimal(Fila.Cells["TiempoDeReposicion"].Value); bool bComision = Util.Logico(Fila.Cells["Comision"].Value); bool bServicio = Util.Logico(Fila.Cells["Servicio"].Value); bool bEtiqueta = Util.Logico(Fila.Cells["Etiqueta"].Value); bool bSoloUna = Util.Logico(Fila.Cells["SoloUna"].Value); bool bEsPar = Util.Logico(Fila.Cells["EsPar"].Value); string sCodigoDeBarras = Util.Cadena(Fila.Cells["CodigoDeBarra"].Value); // Para agregar registro de cambios if (Util.Cadena(oParte.NumeroParte) != sNumeroDeParte) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.NumeroDeParte, oParte.NumeroParte, sNumeroDeParte); oParte.NumeroParte = sNumeroDeParte; } if (Util.Cadena(oParte.NombreParte) != sDescripcion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Descripcion, oParte.NombreParte, sDescripcion); oParte.NombreParte = sDescripcion; } if (oParte.ProveedorID != iProveedorID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Proveedor, oParte.ProveedorID.ToString(), iProveedorID.ToString()); oParte.ProveedorID = iProveedorID; } if (oParte.LineaID != iLineaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Linea, oParte.LineaID.ToString(), iLineaID.ToString()); oParte.LineaID = iLineaID; } if (oParte.MarcaParteID != iMarcaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Marca, oParte.MarcaParteID.ToString(), iMarcaID.ToString()); oParte.MarcaParteID = iMarcaID; } if (oParte.MedidaID.Valor() != iUnidadDeMedidaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeMedida, oParte.MedidaID.ToString(), iUnidadDeMedidaID.ToString()); oParte.MedidaID = iUnidadDeMedidaID; } if (oParte.UnidadEmpaque != mUnidadDeEmpaque) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeEmpaque, oParte.UnidadEmpaque.ToString(), mUnidadDeEmpaque.ToString()); oParte.UnidadEmpaque = mUnidadDeEmpaque; } if (oParte.TiempoReposicion != mTiempoDeReposicion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.TiempoDeReposicion, oParte.TiempoReposicion.ToString(), mTiempoDeReposicion.ToString()); oParte.TiempoReposicion = mTiempoDeReposicion; } if (oParte.AplicaComision.Valor() != bComision) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.AplicaComision, this.CadenaDeBool(oParte.AplicaComision), bComision.ACadena()); oParte.AplicaComision = bComision; } if (oParte.EsServicio.Valor() != bServicio) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsServicio, this.CadenaDeBool(oParte.EsServicio), bServicio.ACadena()); oParte.EsServicio = bServicio; } if (oParte.Etiqueta.Valor() != bEtiqueta) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Etiqueta, this.CadenaDeBool(oParte.Etiqueta), bEtiqueta.ACadena()); oParte.Etiqueta = bEtiqueta; } if (oParte.SoloUnaEtiqueta.Valor() != bSoloUna) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.SoloUnaEtiqueta, this.CadenaDeBool(oParte.SoloUnaEtiqueta), bSoloUna.ACadena()); oParte.SoloUnaEtiqueta = bSoloUna; } if (oParte.EsPar.Valor() != bEsPar) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsPar, this.CadenaDeBool(oParte.EsPar), bEsPar.ACadena()); oParte.EsPar = bEsPar; } if (Util.Cadena(oParte.CodigoBarra) != sCodigoDeBarras) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CodigoDeBarras, oParte.CodigoBarra, sCodigoDeBarras); oParte.CodigoBarra = sCodigoDeBarras; } /* oParte.NumeroParte = Util.ConvertirCadena(Fila.Cells["NumeroDeParte"].Value); * oParte.NombreParte = Util.ConvertirCadena(Fila.Cells["Descripcion"].Value); * oParte.ProveedorID = Util.ConvertirEntero(Fila.Cells["ProveedorID"].Value); * oParte.LineaID = Util.ConvertirEntero(Fila.Cells["LineaID"].Value); * oParte.MarcaParteID = Util.ConvertirEntero(Fila.Cells["MarcaID"].Value); * oParte.MedidaID = Util.ConvertirEntero(Fila.Cells["UnidadDeMedidaID"].Value); * oParte.AplicaComision = Util.ConvertirBool(Fila.Cells["Comision"].Value); * oParte.EsServicio = Util.ConvertirBool(Fila.Cells["Servicio"].Value); * oParte.Etiqueta = Util.ConvertirBool(Fila.Cells["Etiqueta"].Value); * oParte.SoloUnaEtiqueta = Util.ConvertirBool(Fila.Cells["SoloUna"].Value); * oParte.CodigoBarra = Util.ConvertirCadena(Fila.Cells["CodigoDeBarra"].Value); */ Datos.Guardar <Parte>(oParte); } // Se guardan los datos de precios if (bCambioPrecio) { var oParte = Datos.GetEntity <PartePrecio>(q => q.ParteID == iParteID && q.Estatus); decimal mCosto = Util.Decimal(Fila.Cells["Costo"].Value); decimal mCostoConDescuento = Util.Decimal(Fila.Cells["CostoConDescuento"].Value); decimal mPorUtil1 = Util.Decimal(Fila.Cells["Por1"].Value); decimal mPorUtil2 = Util.Decimal(Fila.Cells["Por2"].Value); decimal mPorUtil3 = Util.Decimal(Fila.Cells["Por3"].Value); decimal mPorUtil4 = Util.Decimal(Fila.Cells["Por4"].Value); decimal mPorUtil5 = Util.Decimal(Fila.Cells["Por5"].Value); decimal mPrecio1 = Util.Decimal(Fila.Cells["Precio1"].Value); decimal mPrecio2 = Util.Decimal(Fila.Cells["Precio2"].Value); decimal mPrecio3 = Util.Decimal(Fila.Cells["Precio3"].Value); decimal mPrecio4 = Util.Decimal(Fila.Cells["Precio4"].Value); decimal mPrecio5 = Util.Decimal(Fila.Cells["Precio5"].Value); // Para agregar registro de cambios if (oParte.Costo.Valor() != mCosto) { // Para calcular la diferencia total en costo, por sucursal decimal mVarCosto = (mCosto - oParte.Costo.Valor()); var oExistencias = Datos.GetListOf <ParteExistencia>(c => c.ParteID == iParteID && c.Estatus); foreach (var oReg in oExistencias) { if (!oVarCostos.ContainsKey(oReg.SucursalID)) { oVarCostos.Add(oReg.SucursalID, 0); } oVarCostos[oReg.SucursalID] += (mVarCosto * oReg.Existencia.Valor()); } // this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Costo, this.CadenaDeDecimal(oParte.Costo), mCosto.ToString()); oParte.Costo = mCosto; } if (oParte.CostoConDescuento.Valor() != mCostoConDescuento) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CostoConDescuento , this.CadenaDeDecimal(oParte.CostoConDescuento), mCostoConDescuento.ToString()); oParte.CostoConDescuento = mCostoConDescuento; } if (oParte.PorcentajeUtilidadUno.Valor() != mPorUtil1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil1, this.CadenaDeDecimal(oParte.PorcentajeUtilidadUno), mPorUtil1.ToString()); oParte.PorcentajeUtilidadUno = mPorUtil1; } if (oParte.PorcentajeUtilidadDos.Valor() != mPorUtil2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil2, this.CadenaDeDecimal(oParte.PorcentajeUtilidadDos), mPorUtil2.ToString()); oParte.PorcentajeUtilidadDos = mPorUtil2; } if (oParte.PorcentajeUtilidadTres.Valor() != mPorUtil3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil3, this.CadenaDeDecimal(oParte.PorcentajeUtilidadTres), mPorUtil3.ToString()); oParte.PorcentajeUtilidadTres = mPorUtil3; } if (oParte.PorcentajeUtilidadCuatro.Valor() != mPorUtil4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil4, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCuatro), mPorUtil4.ToString()); oParte.PorcentajeUtilidadCuatro = mPorUtil4; } if (oParte.PorcentajeUtilidadCinco.Valor() != mPorUtil5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil5, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCinco), mPorUtil5.ToString()); oParte.PorcentajeUtilidadCinco = mPorUtil5; } if (oParte.PrecioUno.Valor() != mPrecio1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio1, this.CadenaDeDecimal(oParte.PrecioUno), mPrecio1.ToString()); oParte.PrecioUno = mPrecio1; } if (oParte.PrecioDos.Valor() != mPrecio2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio2, this.CadenaDeDecimal(oParte.PrecioDos), mPrecio2.ToString()); oParte.PrecioDos = mPrecio2; } if (oParte.PrecioTres.Valor() != mPrecio3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio3, this.CadenaDeDecimal(oParte.PrecioTres), mPrecio3.ToString()); oParte.PrecioTres = mPrecio3; } if (oParte.PrecioCuatro.Valor() != mPrecio4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio4, this.CadenaDeDecimal(oParte.PrecioCuatro), mPrecio4.ToString()); oParte.PrecioCuatro = mPrecio4; } if (oParte.PrecioCinco.Valor() != mPrecio5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio5, this.CadenaDeDecimal(oParte.PrecioCinco), mPrecio5.ToString()); oParte.PrecioCinco = mPrecio5; } /* oParte.Costo = Util.ConvertirDecimal(Fila.Cells["Costo"].Value); * oParte.PorcentajeUtilidadUno = Util.ConvertirDecimal(Fila.Cells["Por1"].Value); * oParte.PrecioUno = Util.ConvertirDecimal(Fila.Cells["Precio1"].Value); * oParte.PorcentajeUtilidadDos = Util.ConvertirDecimal(Fila.Cells["Por2"].Value); * oParte.PrecioDos = Util.ConvertirDecimal(Fila.Cells["Precio2"].Value); * oParte.PorcentajeUtilidadTres = Util.ConvertirDecimal(Fila.Cells["Por3"].Value); * oParte.PrecioTres = Util.ConvertirDecimal(Fila.Cells["Precio3"].Value); * oParte.PorcentajeUtilidadCuatro = Util.ConvertirDecimal(Fila.Cells["Por4"].Value); * oParte.PrecioCuatro = Util.ConvertirDecimal(Fila.Cells["Precio4"].Value); * oParte.PorcentajeUtilidadCinco = Util.ConvertirDecimal(Fila.Cells["Por5"].Value); * oParte.PrecioCinco = Util.ConvertirDecimal(Fila.Cells["Precio5"].Value); */ Datos.Guardar <PartePrecio>(oParte); } // Se restaura la fila if (bCambioParte || bCambioPrecio) { Fila.Cells["CambioParte"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.Cells["CambioPrecio"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.ErrorText = ""; // Fila.DefaultCellStyle.ForeColor = Color.Black; } } // Se generan los pólizas correspondientes por diferencias de costos string sObsPoliza = Util.Cadena(this.dgvDatos.Columns["Costo"].Tag); foreach (var oDif in oVarCostos) { if (oDif.Value != 0) { ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, sObsPoliza, Cat.ContaCuentasAuxiliares.Inventario, Cat.ContaCuentasAuxiliares.CapitalFijo , oDif.Value, "", null, null, oDif.Key); } } // Se guardan los cambios UtilLocal.MostrarNotificacion("Guardando registro de cambios..."); Application.DoEvents(); this.pgrGuardar.Inicializar(oCambios.Count, 1); DateTime dAhora = DateTime.Now; foreach (var oCambio in oCambios) { oCambio.Fecha = dAhora; oCambio.UsuarioID = iUsuarioID; Datos.Guardar <ParteCambio>(oCambio, false); this.pgrGuardar.EjecutarPaso(true); } Datos.EndPersistentContext(); // Se restaura el color de las celdas, si no hubo error foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { if (Fila.ErrorText == "") { foreach (DataGridViewCell Celda in Fila.Cells) { if (Celda.HasStyle) { Celda.Style.ForeColor = Color.Black; } } } } this.IniciarTerminarProgreso(false); UtilLocal.MostrarNotificacion("Proceso completado " + (iErroresVal > 0 ? "con errores." : "correctamente.")); }