mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2026-04-10 06:53:45 +00:00
Create admin for motive
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\TicketBundle\Controller\Admin;
|
||||
|
||||
use Chill\MainBundle\CRUD\Controller\CRUDController;
|
||||
use Chill\MainBundle\Pagination\PaginatorInterface;
|
||||
use Chill\TicketBundle\Entity\Motive;
|
||||
use Chill\TicketBundle\MotiveDTO;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
class MotiveController extends CRUDController
|
||||
{
|
||||
protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator)
|
||||
{
|
||||
/* @var QueryBuilder $query */
|
||||
$query->addOrderBy('e.ordering', 'ASC');
|
||||
|
||||
return parent::orderQuery($action, $query, $request, $paginator);
|
||||
}
|
||||
|
||||
protected function createFormFor(string $action, mixed $entity, ?string $formClass = null, array $formOptions = []): FormInterface
|
||||
{
|
||||
if (in_array($action, ['new', 'edit'], true) && $entity instanceof Motive) {
|
||||
$dto = MotiveDTO::fromMotive($entity);
|
||||
|
||||
return parent::createFormFor($action, $dto, $formClass, $formOptions);
|
||||
}
|
||||
|
||||
return parent::createFormFor($action, $entity, $formClass, $formOptions);
|
||||
}
|
||||
|
||||
protected function onFormValid(string $action, object $entity, FormInterface $form, Request $request): void
|
||||
{
|
||||
if (in_array($action, ['new', 'edit'], true) && $entity instanceof Motive) {
|
||||
$dto = $form->getData();
|
||||
if ($dto instanceof MotiveDTO) {
|
||||
$dto->applyToMotive($entity);
|
||||
}
|
||||
}
|
||||
|
||||
parent::onFormValid($action, $entity, $form, $request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\TicketBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
/**
|
||||
* Class AdminController
|
||||
* Controller for the ticket configuration section (in admin section).
|
||||
*/
|
||||
class AdminController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* Ticket admin.
|
||||
*/
|
||||
#[Route(path: '/{_locale}/admin/ticket', name: 'chill_ticket_admin_index')]
|
||||
public function indexAdminAction()
|
||||
{
|
||||
return $this->render('@ChillTicket/Admin/index.html.twig');
|
||||
}
|
||||
}
|
||||
@@ -11,8 +11,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\TicketBundle\DependencyInjection;
|
||||
|
||||
use Chill\TicketBundle\Controller\Admin\MotiveController;
|
||||
use Chill\TicketBundle\Controller\MotiveApiController;
|
||||
use Chill\TicketBundle\Entity\Motive;
|
||||
use Chill\TicketBundle\Form\MotiveType;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
|
||||
@@ -36,6 +38,7 @@ class ChillTicketExtension extends Extension implements PrependExtensionInterfac
|
||||
public function prepend(ContainerBuilder $container)
|
||||
{
|
||||
$this->prependApi($container);
|
||||
$this->prependCruds($container);
|
||||
}
|
||||
|
||||
private function prependApi(ContainerBuilder $container): void
|
||||
@@ -66,4 +69,37 @@ class ChillTicketExtension extends Extension implements PrependExtensionInterfac
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
protected function prependCruds(ContainerBuilder $container): void
|
||||
{
|
||||
$container->prependExtensionConfig('chill_main', [
|
||||
'cruds' => [
|
||||
[
|
||||
'class' => Motive::class,
|
||||
'name' => 'motive',
|
||||
'base_path' => '/admin/ticket/motive',
|
||||
'form_class' => MotiveType::class,
|
||||
'controller' => MotiveController::class,
|
||||
'actions' => [
|
||||
'index' => [
|
||||
'template' => '@ChillTicket/Admin/Motive/index.html.twig',
|
||||
'role' => 'ROLE_ADMIN',
|
||||
],
|
||||
'new' => [
|
||||
'role' => 'ROLE_ADMIN',
|
||||
'template' => '@ChillTicket/Admin/Motive/new.html.twig',
|
||||
],
|
||||
'view' => [
|
||||
'role' => 'ROLE_ADMIN',
|
||||
'template' => '@ChillTicket/Admin/Motive/view.html.twig',
|
||||
],
|
||||
'edit' => [
|
||||
'role' => 'ROLE_ADMIN',
|
||||
'template' => '@ChillTicket/Admin/Motive/edit.html.twig',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,13 +51,15 @@ class Motive
|
||||
#[ORM\ManyToOne(targetEntity: Motive::class, inversedBy: 'children')]
|
||||
private ?Motive $parent = null;
|
||||
|
||||
|
||||
/**
|
||||
* @var Collection<int, Motive>&Selectable<int, Motive>
|
||||
*/
|
||||
#[ORM\OneToMany(targetEntity: Motive::class, mappedBy: 'parent')]
|
||||
#[ORM\OneToMany(mappedBy: 'parent', targetEntity: Motive::class)]
|
||||
private Collection&Selectable $children;
|
||||
|
||||
#[ORM\Column(name: 'ordering', type: \Doctrine\DBAL\Types\Types::FLOAT, nullable: true, options: ['default' => '0.0'])]
|
||||
private float $ordering = 0;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->storedObjects = new ArrayCollection();
|
||||
@@ -218,4 +220,14 @@ class Motive
|
||||
|
||||
return $collection;
|
||||
}
|
||||
|
||||
public function getOrdering(): float
|
||||
{
|
||||
return $this->ordering;
|
||||
}
|
||||
|
||||
public function setOrdering(float $ordering): void
|
||||
{
|
||||
$this->ordering = $ordering;
|
||||
}
|
||||
}
|
||||
|
||||
71
src/Bundle/ChillTicketBundle/src/Form/MotiveType.php
Normal file
71
src/Bundle/ChillTicketBundle/src/Form/MotiveType.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\TicketBundle\Form;
|
||||
|
||||
use Chill\MainBundle\Form\Type\ChillCollectionType;
|
||||
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
|
||||
use Chill\TicketBundle\Entity\EmergencyStatusEnum;
|
||||
use Chill\TicketBundle\MotiveDTO;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\EnumType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\NumberType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class MotiveType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('label', TranslatableStringFormType::class, [
|
||||
'label' => 'Label',
|
||||
'required' => true,
|
||||
])
|
||||
->add('active', CheckboxType::class, [
|
||||
'label' => 'Active',
|
||||
'required' => false,
|
||||
])
|
||||
->add('makeTicketEmergency', EnumType::class, [
|
||||
'class' => EmergencyStatusEnum::class,
|
||||
'label' => 'emergency?',
|
||||
'required' => false,
|
||||
'placeholder' => 'Choose an option...',
|
||||
])
|
||||
->add('supplementaryComments', ChillCollectionType::class, [
|
||||
'entry_type' => TextType::class,
|
||||
'allow_add' => true,
|
||||
'allow_delete' => true,
|
||||
'by_reference' => true,
|
||||
'label' => 'Supplementary comments',
|
||||
'required' => false,
|
||||
])
|
||||
->add('ordering', NumberType::class, [
|
||||
'scale' => 4,
|
||||
'label' => 'Ordering',
|
||||
])
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'data_class' => MotiveDTO::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function getBlockPrefix(): string
|
||||
{
|
||||
return 'chill_ticketbundle_motive';
|
||||
}
|
||||
}
|
||||
45
src/Bundle/ChillTicketBundle/src/Menu/AdminMenuBuilder.php
Normal file
45
src/Bundle/ChillTicketBundle/src/Menu/AdminMenuBuilder.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\TicketBundle\Menu;
|
||||
|
||||
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
|
||||
class AdminMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
public function __construct(protected AuthorizationCheckerInterface $authorizationChecker) {}
|
||||
|
||||
public function buildMenu($menuId, MenuItem $menu, array $parameters): void
|
||||
{
|
||||
if (!$this->authorizationChecker->isGranted('ROLE_ADMIN')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$menu->addChild('Tickets', [
|
||||
'route' => 'chill_ticket_admin_index',
|
||||
])
|
||||
->setAttribute('class', 'list-group-item-header')
|
||||
->setExtras([
|
||||
'order' => 7500,
|
||||
]);
|
||||
|
||||
$menu->addChild('admin.ticket.motive.menu', [
|
||||
'route' => 'chill_crud_motive_index',
|
||||
])->setExtras(['order' => 7510]);
|
||||
}
|
||||
|
||||
public static function getMenuIds(): array
|
||||
{
|
||||
return ['admin_section', 'admin_ticket'];
|
||||
}
|
||||
}
|
||||
67
src/Bundle/ChillTicketBundle/src/MotiveDTO.php
Normal file
67
src/Bundle/ChillTicketBundle/src/MotiveDTO.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\TicketBundle;
|
||||
|
||||
use Chill\TicketBundle\Entity\EmergencyStatusEnum;
|
||||
use Chill\TicketBundle\Entity\Motive;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Doctrine\Common\Collections\Collection;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
class MotiveDTO
|
||||
{
|
||||
public function __construct(
|
||||
#[Assert\NotBlank()]
|
||||
public array $label = [],
|
||||
public bool $active = true,
|
||||
public Collection $supplementaryComments = new ArrayCollection(),
|
||||
public ?EmergencyStatusEnum $makeTicketEmergency = null,
|
||||
public float $ordering = 0.0,
|
||||
) {
|
||||
if ($this->supplementaryComments->isEmpty()) {
|
||||
$this->supplementaryComments = new ArrayCollection();
|
||||
}
|
||||
}
|
||||
|
||||
public static function fromMotive(Motive $motive): self
|
||||
{
|
||||
$supplementaryCommentsCollection = new ArrayCollection();
|
||||
|
||||
foreach ($motive->getSupplementaryComments() as $comment) {
|
||||
$supplementaryCommentsCollection->add($comment['label']);
|
||||
}
|
||||
|
||||
return new self(
|
||||
label: $motive->getLabel(),
|
||||
active: $motive->isActive(),
|
||||
supplementaryComments: $supplementaryCommentsCollection,
|
||||
makeTicketEmergency: $motive->getMakeTicketEmergency(),
|
||||
ordering: $motive->getOrdering(),
|
||||
);
|
||||
}
|
||||
|
||||
public function applyToMotive(Motive $motive): void
|
||||
{
|
||||
$motive->setLabel($this->label);
|
||||
$motive->setActive($this->active);
|
||||
$motive->setMakeTicketEmergency($this->makeTicketEmergency);
|
||||
$motive->setOrdering($this->ordering);
|
||||
|
||||
$supplementaryCommentsArray = [];
|
||||
|
||||
foreach ($this->supplementaryComments as $supplementaryComment) {
|
||||
$supplementaryCommentsArray[] = ['label' => $supplementaryComment];
|
||||
}
|
||||
|
||||
$motive->setSupplementaryComment($supplementaryCommentsArray);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
||||
|
||||
{% block title %}
|
||||
{% include('@ChillMain/CRUD/_edit_title.html.twig') %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block admin_content %}
|
||||
{% embed '@ChillMain/CRUD/_edit_content.html.twig' %}
|
||||
{% block content_form_actions_save_and_view %}{% endblock %}
|
||||
{% endembed %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,68 @@
|
||||
{% extends '@ChillMain/Admin/layoutWithVerticalMenu.html.twig' %}
|
||||
|
||||
{% block title %}{{ 'admin.motive.list.title'|trans }}{% endblock title %}
|
||||
|
||||
{% block admin_content %}
|
||||
|
||||
<h1>{{ 'admin.motive.list.title'|trans }}</h1>
|
||||
|
||||
<table class="records_list table table-bordered border-dark">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'Label'|trans }}</th>
|
||||
<th>{{ 'Active'|trans }}</th>
|
||||
<th>{{ 'emergency?'|trans }}</th>
|
||||
<th>{{ 'Ordering'|trans }}</th>
|
||||
<th>{{ 'Supplementary comments'|trans }}</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for entity in entities %}
|
||||
<tr>
|
||||
<td>{{ entity.label|localize_translatable_string }}</td>
|
||||
<td style="text-align:center;">
|
||||
{%- if entity.isActive -%}
|
||||
<i class="fa fa-check-square-o"></i>
|
||||
{%- else -%}
|
||||
<i class="fa fa-square-o"></i>
|
||||
{%- endif -%}
|
||||
</td>
|
||||
<td style="text-align:center;">
|
||||
{%- if entity.makeTicketEmergency -%}
|
||||
{{ entity.makeTicketEmergency.value|trans }}
|
||||
{%- else -%}
|
||||
-
|
||||
{%- endif -%}
|
||||
</td>
|
||||
<td style="text-align:center;">
|
||||
{{ entity.ordering }}
|
||||
</td>
|
||||
<td style="text-align:center;">
|
||||
{{ entity.supplementaryComments|length }}
|
||||
</td>
|
||||
<td>
|
||||
<ul class="record_actions">
|
||||
<li>
|
||||
<a href="{{ path('chill_crud_motive_view', { 'id': entity.id }) }}" class="btn btn-show" title="{{ 'show'|trans }}"></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('chill_crud_motive_edit', { 'id': entity.id }) }}" class="btn btn-edit" title="{{ 'edit'|trans }}"></a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{ chill_pagination(paginator) }}
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a href="{{ path('chill_crud_motive_new') }}" class="btn btn-create">
|
||||
{{ 'admin.motive.new.title'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,15 @@
|
||||
{% extends '@ChillMain/CRUD/Admin/index.html.twig' %}
|
||||
|
||||
{% block title %}
|
||||
{% include('@ChillMain/CRUD/_new_title.html.twig') %}
|
||||
{% endblock %}
|
||||
|
||||
{% block js %}
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
||||
|
||||
{% block admin_content %}
|
||||
{% embed '@ChillMain/CRUD/_new_content.html.twig' %}
|
||||
{% block content_form_actions_save_and_show %}{% endblock %}
|
||||
{% endembed %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,68 @@
|
||||
{% extends '@ChillMain/Admin/layoutWithVerticalMenu.html.twig' %}
|
||||
|
||||
{% block title %}{{ 'admin.motive.view.title'|trans }}{% endblock title %}
|
||||
|
||||
{% block admin_content %}
|
||||
|
||||
<h1>{{ 'admin.motive.view.title'|trans }}</h1>
|
||||
|
||||
<table class="record_properties table table-bordered">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>{{ 'Id'|trans }}</th>
|
||||
<td>{{ entity.id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ 'Label'|trans }}</th>
|
||||
<td>{{ entity.label|localize_translatable_string }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ 'Active'|trans }}</th>
|
||||
<td style="text-align:center;">
|
||||
{%- if entity.isActive -%}
|
||||
<i class="fa fa-check-square-o"></i> {{ 'Yes'|trans }}
|
||||
{%- else -%}
|
||||
<i class="fa fa-square-o"></i> {{ 'No'|trans }}
|
||||
{%- endif -%}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ 'emergency?'|trans }}</th>
|
||||
<td>
|
||||
{%- if entity.makeTicketEmergency -%}
|
||||
{{ entity.makeTicketEmergency.value|trans }}
|
||||
{%- else -%}
|
||||
-
|
||||
{%- endif -%}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{% if entity.supplementaryComments is not empty %}
|
||||
<h2>{{ 'Supplementary comments'|trans }}</h2>
|
||||
<div class="supplementary-comments">
|
||||
{% for comment in entity.supplementaryComments %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<div class="comment-content">
|
||||
{{ comment.label|raw }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% else %}
|
||||
<h2>{{ 'Supplementary comments'|trans }}</h2>
|
||||
<p class="text-muted">{{ 'No supplementary comments'|trans }}</p>
|
||||
{% endif %}
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path('chill_crud_motive_index') }}" class="btn btn-cancel">{{ 'Back to the list'|trans }}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ path('chill_crud_motive_edit', { 'id': entity.id }) }}" class="btn btn-edit">{{ 'Edit'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,13 @@
|
||||
{% extends "@ChillMain/Admin/layoutWithVerticalMenu.html.twig" %}
|
||||
|
||||
{% block vertical_menu_content %}
|
||||
{{ chill_menu('admin_ticket', {
|
||||
'layout': '@ChillMain/Admin/menu_admin_section.html.twig',
|
||||
}) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block layout_wvm_content %}
|
||||
{% block admin_content %}<!-- block content empty -->
|
||||
<h1>{{ 'Tickets configuration' |trans }}</h1>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@@ -46,3 +46,6 @@ services:
|
||||
|
||||
Chill\TicketBundle\DataFixtures\:
|
||||
resource: '../DataFixtures/'
|
||||
|
||||
Chill\TicketBundle\Form\:
|
||||
resource: '../Form/'
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Chill\Migrations\Ticket;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
final class Version20251022081554 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Add ordering property on motive entity';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE chill_ticket.motive ADD ordering DOUBLE PRECISION DEFAULT \'0.0\'');
|
||||
$this->addSql('UPDATE chill_ticket.motive SET ordering = id * 100');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE chill_ticket.motive DROP ordering');
|
||||
}
|
||||
}
|
||||
@@ -151,3 +151,36 @@ chill_ticket:
|
||||
open_new_tab: "Ouvrir dans un nouvel onglet"
|
||||
iframe_not_supported: "Votre navigateur ne supporte pas les iframes."
|
||||
click_to_open_pdf: "Cliquez ici pour ouvrir le PDF"
|
||||
|
||||
admin:
|
||||
ticket:
|
||||
motive:
|
||||
menu: Motifs
|
||||
motive:
|
||||
list:
|
||||
title: Liste des motifs
|
||||
view:
|
||||
title: Le motif
|
||||
new:
|
||||
title: Créer un motif
|
||||
crud:
|
||||
motive:
|
||||
title_new: Nouveau motif
|
||||
title_edit: Modifier le motif
|
||||
new:
|
||||
"Create a new motive": "Créer un nouveau motif"
|
||||
|
||||
"Label": "Libellé"
|
||||
"Active": "Actif"
|
||||
"emergency?": "Urgent ?"
|
||||
"Supplementary comments": "Commentaires supplémentaires"
|
||||
"edit": "modifier"
|
||||
"show": "voir"
|
||||
"Yes": "Oui"
|
||||
"No": "Non"
|
||||
"Id": "ID"
|
||||
"Date": "Date"
|
||||
"User": "Utilisateur"
|
||||
"No supplementary comments": "Aucun commentaire supplémentaire"
|
||||
"Back to the list": "Retour à la liste"
|
||||
"Edit": "Modifier"
|
||||
|
||||
Reference in New Issue
Block a user