Exemplo n.º 1
0
        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."));
        }