Herramientas de usuario

Herramientas del sitio


desarrolladores:administracion_de_convenios

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

desarrolladores:administracion_de_convenios [19/04/2021 12:13]
guille [Administrador de convenios suap]
desarrolladores:administracion_de_convenios [21/01/2023 04:19] (actual)
Línea 5: Línea 5:
 ====== Administrador de convenios suap ====== ====== Administrador de convenios suap ======
  
-[[:​desarrolladores:​desarrolladores:​administracion_de_convenios:​convenios|apéndice ​de convenios]]+[[:​desarrolladores:​administracion_de_convenios:​convenios|Apéndice ​de convenios]]
  
-[[:​desarrolladores:​reglas|:​desarrolladores:​reglas]]+[[:​desarrolladores:​administracion_de_convenios:reglas|Lista de regla]] 
 + 
 +[[:​desarrolladores:​desarrolladores:​administracion_de_convenios:​sfConvenioAdm.class.php|sfConvenioAdmBase.class.php]]
  
 ====== ​  ​====== ====== ​  ​======
Línea 29: Línea 31:
       * 2. el sfConectorManager devuelve un suapConvenioInterfaz[COMPORTAMIENTO] o un sfConectorExterno[COMPORTAMIENTO]. En este orden estricto, intenta siempre lo nuevo, sino puede sigue con lo viejo.       * 2. el sfConectorManager devuelve un suapConvenioInterfaz[COMPORTAMIENTO] o un sfConectorExterno[COMPORTAMIENTO]. En este orden estricto, intenta siempre lo nuevo, sino puede sigue con lo viejo.
  
-Aquí vemos que hay dos grandes grupos de acciones que gestiona el convenio. Por un lado tenemos las clases sfProcesadorOrden[COMPORTAMIENTO] y la suapProcesadorOrden[COMPORTAMIENTO] que son las que aplican el convenio según los diferentes requerimientos del usuario, pero en una orden ya creada en suap. Es deseable que la tecnología que se utilice sea **//​suapProcesadorOrden[COMPORTAMIENTO].// ​     **+Aquí vemos que hay dos grandes grupos de acciones que gestiona el convenio. Por un lado tenemos las clases sfProcesadorOrden[COMPORTAMIENTO] y la suapProcesadorOrden[COMPORTAMIENTO] que son las que aplican el convenio según los diferentes requerimientos del usuario, pero en una orden ya creada en suap. Es deseable que la tecnología que se utilice sea **//​suapProcesadorOrden[COMPORTAMIENTO].// ​    ​**
  
 Por otro lado está sfConectorExterno[COMPORTAMIENTO] y suapConvenioInterfaz[COMPORTAMIENTO]. La idea original era que sfConectorExterno[COMPORTAMIENTO] fuera solamente utilizada por el sfProcesadorOrden[COMPORTAMIENTO] para realizar la interfaz entre suap y el convenio. Pero a la hora de definir el afiliado se optó, hace tiempo, por tomar acciones desde la api del smartForm directamente sobre el conector. Y es necesario que dicho conector tenga dos metodos, que son: testearAfiliado() y arbrirConexión(). Para sostener esta situación y hacer una transición ordenada se optó por crear una suapConvenioInterfaz[COMPORTAMIENTO] que es eso, una interfaz entre suap y el convenio. Esta clase nueva tiene los métodos testearAfiliado() y abrirConexión() para que sea compatible con la api del smartForm, pero no las resuelve directamente mediante el conector, lo hace mediante el convenio. Por otro lado está sfConectorExterno[COMPORTAMIENTO] y suapConvenioInterfaz[COMPORTAMIENTO]. La idea original era que sfConectorExterno[COMPORTAMIENTO] fuera solamente utilizada por el sfProcesadorOrden[COMPORTAMIENTO] para realizar la interfaz entre suap y el convenio. Pero a la hora de definir el afiliado se optó, hace tiempo, por tomar acciones desde la api del smartForm directamente sobre el conector. Y es necesario que dicho conector tenga dos metodos, que son: testearAfiliado() y arbrirConexión(). Para sostener esta situación y hacer una transición ordenada se optó por crear una suapConvenioInterfaz[COMPORTAMIENTO] que es eso, una interfaz entre suap y el convenio. Esta clase nueva tiene los métodos testearAfiliado() y abrirConexión() para que sea compatible con la api del smartForm, pero no las resuelve directamente mediante el conector, lo hace mediante el convenio.
