Proyecto

General

Perfil

Calcular fecha de plazo máximo con calendario (CalculateDateWithHolidays)

Información

Autor "Noly Said Quintero":
Sitio Web http://www.facebook.com/adapting-lab
Repositorio Intranet Adapting
Código fuente https://svn-community.adapting.com/svn/community/Plugins/Modules/trunk/src/Adapting.TRD
Versión Actual v1.0
Compatible con Abox 5.0

Resumen

Calcula la fecha final y la guarda en un metadato desde una fecha inicial (metadato fecha) + plazo (trd metadato) + numProrroga(metadato entero)*diasPorProrroga(trd metadato), saltandose los días definidos como no validos en un XML situado en "Config/Calendars/".

Notas de instalación

Descargue el código fuente del plugin y compílelo usando Visual Studio 2017. Luego dependiendo si lo va a integrar en una instalación de Abox o en un proyecto de extensión de Abox sigua las siguientes instrucciones.
En una instalación de Abox¶

Copiar las carpetas "Content" y "Areas" en la carpeta root del proyecto y la dll que genera el proyecto, en principio se debe llamar Adapting.TRD.dll, en la carpeta /bin del sitio web donde esta Abox.

Incluya el proyecto en su proyecto para extender Abox, añada una referencia en Adapting.Web al proyecto que acaba de incluir.

Guía de uso

Una vez incluida la clase en el proyecto y recompilado el proyecto, tiene que modificar el XML del workflow para añadir esta acción en las acciones que ejecuta el worlflow al cambiar de estado. Para hacer esto incluya este código en las acciones de la transición en la que quiere que se ejecute.

        <action type="CalculateDateWithHolidays">
          <param name="metadataInitialDate">CodMetadatoFecha</param>
          <param name="metadataTrdDaysOfResponse">CodTRDMetadatoEntero</param>
          <param name="metadataResultDate">CodMetadatoFecha</param>
          <param name="metadataExtensions">CodMetadatoEntero</param>
          <param name="metadataTrdDaysByExtension">CodTRDMetadatoEntero</param>          
          <param name="calendarFileName">XmlFileName</param>          
        </action>

Donde:

  • metadataInitialDate (obligatorio):
    Es el código del metadato con la fecha inicial, puede ser: Fecha, Fecha Avanzada, Referencia.
  • metadataTrdDaysOfResponse (obligatorio):
    Es el código de un metadato definido en la TRD que sirve para definir los días de plazo, el cual se podría definir por tipos (TRD). Este valor entero se sumara en días a la Fecha inicial.
  • metadataResultDate (obligatorio):
    Es el código del métadato donde se guardara la fecha final calculada.
  • metadataExtensions (opcional):
    Es el código del métadato con el numero de prorrogas del cual dispone. Dicho numero de prorroga sera multiplicado por los días definidos para una prorroga (metadataTrdDaysByExtension) y sumado en días a la fecha inicial.
  • metadataTrdDaysByExtension (opcional):
    Es el código de un metadato definido en la TRD que sirve para definir los días que tiene una prorroga, el cual se podría definir por tipos (TRD). Este valor entero se multiplicará por el número de prorrogas (metadataExtensions) y se sumará a la fecha inicial.
  • calendarFileName (opcional):
    Nombre del archivo XML situado en "Config/Calendars/" que nos servirá para definir los días no hábiles para el calculo de la fecha final (metadataResultDate).

Nota:
Un ejemplo del XML del calendario que define las fechas no laborables sería el siguiente:

<?xml version="1.0"?>
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <calendar saturdays="true" sundays="true">
    <years>
      <year value="2018">
        <months>
          <month value="11">
            <days>
              <day value="5" />
              <day value="12" />
            </days>
          </month>
        </months>
      </year>
      <year value="2019">
        <months>
          <month value="2">
            <days>
              <day value="12" />
              <day range="15-18" />
              <day value="20" />
            </days>
          </month>
        </months>
        <months>
          <month value="3">
            <days>
              <day range="1-10" />
            </days>
          </month>
        </months>
      </year>
    </years>
  </calendar>
</root>
El ejemplo anterior define como no laborable todos los sábados, domingos y los días:
  • 2018-11-05
  • 2018-11-12
  • 2019-02-12
  • 2019-02-15
  • 2019-02-16
  • 2019-02-17
  • 2019-02-18
  • 2019-02-20
  • 2019-03-01
  • 2019-03-02
  • 2019-03-03
  • 2019-03-04
  • 2019-03-05
  • 2019-03-06
  • 2019-03-07
  • 2019-03-08
  • 2019-03-09
  • 2019-03-10

Historico

03/04/2019 Se añaden 2 nuevos parámetros opcionales:

        <action type="CalculateDateWithHolidays">
          <param name="listmetadataDaysOfResponse">cod_metadato(valor1|num_dias1;...;valorX|num_diasX)</param>
          <param name="constantDaysByExtension">extensionDays</param>          
        </action>

