Diferencia entre revisiones de «Formulario Edición 2.0.N»

De FlexiPymeDocs
Ir a la navegación Ir a la búsqueda
 
(No se muestran 23 ediciones intermedias del mismo usuario)
Línea 15: Línea 15:
 
     public class ##FORMULARIO## : FlexiEdicion
 
     public class ##FORMULARIO## : FlexiEdicion
 
     {
 
     {
 +
        int REG_ITEMS = 0;
 +
 +
        int ITE_IDPROD = 0;
 +
        int ITE_CANT = 1;
 +
 
         // Este metodo se ejecuta 1 vez para cargar la definición del formulario
 
         // Este metodo se ejecuta 1 vez para cargar la definición del formulario
 
         public override void InicializarFormulario()
 
         public override void InicializarFormulario()
Línea 24: Línea 29:
 
             this.ParametroRecibido = "id";
 
             this.ParametroRecibido = "id";
 
             this.GuardarYNuevo = false;
 
             this.GuardarYNuevo = false;
 +
            this.CssClassRecuadro = "fondoRojo";
 +
            this.EncabezadoLogoVisible = false;
  
 
             // Indico que si es PopUp el campo que se pasa de texto es:
 
             // Indico que si es PopUp el campo que se pasa de texto es:
Línea 29: Línea 36:
  
 
             // Campos a editar de la cabecera (tabla cabecera)
 
             // Campos a editar de la cabecera (tabla cabecera)
             // Habilitado, Requerido
+
             // Requerido, Habilitado
  
 
             this.AgregarCampoCabeceraCadenaLarga("nombre", "Nombre", true, true);
 
             this.AgregarCampoCabeceraCadenaLarga("nombre", "Nombre", true, true);
Línea 42: Línea 49:
 
             this.AgregarCampoCabeceraMoneda("nombre", "Nombre", true, true);
 
             this.AgregarCampoCabeceraMoneda("nombre", "Nombre", true, true);
 
             this.AgregarCampoCabeceraPassword("nombre", "Nombre", true, true);
 
             this.AgregarCampoCabeceraPassword("nombre", "Nombre", true, true);
 +
            this.BuscarCampoCabecera("nombre").AccionEscrituraDirectaAjax = "facturaEnter";
 +
 +
            this.AgregarCampoCabeceraBoton("agregar", "Agregar +", true, "agregar");
 +
            this.BuscarCampoCabecera("agregar").CssClass = "btn-danger";
 +
            this.BuscarCampoCabecera("agregar").EstablecerAnchoGrid(0, 2, true);
 +
 +
            // Al presionar enter se ejecuta una accion
 +
            this.BuscarCampoCabecera("telefonos").AccionComoEnter = true;
 +
            this.BuscarCampoCabecera("telefonos").Accion = "telefono";
 +
            this.BuscarCampoCabecera("telefonos").TituloVisible = false;
  
 
             // Creo una region de una tabla relacionada
 
             // Creo una region de una tabla relacionada
Línea 50: Línea 67:
 
             regionItems.CampoFiltradoItems = "idTablaMaestra";
 
             regionItems.CampoFiltradoItems = "idTablaMaestra";
 
             regionItems.EliminacionMasiva = true;
 
             regionItems.EliminacionMasiva = true;
 +
            regionItems.CssClassRecuadro = "fondoRojo";
  
 
             // Requerido, Habilitado
 
             // Requerido, Habilitado
Línea 56: Línea 74:
 
             regionItems.AgregarCampoInferiorMoneda("totalAplicado", "Total Facturas", false, false);
 
             regionItems.AgregarCampoInferiorMoneda("totalAplicado", "Total Facturas", false, false);
 
             regionItems.AgregarCampoItemCadenaLarga("codigoBarras", "Código de Barras", true, false);
 
             regionItems.AgregarCampoItemCadenaLarga("codigoBarras", "Código de Barras", true, false);
 +
            regionItems.AgregarCampoItemCadenaMultilinea("observaciones", "Observaciones", true, false);
 +
            regionItems.AgregarCampoItemFecha("fechaAlta", "Fecha Alta", true, false);
 
             regionItems.AgregarCampoItemSiNo("habilitado", "Habilitado", true);
 
             regionItems.AgregarCampoItemSiNo("habilitado", "Habilitado", true);
 +
            regionItems.AgregarCampoItemEntero("cantidad", "Cantidad", true, true);
 +
            regionItems.BuscarCampoItem("cantidad").CssClass = "textoDestacado";
 +
            regionItems.BuscarCampoItem("cantidad").CssClassTitulo = "textoDestacadoVerde";
 +
 +
            // Deshabilitar enter
 +
            regionItems.BuscarCampoItem("codigoBarras").DesHabilitarEnter = true;
 +
 +
            regionItems.AgregarCampoInferiorCadenaLarga("email", "Email", false, true);
 +
            regionItems.AgregarCampoInferiorDependienteAjax("idVendedor", "Vendedor", "Vendedores", "id", "nombre", false, true, "");
  
 
             this.AgregarRegion(regionItems);
 
             this.AgregarRegion(regionItems);
  
 
             this.AgregarAccion("Imprimir", false);
 
             this.AgregarAccion("Imprimir", false);
 +
            this.BuscarAccion("Imprimir").MostrarLoading = false;
 +
  
 
             // Ejemplo de como obtener un valor cargado en los campos segun tipo
 
             // Ejemplo de como obtener un valor cargado en los campos segun tipo
Línea 68: Línea 99:
 
             string strVar = this.BuscarCampoCabecera("valor").ValorCadena;
 
             string strVar = this.BuscarCampoCabecera("valor").ValorCadena;
 
             decimal decVar = this.BuscarCampoCabecera("valor").ValorMoneda;
 
             decimal decVar = this.BuscarCampoCabecera("valor").ValorMoneda;
 +
 +
            // Setea foco en un campo de una region de una fila
 +
            // region, posFila, "nombreCampo"
 +
            this.SetearFocoRegionItem(REG_ITEMS, 0, "idFactura");
 +
 +
            // Cambia el orgien de datos de un campo ajax de una region.
 +
            this.Regiones[REG_DIR_OT].CambiarTablaOConsultaCampoItem("campo", "Tabla");
 +
 +
            this.HabilitarFormulario(false);
 +
 +
            this.AgregarAccion("guardarTambien", "Guardar Tambien");
 +
            this.BuscarAccion("guardarTambien").GuardarAlEjecutar = true;
 +
            this.BuscarAccion("guardarTambien").GuardarYSalirAlEjecutar = true;
 +
 
         }
 
         }
  
