mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-02 22:17:45 +00:00
Add an enddate for user absence and allow a time to be set
This commit is contained in:
parent
fe6e6e54c1
commit
4c31459bd5
@ -45,6 +45,8 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
|||||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::DATETIME_IMMUTABLE, nullable: true)]
|
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::DATETIME_IMMUTABLE, nullable: true)]
|
||||||
private ?\DateTimeImmutable $absenceStart = null;
|
private ?\DateTimeImmutable $absenceStart = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::DATETIME_IMMUTABLE, nullable: true)]
|
||||||
|
private ?\DateTimeImmutable $absenceEnd = null;
|
||||||
/**
|
/**
|
||||||
* Array where SAML attributes's data are stored.
|
* Array where SAML attributes's data are stored.
|
||||||
*/
|
*/
|
||||||
@ -157,6 +159,11 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
|||||||
return $this->absenceStart;
|
return $this->absenceStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAbsenceEnd(): ?\DateTimeImmutable
|
||||||
|
{
|
||||||
|
return $this->absenceEnd;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get attributes.
|
* Get attributes.
|
||||||
*
|
*
|
||||||
@ -336,7 +343,13 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
|||||||
|
|
||||||
public function isAbsent(): bool
|
public function isAbsent(): bool
|
||||||
{
|
{
|
||||||
return null !== $this->getAbsenceStart() && $this->getAbsenceStart() <= new \DateTimeImmutable('now');
|
$now = new \DateTimeImmutable('now');
|
||||||
|
$absenceStart = $this->getAbsenceStart();
|
||||||
|
$absenceEnd = $this->getAbsenceEnd();
|
||||||
|
|
||||||
|
return null !== $absenceStart
|
||||||
|
&& $absenceStart <= $now
|
||||||
|
&& (null === $absenceEnd || $now <= $absenceEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -410,6 +423,11 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
|||||||
$this->absenceStart = $absenceStart;
|
$this->absenceStart = $absenceStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setAbsenceEnd(?\DateTimeImmutable $absenceEnd): void
|
||||||
|
{
|
||||||
|
$this->absenceEnd = $absenceEnd;
|
||||||
|
}
|
||||||
|
|
||||||
public function setAttributeByDomain(string $domain, string $key, $value): self
|
public function setAttributeByDomain(string $domain, string $key, $value): self
|
||||||
{
|
{
|
||||||
$this->attributes[$domain][$key] = $value;
|
$this->attributes[$domain][$key] = $value;
|
||||||
|
@ -12,6 +12,7 @@ declare(strict_types=1);
|
|||||||
namespace Chill\MainBundle\Form;
|
namespace Chill\MainBundle\Form;
|
||||||
|
|
||||||
use Chill\MainBundle\Entity\User;
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\MainBundle\Form\Type\ChillDateTimeType;
|
||||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
@ -22,10 +23,15 @@ class AbsenceType extends AbstractType
|
|||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
$builder
|
$builder
|
||||||
->add('absenceStart', ChillDateType::class, [
|
->add('absenceStart', ChillDateTimeType::class, [
|
||||||
'required' => true,
|
'required' => false,
|
||||||
'input' => 'datetime_immutable',
|
'input' => 'datetime_immutable',
|
||||||
'label' => 'absence.Absence start',
|
'label' => 'absence.Absence start',
|
||||||
|
])
|
||||||
|
->add('absenceEnd', ChillDateTimeType::class, [
|
||||||
|
'required' => false,
|
||||||
|
'input' => 'datetime_immutable',
|
||||||
|
'label' => 'absence.Absence end',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,36 +8,31 @@
|
|||||||
|
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<h2>{{ 'absence.My absence'|trans }}</h2>
|
<h2>{{ 'absence.My absence'|trans }}</h2>
|
||||||
|
<div>
|
||||||
|
{% if user.absenceStart is not null %}
|
||||||
|
<div class="alert alert-success flash_message">{{ 'absence.You are listed as absent, as of %date%'|trans({'%date%': user.absenceStart|format_datetime('short') }) }}
|
||||||
|
{% if user.absenceEnd is not null %}
|
||||||
|
{{ 'until %date%'|trans({'%date%': user.absenceEnd|format_datetime('short') }) }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-warning flash_message">{{ 'absence.No absence listed'|trans }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{ form_start(form) }}
|
||||||
|
{{ form_row(form.absenceStart) }}
|
||||||
|
{{ form_row(form.absenceEnd) }}
|
||||||
|
|
||||||
{% if user.absenceStart is not null %}
|
<ul class="record_actions sticky-form-buttons">
|
||||||
<div>
|
<li>
|
||||||
<p>{{ 'absence.You are listed as absent, as of'|trans }} {{ user.absenceStart|format_date('long') }}</p>
|
<button class="btn btn-save" type="submit">
|
||||||
<ul class="record_actions sticky-form-buttons">
|
{{ 'Save'|trans }}
|
||||||
<li>
|
</button>
|
||||||
<a href="{{ path('chill_main_user_absence_unset') }}"
|
</li>
|
||||||
class="btn btn-delete">{{ 'absence.Unset absence'|trans }}</a>
|
</ul>
|
||||||
</li>
|
{{ form_end(form) }}
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div>
|
|
||||||
<p class="chill-no-data-statement">{{ 'absence.No absence listed'|trans }}</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
{{ form_start(form) }}
|
|
||||||
{{ form_row(form.absenceStart) }}
|
|
||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
|
||||||
<li>
|
|
||||||
<button class="btn btn-save" type="submit">
|
|
||||||
{{ 'Save'|trans }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
{{ form_end(form) }}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Chill\Migrations\Main;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
final class Version20250722140048 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add an absence end date for the user absence';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE users ADD absenceEnd TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL');
|
||||||
|
$this->addSql('COMMENT ON COLUMN users.absenceEnd IS \'(DC2Type:datetime_immutable)\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE users DROP absenceEnd');
|
||||||
|
}
|
||||||
|
}
|
@ -844,9 +844,10 @@ absence:
|
|||||||
Unset absence: Supprimer la date d'absence
|
Unset absence: Supprimer la date d'absence
|
||||||
Set absence date: Indiquer une date d'absence
|
Set absence date: Indiquer une date d'absence
|
||||||
Absence start: Absent à partir du
|
Absence start: Absent à partir du
|
||||||
|
Absence end: Jusqu'au
|
||||||
Absent: Absent
|
Absent: Absent
|
||||||
You are marked as being absent: Vous êtes indiqué absent.
|
You are marked as being absent: Vous êtes indiqué absent.
|
||||||
You are listed as absent, as of: Votre absence est indiquée à partir du
|
You are listed as absent, as of %date%: Votre absence est indiquée à partir du %date%
|
||||||
No absence listed: Aucune absence indiquée.
|
No absence listed: Aucune absence indiquée.
|
||||||
Is absent: Absent?
|
Is absent: Absent?
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user