mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Merge remote-tracking branch 'origin/master' into issue477_autosave_comment_parcours
This commit is contained in:
commit
90948e5513
12
CHANGELOG.md
12
CHANGELOG.md
@ -13,8 +13,8 @@ and this project adheres to
|
|||||||
<!-- write down unreleased development here -->
|
<!-- write down unreleased development here -->
|
||||||
* [parcours] autosave of the pinned comment for draft accompanying course (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/477)
|
* [parcours] autosave of the pinned comment for draft accompanying course (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/477)
|
||||||
* [main] filter user job in undispatch acc period to assign (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/472)
|
* [main] filter user job in undispatch acc period to assign (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/472)
|
||||||
|
* [main] filter user job in undispatch acc period to assign (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/472)
|
||||||
|
* [person] Add url in accompanying period work evaluations entity and form (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/476)
|
||||||
* [person] Add document generation in admin and in person/{id}/document (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/464)
|
* [person] Add document generation in admin and in person/{id}/document (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/464)
|
||||||
* [activity] do not override location if already exist (when validating new activity) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/470)
|
* [activity] do not override location if already exist (when validating new activity) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/470)
|
||||||
* [parcours] Toggle emergency/intensity only by referrer (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/442)
|
* [parcours] Toggle emergency/intensity only by referrer (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/442)
|
||||||
@ -32,6 +32,14 @@ and this project adheres to
|
|||||||
* [confidential] Fix position of toggle button so it does not cover text nor fall outside of box (no issue)
|
* [confidential] Fix position of toggle button so it does not cover text nor fall outside of box (no issue)
|
||||||
* [parcours] Fix edit of both thirdparty and contact name (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/474)
|
* [parcours] Fix edit of both thirdparty and contact name (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/474)
|
||||||
* [template] do not list inactive templates (for doc generator)
|
* [template] do not list inactive templates (for doc generator)
|
||||||
|
* [household] bugfix if position of member is null, renderbox no longer throws an error (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/480)
|
||||||
|
* [parcours] location cannot be removed if linked to a user (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/478)
|
||||||
|
* [person] email added to twig personRenderbox (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/490)
|
||||||
|
* [person] Add link to current household in person banner (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/484)
|
||||||
|
* [person] Change 'personne' with 'usager' and '&' with 'ET' (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/499)
|
||||||
|
* [thirdparty] Add parameter condition to display centers or not (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/500)
|
||||||
|
* [phonenumber] Remove placeholder in phonenumber field (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/496)
|
||||||
|
* [contact] add contact button color changed plus the pipe at the side removed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/506)
|
||||||
|
|
||||||
## Test releases
|
## Test releases
|
||||||
|
|
||||||
|
@ -350,11 +350,6 @@ parameters:
|
|||||||
count: 6
|
count: 6
|
||||||
path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php
|
path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/PersonPhone.php
|
|
||||||
|
|
||||||
-
|
-
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||||
count: 1
|
count: 1
|
||||||
|
@ -12,6 +12,7 @@ declare(strict_types=1);
|
|||||||
namespace Chill\DocStoreBundle\Workflow;
|
namespace Chill\DocStoreBundle\Workflow;
|
||||||
|
|
||||||
use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument;
|
use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument;
|
||||||
|
use Chill\DocStoreBundle\Security\Authorization\AccompanyingCourseDocumentVoter;
|
||||||
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
||||||
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
||||||
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
|
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
|
||||||
@ -36,6 +37,13 @@ class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandler
|
|||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDeletionRoles(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
AccompanyingCourseDocumentVoter::DELETE,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
||||||
{
|
{
|
||||||
$course = $this->getRelatedEntity($entityWorkflow)
|
$course = $this->getRelatedEntity($entityWorkflow)
|
||||||
@ -66,6 +74,18 @@ class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandler
|
|||||||
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AccompanyingCourseDocument $object
|
||||||
|
*
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
public function getRelatedObjects(object $object): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['entityClass' => AccompanyingCourseDocument::class, 'entityId' => $object->getId()],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@ -84,6 +104,11 @@ class AccompanyingCourseDocumentWorkflowHandler implements EntityWorkflowHandler
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isObjectSupported(object $object): bool
|
||||||
|
{
|
||||||
|
return $object instanceof AccompanyingCourseDocument;
|
||||||
|
}
|
||||||
|
|
||||||
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
||||||
{
|
{
|
||||||
return $entityWorkflow->getRelatedEntityClass() === AccompanyingCourseDocument::class;
|
return $entityWorkflow->getRelatedEntityClass() === AccompanyingCourseDocument::class;
|
||||||
|
@ -256,6 +256,13 @@ class ChillMainExtension extends Extension implements
|
|||||||
'channels' => ['chill'],
|
'channels' => ['chill'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$container->prependExtensionConfig('security', [
|
||||||
|
'access_decision_manager' => [
|
||||||
|
'strategy' => 'unanimous',
|
||||||
|
'allow_if_all_abstain' => false,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
//add crud api
|
//add crud api
|
||||||
$this->prependCruds($container);
|
$this->prependCruds($container);
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ class EntityWorkflowStep
|
|||||||
* You should **not** rely on this method to get all users which are able to
|
* You should **not** rely on this method to get all users which are able to
|
||||||
* apply a transition on this step. Use @see{EntityWorkflowStep::getAllDestUser} instead.
|
* apply a transition on this step. Use @see{EntityWorkflowStep::getAllDestUser} instead.
|
||||||
*/
|
*/
|
||||||
public function getDestUser(): collection
|
public function getDestUser(): Collection
|
||||||
{
|
{
|
||||||
return $this->destUser;
|
return $this->destUser;
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,7 @@ use libphonenumber\PhoneNumberUtil;
|
|||||||
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
|
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
|
||||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use function array_key_exists;
|
|
||||||
|
|
||||||
class ChillPhoneNumberType extends AbstractType
|
class ChillPhoneNumberType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -37,21 +35,7 @@ class ChillPhoneNumberType extends AbstractType
|
|||||||
$resolver
|
$resolver
|
||||||
->setDefault('default_region', $this->defaultCarrierCode)
|
->setDefault('default_region', $this->defaultCarrierCode)
|
||||||
->setDefault('format', PhoneNumberFormat::NATIONAL)
|
->setDefault('format', PhoneNumberFormat::NATIONAL)
|
||||||
->setDefault('type', \libphonenumber\PhoneNumberType::FIXED_LINE_OR_MOBILE)
|
->setDefault('type', \libphonenumber\PhoneNumberType::FIXED_LINE_OR_MOBILE);
|
||||||
->setNormalizer('attr', function (Options $options, $value) {
|
|
||||||
if (array_key_exists('placeholder', $value)) {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
$examplePhoneNumber = $this->phoneNumberUtil->getExampleNumberForType($this->defaultCarrierCode, $options['type']);
|
|
||||||
|
|
||||||
return array_merge(
|
|
||||||
$value,
|
|
||||||
[
|
|
||||||
'placeholder' => PhoneNumberUtil::getInstance()->format($examplePhoneNumber, $options['format']),
|
|
||||||
]
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getParent()
|
public function getParent()
|
||||||
|
@ -27,7 +27,7 @@ interface PhoneNumberHelperInterface
|
|||||||
/**
|
/**
|
||||||
* Get type (mobile, landline, ...) for phone number.
|
* Get type (mobile, landline, ...) for phone number.
|
||||||
*/
|
*/
|
||||||
public function getType(string $phonenumber): string;
|
public function getType(PhoneNumber $phonenumber): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the validation is configured and available.
|
* Return true if the validation is configured and available.
|
||||||
|
@ -17,6 +17,7 @@ use GuzzleHttp\Exception\ConnectException;
|
|||||||
use GuzzleHttp\Exception\ServerException;
|
use GuzzleHttp\Exception\ServerException;
|
||||||
use libphonenumber\NumberParseException;
|
use libphonenumber\NumberParseException;
|
||||||
use libphonenumber\PhoneNumber;
|
use libphonenumber\PhoneNumber;
|
||||||
|
use libphonenumber\PhoneNumberType;
|
||||||
use libphonenumber\PhoneNumberUtil;
|
use libphonenumber\PhoneNumberUtil;
|
||||||
use Psr\Cache\CacheItemPoolInterface;
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
@ -86,9 +87,19 @@ final class PhonenumberHelper implements PhoneNumberHelperInterface
|
|||||||
/**
|
/**
|
||||||
* Get type (mobile, landline, ...) for phone number.
|
* Get type (mobile, landline, ...) for phone number.
|
||||||
*/
|
*/
|
||||||
public function getType(string $phonenumber): string
|
public function getType(PhoneNumber $phonenumber): string
|
||||||
{
|
{
|
||||||
return $this->performTwilioLookup($phonenumber) ?? 'unknown';
|
switch ($this->phoneNumberUtil->getNumberType($phonenumber)) {
|
||||||
|
case PhoneNumberType::MOBILE:
|
||||||
|
return 'mobile';
|
||||||
|
|
||||||
|
case PhoneNumberType::FIXED_LINE:
|
||||||
|
case PhoneNumberType::VOIP:
|
||||||
|
return 'landline';
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 'landline';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,6 +55,30 @@ class EntityWorkflowRepository implements ObjectRepository
|
|||||||
return (int) $qb->getQuery()->getSingleScalarResult();
|
return (int) $qb->getQuery()->getSingleScalarResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function countRelatedWorkflows(array $relateds): int
|
||||||
|
{
|
||||||
|
$qb = $this->repository->createQueryBuilder('w');
|
||||||
|
|
||||||
|
$orX = $qb->expr()->orX();
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
foreach ($relateds as $related) {
|
||||||
|
$orX->add(
|
||||||
|
$qb->expr()->andX(
|
||||||
|
$qb->expr()->eq('w.relatedEntityClass', ':entity_class_' . $i),
|
||||||
|
$qb->expr()->eq('w.relatedEntityId', ':entity_id_' . $i)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$qb
|
||||||
|
->setParameter('entity_class_' . $i, $related['entityClass'])
|
||||||
|
->setParameter('entity_id_' . $i, $related['entityId']);
|
||||||
|
++$i;
|
||||||
|
}
|
||||||
|
$qb->where($orX);
|
||||||
|
|
||||||
|
return $qb->select('COUNT(w)')->getQuery()->getSingleScalarResult();
|
||||||
|
}
|
||||||
|
|
||||||
public function find($id): ?EntityWorkflow
|
public function find($id): ?EntityWorkflow
|
||||||
{
|
{
|
||||||
return $this->repository->find($id);
|
return $this->repository->find($id);
|
||||||
|
@ -25,7 +25,7 @@ $chill-theme-buttons: (
|
|||||||
"notify": $chill-blue,
|
"notify": $chill-blue,
|
||||||
"search": $gray-300,
|
"search": $gray-300,
|
||||||
"unlink": $chill-red,
|
"unlink": $chill-red,
|
||||||
"tpchild": $chill-pink,
|
"tpchild": $chill-green,
|
||||||
);
|
);
|
||||||
|
|
||||||
@each $button, $color in $chill-theme-buttons {
|
@each $button, $color in $chill-theme-buttons {
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
<span class="item-key">{{ 'Le'|trans ~ ' : ' }}</span>
|
<span class="item-key">{{ 'Le'|trans ~ ' : ' }}</span>
|
||||||
<b>{{ step.previous.transitionAt|format_datetime('short', 'short') }}</b>
|
<b>{{ step.previous.transitionAt|format_datetime('short', 'short') }}</b>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="item-key">{{ 'workflow.For'|trans ~ ' : ' }}</span>
|
||||||
|
<b>
|
||||||
|
{% for d in step.destUser %}{{ d|chill_entity_render_string }}{% if not loop.last %}, {% endif %}{% endfor %}
|
||||||
|
</b>
|
||||||
|
</li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>
|
<li>
|
||||||
<span class="item-key">{{ 'workflow.Created by'|trans ~ ' : ' }}</span>
|
<span class="item-key">{{ 'workflow.Created by'|trans ~ ' : ' }}</span>
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Chill\MainBundle\Security\Authorization;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Repository\Workflow\EntityWorkflowRepository;
|
||||||
|
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
||||||
|
use RuntimeException;
|
||||||
|
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||||
|
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
|
||||||
|
use function in_array;
|
||||||
|
use function is_object;
|
||||||
|
|
||||||
|
class WorkflowEntityDeletionVoter extends Voter
|
||||||
|
{
|
||||||
|
private EntityWorkflowRepository $entityWorkflowRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var iterable|EntityWorkflowHandlerInterface[]
|
||||||
|
*/
|
||||||
|
private iterable $handlers;
|
||||||
|
|
||||||
|
public function __construct($handlers, EntityWorkflowRepository $entityWorkflowRepository)
|
||||||
|
{
|
||||||
|
$this->handlers = $handlers;
|
||||||
|
$this->entityWorkflowRepository = $entityWorkflowRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function supports($attribute, $subject)
|
||||||
|
{
|
||||||
|
if (!is_object($subject)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->handlers as $handler) {
|
||||||
|
if ($handler->isObjectSupported($subject)
|
||||||
|
&& in_array($attribute, $handler->getDeletionRoles($subject), true)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
|
||||||
|
{
|
||||||
|
foreach ($this->handlers as $handler) {
|
||||||
|
if ($handler->isObjectSupported($subject)) {
|
||||||
|
return 0 === $this->entityWorkflowRepository->countRelatedWorkflows(
|
||||||
|
$handler->getRelatedObjects($subject)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new RuntimeException('no handlers found');
|
||||||
|
}
|
||||||
|
}
|
@ -113,6 +113,7 @@ class AddressNormalizer implements ContextAwareNormalizerInterface, NormalizerAw
|
|||||||
[
|
[
|
||||||
'postcode' => $helper->normalize(self::NULL_POSTCODE_COUNTRY, $format, $context),
|
'postcode' => $helper->normalize(self::NULL_POSTCODE_COUNTRY, $format, $context),
|
||||||
'country' => $helper->normalize(self::NULL_POSTCODE_COUNTRY, $format, $context),
|
'country' => $helper->normalize(self::NULL_POSTCODE_COUNTRY, $format, $context),
|
||||||
|
'lines' => [],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,10 @@ class PhonenumberNormalizer implements NormalizerInterface, DenormalizerInterfac
|
|||||||
*/
|
*/
|
||||||
public function denormalize($data, $type, $format = null, array $context = [])
|
public function denormalize($data, $type, $format = null, array $context = [])
|
||||||
{
|
{
|
||||||
|
if ('' === trim($data)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return $this->phoneNumberUtil->parse($data, $this->defaultCarrierCode);
|
return $this->phoneNumberUtil->parse($data, $this->defaultCarrierCode);
|
||||||
} catch (NumberParseException $e) {
|
} catch (NumberParseException $e) {
|
||||||
|
@ -15,12 +15,19 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
|||||||
|
|
||||||
interface EntityWorkflowHandlerInterface
|
interface EntityWorkflowHandlerInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @return array|string[]
|
||||||
|
*/
|
||||||
|
public function getDeletionRoles(): array;
|
||||||
|
|
||||||
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array;
|
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array;
|
||||||
|
|
||||||
public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string;
|
public function getEntityTitle(EntityWorkflow $entityWorkflow, array $options = []): string;
|
||||||
|
|
||||||
public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?object;
|
public function getRelatedEntity(EntityWorkflow $entityWorkflow): ?object;
|
||||||
|
|
||||||
|
public function getRelatedObjects(object $object): array;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a string representing the role required for seeing the workflow.
|
* Return a string representing the role required for seeing the workflow.
|
||||||
*
|
*
|
||||||
@ -33,6 +40,8 @@ interface EntityWorkflowHandlerInterface
|
|||||||
|
|
||||||
public function getTemplateData(EntityWorkflow $entityWorkflow, array $options = []): array;
|
public function getTemplateData(EntityWorkflow $entityWorkflow, array $options = []): array;
|
||||||
|
|
||||||
|
public function isObjectSupported(object $object): bool;
|
||||||
|
|
||||||
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
||||||
|
|
||||||
public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
public function supportsFreeze(EntityWorkflow $entityWorkflow, array $options = []): bool;
|
||||||
|
@ -75,3 +75,9 @@ services:
|
|||||||
$locker: '@Chill\MainBundle\Security\PasswordRecover\PasswordRecoverLocker'
|
$locker: '@Chill\MainBundle\Security\PasswordRecover\PasswordRecoverLocker'
|
||||||
tags:
|
tags:
|
||||||
- { name: security.voter }
|
- { name: security.voter }
|
||||||
|
|
||||||
|
Chill\MainBundle\Security\Authorization\WorkflowEntityDeletionVoter:
|
||||||
|
autoconfigure: true
|
||||||
|
autowire: true
|
||||||
|
arguments:
|
||||||
|
$handlers: !tagged_iterator chill_main.workflow_handler
|
||||||
|
@ -413,6 +413,7 @@ workflow:
|
|||||||
Previous workflow without reaction help: Liste des workflows où vous avez été cité comme pouvant réagir à une étape, mais où un autre utilisateur a exécuté une action avant vous.
|
Previous workflow without reaction help: Liste des workflows où vous avez été cité comme pouvant réagir à une étape, mais où un autre utilisateur a exécuté une action avant vous.
|
||||||
Previous transitionned: Anciens workflows
|
Previous transitionned: Anciens workflows
|
||||||
Previous workflow transitionned help: Workflows où vous avez exécuté une action.
|
Previous workflow transitionned help: Workflows où vous avez exécuté une action.
|
||||||
|
For: Pour
|
||||||
|
|
||||||
|
|
||||||
Subscribe final: Recevoir une notification à l'étape finale
|
Subscribe final: Recevoir une notification à l'étape finale
|
||||||
|
@ -98,7 +98,8 @@ class PersonPhone
|
|||||||
|
|
||||||
public function isEmpty(): bool
|
public function isEmpty(): bool
|
||||||
{
|
{
|
||||||
return empty($this->getDescription()) && empty($this->getPhonenumber());
|
return ('' === $this->getDescription() || null === $this->getDescription())
|
||||||
|
&& null === $this->getPhonenumber();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setDate(DateTime $date): void
|
public function setDate(DateTime $date): void
|
||||||
|
@ -62,6 +62,12 @@ class Evaluation
|
|||||||
*/
|
*/
|
||||||
private array $title = [];
|
private array $title = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="text", nullable=true)
|
||||||
|
* @Serializer\Groups({"read", "docgen:read"})
|
||||||
|
*/
|
||||||
|
private ?string $url = null;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->socialActions = new ArrayCollection();
|
$this->socialActions = new ArrayCollection();
|
||||||
@ -101,6 +107,11 @@ class Evaluation
|
|||||||
return $this->title;
|
return $this->title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getUrl(): ?string
|
||||||
|
{
|
||||||
|
return $this->url;
|
||||||
|
}
|
||||||
|
|
||||||
public function removeSocialAction(SocialAction $socialAction): self
|
public function removeSocialAction(SocialAction $socialAction): self
|
||||||
{
|
{
|
||||||
if ($this->socialActions->contains($socialAction)) {
|
if ($this->socialActions->contains($socialAction)) {
|
||||||
@ -130,4 +141,11 @@ class Evaluation
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setUrl(?string $url): self
|
||||||
|
{
|
||||||
|
$this->url = $url;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ use Chill\PersonBundle\Entity\Person;
|
|||||||
use Chill\PersonBundle\Entity\PersonPhone;
|
use Chill\PersonBundle\Entity\PersonPhone;
|
||||||
use Chill\PersonBundle\Form\Type\GenderType;
|
use Chill\PersonBundle\Form\Type\GenderType;
|
||||||
use Chill\PersonBundle\Form\Type\PersonAltNameType;
|
use Chill\PersonBundle\Form\Type\PersonAltNameType;
|
||||||
|
use Chill\PersonBundle\Form\Type\PersonPhoneType;
|
||||||
use Chill\PersonBundle\Form\Type\Select2MaritalStatusType;
|
use Chill\PersonBundle\Form\Type\Select2MaritalStatusType;
|
||||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
@ -158,7 +159,7 @@ class PersonType extends AbstractType
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder->add('otherPhoneNumbers', ChillCollectionType::class, [
|
$builder->add('otherPhoneNumbers', ChillCollectionType::class, [
|
||||||
'entry_type' => ChillPhoneNumberType::class,
|
'entry_type' => PersonPhoneType::class,
|
||||||
'button_add_label' => 'Add new phone',
|
'button_add_label' => 'Add new phone',
|
||||||
'button_remove_label' => 'Remove phone',
|
'button_remove_label' => 'Remove phone',
|
||||||
'required' => false,
|
'required' => false,
|
||||||
|
@ -11,11 +11,11 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\PersonBundle\Form\Type;
|
namespace Chill\PersonBundle\Form\Type;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Form\Type\ChillPhoneNumberType;
|
||||||
use Chill\MainBundle\Phonenumber\PhonenumberHelper;
|
use Chill\MainBundle\Phonenumber\PhonenumberHelper;
|
||||||
use Chill\PersonBundle\Entity\PersonPhone;
|
use Chill\PersonBundle\Entity\PersonPhone;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\TelType;
|
|
||||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormEvent;
|
use Symfony\Component\Form\FormEvent;
|
||||||
@ -36,7 +36,7 @@ class PersonPhoneType extends AbstractType
|
|||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
{
|
{
|
||||||
$builder->add('phonenumber', TelType::class, [
|
$builder->add('phonenumber', ChillPhoneNumberType::class, [
|
||||||
'label' => 'Other phonenumber',
|
'label' => 'Other phonenumber',
|
||||||
'required' => true,
|
'required' => true,
|
||||||
]);
|
]);
|
||||||
|
@ -37,57 +37,68 @@ div.banner {
|
|||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.household-link {
|
||||||
|
border: 1px solid white;
|
||||||
|
padding: .05rem .3rem;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
background-color: white;
|
||||||
|
color: $chill-person-context
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.person-view {
|
div.person-view {
|
||||||
figure.person-details {
|
figure.person-details {
|
||||||
h2 {
|
h2 {
|
||||||
font-family: 'Open Sans';
|
font-family: 'Open Sans';
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-bottom: 0.3em;
|
margin-bottom: 0.3em;
|
||||||
font-variant: small-caps;
|
font-variant: small-caps;
|
||||||
}
|
}
|
||||||
dl {
|
dl {
|
||||||
margin-top: 0.3em;
|
margin-top: 0.3em;
|
||||||
}
|
}
|
||||||
dt {
|
dt {
|
||||||
font-family: 'Open Sans';
|
font-family: 'Open Sans';
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
dd {
|
dd {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
a.sc-button { background-color: $black; padding-top: 0.2em; padding-bottom: 0.2em; }
|
a.sc-button { background-color: $black; padding-top: 0.2em; padding-bottom: 0.2em; }
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
/* custom fields on the home page */
|
/* custom fields on the home page */
|
||||||
div.custom-fields {
|
div.custom-fields {
|
||||||
figure.person-details {
|
figure.person-details {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row wrap;
|
flex-flow: row wrap;
|
||||||
div.cf_title_box:nth-child(4n+1) h2 {
|
div.cf_title_box:nth-child(4n+1) h2 {
|
||||||
@extend .chill-red !optional;
|
@extend .chill-red !optional;
|
||||||
}
|
}
|
||||||
div.cf_title_box:nth-child(4n+2) h2 {
|
div.cf_title_box:nth-child(4n+2) h2 {
|
||||||
@extend .chill-green !optional;
|
@extend .chill-green !optional;
|
||||||
}
|
}
|
||||||
div.cf_title_box:nth-child(4n+3) h2 {
|
div.cf_title_box:nth-child(4n+3) h2 {
|
||||||
@extend .chill-orange !optional;
|
@extend .chill-orange !optional;
|
||||||
}
|
}
|
||||||
div.cf_title_box:nth-child(4n+4) h2 {
|
div.cf_title_box:nth-child(4n+4) h2 {
|
||||||
@extend .chill-blue !optional;
|
@extend .chill-blue !optional;
|
||||||
}
|
}
|
||||||
div.cf_title_box:nth-child(2n+1) {
|
div.cf_title_box:nth-child(2n+1) {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
margin-right: 40px;
|
margin-right: 40px;
|
||||||
}
|
}
|
||||||
div.cf_title_box:nth-child(2n+2) {
|
div.cf_title_box:nth-child(2n+2) {
|
||||||
width: calc(50% - 40px);
|
width: calc(50% - 40px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -59,14 +59,6 @@
|
|||||||
ref="addAddress">
|
ref="addAddress">
|
||||||
</add-address>
|
</add-address>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="isPersonLocation">
|
|
||||||
<button
|
|
||||||
class="btn btn-remove"
|
|
||||||
@click="removeAddress"
|
|
||||||
:title="$t('courselocation.remove_button')">
|
|
||||||
{{ $t('action.remove') }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -180,22 +172,6 @@ export default {
|
|||||||
}
|
}
|
||||||
this.$store.commit('setAddressContext', context);
|
this.$store.commit('setAddressContext', context);
|
||||||
},
|
},
|
||||||
removeAddress() {
|
|
||||||
let payload = {
|
|
||||||
target: this.context.target.name,
|
|
||||||
targetId: this.context.target.id,
|
|
||||||
locationStatusTo: 'none'
|
|
||||||
};
|
|
||||||
//console.log('remove address');
|
|
||||||
this.$store.dispatch('updateLocation', payload)
|
|
||||||
.catch(({name, violations}) => {
|
|
||||||
if (name === 'ValidationException' || name === 'AccessException') {
|
|
||||||
violations.forEach((violation) => this.$toast.open({message: violation}));
|
|
||||||
} else {
|
|
||||||
this.$toast.open({message: 'An error occurred'})
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
displayErrors() {
|
displayErrors() {
|
||||||
return this.$refs.addAddress.errorMsg;
|
return this.$refs.addAddress.errorMsg;
|
||||||
},
|
},
|
||||||
|
@ -170,7 +170,9 @@ export default {
|
|||||||
console.log('data', payload.data)
|
console.log('data', payload.data)
|
||||||
body.name = payload.data.name;
|
body.name = payload.data.name;
|
||||||
body.email = payload.data.email;
|
body.email = payload.data.email;
|
||||||
body.telephone = payload.data.phonenumber;
|
body.telephone = payload.data.telephone;
|
||||||
|
body.civility = payload.data.civility;
|
||||||
|
body.profession = payload.data.profession;
|
||||||
body.address = payload.data.address ? { id: payload.data.address.address_id } : null;
|
body.address = payload.data.address ? { id: payload.data.address.address_id } : null;
|
||||||
|
|
||||||
makeFetch('PATCH', `/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`, body)
|
makeFetch('PATCH', `/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`, body)
|
||||||
|
@ -5,6 +5,11 @@
|
|||||||
<span>{{ evaluation.evaluation.title.fr }}</span>
|
<span>{{ evaluation.evaluation.title.fr }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="item-url mt-3 mb-4" v-if="evaluation.evaluation.url">
|
||||||
|
<i class="fa fa-link fa-lg"></i>
|
||||||
|
<a :href="evaluation.evaluation.url" target="_blank">{{ evaluation.evaluation.url }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<form-evaluation ref="FormEvaluation" :key="evaluation.key" :evaluation="evaluation"></form-evaluation>
|
<form-evaluation ref="FormEvaluation" :key="evaluation.key" :evaluation="evaluation"></form-evaluation>
|
||||||
|
|
||||||
@ -21,7 +26,7 @@
|
|||||||
></list-workflow-modal>
|
></list-workflow-modal>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li v-if="canDelete">
|
||||||
<a class="btn btn-delete" @click="modal.showModal = true" :title="$t('action.delete')"></a>
|
<a class="btn btn-delete" @click="modal.showModal = true" :title="$t('action.delete')"></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -93,6 +98,19 @@ export default {
|
|||||||
pickedEvaluations() {
|
pickedEvaluations() {
|
||||||
return this.$store.state.evaluationsPicked;
|
return this.$store.state.evaluationsPicked;
|
||||||
},
|
},
|
||||||
|
canDelete() {
|
||||||
|
if (this.evaluation.workflows.length > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let doc of this.evaluation.documents) {
|
||||||
|
if (doc.workflows.length > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
removeEvaluation(e) {
|
removeEvaluation(e) {
|
||||||
@ -128,4 +146,11 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
div.item-url {
|
||||||
|
i {
|
||||||
|
color: unset!important;
|
||||||
|
margin-left: 1rem;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -101,7 +101,7 @@
|
|||||||
<li>
|
<li>
|
||||||
<a :href="buildEditLink(d.storedObject)" class="btn btn-wopilink"></a>
|
<a :href="buildEditLink(d.storedObject)" class="btn btn-wopilink"></a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li v-if="d.workflows.length === 0">
|
||||||
<a class="btn btn-delete" @click="removeDocument(d)">
|
<a class="btn btn-delete" @click="removeDocument(d)">
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -87,10 +87,14 @@ export default {
|
|||||||
currentMembers() {
|
currentMembers() {
|
||||||
let members = this.household.members.filter(m => this.household.current_members_id.includes(m.id))
|
let members = this.household.members.filter(m => this.household.current_members_id.includes(m.id))
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
if (a.position.ordering < b.position.ordering) {
|
|
||||||
|
const orderA = a.position ? a.position.ordering : 0;
|
||||||
|
const orderB = b.position ? b.position.ordering : 0;
|
||||||
|
|
||||||
|
if (orderA < orderB) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (a.position.ordering > b.position.ordering) {
|
if (orderA > orderB) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (a.holder && !b.holder) {
|
if (a.holder && !b.holder) {
|
||||||
|
@ -130,11 +130,13 @@
|
|||||||
href="{{ chill_path_add_return_path('chill_person_accompanying_period_work_edit', { 'id': w.id }) }}"
|
href="{{ chill_path_add_return_path('chill_person_accompanying_period_work_edit', { 'id': w.id }) }}"
|
||||||
></a>
|
></a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
{% if is_granted('CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_DELETE', w) %}
|
||||||
<a class="btn btn-delete" title="{{ 'Delete'|trans }}"
|
<li>
|
||||||
href="{{ path('chill_person_accompanying_period_work_delete', { 'id': w.id } ) }}"
|
<a class="btn btn-delete" title="{{ 'Delete'|trans }}"
|
||||||
></a>
|
href="{{ path('chill_person_accompanying_period_work_delete', { 'id': w.id } ) }}"
|
||||||
</li>
|
></a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -117,12 +117,15 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="item-row separator">
|
<div class="item-row separator">
|
||||||
<div class="item-col item-meta">
|
{% set notif_counter = chill_count_notifications('Chill\\PersonBundle\\Entity\\AccompanyingPeriod', period.id) %}
|
||||||
{% set notif_counter = chill_count_notifications('Chill\\PersonBundle\\Entity\\AccompanyingPeriod', period.id) %}
|
{% if notif_counter.total > 0 %}
|
||||||
{% if notif_counter.total > 0 %}
|
<div class="item-col item-meta">
|
||||||
{{ chill_counter_notifications('Chill\\PersonBundle\\Entity\\AccompanyingPeriod', period.id) }}
|
{{ chill_counter_notifications('Chill\\PersonBundle\\Entity\\AccompanyingPeriod', period.id) }}
|
||||||
{% endif %}
|
</div>
|
||||||
</div>
|
{% endif %}
|
||||||
|
{% if itemMeta is defined %}
|
||||||
|
{{ itemMeta }}
|
||||||
|
{% endif %}
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
{% if recordAction is defined %}
|
{% if recordAction is defined %}
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
|
@ -167,6 +167,18 @@
|
|||||||
<span class="chill-no-data-statement">{{ 'No data given'|trans }}</span>
|
<span class="chill-no-data-statement">{{ 'No data given'|trans }}</span>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if person.email is not empty %}
|
||||||
|
<li>
|
||||||
|
<i class="fa fa-li fa-envelope-o"></i><a href="{{ 'mailto:' ~ person.email }}">
|
||||||
|
{{ person.email }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% else %}
|
||||||
|
<li>
|
||||||
|
<i class="fa fa-li fa-envelope-o"></i>
|
||||||
|
<span class="chill-no-data-statement">{{ 'No data given'|trans }}</span>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% if options['addCenter'] and person|chill_resolve_center|length > 0 %}
|
{% if options['addCenter'] and person|chill_resolve_center|length > 0 %}
|
||||||
<li>
|
<li>
|
||||||
<i class="fa fa-li fa-long-arrow-right"></i>
|
<i class="fa fa-li fa-long-arrow-right"></i>
|
||||||
|
@ -58,6 +58,13 @@
|
|||||||
}) }}
|
}) }}
|
||||||
</span>
|
</span>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
|
{% if person.getCurrentHousehold is not null %}
|
||||||
|
<span>
|
||||||
|
<a class="household-link" href="{{ chill_path_add_return_path('chill_person_household_summary', { 'household_id' : person.getCurrentHousehold.id } ) }}">
|
||||||
|
<i class="fa fa-home"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@ class AccompanyingPeriodWorkVoter extends Voter
|
|||||||
{
|
{
|
||||||
public const CREATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_CREATE';
|
public const CREATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_CREATE';
|
||||||
|
|
||||||
|
public const DELETE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_DELETE';
|
||||||
|
|
||||||
public const SEE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_SEE';
|
public const SEE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_SEE';
|
||||||
|
|
||||||
public const UPDATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_UPDATE';
|
public const UPDATE = 'CHILL_MAIN_ACCOMPANYING_PERIOD_WORK_UPDATE';
|
||||||
@ -60,6 +62,7 @@ class AccompanyingPeriodWorkVoter extends Voter
|
|||||||
|
|
||||||
case self::CREATE:
|
case self::CREATE:
|
||||||
case self::UPDATE:
|
case self::UPDATE:
|
||||||
|
case self::DELETE:
|
||||||
return $this->security->isGranted(AccompanyingPeriodVoter::EDIT, $subject->getAccompanyingPeriod());
|
return $this->security->isGranted(AccompanyingPeriodVoter::EDIT, $subject->getAccompanyingPeriod());
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -86,6 +89,6 @@ class AccompanyingPeriodWorkVoter extends Voter
|
|||||||
|
|
||||||
private function getRoles(): array
|
private function getRoles(): array
|
||||||
{
|
{
|
||||||
return [self::SEE, self::CREATE, self::UPDATE];
|
return [self::SEE, self::CREATE, self::UPDATE, self::DELETE];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,8 @@ class AccompanyingPeriodWorkEvaluationContext implements
|
|||||||
$doc = new AccompanyingPeriodWorkEvaluationDocument();
|
$doc = new AccompanyingPeriodWorkEvaluationDocument();
|
||||||
$doc->setStoredObject($storedObject)
|
$doc->setStoredObject($storedObject)
|
||||||
->setAccompanyingPeriodWorkEvaluation($entity)
|
->setAccompanyingPeriodWorkEvaluation($entity)
|
||||||
->setTemplate($template);
|
->setTemplate($template)
|
||||||
|
->setTitle($this->translatableStringHelper->localize($template->getName()));
|
||||||
$this->em->persist($doc);
|
$this->em->persist($doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,13 @@ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityW
|
|||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDeletionRoles(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'_',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
||||||
{
|
{
|
||||||
$doc = $this->getRelatedEntity($entityWorkflow);
|
$doc = $this->getRelatedEntity($entityWorkflow);
|
||||||
@ -63,6 +70,18 @@ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityW
|
|||||||
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AccompanyingPeriodWorkEvaluationDocument $object
|
||||||
|
*
|
||||||
|
* @return array[]
|
||||||
|
*/
|
||||||
|
public function getRelatedObjects(object $object): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['entityClass' => AccompanyingPeriodWorkEvaluationDocument::class, $object->getId()],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
||||||
{
|
{
|
||||||
return AccompanyingPeriodWorkEvaluationDocumentVoter::SEE;
|
return AccompanyingPeriodWorkEvaluationDocumentVoter::SEE;
|
||||||
@ -84,6 +103,11 @@ class AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler implements EntityW
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isObjectSupported(object $object): bool
|
||||||
|
{
|
||||||
|
return $object instanceof AccompanyingPeriodWorkEvaluationDocument;
|
||||||
|
}
|
||||||
|
|
||||||
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
||||||
{
|
{
|
||||||
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWorkEvaluationDocument::class;
|
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWorkEvaluationDocument::class;
|
||||||
|
@ -15,6 +15,7 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
|||||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||||
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
||||||
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation;
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation;
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
|
||||||
use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationRepository;
|
use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationRepository;
|
||||||
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkEvaluationVoter;
|
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkEvaluationVoter;
|
||||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||||
@ -37,6 +38,11 @@ class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowH
|
|||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDeletionRoles(): array
|
||||||
|
{
|
||||||
|
return ['_'];
|
||||||
|
}
|
||||||
|
|
||||||
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
||||||
{
|
{
|
||||||
$evaluation = $this->getRelatedEntity($entityWorkflow);
|
$evaluation = $this->getRelatedEntity($entityWorkflow);
|
||||||
@ -61,6 +67,21 @@ class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowH
|
|||||||
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AccompanyingPeriodWorkEvaluation $object
|
||||||
|
*/
|
||||||
|
public function getRelatedObjects(object $object): array
|
||||||
|
{
|
||||||
|
$relateds = [];
|
||||||
|
$relateds[] = ['entityClass' => AccompanyingPeriodWorkEvaluation::class, 'entityId' => $object->getId()];
|
||||||
|
|
||||||
|
foreach ($object->getDocuments() as $doc) {
|
||||||
|
$relateds[] = ['entityClass' => AccompanyingPeriodWorkEvaluationDocument::class, 'entityId' => $doc->getId()];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $relateds;
|
||||||
|
}
|
||||||
|
|
||||||
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
||||||
{
|
{
|
||||||
return AccompanyingPeriodWorkEvaluationVoter::SEE;
|
return AccompanyingPeriodWorkEvaluationVoter::SEE;
|
||||||
@ -79,6 +100,11 @@ class AccompanyingPeriodWorkEvaluationWorkflowHandler implements EntityWorkflowH
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isObjectSupported(object $object): bool
|
||||||
|
{
|
||||||
|
return $object instanceof AccompanyingPeriodWorkEvaluation;
|
||||||
|
}
|
||||||
|
|
||||||
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
||||||
{
|
{
|
||||||
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWorkEvaluation::class;
|
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWorkEvaluation::class;
|
||||||
|
@ -15,7 +15,10 @@ use Chill\MainBundle\Entity\Workflow\EntityWorkflow;
|
|||||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||||
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
use Chill\MainBundle\Workflow\EntityWorkflowHandlerInterface;
|
||||||
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation;
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
|
||||||
use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository;
|
use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository;
|
||||||
|
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodWorkVoter;
|
||||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||||
|
|
||||||
class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInterface
|
class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInterface
|
||||||
@ -36,6 +39,11 @@ class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInte
|
|||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getDeletionRoles(): array
|
||||||
|
{
|
||||||
|
return [AccompanyingPeriodWorkVoter::DELETE];
|
||||||
|
}
|
||||||
|
|
||||||
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
public function getEntityData(EntityWorkflow $entityWorkflow, array $options = []): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@ -58,6 +66,25 @@ class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInte
|
|||||||
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
return $this->repository->find($entityWorkflow->getRelatedEntityId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param AccompanyingPeriodWork $object
|
||||||
|
*/
|
||||||
|
public function getRelatedObjects(object $object): array
|
||||||
|
{
|
||||||
|
$relateds = [];
|
||||||
|
$relateds[] = ['entityClass' => AccompanyingPeriodWork::class, 'entityId' => $object->getId()];
|
||||||
|
|
||||||
|
foreach ($object->getAccompanyingPeriodWorkEvaluations() as $evaluation) {
|
||||||
|
$relateds[] = ['entityClass' => AccompanyingPeriodWorkEvaluation::class, 'entityId' => $evaluation->getId()];
|
||||||
|
|
||||||
|
foreach ($evaluation->getDocuments() as $doc) {
|
||||||
|
$relateds[] = ['entityClass' => AccompanyingPeriodWorkEvaluationDocument::class, 'entityId' => $doc->getId()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $relateds;
|
||||||
|
}
|
||||||
|
|
||||||
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
public function getRoleShow(EntityWorkflow $entityWorkflow): ?string
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@ -76,6 +103,11 @@ class AccompanyingPeriodWorkWorkflowHandler implements EntityWorkflowHandlerInte
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isObjectSupported(object $object): bool
|
||||||
|
{
|
||||||
|
return $object instanceof AccompanyingPeriodWork;
|
||||||
|
}
|
||||||
|
|
||||||
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
public function supports(EntityWorkflow $entityWorkflow, array $options = []): bool
|
||||||
{
|
{
|
||||||
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWork::class;
|
return $entityWorkflow->getRelatedEntityClass() === AccompanyingPeriodWork::class;
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Chill\Migrations\Person;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Schema\Schema;
|
||||||
|
use Doctrine\Migrations\AbstractMigration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add url to SocialWork Evaluation.
|
||||||
|
*/
|
||||||
|
final class Version20220303113855 extends AbstractMigration
|
||||||
|
{
|
||||||
|
public function down(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE chill_person_social_work_evaluation DROP url');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return 'Add url to SocialWork Evaluation';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function up(Schema $schema): void
|
||||||
|
{
|
||||||
|
$this->addSql('ALTER TABLE chill_person_social_work_evaluation ADD url TEXT DEFAULT NULL');
|
||||||
|
$this->addSql("UPDATE chill_person_social_work_evaluation SET url = CASE WHEN title->>'fr' LIKE 'http%' THEN title->>'fr' ELSE null END;");
|
||||||
|
}
|
||||||
|
}
|
@ -124,8 +124,8 @@ address_country_code: Code pays
|
|||||||
|
|
||||||
'Alreay existing person': 'Dossiers déjà encodés'
|
'Alreay existing person': 'Dossiers déjà encodés'
|
||||||
'Add the person': 'Ajouter la personne'
|
'Add the person': 'Ajouter la personne'
|
||||||
'Add the person and create an accompanying period': "Créer la personne & créer une période d'accompagnement"
|
'Add the person and create an accompanying period': "Créer l'usager ET créer une période d'accompagnement"
|
||||||
'Add the person and create a household': "Créer la personne & créer un ménage"
|
'Add the person and create a household': "Créer l'usager' ET créer un ménage"
|
||||||
Show person: Voir le dossier de la personne
|
Show person: Voir le dossier de la personne
|
||||||
'Confirm the creation': 'Confirmer la création'
|
'Confirm the creation': 'Confirmer la création'
|
||||||
'You will create this person': 'Vous allez créer le dossier suivant'
|
'You will create this person': 'Vous allez créer le dossier suivant'
|
||||||
|
@ -46,6 +46,7 @@ User: Utilisateur
|
|||||||
"Associated tasks": "Tâches associées"
|
"Associated tasks": "Tâches associées"
|
||||||
"My tasks": "Mes tâches"
|
"My tasks": "Mes tâches"
|
||||||
"Tasks for this accompanying period": "Tâches pour ce parcours d'accompagnement"
|
"Tasks for this accompanying period": "Tâches pour ce parcours d'accompagnement"
|
||||||
|
"Tasks for {{ name }}": "Tâches pour {{ name }}"
|
||||||
"No description": "Pas de description"
|
"No description": "Pas de description"
|
||||||
"No dates specified": "Dates non spécifiées"
|
"No dates specified": "Dates non spécifiées"
|
||||||
"No one assignee": "Aucune personne assignée"
|
"No one assignee": "Aucune personne assignée"
|
||||||
|
@ -20,6 +20,7 @@ use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
|||||||
use Chill\ThirdPartyBundle\Repository\ThirdPartyACLAwareRepositoryInterface;
|
use Chill\ThirdPartyBundle\Repository\ThirdPartyACLAwareRepositoryInterface;
|
||||||
use Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter;
|
use Chill\ThirdPartyBundle\Security\Voter\ThirdPartyVoter;
|
||||||
use LogicException;
|
use LogicException;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\RequestStack;
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
@ -31,37 +32,39 @@ use function array_merge;
|
|||||||
|
|
||||||
final class ThirdPartyController extends CRUDController
|
final class ThirdPartyController extends CRUDController
|
||||||
{
|
{
|
||||||
/**
|
protected AuthorizationHelper $authorizationHelper;
|
||||||
* @var AuthorizationHelper
|
|
||||||
*/
|
|
||||||
protected $authorizationHelper;
|
|
||||||
|
|
||||||
/**
|
protected PaginatorFactory $paginatorFactory;
|
||||||
* @var PaginatorFactory
|
|
||||||
*/
|
|
||||||
protected $paginatorFactory;
|
|
||||||
|
|
||||||
protected RequestStack $requestStack;
|
protected RequestStack $requestStack;
|
||||||
|
|
||||||
protected ThirdPartyACLAwareRepositoryInterface $thirdPartyACLAwareRepository;
|
protected ThirdPartyACLAwareRepositoryInterface $thirdPartyACLAwareRepository;
|
||||||
|
|
||||||
/**
|
protected TranslatorInterface $translator;
|
||||||
* @var TranslatorInterface
|
|
||||||
*/
|
private bool $askCenter;
|
||||||
protected $translator;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
AuthorizationHelper $authorizationHelper,
|
AuthorizationHelper $authorizationHelper,
|
||||||
TranslatorInterface $translator,
|
TranslatorInterface $translator,
|
||||||
PaginatorFactory $paginatorFactory,
|
PaginatorFactory $paginatorFactory,
|
||||||
RequestStack $requestStack,
|
RequestStack $requestStack,
|
||||||
ThirdPartyACLAwareRepositoryInterface $thirdPartyACLAwareRepository
|
ThirdPartyACLAwareRepositoryInterface $thirdPartyACLAwareRepository,
|
||||||
|
ParameterBagInterface $parameterBag
|
||||||
) {
|
) {
|
||||||
$this->authorizationHelper = $authorizationHelper;
|
$this->authorizationHelper = $authorizationHelper;
|
||||||
$this->translator = $translator;
|
$this->translator = $translator;
|
||||||
$this->paginatorFactory = $paginatorFactory;
|
$this->paginatorFactory = $paginatorFactory;
|
||||||
$this->requestStack = $requestStack;
|
$this->requestStack = $requestStack;
|
||||||
$this->thirdPartyACLAwareRepository = $thirdPartyACLAwareRepository;
|
$this->thirdPartyACLAwareRepository = $thirdPartyACLAwareRepository;
|
||||||
|
$this->askCenter = $parameterBag->get('chill_main')['acl']['form_show_centers'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateTemplateParameter(string $action, $entity, Request $request, array $defaultTemplateParameters = [])
|
||||||
|
{
|
||||||
|
$defaultTemplateParameters['askCenter'] = $this->askCenter;
|
||||||
|
|
||||||
|
return $defaultTemplateParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper
|
protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
<ul class="list-content fa-ul">
|
<ul class="list-content fa-ul">
|
||||||
<li v-if="getProfession.length > 0">
|
<li v-if="getProfession.length > 0">
|
||||||
<i class="fa fa-li fa-id-card"></i>
|
<i class="fa fa-li fa-id-card"></i>
|
||||||
<p><span v-for="p in getProfession" :key="p" class="list-item">{{ p[0].toUpperCase() + p.slice(1).toLowerCase() }}</span></p>
|
<p><span v-for="p in getProfession" :key="p" class="list-item list-professions">{{ p[0].toUpperCase() + p.slice(1).toLowerCase() }}</span></p>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="hasParent">
|
<li v-if="hasParent">
|
||||||
<i class="fa fa-li fa-hand-o-right"></i>
|
<i class="fa fa-li fa-hand-o-right"></i>
|
||||||
@ -61,9 +61,9 @@
|
|||||||
<i class="fa fa-li fa-map-marker"></i>
|
<i class="fa fa-li fa-map-marker"></i>
|
||||||
<address-render-box :address="thirdparty.address" :isMultiline="isMultiline"></address-render-box>
|
<address-render-box :address="thirdparty.address" :isMultiline="isMultiline"></address-render-box>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="thirdparty.phonenumber">
|
<li v-if="thirdparty.telephone">
|
||||||
<i class="fa fa-li fa-mobile"></i>
|
<i class="fa fa-li fa-mobile"></i>
|
||||||
<a :href="'tel: ' + thirdparty.phonenumber">{{ thirdparty.phonenumber }}</a>
|
<a :href="'tel: ' + thirdparty.telephone">{{ thirdparty.telephone }}</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="thirdparty.email">
|
<li v-if="thirdparty.email">
|
||||||
<i class="fa fa-li fa-envelope-o"></i>
|
<i class="fa fa-li fa-envelope-o"></i>
|
||||||
@ -78,9 +78,9 @@
|
|||||||
<i class="fa fa-li fa-map-marker"></i>
|
<i class="fa fa-li fa-map-marker"></i>
|
||||||
<address-render-box :address="thirdparty.address" :isMultiline="isMultiline"></address-render-box>
|
<address-render-box :address="thirdparty.address" :isMultiline="isMultiline"></address-render-box>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="thirdparty.phonenumber">
|
<li v-if="thirdparty.telephone">
|
||||||
<i class="fa fa-li fa-mobile"></i>
|
<i class="fa fa-li fa-mobile"></i>
|
||||||
<a :href="'tel: ' + thirdparty.phonenumber">{{ thirdparty.phonenumber }}</a>
|
<a :href="'tel: ' + thirdparty.telephone">{{ thirdparty.telephone }}</a>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="thirdparty.email">
|
<li v-if="thirdparty.email">
|
||||||
<i class="fa fa-li fa-envelope-o"></i>
|
<i class="fa fa-li fa-envelope-o"></i>
|
||||||
@ -165,7 +165,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-item {
|
.list-professions {
|
||||||
&::after {
|
&::after {
|
||||||
content: " | ";
|
content: " | ";
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@
|
|||||||
<div class="input-group mb-3">
|
<div class="input-group mb-3">
|
||||||
<span class="input-group-text" id="phonenumber"><i class="fa fa-fw fa-phone"></i></span>
|
<span class="input-group-text" id="phonenumber"><i class="fa fa-fw fa-phone"></i></span>
|
||||||
<input class="form-control form-control-lg"
|
<input class="form-control form-control-lg"
|
||||||
v-model="thirdparty.phonenumber"
|
v-model="thirdparty.telephone"
|
||||||
v-bind:placeholder="$t('thirdparty.phonenumber')"
|
v-bind:placeholder="$t('thirdparty.phonenumber')"
|
||||||
v-bind:aria-label="$t('thirdparty.phonenumber')"
|
v-bind:aria-label="$t('thirdparty.phonenumber')"
|
||||||
aria-describedby="phonenumber" />
|
aria-describedby="phonenumber" />
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<h1>
|
<h1>
|
||||||
{{ title_ }}
|
{{ title_ }}
|
||||||
<span class="badge bg-{{ thirdParty.active ? 'success' : 'danger' }} float-end"
|
<span class="badge bg-{{ thirdParty.active ? 'success' : 'danger' }} float-end"
|
||||||
title="{{ (thirdParty.active ? 'shown to users' : 'not shown to users')|trans }}">
|
title="{{ (thirdParty.active ? 'shown to users' : 'not shown to users')|trans }}">
|
||||||
{{ (thirdParty.active ? 'Active' : 'Inactive')|trans }}
|
{{ (thirdParty.active ? 'Active' : 'Inactive')|trans }}
|
||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
@ -123,19 +123,20 @@
|
|||||||
</dd>
|
</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<dt>{{ 'Centers'|trans }}</dt>
|
{% if askCenter %}
|
||||||
<dd>
|
<dt>{{ 'Centers'|trans }}</dt>
|
||||||
{% set centers = thirdParty|chill_resolve_center %}
|
<dd>
|
||||||
{% if centers is iterable %}
|
{% set centers = thirdParty|chill_resolve_center %}
|
||||||
{{ 'The party is visible in those centers'|trans }} :
|
{% if centers is iterable %}
|
||||||
{{ centers|join(', ') }}
|
{{ 'The party is visible in those centers'|trans }} :
|
||||||
{% elseif centers is null %}
|
{{ centers|join(', ') }}
|
||||||
{{ 'The party is not visible in any center'|trans }}
|
{% elseif centers is null %}
|
||||||
{% else %}
|
{{ 'The party is not visible in any center'|trans }}
|
||||||
{{ 'The party is visible in those centers'|trans }} : {{ centers }}
|
{% else %}
|
||||||
{% endif %}
|
{{ 'The party is visible in those centers'|trans }} : {{ centers }}
|
||||||
</dd>
|
{% endif %}
|
||||||
|
</dd>
|
||||||
|
{% endif %}
|
||||||
</dl>
|
</dl>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content_form_actions_delete %}{% endblock %}
|
{% block content_form_actions_delete %}{% endblock %}
|
||||||
|
@ -62,7 +62,7 @@ class ThirdPartyNormalizer implements NormalizerAwareInterface, NormalizerInterf
|
|||||||
}, $thirdParty->getTypesAndCategories()),
|
}, $thirdParty->getTypesAndCategories()),
|
||||||
'profession' => $this->normalizer->normalize($thirdParty->getProfession(), $format, $context),
|
'profession' => $this->normalizer->normalize($thirdParty->getProfession(), $format, $context),
|
||||||
'address' => $this->normalizer->normalize($thirdParty->getAddress(), $format, ['address_rendering' => 'short']),
|
'address' => $this->normalizer->normalize($thirdParty->getAddress(), $format, ['address_rendering' => 'short']),
|
||||||
'phonenumber' => $this->normalizer->normalize($thirdParty->getTelephone()),
|
'telephone' => $this->normalizer->normalize($thirdParty->getTelephone()),
|
||||||
'email' => $thirdParty->getEmail(),
|
'email' => $thirdParty->getEmail(),
|
||||||
'isChild' => $thirdParty->isChild(),
|
'isChild' => $thirdParty->isChild(),
|
||||||
'parent' => $this->normalizer->normalize($thirdParty->getParent(), $format, $context),
|
'parent' => $this->normalizer->normalize($thirdParty->getParent(), $format, $context),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user