Exemplo n.º 1
0
        /// <summary>
        /// Realiza llamadas a Métodos de la clase por nombre.
        /// Se pueden realizar cosas como pag.Response.Redirect para abrir otras ventanas.
        /// ErrorMensaje se presentará al usuario.
        /// </summary>
        /// <param name="pag">Objeto Pagina ASPX, mejorable.</param>
        /// <param name="Nombre">Nombre de Método.</param>
        public override void Metodo(System.Web.UI.Page pag, string Nombre)
        {
            if (Nombre == "DespuesDeModificarTarifas")
            {
                Presupuesto pres = (Presupuesto)ProveedorListas.ObjetoProveedorNegocio.RecuperaObjeto("Presupuesto", this["IDPresupuesto"].ToString());

                pres.Coleccion("ColPresupuestoYTarifa").Reset();
                pres.Coleccion("ColPresupuestoYTarifa").Usar();
                pres.Coleccion("ColPresupuestoVersion").Reset();
                pres.Coleccion("ColPresupuestoVersion").Usar();

                pres.Guardar();

                pres.ActualizarPresupuestoEnBaseAntigua(false, false, true);
            }

            if (Nombre == "ModificarConceptoPrecioTarifas")
            {
                // Importa el precio
                // Contar cuantas facturas existen con este IDPyT.
                bool   TieneFacturas            = false;
                bool   PasadasAcontabilidad     = false;
                bool   sePuedeModificarElPrecio = false;
                string ResultadoLog             = "";

                this.IDActual[0] = CambiarIDPyT;
                this.Leer();

                //El concepto se puede cambiar siempre
                string ConceptoAntiguo = (string)this["Concepto"];
                if (ConceptoAntiguo != CambiarConcepto)
                {
                    Datos.Instancia().executeSQL("UPDATE PresupuestoYTarifa SET Concepto = '" + CambiarConcepto.Replace("'", "''")
                                                 + "' WHERE IDPyT = " + this["IDPyT"].ToString());

                    ResultadoLog = "Presupuesto: " + this.ObjetoAsociado("Presupuesto").DescripcionNormal
                                   + ". Tarifa Modificada: " + this.ObjetoAsociado("Tarifa")["Codigo"].ToString();

                    ResultadoLog += ". Concepto Antiguo: " + ConceptoAntiguo.ToString()
                                    + ". Concepto Nuevo: " + CambiarConcepto.ToString();

                    mensajeMetodosModificar = "Se ha modificado el concepto. " + Datos.CRLF;

                    PROT.NegocioGeneral.Log.Log.GrabarLog(UsuarioActual, PROT.NegocioGeneral.Log.LogTipoEnum.CambiosEnTarifas, ResultadoLog);
                }

                decimal PrecioAntiguo = (decimal)this["Precio"];
                if (PrecioAntiguo != CambiarPrecio)
                {
                    string    sql = "SELECT DISTINCT IDFactura FROM FacturaDetalle WHERE IDPYT = " + this.IDActual[0];
                    DataTable dt  = Datos.Instancia().getDataTable(sql);

                    if (dt.Rows.Count != 0)
                    {
                        TieneFacturas = true;
                    }

                    // Se puede modificar cuando.
                    // - No hay facturas.
                    // - Existen facturas, pero tiene permiso para modificar y no están pasadas a contabilidad
                    // - Existen facturas, tiene permiso para modificar y además un permiso especial para cuando están pasadas a contabilidad

                    if (!TieneFacturas || UsuarioActual.Permiso("MET", "Presupuesto", "ModificarTarifasConFacturas"))
                    {
                        if (TieneFacturas)
                        {
                            foreach (DataRow dr in dt.Rows)
                            {
                                LCC.Negocio.Facturas.Factura fac = new LCC.Negocio.Facturas.Factura();
                                fac.IDActual[0] = (int)dr[0];
                                fac.Leer();

                                if ((bool)fac["Contabilidad"])
                                {
                                    PasadasAcontabilidad = true;
                                    break;
                                }
                            }

                            // - Existen facturas, pero tiene permiso para modificar y no están pasadas a contabilidad
                            if (!PasadasAcontabilidad)
                            {
                                sePuedeModificarElPrecio = true;
                            }

                            // - Existen facturas, tiene permiso para modificar y además un permiso especial para cuando están pasadas a contabilidad
                            if (PasadasAcontabilidad && UsuarioActual.Permiso("MET", "Presupuesto", "ModificarTarifasConFacturasContabilidad"))
                            {
                                sePuedeModificarElPrecio = true;
                            }
                        }
                        else
                        {
                            // - No hay facturas.
                            sePuedeModificarElPrecio = true;
                        }
                    }

                    //Modificación del precio
                    if (sePuedeModificarElPrecio)
                    {
                        ResultadoLog = "Presupuesto: " + this.ObjetoAsociado("Presupuesto").DescripcionNormal
                                       + ". Tarifa Modificada: " + this.ObjetoAsociado("Tarifa")["Codigo"].ToString();

                        Datos.Instancia().executeSQL("UPDATE PresupuestoYTarifa SET Precio = " + CambiarPrecio.ToString().Replace(",", ".")
                                                     + " WHERE IDPyT = " + this["IDPyT"].ToString());

                        ResultadoLog += ". Precio Antiguo: " + PrecioAntiguo.ToString()
                                        + ". Precio Nuevo: " + CambiarPrecio.ToString();

                        mensajeMetodosModificar += "Se ha modificado el precio. ";

                        PROT.NegocioGeneral.Log.Log.GrabarLog(UsuarioActual, PROT.NegocioGeneral.Log.LogTipoEnum.CambiosEnTarifas, ResultadoLog);

                        //Regenera las facturas
                        if (TieneFacturas)
                        {
                            foreach (DataRow dr in dt.Rows)
                            {
                                LCC.Negocio.Facturas.Factura fac = new LCC.Negocio.Facturas.Factura();
                                fac.IDActual[0] = (int)dr[0];
                                fac.Leer();
                                fac.Guardar();
                            }
                        }
                    }
                    else
                    {
                        mensajeMetodosModificar += "No se puede modificar el precio porque existen facturas.";
                    }
                }
            }

            if (Nombre == "ModificarUnidadesTarifas")
            {
                //Las unidades y el divisior se pueden cambiar siempre.
                double UnidadesAntiguo;
                object DivisorAntiguo;
                string ResultadoLog = "";

                PresupuestoVersionDetalle pv = new PresupuestoVersionDetalle();
                pv.IDActual[0] = CambiarIDPresupuestoVersion;
                pv.IDActual[1] = (int)this["IDPyT"];
                pv.Leer();

                if (CambiarDivisor == null)
                {
                    CambiarDivisor = DBNull.Value;
                }

                UnidadesAntiguo = (double)pv["Unidades"];
                DivisorAntiguo  = pv["DivisorUnidades"];

                if (UnidadesAntiguo != CambiarUnidades || DivisorAntiguo != CambiarDivisor)
                {
                    pv["Unidades"]        = CambiarUnidades;
                    pv["DivisorUnidades"] = CambiarDivisor;

                    pv.Guardar(false);

                    ResultadoLog += ". Unidades Antiguas: " + UnidadesAntiguo.ToString()
                                    + ". Unidades Nuevas: " + CambiarUnidades.ToString()
                                    + ". Divisor Antiguo: " + DivisorAntiguo.ToString()
                                    + ". Divisor Nuevo: " + CambiarDivisor.ToString();

                    PROT.NegocioGeneral.Log.Log.GrabarLog(UsuarioActual, PROT.NegocioGeneral.Log.LogTipoEnum.CambiosEnTarifas, ResultadoLog);

                    mensajeMetodosModificar += "Se ha modificado las unidades de la tarifa " + ObjetoAsociado("Tarifa")["Codigo"].ToString()
                                               + Datos.CRLF;
                }
            }

            if (Nombre == "Restaurar")
            {
                if (this.PermisoModificar)
                {
                    this["Concepto"] = DBNull.Value;
                }

                return;
            }

            base.Metodo(pag, Nombre);
        }