Línea 59: Línea 61:
 === suapPracticasExterna === === suapPracticasExterna ===
  
-Es una colección de **//​suapPracticaExterna.// ​    ​**     ​Tiene implementadas las interface arrayAccess,​ iterable y countable. Pero con la particularidad de que se pueden incorporar **//​suapPracticaExterna //**como en cualquier arreglo y luego iterar o acceder mediante codigos del financiador,​ o de suap o por cantidad etc. Por ejemplo+Es una colección de **//​suapPracticaExterna.// ​   **    Tiene implementadas las interface arrayAccess,​ iterable y countable. Pero con la particularidad de que se pueden incorporar **//​suapPracticaExterna //**como en cualquier arreglo y luego iterar o acceder mediante codigos del financiador,​ o de suap o por cantidad etc. Por ejemplo
 ===== lib/​sfConvenioAdmBase ===== ===== lib/​sfConvenioAdmBase =====
  
Línea 68: Línea 70:
 Las variables se pueden inyectar antes del punto de ejecución con: Las variables se pueden inyectar antes del punto de ejecución con:
  
-<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$convenio = sfConvenioAdmBase::​create (…); ​     \\ $convenio→entorno→setToVariables(‘idUser’,​ $idUser );    \\ / / Mas variables ​   \\ $convenio→fetchConvenio ()    \\ →createRulesBlocksSetByMatchBlocks ()    \\ →hydrateRulesSet(); ​   \\ …    \\ $convenio→apply();</​font>​+<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$convenio = sfConvenioAdmBase::​create (…); ​    ​\\ $convenio→entorno→setToVariables(‘idUser’,​ $idUser );      \\ / / Mas variables ​     \\ $convenio→fetchConvenio ()      \\ →createRulesBlocksSetByMatchBlocks ()      \\ →hydrateRulesSet(); ​     \\ …      \\ $convenio→apply();</​font>​
  
  \\ Es muy importante que se entienda que las variables deben inyectarse ANTES del fetchConvenio(). Esto es porque el createRulesBlocksSetByMatchBlocks puede utilizar esas variables como parte de condición de match. Si se hacen luego de esto y antes del apply van a estar para la ejecución, pero no van a estar para la selección de bloques de ejecución. Tener esto en consideración. Se recomienda siempre antes del fetchConvenio.  \\ Es muy importante que se entienda que las variables deben inyectarse ANTES del fetchConvenio(). Esto es porque el createRulesBlocksSetByMatchBlocks puede utilizar esas variables como parte de condición de match. Si se hacen luego de esto y antes del apply van a estar para la ejecución, pero no van a estar para la selección de bloques de ejecución. Tener esto en consideración. Se recomienda siempre antes del fetchConvenio.
Línea 74: Línea 76:
 Las variables se pueden obtener desde el punto de llamado con: Las variables se pueden obtener desde el punto de llamado con:
  
-<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$convenio = sfConvenioAdmBase::​create(…); ​ \\ …  \\ $convenio→apply(); ​ \\ $error = $convenio→entorno→getFromVariables(‘lastError’);</​font>​+<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$convenio = sfConvenioAdmBase::​create(…); ​   \\ …    \\ $convenio→apply(); ​   \\ $error = $convenio→entorno→getFromVariables(‘lastError’);</​font>​
  
 En el ejemplo se puede ver que luego de una ejecución se obtiene el ultimo error. ​ Que es una variable que se debió configurar en alguna regla. Las variables que se utilizan para inyectar contexto (previo a la ejecución),​ unir reglas (durante la ejecución) y devolver información (al finalizar la ejecución) son: En el ejemplo se puede ver que luego de una ejecución se obtiene el ultimo error. ​ Que es una variable que se debió configurar en alguna regla. Las variables que se utilizan para inyectar contexto (previo a la ejecución),​ unir reglas (durante la ejecución) y devolver información (al finalizar la ejecución) son:
Línea 83: Línea 85:
     * ·  ‘suapCfg_entorno_tipo’:​ es el tipo de entorno, proviene del yml suapCfg.yml. Indica si está en producción o testing dicha instalación. Estaría bueno que deje de provenir del yml.     * ·  ‘suapCfg_entorno_tipo’:​ es el tipo de entorno, proviene del yml suapCfg.yml. Indica si está en producción o testing dicha instalación. Estaría bueno que deje de provenir del yml.
  
