El cálculo en realidad no se hace aquí, pero en la tabla Dates, columna “Ouvrable”.
AND(
NOT( IN( WEEKDAY([Date]), SELECT(Semaine[Index], FALSE = [Ouvrable]) )),
NOT( IN([Date], Jours Fériés[Date]) )
)
Esta es la formula que asigna el estado laboral o no laboral a una fecha.
Ahora sobre la necesidad de hacer el cálculo por un trabajo. Esto es lo normal, lo esperado. Pero la cuestión es ¿cómo abordarlo? Primero, sí es posible adaptar la app para incorporar esta función y asignar fechas por trabajo, pero ¿sería el camino correcto?
Muchos desarrolladores suelen olvidarse de que la arquitectura del software es mas importante de su codificación. Sí, con algunos trucos de magia de codificación, se podría crear expresiones complejos con las cuales se incorporarán el calculo de fechas por proyecto y por usuario, etc. pero para mí esto sería una falta grave. Era exactamente el tema principal de mi presentación
KISS - Keep It Smart & Simple
La app se trata de una calculadora que se puede incorporar en contextos más grandes. El caso del cliente era más complejo, pero también en tu caso no necesitas hacer algo más para hacer el cálculo por trabajo:
- Quédate con la tabla “Calculatrice” en tu app.
- Tu tabla de Trabajos, debe tener las columnas: “Fecha Inicio”, “Días laborales de la semana”, “Nombre de Días” y “Fecha Final”.
- Puedes copiar la expresión de “Date Cible” en “Fecha Final”, o añadir una columna “TrabajoID” en “Calculatrice” y utilizar las Dereference Expressions para copiar el valor (en lugar de la expresión) de “Date Cible” en “Fecha Final”.
- Cuando añades un trabajo nuevo en la tabla Trabajos, en ese momento puedes elegir los días correspondientes, o hacerlo antes.
Los datos de un trabajo en la tabla de Trabajos serán guardados en columnas normales en el spreadsheet, y así no serán cambiados si por ejemplo los días laborales han sido cambiados según un nuevo proyecto.
Además, puedes impedir que esos datos se cambien al editar la fila, poniendo la siguiente condición en el campo Editable? de cada columna:
ISBLANK([_This])
Así, una vez creado un trabajo, la información dinámica relacionada con los cálculos de fechas no se cambiarán nunca.