Línea 76: Línea 121:
 
             if (this.IdEntidad == 0)
 
             if (this.IdEntidad == 0)
 
             {
 
             {
 +
 +
                if (VariablesDeEntorno.ExisteValorDeVariable(this.WorkflowId, "idCliente"))
 +
                {
 +
                    int idCliente = (int)VariablesDeEntorno.ObtenerValorDeVariable(this.WorkflowId, "idCliente");
 +
                    VariablesDeEntorno.EliminarValorDeVariable(this.WorkflowId, "idCliente");
 +
                }
 
                 // Ej: se inicializan los campos con valores
 
                 // Ej: se inicializan los campos con valores
 
                 this.BuscarCampoCabecera("nombre").Valor = "aca va el nombre";
 
                 this.BuscarCampoCabecera("nombre").Valor = "aca va el nombre";
Línea 89: Línea 140:
 
                 this.BuscarAccion("Imprimir").Visible = true;
 
                 this.BuscarAccion("Imprimir").Visible = true;
 
             }
 
             }
 +
 +
            // Deshabilita todo el formulario
 +
            this.DeshabilitarCamposYAcciones();
 
              
 
              
 
         }
 
         }
Línea 137: Línea 191:
 
                 // Ej: deshabilito parte del formulario
 
                 // Ej: deshabilito parte del formulario
 
                 // Ej: genero un PDF
 
                 // Ej: genero un PDF
 +
            }
 +
            else if (accion == "facturaEnter")
 +
            {
 +
                string textoIngresado = this.BuscarCampoCabecera("idClienteCategoria").ValorEscrituraDirectaAjax;
 +
                this.AgregarMensajeResultados(textoIngresado);
 
             }
 
             }
 
         }
 
         }
