WIP: Implement admin CRUD
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
<div class="flex justify-between border-b border-gray-200 pb-2 mb-4">
|
||||
<div class="flex items-center space-x-2">
|
||||
{{ icon('alert', 'w-8 h-8') }}
|
||||
<span class="text-lg font-medium" {{ stimulus_target('confirmation-modal', 'title') }}></span>
|
||||
<span class="text-xl font-bold" {{ stimulus_target('confirmation-modal', 'title') }}></span>
|
||||
</div>
|
||||
<button class="inline-block" {{ stimulus_action('confirmation-modal', 'hide') }}>
|
||||
{{ icon('close', 'w-8 h-8') }}
|
||||
@@ -15,7 +15,7 @@
|
||||
</div>
|
||||
<form method="post" {{ stimulus_target('confirmation-modal', 'form') }}>
|
||||
<div {{ stimulus_target('confirmation-modal', 'content') }}></div>
|
||||
<div class="mt-6 flex items-center space-x-8">
|
||||
<div class="mt-6 flex items-center justify-between">
|
||||
<button type="submit" class="btn">
|
||||
Ja
|
||||
</button>
|
||||
|
||||
@@ -1,27 +1,83 @@
|
||||
{% extends 'knp_menu.html.twig' %}
|
||||
|
||||
{% block list %}
|
||||
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
|
||||
{% if item.level == 0 %}
|
||||
<div class="min-h-full flex grow flex-col gap-y-5 overflow-y-scroll lg:border-r border-gray-200 bg-white md:pr-6">
|
||||
<nav class="flex flex-1 flex-col">
|
||||
<ul role="list" class="space-y-1">
|
||||
{{ block('children') }}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
{% else %}
|
||||
<ul class="{{ html_classes('mt-1 px-2', { 'hidden': not matcher.isCurrent(item) }) }}" {{ stimulus_target('sidebar-menu', 'submenu') }}>
|
||||
{{ block('children') }}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block item %}
|
||||
{% if item.displayed %}
|
||||
<li>
|
||||
{%- if item.hasChildren and item.displayChildren %}
|
||||
<div {{ stimulus_controller('sidebar-menu', {'expanded': matcher.isAncestor(item)}, {'closed': 'hidden', 'iconClosed': 'text-gray-400', 'iconExpanded': 'text-gray-500'}) }}>
|
||||
{%- endif %}
|
||||
{%- if item.uri is not empty %}
|
||||
{{ block('linkElement') }}
|
||||
{%- else %}
|
||||
{{ block('spanElement') }}
|
||||
{%- endif %}
|
||||
{{ block('list') }}
|
||||
{%- if item.hasChildren and item.displayChildren %}
|
||||
</div>
|
||||
{%- endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block linkElement %}
|
||||
{% import _self as knp_menu %}
|
||||
<a href="{{ item.uri }}"
|
||||
class="{{ html_classes('', {
|
||||
'group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold text-gray-700 hover:bg-gray-50': item.level == 1,
|
||||
'block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700 hover:bg-gray-50': item.level > 1,
|
||||
'bg-gray-50': matcher.isCurrent(item) or matcher.isAncestor(item)
|
||||
}) }}"
|
||||
{{ knp_menu.attributes(item.linkAttributes) }}>
|
||||
{{ block('label') }}
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElement %}
|
||||
{% import _self as knp_menu %}
|
||||
{% if item.hasChildren %}
|
||||
<button type="button"
|
||||
{{ stimulus_action('sidebar-menu', 'toggleSubmenu') }}
|
||||
{{ stimulus_target('sidebar-menu', 'button') }}
|
||||
{{ knp_menu.attributes(item.linkAttributes) }}
|
||||
class="{{ html_classes('hover:bg-gray-50 flex items-center w-full text-left rounded-md p-2 gap-x-3 text-sm leading-6 font-semibold text-gray-700', { 'bg-gray-50': matcher.isAncestor(item) }) }}"
|
||||
aria-expanded="false">
|
||||
{{ block('label') }}
|
||||
</button>
|
||||
{% elseif item.label == '%DIVIDER%' %}
|
||||
<hr class="my-4 h-px bg-gray-200">
|
||||
{% else %}
|
||||
<div class="hover:bg-gray-50 group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold text-gray-700" role="button">
|
||||
{{ block('label') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block label %}
|
||||
{% apply spaceless %}
|
||||
{% if item.extras.icon is defined %}
|
||||
{{ icon(item.extras.icon, 'w-5 h-5') }}
|
||||
{% if item.extras.icon_only is defined and false == item.extras.icon_only %}
|
||||
<span class="flex-1">{{ item.label|raw }}</span>
|
||||
{% endif %}
|
||||
{{ icon(item.extras.icon, 'h-6 w-6 shrink-0 text-gray-400') }}
|
||||
{{ item.label|raw }}
|
||||
{% else %}
|
||||
{{ item.label|raw }}
|
||||
{% endif %}
|
||||
{% endapply %}
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElement %}
|
||||
<div class="icon-section" role="button">
|
||||
{% if item.extras.icon is defined %}
|
||||
{{ icon(item.extras.icon, 'w-5 h-5') }}
|
||||
{% if item.extras.icon_only is defined and false == item.extras.icon_only %}
|
||||
<span class="flex-1">{{ item.label|raw }}</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ item.label|raw }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
<div class="fixed top-0 left-0 inset-x-0 z-50 bg-white shadow-sm">
|
||||
<div class="container px-8 py-4 flex items-center justify-between">
|
||||
<a href="{{ path(app.user.defaultRoute) }}" title="Home">
|
||||
<div class="flex items-center space-x-4">
|
||||
<img src="{{ asset('build/images/logo.svg') }}" alt="" class="block w-auto h-8">
|
||||
</div>
|
||||
</a>
|
||||
<nav class="hidden md:block font-medium">
|
||||
{% block header_menu %}{% endblock %}
|
||||
</nav>
|
||||
<button type="button"
|
||||
class="md:hidden"
|
||||
{{ stimulus_controller('mobilenav', [], [], { 'mobilenav': '#mobilenav' }) }}
|
||||
{{ stimulus_action('mobilenav', 'trigger', null, { 'mode': 'open' }) }}>
|
||||
{{ icon('menu', 'w-8 h-8') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,68 +0,0 @@
|
||||
<div class="flex grow flex-col gap-y-5 overflow-y-scroll md:border-r border-gray-200 bg-white px-6">
|
||||
<nav class="flex flex-1 flex-col">
|
||||
<ul role="list" class="-mx-2 space-y-1">
|
||||
<li>
|
||||
<!-- Current: "bg-gray-50", Default: "hover:bg-gray-50" -->
|
||||
<a href="#" class="bg-gray-50 block rounded-md py-2 pr-2 pl-10 text-sm leading-6 font-semibold text-gray-700">Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<button type="button" class="hover:bg-gray-50 flex items-center w-full text-left rounded-md p-2 gap-x-3 text-sm leading-6 font-semibold text-gray-700" aria-controls="sub-menu-1" aria-expanded="false">
|
||||
<!-- Expanded: "rotate-90 text-gray-500", Collapsed: "text-gray-400" -->
|
||||
<svg class="text-gray-400 h-5 w-5 shrink-0" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
||||
<path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
Teams
|
||||
</button>
|
||||
<!-- Expandable link section, show/hide based on state. -->
|
||||
<ul class="mt-1 px-2" id="sub-menu-1">
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">Engineering</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">Human Resources</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">Customer Success</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<button type="button" class="hover:bg-gray-50 flex items-center w-full text-left rounded-md p-2 gap-x-3 text-sm leading-6 font-semibold text-gray-700" aria-controls="sub-menu-2" aria-expanded="false">
|
||||
<!-- Expanded: "rotate-90 text-gray-500", Collapsed: "text-gray-400" -->
|
||||
<svg class="text-gray-400 h-5 w-5 shrink-0" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
||||
<path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
Projects
|
||||
</button>
|
||||
<!-- Expandable link section, show/hide based on state. -->
|
||||
<ul class="mt-1 px-2" id="sub-menu-2">
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">GraphQL API</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">iOS App</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">Android App</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-9 text-sm leading-6 text-gray-700">New Customer Portal</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 text-sm leading-6 font-semibold text-gray-700">Calendar</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 text-sm leading-6 font-semibold text-gray-700">Documents</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 text-sm leading-6 font-semibold text-gray-700">Reports</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
@@ -1,9 +1,9 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
|
||||
{% block header_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('admin_header'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% block main_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('admin_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block mobile_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('admin_mobile'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% endblock %}
|
||||
{{ knp_menu_render(knp_menu_get('admin_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -3,8 +3,13 @@
|
||||
{{ form_row(form.name) }}
|
||||
{{ form_row(form.value) }}
|
||||
</div>
|
||||
<button type="submit" class="btn">
|
||||
Speichern
|
||||
</button>
|
||||
<div class="flex items-center space-x-2">
|
||||
<button type="submit" class="btn">
|
||||
Speichern
|
||||
</button>
|
||||
<a href="{{ path('app_admin_system_fee_index') }}" class="btn btn--secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
{{ form_rest(form) }}
|
||||
{{ form_end(form) }}
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Honorare{% endblock %}
|
||||
{% block title %}Einstellungen - Honorar anlegen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="grid lg:grid-cols-3 gap-y-8 lg:gap-y-0 lg:gap-x-16">
|
||||
<div class="flex flex-col space-y-2">
|
||||
<a href="{{ path('app_admin_system_fee_index') }}" class="btn btn--secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
<div class="lg:col-span-2">
|
||||
<div class="pb-8 max-w-screen-md mx-auto">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorar anlegen
|
||||
</h1>
|
||||
{% include 'admin/system/fee/_form.html.twig' %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-screen-sm">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorar anlegen
|
||||
</h1>
|
||||
{% include 'admin/system/fee/_form.html.twig' %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -1,21 +1,12 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Honorare{% endblock %}
|
||||
{% block title %}Einstellungen - Honorar bearbeiten{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="grid lg:grid-cols-3 gap-y-8 lg:gap-y-0 lg:gap-x-16">
|
||||
<div class="flex flex-col space-y-2">
|
||||
<a href="{{ path('app_admin_system_fee_index') }}" class="btn btn--secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
<div class="lg:col-span-2">
|
||||
<div class="pb-8 max-w-screen-md mx-auto">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorar bearbeiten
|
||||
</h1>
|
||||
{% include 'admin/system/fee/_form.html.twig' %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-screen-sm">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorar bearbeiten
|
||||
</h1>
|
||||
{% include 'admin/system/fee/_form.html.twig' %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -1,47 +1,64 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Honorare{% endblock %}
|
||||
{% block title %}Einstellungen - Honorare{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="grid lg:grid-cols-3 gap-y-8 lg:gap-y-0 lg:gap-x-16">
|
||||
<div class="flex flex-col space-y-2">
|
||||
<a href="{{ path('app_admin_system_fee_create') }}" class="btn">
|
||||
Neu
|
||||
</a>
|
||||
</div>
|
||||
<div class="lg:col-span-2">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorare
|
||||
</h1>
|
||||
<div class="flex flex-col space-y-2">
|
||||
{% for fee in fees %}
|
||||
<div class="grid grid-cols-3 items-center py-2 px-4 bg-gray-200 rounded-md">
|
||||
<div>
|
||||
{{ fee.name }}
|
||||
</div>
|
||||
<div>
|
||||
{{ fee.value|format_money }}
|
||||
</div>
|
||||
<div class="flex items-center space-x-2 justify-end">
|
||||
<button type="button"
|
||||
class="text-red-500"
|
||||
{{ stimulus_controller('modal-button', [], [], {'confirmation-modal': '#confirmation-modal'}) }}
|
||||
{{ stimulus_action('modal-button', 'confirmation', null, {
|
||||
'title': 'Bist du sicher?',
|
||||
'content': 'Möchtest du das Honorar wirklich löschen?',
|
||||
'target-url': path('app_admin_system_fee_delete', { 'id': fee.id })
|
||||
}) }}>
|
||||
{{ icon('delete') }}
|
||||
</button>
|
||||
<a href="{{ path('app_admin_system_fee_edit', { 'id': fee.id }) }}">
|
||||
{{ icon('edit') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-sm">Keine Daten...</div>
|
||||
{% endfor %}
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Honorare
|
||||
</h1>
|
||||
<div class="data-table-wrapper">
|
||||
<div class="data-table-wrapper__inner">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Bezeichnung
|
||||
</th>
|
||||
<th>
|
||||
Wert
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for fee in fees %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ fee.name }}
|
||||
</td>
|
||||
<td>
|
||||
{{ fee.value|format_money }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="flex items-center space-x-2 justify-end">
|
||||
<button type="button"
|
||||
class="text-red-500"
|
||||
{{ stimulus_controller('modal-button', [], [], {'confirmation-modal': '#confirmation-modal'}) }}
|
||||
{{ stimulus_action('modal-button', 'confirmation', null, {
|
||||
'title': 'Bist du sicher?',
|
||||
'content': 'Möchtest du das Honorar wirklich löschen?',
|
||||
'target-url': path('app_admin_system_fee_delete', { 'id': fee.id })
|
||||
}) }}>
|
||||
{{ icon('delete') }}
|
||||
</button>
|
||||
<a href="{{ path('app_admin_system_fee_edit', { 'id': fee.id }) }}">
|
||||
{{ icon('edit') }}
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<div class="text-sm">Keine Daten...</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{ path('app_admin_system_fee_create') }}" class="btn">
|
||||
Neu
|
||||
</a>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,16 @@
|
||||
{{ form_start(form) }}
|
||||
<div class="flex flex-col space-y-4 pb-8">
|
||||
{{ form_row(form.name) }}
|
||||
{{ form_row(form.requiredTraining) }}
|
||||
{{ form_widget(form.requiredLicenses) }}
|
||||
</div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<button type="submit" class="btn">
|
||||
Speichern
|
||||
</button>
|
||||
<a href="{{ path('app_admin_system_job_profile_index') }}" class="btn btn--secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
{{ form_rest(form) }}
|
||||
{{ form_end(form) }}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Einstellungen - Job-Profil anlegen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="max-w-screen-sm">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Job-Profil anlegen
|
||||
</h1>
|
||||
{% include 'admin/system/job_profile/_form.html.twig' %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,57 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Einstellungen - Jobprofile{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Job-Profile
|
||||
</h1>
|
||||
<div class="data-table-wrapper">
|
||||
<div class="data-table-wrapper__inner">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Bezeichnung
|
||||
</th>
|
||||
<th>
|
||||
Fortbildung
|
||||
</th>
|
||||
<th>
|
||||
Lizenzen
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for jobProfile in jobProfiles %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ jobProfile.name }}
|
||||
</td>
|
||||
<td>
|
||||
{{ jobProfile.requiredTraining|default('-') }}
|
||||
</td>
|
||||
<td>
|
||||
{{ jobProfile.requiredLicenses|join(', ') }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="flex items-center space-x-2 justify-end">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<div class="text-sm">Keine Daten...</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{ path('app_admin_system_job_profile_create') }}" class="btn">
|
||||
Neu
|
||||
</a>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,14 @@
|
||||
{{ form_start(form) }}
|
||||
<div class="flex flex-col space-y-4 pb-8">
|
||||
{{ form_row(form.name) }}
|
||||
</div>
|
||||
<div class="flex items-center space-x-2">
|
||||
<button type="submit" class="btn">
|
||||
Speichern
|
||||
</button>
|
||||
<a href="{{ path('app_admin_system_training_index') }}" class="btn btn--secondary">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
{{ form_rest(form) }}
|
||||
{{ form_end(form) }}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Einstellungen - Fortbildung anlegen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="max-w-screen-sm">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Fortbildung anlegen
|
||||
</h1>
|
||||
{% include 'admin/system/training/_form.html.twig' %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Einstellungen - Fortbildung bearbeiten{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="max-w-screen-sm">
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Fortbildung bearbeiten
|
||||
</h1>
|
||||
{% include 'admin/system/training/_form.html.twig' %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,51 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Einstellungen - Fortbildungen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Fortbildungen
|
||||
</h1>
|
||||
<div class="data-table-wrapper">
|
||||
<div class="data-table-wrapper__inner">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Bezeichnung
|
||||
</th>
|
||||
<th>
|
||||
Teilnahmen
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for training in trainings %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ training.name }}
|
||||
</td>
|
||||
<td>
|
||||
{{ training.trainingAttendances|length|default('-') }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="flex items-center space-x-2 justify-end">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<div class="text-sm">Keine Daten...</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{{ path('app_admin_system_training_create') }}" class="btn">
|
||||
Neu
|
||||
</a>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,69 @@
|
||||
{% extends 'admin/layout.html.twig' %}
|
||||
|
||||
{% block title %}Teamerübersicht{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Teamerübersicht
|
||||
</h1>
|
||||
<div class="data-table-wrapper">
|
||||
<div class="data-table-wrapper__inner">
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{{ knp_pagination_sortable(pagination, 'Name', 'teamer.lastName') }}
|
||||
</th>
|
||||
<th>
|
||||
Vorname
|
||||
</th>
|
||||
<th>
|
||||
{{ knp_pagination_sortable(pagination, 'Status', 'teamer.status') }}
|
||||
</th>
|
||||
<th>
|
||||
{{ knp_pagination_sortable(pagination, 'E-Mail', 'teamer.communication.email') }}
|
||||
</th>
|
||||
<th>
|
||||
{{ knp_pagination_sortable(pagination, 'Letzter Login', 'teamer.lastLoginAt') }}
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for teamer in pagination %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="#" class="whitespace-nowrap">
|
||||
{{ teamer.lastName }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="whitespace-nowrap">
|
||||
{{ teamer.firstName }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ teamer.status }}
|
||||
</td>
|
||||
<td>
|
||||
{{ teamer.communication.email }}
|
||||
</td>
|
||||
<td>
|
||||
{% if teamer.user.lastLoginAt is not null %}
|
||||
{{ teamer.user.lastLoginAt | date('d.m.Y') }}
|
||||
{% else %}
|
||||
-
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<div class="flex items-center space-x-1 justify-end">
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{{ knp_pagination_render(pagination) }}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -14,7 +14,7 @@
|
||||
{{ encore_entry_script_tags('app') }}
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body class="bg-white font-sans antialiased">
|
||||
<body class="bg-white text-gray-700 font-sans antialiased">
|
||||
{% block body %}{% endblock %}
|
||||
{% include '_partials/_flashes.html.twig' %}
|
||||
</body>
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
{%- block form_widget_simple -%}
|
||||
{%- set type = type|default('text') -%}
|
||||
{%- if type != 'hidden' -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-primary sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- if errors|length -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%}
|
||||
{% else %}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-slate-400 focus:ring-primary' }) -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%}
|
||||
{%- endif -%}
|
||||
{%- if disabled is defined and disabled == true -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%}
|
||||
@@ -52,11 +52,11 @@
|
||||
{%- endblock form_widget_simple -%}
|
||||
|
||||
{%- block textarea_widget -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-primary sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- if errors|length -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%}
|
||||
{% else %}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-slate-400 focus:ring-1 focus:ring-primary' }) -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%}
|
||||
{%- endif -%}
|
||||
{%- if disabled is defined and disabled == true -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%}
|
||||
@@ -68,11 +68,11 @@
|
||||
{%- endblock textarea_widget -%}
|
||||
|
||||
{%- block choice_widget_collapsed -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset focus:ring-primary sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- set attr = attr|merge({'class': (attr.class|default('') ~ ' mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset sm:text-sm sm:leading-6')|trim }) -%}
|
||||
{%- if errors|length -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%}
|
||||
{% else %}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-slate-400 focus:ring-1 focus:ring-primary' }) -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%}
|
||||
{%- endif -%}
|
||||
{%- if disabled is defined and disabled == true -%}
|
||||
{%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%}
|
||||
@@ -83,6 +83,30 @@
|
||||
{%- endif -%}
|
||||
{%- endblock choice_widget_collapsed -%}
|
||||
|
||||
{%- block choice_widget_expanded -%}
|
||||
<fieldset>
|
||||
{% if form.vars.label %}
|
||||
<legend class="text-base font-bold leading-6 text-gray-900">
|
||||
{{ form.vars.label }}
|
||||
</legend>
|
||||
{% endif %}
|
||||
<div class="mt-4 divide-y divide-gray-200 border-b border-t border-gray-200">
|
||||
{%- for child in form %}
|
||||
<div class="relative flex items-start py-4">
|
||||
<div class="min-w-0 flex-1 text-sm leading-6">
|
||||
<label for="{{ child.vars.id }}" class="select-none font-medium text-gray-900">
|
||||
{{ child.vars.label }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="ml-3 flex h-6 items-center">
|
||||
<input id="{{ child.vars.id }}" name="{{ child.vars.full_name }}" type="checkbox" class="h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary">
|
||||
</div>
|
||||
</div>
|
||||
{% endfor -%}
|
||||
</div>
|
||||
</fieldset>
|
||||
{%- endblock choice_widget_expanded -%}
|
||||
|
||||
{%- block birthday_widget -%}
|
||||
<div class="grid grid-cols-3 gap-x-1">
|
||||
{{ form_widget(form.children['day']) }}
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container grid md:grid-cols-4 gap-8 py-8">
|
||||
<div class="md:col-span-4">
|
||||
<div class="container grid lg:grid-cols-4 gap-8 py-8">
|
||||
<div class="lg:col-span-4 flex items-center justify-between">
|
||||
<img class="h-8 w-auto" src="{{ asset('build/images/logo.svg') }}" alt="My E&P Team">
|
||||
<a href="{{ path('app_security_logout') }}" class="hidden lg:block">
|
||||
{{ icon('logout', 'w-8 h-8 text-gray-700') }}
|
||||
</a>
|
||||
<button type="button"
|
||||
class="lg:hidden"
|
||||
{{ stimulus_controller('mobilenav', [], [], { 'mobilenav': '#mobilenav' }) }}
|
||||
{{ stimulus_action('mobilenav', 'trigger', null, { 'mode': 'open' }) }}>
|
||||
{{ icon('menu', 'w-8 h-8 text-gray-700') }}
|
||||
</button>
|
||||
</div>
|
||||
{% include '_partials/_sidebar_menu.html.twig' %}
|
||||
<div class="md:col-span-3">
|
||||
<div class="hidden lg:block">
|
||||
{% block main_menu %}{% endblock %}
|
||||
</div>
|
||||
<div class="lg:col-span-3">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -17,14 +28,14 @@
|
||||
{{ stimulus_controller('mobilenav', [], { 'closed': '-translate-x-full' }, { 'mobilenav': '#mobilenav' }) }}
|
||||
>
|
||||
<div class="h-screen w-full bg-white">
|
||||
<div class="flex justify-between px-8 pt-4">
|
||||
<div class="flex justify-between p-8">
|
||||
<img src="{{ asset('build/images/logo.svg') }}" alt="" class="block w-auto h-8">
|
||||
<button type="button"
|
||||
{{ stimulus_action('mobilenav', 'trigger', null, { 'mode': 'close' }) }}>
|
||||
{{ icon('close', 'w-8 h-8') }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="w-full h-full p-8 pt-4 overflow-y-scroll">
|
||||
<div class="w-full h-full p-8 pt-0 overflow-y-scroll">
|
||||
{% block mobile_menu %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
{% extends 'manager/layout.html.twig' %}
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
@@ -1,9 +1,9 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
|
||||
{% block header_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('manager_header'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% block main_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('manager_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block mobile_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('manager_mobile'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% endblock %}
|
||||
{{ knp_menu_render(knp_menu_get('manager_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
<div class="bg-gray-100 border border-gray-300 border-t-0 px-4 py-3 flex items-center justify-between sm:px-4">
|
||||
<div class="flex-1 flex items-center justify-between">
|
||||
<div>
|
||||
<p class="text-sm leading-5 text-gray-700">{{ 'label.paginator.info'|trans({ '{from}': firstItemNumber, '{to}': lastItemNumber, '{total}': totalCount })|raw }}</p>
|
||||
</div>
|
||||
<div>
|
||||
<nav class="relative z-0 inline-flex">
|
||||
{% if pageCount > 1 %}
|
||||
{% if previous is defined %}
|
||||
<a href="{{ path(route, query|merge({(pageParameterName): previous})) }}" class="relative inline-flex items-center px-2 py-2 border border-gray-300 bg-white text-sm leading-5 font-medium hover:bg-secondary hover:text-white" aria-label="Previous">
|
||||
<svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
|
||||
<path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if current > 3 %}
|
||||
<span class="-ml-px relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm leading-5 font-medium text-gray-700">
|
||||
...
|
||||
</span>
|
||||
{% endif %}
|
||||
{% for page in pagesInRange %}
|
||||
<a href="{{ path(route, query|merge({(pageParameterName): page})) }}" class="-ml-px relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm leading-5 font-medium focus:z-10 hover:bg-secondary {% if page == current %}bg-primary text-white hover:text-white{% else %}bg-white text-gray-700 hover:text-white{% endif %}">
|
||||
{{ page }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
{% if current < pageCount - 3 %}
|
||||
<span class="-ml-px relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm leading-5 font-medium text-gray-700">
|
||||
...
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if next is defined %}
|
||||
<a href="{{ path(route, query|merge({(pageParameterName): next})) }}" class="-ml-px relative inline-flex items-center px-2 py-2 border border-gray-300 bg-white text-sm leading-5 font-medium hover:bg-secondary hover:text-white" aria-label="Next">
|
||||
<svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
|
||||
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
<a href="{{ options.href }}" class="flex items-center space-x-2">
|
||||
<span>{{ title }}</span>
|
||||
{%- if sorted -%}
|
||||
{%- if direction == 'desc' -%}
|
||||
<svg class="w-4 h-4 shrink-0" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path d="M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"></path>
|
||||
</svg>
|
||||
{%- else -%}
|
||||
<svg class="w-4 h-4 shrink-0" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path d="M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"></path>
|
||||
</svg>
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
</a>
|
||||
|
||||
@@ -19,15 +19,15 @@
|
||||
<label for="username" class="block leading-6 text-gray-900">
|
||||
E-Mail:
|
||||
</label>
|
||||
<input type="text" id="username" name="_username" value="{{ last_username }}" class="mt-2 appearance-none text-slate-900 bg-white rounded-md block w-full px-3 h-10 shadow-sm sm:text-sm focus:outline-none placeholder:text-slate-400 focus:ring-2 focus:ring-primary ring-1 ring-slate-200">
|
||||
<input type="text" id="username" name="_username" value="{{ last_username }}" class="mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-primary sm:text-sm sm:leading-6">
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="password" class="block leading-6 text-gray-900">
|
||||
Passwort:
|
||||
</label>
|
||||
<input type="password" id="password" name="_password" class="mt-2 appearance-none text-slate-900 bg-white rounded-md block w-full px-3 h-10 shadow-sm sm:text-sm focus:outline-none placeholder:text-slate-400 focus:ring-2 focus:ring-primary ring-1 ring-slate-200">
|
||||
<input type="password" id="password" name="_password" class="mt-2 block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-primary sm:text-sm sm:leading-6">
|
||||
</div>
|
||||
<button type="submit" class="btn">
|
||||
<button type="submit" class="btn w-full">
|
||||
Login
|
||||
</button>
|
||||
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
{% extends 'layout.html.twig' %}
|
||||
|
||||
{% block header_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('teamer_header'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block main_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('teamer_main'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{{ knp_menu_render(knp_menu_get('teamer_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block mobile_menu %}
|
||||
{{ knp_menu_render(knp_menu_get('teamer_mobile'), { 'firstClass': null, 'lastClass': null, 'ancestorClass': 'active', 'compressed': true }) }}
|
||||
{% endblock %}
|
||||
{{ knp_menu_render(knp_menu_get('teamer_main')) }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
{% extends 'teamer/layout.html.twig' %}
|
||||
|
||||
{% block title %}Meine Verfügbarkeit{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
@@ -18,30 +18,34 @@
|
||||
{{ form_start(form) }}
|
||||
|
||||
<div {{ stimulus_controller('tabs', {}, { 'buttonActive': 'bg-gray-50' }) }}>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-y-8 lg:gap-y-0 lg:gap-x-16">
|
||||
<ul role="list" class="-mx-2 space-y-1">
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 0 }) }}>
|
||||
Persönliche Daten
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 1 }) }}>
|
||||
Anschrift/Kontakt
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 2 }) }}>
|
||||
Bankverbindung
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 3 }) }}>
|
||||
Sonstiges/Foto
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold pb-8">
|
||||
Mein Profil
|
||||
</h1>
|
||||
<ul role="list" class="space-y-1">
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 0 }) }}>
|
||||
Persönliche Daten
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 1 }) }}>
|
||||
Anschrift/Kontakt
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 2 }) }}>
|
||||
Bankverbindung
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<button type="button" class="hover:bg-gray-50 block rounded-md py-2 pr-2 pl-10 w-full text-left text-sm leading-6 font-semibold text-gray-700" {{ stimulus_target('tabs', 'button') }} {{ stimulus_action('tabs', 'select', null, { 'tab': 3 }) }}>
|
||||
Sonstiges/Foto
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="lg:col-span-2">
|
||||
{% if not form.vars.valid %}
|
||||
<div class="border border-red-500 rounded-md p-4 text-red-500 mb-8">
|
||||
@@ -62,9 +66,9 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="pb-8" {{ stimulus_target('tabs', 'tab') }}>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Persönliche Daten
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="flex flex-col space-y-4">
|
||||
{{ form_row(form.salutation) }}
|
||||
{{ form_row(form.academicTitle) }}
|
||||
@@ -77,18 +81,18 @@
|
||||
</div>
|
||||
|
||||
<div class="pb-8" {{ stimulus_target('tabs', 'tab') }}>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Anschrift
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="flex flex-col space-y-4 pb-8">
|
||||
{{ form_row(form.address.street) }}
|
||||
{{ form_row(form.address.postCode) }}
|
||||
{{ form_row(form.address.city) }}
|
||||
{{ form_row(form.address.country) }}
|
||||
</div>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Kontakt
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="flex flex-col space-y-4">
|
||||
{{ form_row(form.communication.email) }}
|
||||
{{ form_row(form.communication.phone) }}
|
||||
@@ -97,9 +101,9 @@
|
||||
</div>
|
||||
|
||||
<div class="pb-8" {{ stimulus_target('tabs', 'tab') }}>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Bankverbindung
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="flex flex-col space-y-4">
|
||||
{{ form_row(form.bankAccount.iban) }}
|
||||
{{ form_row(form.bankAccount.bic) }}
|
||||
@@ -109,17 +113,17 @@
|
||||
</div>
|
||||
|
||||
<div class="pb-8" {{ stimulus_target('tabs', 'tab') }}>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Sonstiges
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="flex flex-col space-y-4 pb-8">
|
||||
{{ form_row(form.taxId) }}
|
||||
{{ form_row(form.healthInsuranceCompany) }}
|
||||
{{ form_row(form.remarks) }}
|
||||
</div>
|
||||
<h3 class="text-xl font-bold pb-2">
|
||||
<h2 class="text-xl font-bold pb-2">
|
||||
Fotoupload
|
||||
</h3>
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-8">
|
||||
<div>
|
||||
{% include '_partials/_upload_collection_form.html.twig' with {
|
||||
@@ -0,0 +1,6 @@
|
||||
{% extends 'teamer/layout.html.twig' %}
|
||||
|
||||
{% block title %}Meine Jobprofile & Skills{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user