- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple(Array) (Line: 16)
Drupal\user\RoleStorage->isPermissionInRoles('access site in maintenance mode', Array) (Line: 112)
Drupal\Core\Session\UserSession->hasPermission('access site in maintenance mode') (Line: 105)
Drupal\Core\Session\AccountProxy->hasPermission('access site in maintenance mode') (Line: 83)
Drupal\redirect\RedirectChecker->canRedirect(Object) (Line: 120)
Drupal\redirect\EventSubscriber\RedirectRequestSubscriber->onKernelRequestCheckRedirect(Object, 'kernel.request', Object)
call_user_func(Array, Object, 'kernel.request', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.request') (Line: 145)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '44e597d0-0d5f-4731-aa42-5d7bf2663007') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '44e597d0-0d5f-4731-aa42-5d7bf2663007') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '44e597d0-0d5f-4731-aa42-5d7bf2663007') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', '44e597d0-0d5f-4731-aa42-5d7bf2663007') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'addd9a39-81d8-4f2d-80fb-246a9b9a10ea') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'addd9a39-81d8-4f2d-80fb-246a9b9a10ea') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'addd9a39-81d8-4f2d-80fb-246a9b9a10ea') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'addd9a39-81d8-4f2d-80fb-246a9b9a10ea') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-77d8b56a-f3b4-4e64-a1bf-d16d6e275772') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-77d8b56a-f3b4-4e64-a1bf-d16d6e275772') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-77d8b56a-f3b4-4e64-a1bf-d16d6e275772') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-77d8b56a-f3b4-4e64-a1bf-d16d6e275772') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3aee758e-4963-454e-8d51-c6665361f62f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3aee758e-4963-454e-8d51-c6665361f62f') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3aee758e-4963-454e-8d51-c6665361f62f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-3aee758e-4963-454e-8d51-c6665361f62f') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-48908765-79a6-48a9-9b46-8db18ea6a97d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-48908765-79a6-48a9-9b46-8db18ea6a97d') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-48908765-79a6-48a9-9b46-8db18ea6a97d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-48908765-79a6-48a9-9b46-8db18ea6a97d') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dab9f6ec-9349-45cc-88bc-46fad0373f37') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dab9f6ec-9349-45cc-88bc-46fad0373f37') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dab9f6ec-9349-45cc-88bc-46fad0373f37') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dab9f6ec-9349-45cc-88bc-46fad0373f37') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-635daf66-6a73-4fca-9727-68a2b903b59e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-635daf66-6a73-4fca-9727-68a2b903b59e') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-635daf66-6a73-4fca-9727-68a2b903b59e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-635daf66-6a73-4fca-9727-68a2b903b59e') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfbdffaa-0217-4588-a89a-f5ea00d9cb12') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfbdffaa-0217-4588-a89a-f5ea00d9cb12') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfbdffaa-0217-4588-a89a-f5ea00d9cb12') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-cfbdffaa-0217-4588-a89a-f5ea00d9cb12') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dec4eeca-4154-41f4-9e35-ecb0039b9bb9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dec4eeca-4154-41f4-9e35-ecb0039b9bb9') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dec4eeca-4154-41f4-9e35-ecb0039b9bb9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-dec4eeca-4154-41f4-9e35-ecb0039b9bb9') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a367c5df-3466-4243-afee-99b0d5b18fe0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a367c5df-3466-4243-afee-99b0d5b18fe0') (Line: 95)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'file') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a367c5df-3466-4243-afee-99b0d5b18fe0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('entity_query') (Line: 147)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 640)
Drupal\Core\Entity\EntityStorageBase->loadByProperties(Array) (Line: 63)
Drupal\Core\Entity\EntityRepository->loadEntityByUuid('file', 'insert-max_800_px-a367c5df-3466-4243-afee-99b0d5b18fe0') (Line: 124)
Drupal\editor\Plugin\Filter\EditorFileReference->process('Esta estupenda visualización de MAQ LLC nos permite llevar eventos (definidos por una fecha de comienzo y otra de finalización) a un calendario. Los campos que nos permiten configurar la visualización son los mostrados en la siguiente imagen:
Los únicos campos requeridos son <em>Start date</em> (fecha de comienzo de cada evento) y <em>Events</em> (eventos a mostrar en el calendario). Este último campo deberá necesariamente contener cadenas de texto (no es posible mostrar números, por ejemplo).
Para ver cómo funciona vamos a partir de los siguientes datos:
Vemos que se trata de una tabla con asignaciones de empleados a diferentes tareas limitadas en el tiempo por una fecha de arranque y otra de finalización, tabla que incluye el rol del empleado en cuestión en el campo <em>Category</em> (un mismo empleado puede ser asignado a diferentes tareas con diferentes roles).
El campo <em>Id</em> enlaza esta tabla con la tabla de empleados en la que incluye, entre otros datos, el nombre completo de cada uno.
Comencemos creando una instancia del calendario en el lienzo de Power BI y arrastrando el campo <em>Start</em> de la tabla anterior al campo <em>Start date</em> de la visualización, y el campo <em>Full name</em> de nuestra tabla de empleados al campo <em>Events</em> de la visualización. Ésta mostrará la siguiente imagen:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_03.jpg"></a>
Es decir, si no se añade el campo <em>End date</em>, la visualización presupone que se trata de eventos de un solo día. Los "eventos" (en nuestro caso definidos por el nombre de un trabajador) se muestran en el bloque correspondiente a cada día. Vemos que solo se muestran un máximo de 2 eventos por día: en la imagen anterior, en el recuadro correspondiente al día 12, por ejemplo, hay una etiqueta "+3 more" que indica que hay otros 3 eventos que no se están mostrando. Un clic encima de dicha etiqueta abre una ventana emergente con la lista completa de eventos:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_04.jpg"></a>
Desafortunadamente no es posible modificar el número de eventos a mostrar por día, ni configurar el tamaño de dicho texto (con la esperanza de que quepan más líneas). Tampoco haciendo la visualización más alta o más estrecha se modificará la altura de los recuadros que representan los días.
Si añadimos al campo <em>End date</em> de la visualización el campo con la fecha de terminación de cada evento (campo <em>End</em> de nuestra tabla), la visualización muestra el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_05.jpg"></a>
Es posible modificar los colores que reciben los eventos en <em>Formato > Data colors</em>.
El campo de la visualización <em>Event Group</em> nos permite agrupar los eventos según el criterio impuesto por el campo que llevemos aquí, mostrando en este caso todos los eventos del mismo grupo con el mismo color. Por ejemplo, si llevamos a este campo nuestro campo <em>Category</em> (con el rol de cada empleado), la visualización se muestra ahora con el siguiente aspecto:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_10.jpg"></a>
Todos los eventos de la misma categoría se muestran con el mismo color, y la leyenda superior también refleja este hecho adecuadamente.
Es posible mostrar los meses anteriores o posteriores haciendo uso de los controles que se muestran en la esquina superior izquierda del calendario. En dicho caso, un clic en el botón "Today" nos devolverá al mes actual:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_06.jpg"></a>
A la misma altura que estos botones pero en el extremo derecho podemos modificar la vista para mostrar la información a nivel de semanas:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_07.jpg"></a>
...aunque puede comprobarse que los textos con los nombres de los eventos no son sencillos de leer. Afortunadamente, al mover el cursor encima de una de las columnas se muestra en una ventanita emergente el nombre del evento completo. También tenemos la leyenda como ayuda, por supuesto, aunque en el caso de que haya muchos eventos (es decir, más de 4 o 5), se agradecería que la leyenda se filtrase para mostrar solo las etiquetas de la semana seleccionada.
También podemos entrar en modo "día":
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_08.jpg"></a>
También aquí se agradecería que las etiquetas que se muestran en la parte superior de cada columna se moviesen verticalmente cuando hacemos scroll, de forma que estuviesen siempre visibles.
Y, por último, tenemos la vista "lista" en la que vemos los eventos en este formato. En este caso siempre se muestran los eventos de un único mes (que podemos cambiar con los controles comentados de la esquina superior izquierda), no siendo posible modificar este nivel de detalle:
<a class="colorbox insert-colorbox" data-colorbox-gallery="gallery-node" data-insert-class="" data-insert-type="image" href="/sites/default/files/2019-08/calendar_by_maq_09.jpg"></a>
La visualización ofrece bastantes opciones de configuración: qué vistas queremos que estén a disposición del usuario y cuáles no, las horas y días laborables, mostrar o no el número de cada semana... Activemos esta última opción. Ahora, en todas las vistas se indica -en alguna parte- el número de la semana pero, en la vista mensual, un clic en el número de la semana que se muestra a la izquierda de cada bloque de 7 días nos lleva a la vista semanal (para dicha semana, obviamente). Y, aunque no se ha comentado todavía, haciendo clic en el número de un día en la vista mensual, o haciendo clic en la cabecera de un día en la vista semanal iremos a la vista del día correspondiente.
Muy buena visualización, con margen para mejora, por supuesto, pero muy recomendable.
', 'es') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 88)
__TwigTemplate_a7d6005c89ae729617b9a0c2bccb1776->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 46)
__TwigTemplate_804f7948456cfe20e11a34c43439c7c2->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array, Array) (Line: 43)
__TwigTemplate_bd990293b89f3b78c69fe0ee2f7828b5->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/contrib/classy/templates/field/field--text-with-summary.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 446)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array) (Line: 479)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 74)
__TwigTemplate_94047fbdba6937b76a4479dfa1763452->doDisplay(Array, Array) (Line: 405)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 378)
Twig\Template->display(Array) (Line: 390)
Twig\Template->render(Array) (Line: 55)
twig_render_template('themes/custom/yg_aesthetic/templates/node.html.twig', Array) (Line: 384)
Drupal\Core\Theme\ThemeManager->render('node', Array) (Line: 433)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, ) (Line: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 235)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Return type of Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in include() (line 10 of modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php).
include('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 578)
Composer\Autoload\ClassLoader::Composer\Autoload\{closure}('/var/www/vhosts/interactivechaos.ovh/httpdocs/modules/contrib/google_analytics/src/Component/Render/GoogleAnalyticsJavaScriptSnippet.php') (Line: 432)
Composer\Autoload\ClassLoader->loadClass('Drupal\google_analytics\Component\Render\GoogleAnalyticsJavaScriptSnippet') (Line: 372)
google_analytics_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'google_analytics') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Use of "static" in callables is deprecated in Drupal\user\Entity\Role::postLoad() (line 172 of core/modules/user/src/Entity/Role.php).
Drupal\user\Entity\Role::postLoad(Object, Array) (Line: 423)
Drupal\Core\Entity\EntityStorageBase->postLoad(Array) (Line: 353)
Drupal\Core\Entity\EntityStorageBase->loadMultiple() (Line: 126)
eu_cookie_compliance_page_attachments(Array) (Line: 313)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}(Object, 'eu_cookie_compliance') (Line: 405)
Drupal\Core\Extension\ModuleHandler->invokeAllWith('page_attachments', Object) (Line: 310)
Drupal\Core\Render\MainContent\HtmlRenderer->invokePageAttachmentHooks(Array) (Line: 288)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 141)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 144)
Drupal\views\Plugin\views\PluginBase->init(Object, Object, Array) (Line: 104)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 51)
Drupal\views\Plugin\views\filter\ManyToOne->defineOptions() (Line: 117)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->defineOptions() (Line: 228)
Drupal\views\Plugin\views\PluginBase->unpackOptions(Array, Array) (Line: 110)
Drupal\views\Plugin\views\HandlerBase->init(Object, Object, Array) (Line: 95)
Drupal\views\Plugin\views\filter\FilterPluginBase->init(Object, Object, Array) (Line: 44)
Drupal\views\Plugin\views\filter\InOperator->init(Object, Object, Array) (Line: 36)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\views\ManyToOneHelper::$handler is deprecated in Drupal\views\ManyToOneHelper->__construct() (line 24 of core/modules/views/src/ManyToOneHelper.php).
Drupal\views\ManyToOneHelper->__construct(Object) (Line: 38)
Drupal\views\Plugin\views\filter\ManyToOne->init(Object, Object, Array) (Line: 98)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->init(Object, Object, Array) (Line: 894)
Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('filter') (Line: 1045)
Drupal\views\ViewExecutable->_initHandler('filter', Array) (Line: 903)
Drupal\views\ViewExecutable->initHandlers() (Line: 2633)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterMetaData is deprecated in Drupal\Core\Database\Query\Select->addMetaData() (line 178 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addMetaData('entity_type', 'taxonomy_term') (Line: 115)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
- Deprecated function: Creation of dynamic property Drupal\mysql\Driver\Database\mysql\Select::$alterTags is deprecated in Drupal\Core\Database\Query\Select->addTag() (line 149 of core/lib/Drupal/Core/Database/Query/Select.php).
Drupal\Core\Database\Query\Select->addTag('taxonomy_term_access') (Line: 145)
Drupal\Core\Entity\Query\Sql\Query->prepare() (Line: 80)
Drupal\Core\Entity\Query\Sql\Query->execute() (Line: 228)
Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid->valueForm(Array, Object) (Line: 941)
Drupal\views\Plugin\views\filter\FilterPluginBase->buildExposedForm(Array, Object) (Line: 111)
Drupal\views\Form\ViewsExposedForm->buildForm(Array, Object)
call_user_func_array(Array, Array) (Line: 534)
Drupal\Core\Form\FormBuilder->retrieveForm('views_exposed_form', Object) (Line: 281)
Drupal\Core\Form\FormBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', Object) (Line: 134)
Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm(1) (Line: 2638)
Drupal\views\Plugin\views\display\DisplayPluginBase->viewExposedFormBlocks() (Line: 35)
Drupal\views\Plugin\Block\ViewsExposedFilterBlock->build() (Line: 171)
Drupal\block\BlockViewBuilder::preRender(Array)
call_user_func_array(Array, Array) (Line: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 160)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 175)
Drupal\Core\Render\Renderer->renderPlaceholder('', Array) (Line: 665)
Drupal\Core\Render\Renderer->replacePlaceholders(Array) (Line: 550)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 204)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 148)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 147)
Drupal\Core\Render\Renderer->renderRoot(Array) (Line: 279)
Drupal\Core\Render\HtmlResponseAttachmentsProcessor->renderPlaceholders(Object) (Line: 71)
Drupal\big_pipe\Render\BigPipeResponseAttachmentsProcessor->processAttachments(Object) (Line: 45)
Drupal\Core\EventSubscriber\HtmlResponseSubscriber->onRespond(Object, 'kernel.response', Object)
call_user_func(Array, Object, 'kernel.response', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.response') (Line: 202)
Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object, Object, 1) (Line: 190)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 713)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)