-    * ·  ‘afiliadoExterno’:​ es un objeto de clase //​suapAfiliadoExterno. //     ​Sirve para inyectar datos de un afiliado que se va a buscar en el WS de un financiador. Es el primer frente de unificación,​ tiene setters y getters de cada dato+    * ·  ‘afiliadoExterno’:​ es un objeto de clase //​suapAfiliadoExterno. //    Sirve para inyectar datos de un afiliado que se va a buscar en el WS de un financiador. Es el primer frente de unificación,​ tiene setters y getters de cada dato
  
 == Durante la ejecución == == Durante la ejecución ==
  
-    * ·  ‘parametrosConector’:​ Contiene los datos necesarios para realizar la conexión con el WS del financiador. Es probable que exista //​sfRegla_[convenio]_setup// ​     que configura estos datos. +    * ·  ‘parametrosConector’:​ Contiene los datos necesarios para realizar la conexión con el WS del financiador. Es probable que exista //​sfRegla_[convenio]_setup// ​    ​que configura estos datos. 
-    * ·  ‘afiliadoObtenido’:​ Es un //​suapAfiliadoExterno// ​     que contiene los datos que se obtuvieron desde el ws del financiador. Está en abstracto y no está en la DB de suap.+    * ·  ‘afiliadoObtenido’:​ Es un //​suapAfiliadoExterno// ​    ​que contiene los datos que se obtuvieron desde el ws del financiador. Está en abstracto y no está en la DB de suap.
     * ·  ‘ordenExterna’:​ es un objeto de clase //​suapOrdenExterna//​. Hay una serie de reglas que construyen a partir de una orden real de suap estos objetos. Sirven para vincular los conectores con las reglas, son una abstracción genérica de lo que es una orden. En general las reglas de tipo sfReglaOrdenExternaBuild_M#​ son las que tomando una orden del modelo crean una ordenExterna.     * ·  ‘ordenExterna’:​ es un objeto de clase //​suapOrdenExterna//​. Hay una serie de reglas que construyen a partir de una orden real de suap estos objetos. Sirven para vincular los conectores con las reglas, son una abstracción genérica de lo que es una orden. En general las reglas de tipo sfReglaOrdenExternaBuild_M#​ son las que tomando una orden del modelo crean una ordenExterna.
     * ·  ‘transaccionExterna’:​ Es la transacció externa con el ws del financiador.     * ·  ‘transaccionExterna’:​ Es la transacció externa con el ws del financiador.
Línea 97: Línea 99:
  
     * ·  ‘datosRender’:​ es una variable que se crea en el ámbito RENDER. Es donde se indican cosas que se exige mostrar de una entidad. Por ejemplo la parte variable según convenio de un show de orden.     * ·  ‘datosRender’:​ es una variable que se crea en el ámbito RENDER. Es donde se indican cosas que se exige mostrar de una entidad. Por ejemplo la parte variable según convenio de un show de orden.
 +    * '​nombreConector'​ (opcional): es una variable que genera el convenio en cualquier ambito, opcional, que sobreescribe el conector que tradicionalmente se usa. Sigue la misma logica que los datos en el yml clasico. Ejemplo nombreConector=OSDELoco conector instanciado sfConectorExternoOSDELoco
 +    * '​comportamiento'​ (opcional): permite forzar un comportamiento particular para, por ejemplo, acceder a una seccion especial del yml
 +    * '​return':​ si esta definido y es 1 se termina el proceso al finalizar el ambito que la ejecuto. Sirve para que condiciones externas puedan impedir un proceso (por ejemplo actualizar)
 +    * '​mensajeUsuario':​ en esta variable las reglas pueden inyectar mensajes al usuario. Se ponen concatenados
  
 === Ambitos === === Ambitos ===
Línea 114: Línea 120:
 ====== sfReglaBase ====== ====== sfReglaBase ======
  