Donde:

  • listmetadataDaysOfResponse(opcional):
    Código del metadato tipo lista o lista maestra con sus posibles valores mapeados con el numero de días que se le sumaran a la fecha inicial. ej: cod_metadato(valor1|num_dias1;...;valorX|num_diasX), para listas maestras el valor es el código (Inclusive si son listas maestras enlazadas se puede colocar el código del último elemento de la lista que será seleccionado) y para listados es el Id.
  • constantDaysByExtension(opcional):
    Constante que define los días para una prórroga.
Nota:
  • Si se encuentra el parámetro 'metadataTrdDaysOfResponse', el parámetro 'listmetadataDaysOfResponse' no actua.
  • Si se encuentra el parámetro 'metadataTrdDaysByExtension', el parámetro 'constantDaysByExtension' no actua.
  • Si es definido el parámetro 'listmetadataDaysOfResponse' y el valor escogido en el metadato listado o lista maestra, es vacío o no tiene días mapeados, contará como cero.
  • El parámetro 'metadataTrdDaysOfResponse' deja de ser obligatorio. Si no esta es cero.
  • El XML de festivos por defecto 'Holidays.xml' se puede subir desde la URL: /TRD/Calendar/Upload

14/06/2019 Nuevo parámetro para los días de prórroga también deben parametrizarse de la misma forma que se hace con los días hábiles para los plazos

Se añade nuevo parámetro llamado "listmetadataDaysByExtension" el cual tiene la misma lógica del "listmetadataDaysOfResponse" pero para días por prorroga.

<param name="listmetadataDaysByExtension">cod_metadato(valor1|num_dias1;...;valorX|num_diasX)</param>     

13/04/2020 Para las listas maestras en los campos 'listmetadataDaysOfResponse' y 'listmetadataDaysByExtension' se pueden definir los días también con respecto al código del item padre seleccionado.

Por ejemplo si son 3 listas enlazadas 1->2->3 colocando el código 2 se pueden definir los días sin importar que se seleccione en la lista 3.

Para tener en cuenta: El orden en que se coloquen los posibles valores|días es importante por lo tanto si se coloca primero el valor de un padre, por ejemplo 1|5;11|10, si la lista con el item con código 11 es hija de la lista con el item de código 1... Siempre retornara como valor en días el 5, para hacerlo bien debería ser 11|10;1|5

09/06/2020 El parámetro 'metadataInitialDate' deja de ser obligatorio en caso de no enviarlo se toma la Fecha/Hora actual

03/02/2021

<param name="constantResultTime">Entero entre 0 y 23</param>     
  • Se añade un nuevo parámetro tipo constante opcional llamado "constantResultTime" el cual permitirá forzar una hora a la fecha calculada.
  • Este parámetro será un valor entero entre 0 y 23.

11/03/2021

  • Se implementa la acumulación de parámetros "listmetadataDaysOfResponse" y "listmetadataDaysByExtension". Estos parámetros ahora son ilimitados.
  • Se realiza suma o resta, dependiendo del valor seleccionado, de cada N parámetros acumulados de cualquiera de los tipos mencionados.

15/03/2021

  • Se implementa la posibilidad de validar mas de un metadato tipo lista para la elección de un valor especifico. Es posible implementar n metadatos a validar.
  • Se implementa igual para los parámetros "listmetadataDaysOfResponse" y "listmetadataDaysByExtension".
  • La estructura es la siguiente:
    <param name="listmetadataDaysOfResponse/listmetadataDaysByExtension">Mata1#...#MetaN(valor1#...#valorN|10;valor2|1;...)</param>
    
  • Cuando se cumple que uno o los N valores, que estén antes del caracter '|', corresponde a los códigos seleccionados por los metadatos (Mata1#...#MetaN), entonces se asigna el valor que esta después del '|' y antes del ';'.
  • Las validaciones de hacen en orden de izquierda a derecha. El primero que cumpla la condición (AND representado '#') será el que seleccione el valor.
  • Se sobre entiende que no hay códigos repetidos por lo que no es necesario colocar valores "vacíos" (por medio del '#') a un metadato respectivo. Por ejemplo: Mata1#Meta2(#value2|10;...). Funciona igual si escribimos: Mata1#Meta2(value2|10;...) ya que se espera que SOLO Meta2 pueda seleccionar el valor2. Esto para que la dll sea mas ligera y rápida.

12/01/2022
  • Se implementa la posibilidad de agregar una fecha en los campos GLobalDate y LocalDate de la StaticContents.
  • Se implementa para el parámetro "workflowResultDate".
  • La estructura es la siguiente:
    <param name="workflowResultDate">GlobalDate/LocalDate</param>
    
  • Se implementa la posibilidad de que el parametro "metadataResultDate" no sea obligatorio y pueda guardarse como vacio.

Volver al inicio
Agregar imagen desde el portapapeles (Tamaño máximo: 10 MB)