mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-01 21:47:44 +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)]
|
||||
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.
|
||||
*/
|
||||
@ -157,6 +159,11 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
||||
return $this->absenceStart;
|
||||
}
|
||||
|
||||
public function getAbsenceEnd(): ?\DateTimeImmutable
|
||||
{
|
||||
return $this->absenceEnd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get attributes.
|
||||
*
|
||||
@ -336,7 +343,13 @@ class User implements UserInterface, \Stringable, PasswordAuthenticatedUserInter
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
public function setAbsenceEnd(?\DateTimeImmutable $absenceEnd): void
|
||||
{
|
||||
$this->absenceEnd = $absenceEnd;
|
||||
}
|
||||
|
||||
public function setAttributeByDomain(string $domain, string $key, $value): self
|
||||
{
|
||||
$this->attributes[$domain][$key] = $value;
|
||||
|
@ -12,6 +12,7 @@ declare(strict_types=1);
|
||||
namespace Chill\MainBundle\Form;
|
||||
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Form\Type\ChillDateTimeType;
|
||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
@ -22,10 +23,15 @@ class AbsenceType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('absenceStart', ChillDateType::class, [
|
||||
'required' => true,
|
||||
->add('absenceStart', ChillDateTimeType::class, [
|
||||
'required' => false,
|
||||
'input' => 'datetime_immutable',
|
||||
'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">
|
||||
<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 %}
|
||||
<div>
|
||||
<p>{{ 'absence.You are listed as absent, as of'|trans }} {{ user.absenceStart|format_date('long') }}</p>
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a href="{{ path('chill_main_user_absence_unset') }}"
|
||||
class="btn btn-delete">{{ 'absence.Unset absence'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</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 %}
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<button class="btn btn-save" type="submit">
|
||||
{{ 'Save'|trans }}
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
{{ form_end(form) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% 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
|
||||
Set absence date: Indiquer une date d'absence
|
||||
Absence start: Absent à partir du
|
||||
Absence end: Jusqu'au
|
||||
Absent: 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.
|
||||
Is absent: Absent?
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user