Línea 197: Línea 256:
  
 
             this.BuscarAccion("Remitar").Visible = (cant == 0);
 
             this.BuscarAccion("Remitar").Visible = (cant == 0);
 +
        }
 +
 +
        // Esta funcionalidad esta pensada para poder dividir 1 region de muchas columnas en 2 regiones cada una con 1 subgrupo
 +
        public override void ValidarSiCargaFilaEnRegion(int region, int idEntidadFila, FlexiEdicionAccionARealizarEnFila accionPosible)
 +
        {
 +
            FlexiDbFila fila = FlexiDb.CargarEntidad(idEntidadFila, "ClientesDomiciliosEntrega");
 +
            string calle = fila.ObtenerCadena("calle");
 +
 +
            if (region == REG_DIR_CALL1)
 +
            {
 +
                if (calle != "calle 1")
 +
                    accionPosible.CancelarCarga = true;
 +
            }
 +
            else if (region == REG_DIR_OT)
 +
            {
 +
                if (calle == "calle 1")
 +
                    accionPosible.CancelarCarga = true;
 +
            }
 +
 +
 
         }
 
         }
 
          
 
          

Revisión actual del 10:16 8 feb 2024

Formulario Edición

Código de Referencia

using FlexiPyme.ui.formularios.especificos.edicion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FlexiAplicacion.LogicaComun;
namespace FlexiAplicacion.##CARPETA##
{
    public class ##FORMULARIO## : FlexiEdicion
    {
        int REG_ITEMS = 0;

        int ITE_IDPROD = 0;
        int ITE_CANT = 1;