-Es una clase abstracta que da origen a todas las reglas que interactúan con entidades. Por ejemplo las que modifican ordenes o afiliados. Nunca una regla tiene o requiere una entidad como parámetro, se limita a obtener dicha entidad del **//​entorno. ​    ​\\ // **+Es una clase abstracta que da origen a todas las reglas que interactúan con entidades. Por ejemplo las que modifican ordenes o afiliados. Nunca una regla tiene o requiere una entidad como parámetro, se limita a obtener dicha entidad del **//​entorno. ​   \\ // **
  
 ====== sfReglaPrimitivaBase ====== ====== sfReglaPrimitivaBase ======
Línea 124: Línea 130:
 Son las reglas que realizan el uso de conectores para interactuar con el sistema del financiador. La regla de nombre es Son las reglas que realizan el uso de conectores para interactuar con el sistema del financiador. La regla de nombre es
  
-**sfReglaConector_** ​    ​+ ‘//​convenio’// ​    ​+** _ [**    + ‘//​carrier’** + _**    //**]// + //    **//​‘acción’// ​    ​\\ ​ \\ Por ejemplo //​sfReglaConector_OSDE_ITC_setup//​. ​     \\  \\ Si bien el carrier es opcional conviene poner algo siempre, por ejemplo si es directo al sistema del financiador,​ se podría poner DIRECTO. ​    ​\\  \\ Hay una serie de reglas de conector que en gral deben estar y son:+**sfReglaConector_** ​   + ‘//​convenio’// ​   +** _ [**      + ‘//​carrier’** + _**      //**]// + //      **//​‘acción’// ​    ​\\ ​ \\ Por ejemplo //​sfReglaConector_OSDE_ITC_setup//​. ​    ​\\  \\ Si bien el carrier es opcional conviene poner algo siempre, por ejemplo si es directo al sistema del financiador,​ se podría poner DIRECTO. ​   \\  \\ Hay una serie de reglas de conector que en gral deben estar y son:
 == sfReglaConector_[ ]_setup == == sfReglaConector_[ ]_setup ==
  
 Esta regla sirve básicamente para contener y configurar los parámetros. Prácticamente lo único que hace es poner en el entorno dichos parámetros. Lo hace debajo de la clave “parametrosConector”. Ejemplo de implementación:​ Esta regla sirve básicamente para contener y configurar los parámetros. Prácticamente lo único que hace es poner en el entorno dichos parámetros. Lo hace debajo de la clave “parametrosConector”. Ejemplo de implementación:​
  
-<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$parametrosConector = $this→parametrosArr; ​   \\ –  codigo de control o reporte de errores si fuera menester –    \\ $this→entorno→setToVariables(‘parametrosConector’,​ $parametrosConector); ​     \\ </​font>​+<font 10pt:​normal/​Courier;;​rgb(0,​0,​0);;​inherit>​$parametrosConector = $this→parametrosArr; ​     \\ –  codigo de control o reporte de errores si fuera menester –      \\ $this→entorno→setToVariables(‘parametrosConector’,​ $parametrosConector); ​    ​\\ </​font>​
  
 == sfReglaConector_[ ]_fetchAfiliado == == sfReglaConector_[ ]_fetchAfiliado ==
  
-Esta regla obtiene desde el financiador un afiliado. Los datos que va a utilizar los obtiene de la variable de entorno //​afiliadoExterno//​. Debe devolver un //​suapAfiliadoExterno// ​    ​en la variable de entorno //​afiliadoObtenido//​. En caso de no poder porque dio error el conector debe poner un error en el entorno con //​$this→entorno→addError(‘El conector dio error coso’)//; Además debe reportar el ultimo error en la variable de entorno //​lastError//​+Esta regla obtiene desde el financiador un afiliado. Los datos que va a utilizar los obtiene de la variable de entorno //​afiliadoExterno//​. Debe devolver un //​suapAfiliadoExterno// ​   en la variable de entorno //​afiliadoObtenido//​. En caso de no poder porque dio error el conector debe poner un error en el entorno con //​$this→entorno→addError(‘El conector dio error coso’)//; Además debe reportar el ultimo error en la variable de entorno //​lastError//​
  
 Dentro de las reglas de conector hay unas que no son particulares de un financiador,​ que intentan ser genéricas. Son: Dentro de las reglas de conector hay unas que no son particulares de un financiador,​ que intentan ser genéricas. Son:
desarrolladores/administracion_de_convenios.1618834381.txt.gz · Última modificación: 21/01/2023 04:19 (editor externo)