        // Este metodo se ejecuta 1 vez para cargar la definición del formulario
        public override void InicializarFormulario()
        {
            // Parametros generales del formulario
            this.Titulo = "Edición de Tabla";
            this.TablaCabecera = "Tabla";
            this.CampoClaveCabecera = "id";
            this.ParametroRecibido = "id";
            this.GuardarYNuevo = false;
            this.CssClassRecuadro = "fondoRojo";
            this.EncabezadoLogoVisible = false;

            // Indico que si es PopUp el campo que se pasa de texto es:
            this.CampoTextoPopUp = "nombre";

            // Campos a editar de la cabecera (tabla cabecera)
            // Requerido, Habilitado

            this.AgregarCampoCabeceraCadenaLarga("nombre", "Nombre", true, true);
            this.BuscarCampoCabecera("nombre").Ancho = 100;
            this.AgregarCampoCabeceraCadena("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraCadenaMultilinea("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraEntero("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraFecha("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraSiNo("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraDependiente("nombre", "Nombre", "Tabla", "id", "nombre", true, true);
            this.AgregarCampoCabeceraDependienteAjax("nombre", "Nombre", "Tabla", "id", "nombre", true, true, "accion");
            this.AgregarCampoCabeceraMoneda("nombre", "Nombre", true, true);
            this.AgregarCampoCabeceraPassword("nombre", "Nombre", true, true);
            this.BuscarCampoCabecera("nombre").AccionEscrituraDirectaAjax = "facturaEnter";

            this.AgregarCampoCabeceraBoton("agregar", "Agregar +", true, "agregar");
            this.BuscarCampoCabecera("agregar").CssClass = "btn-danger";
            this.BuscarCampoCabecera("agregar").EstablecerAnchoGrid(0, 2, true);

            // Al presionar enter se ejecuta una accion
            this.BuscarCampoCabecera("telefonos").AccionComoEnter = true;
            this.BuscarCampoCabecera("telefonos").Accion = "telefono";
            this.BuscarCampoCabecera("telefonos").TituloVisible = false;

            // Creo una region de una tabla relacionada
            FlexiEdicionRegion regionItems = new FlexiEdicionRegion();
            regionItems.Nombre = "Items de la tabla";
            regionItems.TablaItems = "NombreTablaItems";
            regionItems.CampoClaveItems = "id";
            regionItems.CampoFiltradoItems = "idTablaMaestra";
            regionItems.EliminacionMasiva = true;
            regionItems.CssClassRecuadro = "fondoRojo";

            // Requerido, Habilitado
            regionItems.AgregarCampoItemDependienteAjax("idFactura", "Factura (nro, fecha)", "FacturasVW", "id", "nombre", true, true, "");
            regionItems.AgregarCampoItemMoneda("monto", "Monto Aplicado", true, true);
            regionItems.AgregarCampoInferiorMoneda("totalAplicado", "Total Facturas", false, false);
            regionItems.AgregarCampoItemCadenaLarga("codigoBarras", "Código de Barras", true, false);
            regionItems.AgregarCampoItemCadenaMultilinea("observaciones", "Observaciones", true, false);
            regionItems.AgregarCampoItemFecha("fechaAlta", "Fecha Alta", true, false);
            regionItems.AgregarCampoItemSiNo("habilitado", "Habilitado", true);
            regionItems.AgregarCampoItemEntero("cantidad", "Cantidad", true, true);
            regionItems.BuscarCampoItem("cantidad").CssClass = "textoDestacado";
            regionItems.BuscarCampoItem("cantidad").CssClassTitulo = "textoDestacadoVerde";

            // Deshabilitar enter
            regionItems.BuscarCampoItem("codigoBarras").DesHabilitarEnter = true;

            regionItems.AgregarCampoInferiorCadenaLarga("email", "Email", false, true);
            regionItems.AgregarCampoInferiorDependienteAjax("idVendedor", "Vendedor", "Vendedores", "id", "nombre", false, true, "");

            this.AgregarRegion(regionItems);

            this.AgregarAccion("Imprimir", false);
            this.BuscarAccion("Imprimir").MostrarLoading = false;


            // Ejemplo de como obtener un valor cargado en los campos segun tipo
            int intVal = this.BuscarCampoCabecera("valor").ValorEntero;
            bool boolVar = this.BuscarCampoCabecera("valor").ValorBool;
            DateTime dateVar = this.BuscarCampoCabecera("valor").ValorFecha;
            string strVar = this.BuscarCampoCabecera("valor").ValorCadena;
            decimal decVar = this.BuscarCampoCabecera("valor").ValorMoneda;

            // Setea foco en un campo de una region de una fila
            // region, posFila, "nombreCampo"
            this.SetearFocoRegionItem(REG_ITEMS, 0, "idFactura");

            // Cambia el orgien de datos de un campo ajax de una region.
            this.Regiones[REG_DIR_OT].CambiarTablaOConsultaCampoItem("campo", "Tabla");

            this.HabilitarFormulario(false);

            this.AgregarAccion("guardarTambien", "Guardar Tambien");
            this.BuscarAccion("guardarTambien").GuardarAlEjecutar = true;
            this.BuscarAccion("guardarTambien").GuardarYSalirAlEjecutar = true;

        }

        // Se ejecuta la primera vez que se ingresa al formulario
        public override void AntesDeVisualizar()
        {
            // Verifico si es un nuevo registro o si es existente
            if (this.IdEntidad == 0)
            {

                if (VariablesDeEntorno.ExisteValorDeVariable(this.WorkflowId, "idCliente"))
                {
                    int idCliente = (int)VariablesDeEntorno.ObtenerValorDeVariable(this.WorkflowId, "idCliente");
                    VariablesDeEntorno.EliminarValorDeVariable(this.WorkflowId, "idCliente");
                }
                // Ej: se inicializan los campos con valores
                this.BuscarCampoCabecera("nombre").Valor = "aca va el nombre";

                // Setear foco en campo de cabecera
                this.SetearFocoCabecera("nombre");
            }
            else
            {
                // Ej: si ya esta creado, no dejo cambiar el nombre
                this.BuscarCampoCabecera("nombre").Habilitado = false;

                this.BuscarAccion("Imprimir").Visible = true;
            }

            // Deshabilita todo el formulario
            this.DeshabilitarCamposYAcciones();
            
        }

        // Eset evento permite validar antes de eliminar
        public override void AntesDeEliminar()
        {
            // Ej: validar que no tenga registros dependientes de otras tablas
            string sql = "select count(*) from TablaRelacionada where id = @idActual";
            Dictionary pars = new Dictionary();
            pars.Add("@idActual", this.IdEntidad);
            int cant = FlexiDb.EjecutarScalarInt(sql, pars);

            if (cant > 0)
                throw new Exception("No puede eliminar el registro porque tiene Tablas Vinculadas.");
        }

        public override void DespuesDeEliminar()
        {
            // Ej: puede cambiar el estado de otra tabla 
            //o enviar aviso de eliminacion o actualizar totales.
        }

        // Se ejecuta al presionar Guardar, si genera un error, no se guarda el formulario.
        // Se tiene que hacer todas las validaciones necesarias.
        public override void AntesDeGuardar()
        {
            string nombre = this.BuscarCampoCabecera("nombre").ValorCadena;

            if (nombre == "JUANA")
                throw new Exception("El nombre no puede ser JUANA.");

                this.BuscarAccion("Imprimir").Visible = true;
        }

        public override void DespuesDeGuardar()
        {
             // Ej: puede cambiar el estado de otra tabla 
            //o enviar aviso de eliminacion o actualizar totales.
        }

        // Cada campo de la cabecera o las acciones al pie pueden disparar este evento
        public override void EjecutarAccion(string accion)
        {
            if (accion == "nombre de la accion")
            {
                // Ej: cambio otro campo
                // Ej: deshabilito parte del formulario
                // Ej: genero un PDF
            }
            else if (accion == "facturaEnter")
            {
                string textoIngresado = this.BuscarCampoCabecera("idClienteCategoria").ValorEscrituraDirectaAjax;
                this.AgregarMensajeResultados(textoIngresado);
            }
        }

        // Se ejecuta antes de agregar un item en la region indicada
        // En la posición 0 (cero) de los items de la region esta la fila a agregar
        public override void AntesDeAgregarItem(int region)
        {
            // Ej segun el valor de un campo, valido otro
            FlexiEdicionRegionFila fila = this.Regiones[region].FilaNueva;
            int idReciboItemTipo = fila.Columnas[PAG_TIPO].ValorEntero;

            string tipo = LogicaDeNombres.ObtenerCodigoReciboItemTipo(idReciboItemTipo);
            if (tipo == "TR" || tipo == "DEP")
            {
                int idCuentaBancaria = fila.Columnas[PAG_CTA_BCO].ValorEntero;
                if (idCuentaBancaria == 0)
                    throw new BusinessException("La cuenta bancaria es requerida para transferencias o depósitos.");
            }
        }
        
        // Se ejecuta luego de agregar un item
        public override void DespuesDeAgregarItem(int region)
        {
            // Generalemnte se recalculan totales o re enumeran lineas
        }

        // Se ejecuta luego de eliminar un item
        public override void DespuesDeEliminarItem(int region)
        {
            // Generalemnte se recalculan totales o re enumeran lineas
        }
        
        // Se ejecuta cuando se dispara una accion en una fila de una region
        public override void EjecutarAccion(string accion, int region, int fila)
        {
            FlexiEdicionRegionFila filaReg = this.Regiones[region].Filas[fila];
            if (accion == "factura")
            {
                int idFactura = filaReg.Columnas[APLI_FAC].ValorEntero;

                //Obtengo monto pendiente de aplicar factura.
                filaReg.Columnas[APLI_MONTO].Valor = LogicaDeFacturas.ObtenerMontoPendienteDeAplicar(idFactura);
            }
        }

        //Metodo Auxiliar para reccorrer las filas de una region
        private void ValidarRemitar()
        {
            int cant = 0;
            foreach (FlexiEdicionRegionFila fila in this.Regiones[REG_ITEMS].Filas)
            {
                if (!fila.Eliminada && fila.Pos > 0)
                {
                    int idRemitoItem = fila.Columnas[COL_RE_REL].ValorEntero;
                    if (idRemitoItem > 0)
                        cant++;
                }
            }

            this.BuscarAccion("Remitar").Visible = (cant == 0);
        }

        // Esta funcionalidad esta pensada para poder dividir 1 region de muchas columnas en 2 regiones cada una con 1 subgrupo
        public override void ValidarSiCargaFilaEnRegion(int region, int idEntidadFila, FlexiEdicionAccionARealizarEnFila accionPosible)
        {
            FlexiDbFila fila = FlexiDb.CargarEntidad(idEntidadFila, "ClientesDomiciliosEntrega");
            string calle = fila.ObtenerCadena("calle");

            if (region == REG_DIR_CALL1)
            {
                if (calle != "calle 1")
                    accionPosible.CancelarCarga = true;
            }
            else if (region == REG_DIR_OT)
            {
                if (calle == "calle 1")
                    accionPosible.CancelarCarga = true;
            }


        }
        
    }
}