Merge branch 'master' into 102_activites_annexes

This commit is contained in:
Mathieu Jaumotte 2021-08-17 12:59:26 +02:00
commit 65e72b05c5
143 changed files with 7439 additions and 2533 deletions

View File

@ -20,7 +20,8 @@
"Chill\\ReportBundle\\": "src/Bundle/ChillReportBundle",
"Chill\\TaskBundle\\": "src/Bundle/ChillTaskBundle",
"Chill\\ThirdPartyBundle\\": "src/Bundle/ChillThirdPartyBundle",
"Chill\\AsideActivityBundle\\": "src/Bundle/ChillAsideActivityBundle/src"
"Chill\\AsideActivityBundle\\": "src/Bundle/ChillAsideActivityBundle/src",
"Chill\\DocGeneratorBundle\\": "src/Bundle/ChillDocGeneratorBundle"
}
},
"autoload-dev": {
@ -90,4 +91,4 @@
"config": {
"bin-dir": "bin"
}
}
}

View File

@ -1,14 +1,105 @@
// Access to Bootstrap variables and mixins
@import '~ChillMainAssets/module/bootstrap/shared';
//@import '~ChillMainSass/custom/mixins/entity';
// activity creation first step: select type page
div.new-activity-select-type {
div.activity-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
//.chill-entity.chill-entity__activity-reason {
// @include entity($chill-pink, white);
//}
div.bloc {
width: 200px;
align-self: flex-end;
height: 140px;
display: flex;
justify-content: center;
align-items: center;
}
}
}
.activity {
//color: $chill-green;
// exceptions for flex-table in list-records
div.activity-list {
div.flex-table {
div.item-bloc {
div.item-row.main {
div.item-col {
&:first-child {
flex-basis: 27%;
}
ul.list-content {
li.social-issues, li.social-actions {
.badge-primary {
font-variant: small-caps;
font-weight: bold;
font-size: 88%;
margin-bottom: 0.2em;
}
}
li.social-issues .badge-primary {
background-color: $orange;
}
li.social-actions .badge-primary {
background-color: $green;
}
}
}
}
div.item-row.details {
flex-direction: row;
& > div.item-col {
justify-content: flex-start;
align-self: center;
&:nth-child(1) {
flex-grow: 1; flex-shrink: 0; flex-basis: 30%;
}
&:nth-child(2) {
flex-grow: 0; flex-shrink: 1; flex-basis: 70%;
}
&:only-child {
flex-grow: 0; flex-shrink: 0; flex-basis: 100%;
& > div.concerned-groups {
flex-grow: 0; flex-shrink: 0; flex-basis: 100%;
display: flex;
flex-direction: column; // TODO pas fini
div.group {
flex-grow: 1; flex-shrink: 0; flex-basis: 30%;
h4 {}
ul.list-content {
li {
display: inline;
}
}
}
}
}
}
div.concerned-groups {
font-size: 85%;
h4 {
text-transform: uppercase;
}
}
}
ul.list-content {
list-style-type: none;
padding-left: 1em;
margin: 0 0;
li {
margin-bottom: 0.2em;
}
}
}
div.duration {
font-size: smaller;
padding-left: 1em;
margin-top: 1em;
}
}
}
// exceptions for flex-bloc in concerned-groups
@ -22,7 +113,7 @@ div.flex-bloc.concerned-groups {
li {
margin-bottom: 0.2em;
a {
color: white;
color: $white;
cursor: pointer;
&:hover {
color: #ffffffab;
@ -36,97 +127,3 @@ div.flex-bloc.concerned-groups {
}
}
// exceptions for flex-table in list-records
div.flex-table.list-records {
div.item-bloc {
div.item-row.main {
div.item-col {
&:first-child {
flex-basis: 27%;
}
ul.list-content {
li.social-issues, li.social-actions {
.badge-primary {
font-variant: small-caps;
font-weight: bold;
font-size: 88%;
margin-bottom: 0.2em;
}
}
li.social-issues .badge-primary {
background-color: var(--chill-orange);
}
li.social-actions .badge-primary {
background-color: var(--chill-green);
}
}
}
}
div.item-row.details {
flex-direction: row;
& > div.item-col {
justify-content: flex-start;
align-self: center;
&:nth-child(1) {
flex-grow: 1; flex-shrink: 0; flex-basis: 30%;
}
&:nth-child(2) {
flex-grow: 0; flex-shrink: 1; flex-basis: 70%;
}
&:only-child {
flex-grow: 0; flex-shrink: 0; flex-basis: 100%;
& > div.concerned-groups {
flex-grow: 0; flex-shrink: 0; flex-basis: 100%;
display: flex;
flex-direction: column; // TODO pas fini
div.group {
flex-grow: 1; flex-shrink: 0; flex-basis: 30%;
h4 {}
ul.list-content {
li {
display: inline;
}
}
}
}
}
}
div.concerned-groups {
font-size: 85%;
h4 {
text-transform: uppercase;
}
}
}
ul.list-content {
list-style-type: none;
padding-left: 1em;
margin: 0 0;
li {
margin-bottom: 0.2em;
}
}
}
div.duration {
font-size: smaller;
padding-left: 1em;
margin-top: 1em;
}
}
div.activity-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
div.bloc {
width: 200px;
align-self: flex-end;
height: 140px;
display: flex;
justify-content: center;
align-items: center;
}
}

View File

@ -60,7 +60,10 @@
<li>
<a href="{{ _self.href(bloc.path, bloc.key, item.id) }}">
<span class="badge bg-primary">
{{ item|chill_entity_render_box({'render': 'raw'}) }}
{{ item|chill_entity_render_box({
'render': 'raw',
'addAltNames': false
}) }}
</span>
</a>
</li>
@ -72,7 +75,7 @@
{% endfor %}
</div>
{% endif %}
{% if (with_display == 'row') %}
<div class="concerned-groups">
{% for bloc in blocs %}
@ -84,7 +87,10 @@
<li>
<a href="{{ _self.href(bloc.path, bloc.key, item.id) }}">
<span class="badge bg-primary">
{{ item|chill_entity_render_box({'only_denomination': true}) }}
{{ item|chill_entity_render_box({
'render': 'raw',
'addAltNames': false
}) }}
</span>
</a>
</li>

View File

@ -1,184 +1,163 @@
{% set person_id = null %}
{% if person %}
{% set person_id = person.id %}
{% endif %}
<div class="activity-list context-{{ context }}">
{% set accompanying_course_id = null %}
{% if accompanyingCourse %}
{% set accompanying_course_id = accompanyingCourse.id %}
{% endif %}
{% if activities|length == 0 %}
<p class="chill-no-data-statement">
{{ "There isn't any activities."|trans }}
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}" class="btn btn-sm btn-create"></a>
</p>
<h2>{{ 'Activity list' |trans }}</h2>
{% else %}
<div class="flex-table">
{% for activity in activities %}
{% set t = activity.type %}
<div class="item-bloc">
<div class="item-row main">
<div class="item-col">
{% if activities|length == 0 %}
<p class="chill-no-data-statement">
{{ "There isn't any activities."|trans }}
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}" class="btn btn-create button-small"></a>
</p>
{% else %}
<div class="flex-table list-records context-{{ context }}">
{% for activity in activities %}
{% set t = activity.type %}
<div class="item-bloc">
<div class="item-row main">
<div class="item-col">
{% if activity.date %}
<h3>{{ activity.date|format_date('long') }}</h3>
{% endif %}
<div class="duration">
{% if t.durationTimeVisible > 0 %}
<p>
<i class="fa fa-fw fa-hourglass-end"></i>
{{ activity.durationTime|date('H:i') }}
</p>
{% endif %}
{% if activity.travelTime and t.travelTimeVisible %}
<p>
<i class="fa fa-fw fa-car"></i>
{{ activity.travelTime|date('H:i') }}
</p>
{% endif %}
</div>
{% if context == 'person' and activity.accompanyingPeriod is not empty %}
<div class="accompanyingPeriodLink" style="margin-top: 1rem">
<a href="{{ chill_path_add_return_path(
"chill_person_accompanying_course_index",
{ 'accompanying_period_id': activity.accompanyingPeriod.id }
) }}">
<i class="fa fa-random"></i>
{{ activity.accompanyingPeriod.id }}
</a>
</div>
{% endif %}
</div>
<div class="item-col">
<ul class="list-content">
{% if activity.user and t.userVisible %}
<li>
<b>{{ 'by'|trans }}{{ activity.user.usernameCanonical }}</b>
</li>
{% endif %}
<li>
<b>{{ activity.type.name | localize_translatable_string }}</b>
{% if activity.attendee is not null and t.attendeeVisible %}
{% if activity.attendee %}
{{ '→ ' ~ 'present'|trans|capitalize }}
{% else %}
{{ '→ ' ~ 'not present'|trans|capitalize }}
{% endif %}
{% if activity.date %}
<h3>{{ activity.date|format_date('long') }}</h3>
{% endif %}
</li>
<li>
<b>{{ 'location'|trans ~ ': ' }}</b>
Domicile de l'usager
{#
{% if activity.location %}{{ activity.location }}{% endif %}
#}
</li>
<div class="duration">
{% if t.durationTimeVisible > 0 %}
<p>
<i class="fa fa-fw fa-hourglass-end"></i>
{{ activity.durationTime|date('H:i') }}
</p>
{% endif %}
{% if activity.travelTime and t.travelTimeVisible %}
<p>
<i class="fa fa-fw fa-car"></i>
{{ activity.travelTime|date('H:i') }}
</p>
{% endif %}
</div>
{%- if t.reasonsVisible -%}
<li>
{%- if activity.reasons is empty -%}
<span class="chill-no-data-statement">{{ 'No reason associated'|trans }}</span>
{%- else -%}
{% for r in activity.reasons %}
{{ r|chill_entity_render_box }}
{% endfor %}
{%- endif -%}
</li>
{% endif %}
{% if context == 'person' and activity.accompanyingPeriod is not empty %}
<div class="accompanyingPeriodLink" style="margin-top: 1rem">
<a href="{{ chill_path_add_return_path(
"chill_person_accompanying_course_index",
{ 'accompanying_period_id': activity.accompanyingPeriod.id }
) }}">
<i class="fa fa-random"></i>
{{ activity.accompanyingPeriod.id }}
</a>
</div>
{% endif %}
{%- if t.socialIssuesVisible %}
<li class="social-issues">
{%- if activity.socialIssues is empty -%}
<span class="chill-no-data-statement">{{ 'No social issues associated'|trans }}</span>
{%- else -%}
{% for r in activity.socialIssues %}
{{ r|chill_entity_render_box }}
{% endfor %}
{%- endif -%}
</li>
{% endif %}
</div>
<div class="item-col">
<ul class="list-content">
{% if activity.user and t.userVisible %}
<li>
<b>{{ 'by'|trans }}{{ activity.user.usernameCanonical }}</b>
</li>
{% endif %}
{%- if t.socialActionsVisible -%}
<li class="social-actions">
{%- if activity.socialActions is empty -%}
<span class="chill-no-data-statement">{{ 'No social actions associated'|trans }}</span>
{%- else -%}
{% for r in activity.socialActions %}
<span class="badge bg-primary">{{ r.title|localize_translatable_string }}</span>
{% endfor %}
{%- endif -%}
</li>
{% endif %}
<li>
<b>{{ activity.type.name | localize_translatable_string }}</b>
{% if activity.attendee is not null and t.attendeeVisible %}
{% if activity.attendee %}
{{ '→ ' ~ 'present'|trans|capitalize }}
{% else %}
{{ '→ ' ~ 'not present'|trans|capitalize }}
{% endif %}
{% endif %}
</li>
<li>
<b>{{ 'location'|trans ~ ': ' }}</b>
Domicile de l'usager
{#
{% if activity.location %}{{ activity.location }}{% endif %}
#}
</li>
{%- if t.reasonsVisible -%}
<li>
{%- if activity.reasons is not empty -%}
{% for r in activity.reasons %}
{{ r|chill_entity_render_box }}
{% endfor %}
{%- endif -%}
</li>
{% endif %}
{%- if t.socialIssuesVisible %}
<li class="social-issues">
{%- if activity.socialIssues is not empty -%}
{% for r in activity.socialIssues %}
{{ r|chill_entity_render_box }}
{% endfor %}
{%- endif -%}
</li>
{% endif %}
{%- if t.socialActionsVisible -%}
<li class="social-actions">
{%- if activity.socialActions is not empty -%}
{% for r in activity.socialActions %}
<span class="badge bg-primary">{{ r.title|localize_translatable_string }}</span>
{% endfor %}
{%- endif -%}
</li>
{% endif %}
</ul>
<ul class="record_actions">
<li>
<a href="{{ path('chill_activity_activity_show', { 'id': activity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}" class="btn btn-show "></a>
</li>
{# TOOD
</ul>
<ul class="record_actions">
<li>
<a href="{{ path('chill_activity_activity_show', { 'id': activity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}"
class="btn btn-sm btn-show "></a>
</li>
{# TOOD
{% if is_granted('CHILL_ACTIVITY_UPDATE', activity) %}
#}
<li>
<a href="{{ path('chill_activity_activity_edit', { 'id': activity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}" class="btn btn-update "></a>
</li>
{# TOOD
#}
<li>
<a href="{{ path('chill_activity_activity_edit', { 'id': activity.id, 'person_id': person_id, 'accompanying_period_id': accompanying_course_id }) }}"
class="btn btn-sm btn-update "></a>
</li>
{# TOOD
{% endif %}
{% if is_granted('CHILL_ACTIVITY_DELETE', activity) %}
#}
<li>
<a href="{{ path('chill_activity_activity_delete', { 'id': activity.id, 'person_id' : person_id, 'accompanying_period_id': accompanying_course_id } ) }}" class="btn btn-delete "></a>
</li>
{#
{% endif %}
#}
</ul>
#}
<li>
<a href="{{ path('chill_activity_activity_delete', { 'id': activity.id, 'person_id' : person_id, 'accompanying_period_id': accompanying_course_id } ) }}"
class="btn btn-sm btn-delete "></a>
</li>
{#
{% endif %}
#}
</ul>
</div>
</div>
{% if activity.comment.comment is not empty
or activity.persons|length > 0
or activity.thirdParties|length > 0
or activity.users|length > 0
%}
<div class="item-row details">
<div class="item-col">
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {'context': context, 'with_display': 'row', 'entity': activity } %}
</div>
{% if activity.comment.comment is not empty %}
<div class="item-col">
{{ activity.comment|chill_entity_render_box({
'disable_markdown': false,
'limit_lines': 3,
'metadata': false,
}) }}
</div>
{% endif %}
</div>
{% endif %}
</div>
</div>
{%
if activity.comment.comment is not empty
or activity.persons|length > 0
or activity.thirdParties|length > 0
or activity.users|length > 0
%}
<div class="item-row details">
<div class="item-col">
{% include 'ChillActivityBundle:Activity:concernedGroups.html.twig' with {'context': context, 'with_display': 'row', 'entity': activity } %}
</div>
{% if activity.comment.comment is not empty %}
<div class="item-col comment">
{{ activity.comment|chill_entity_render_box( { 'limit_lines': 3, 'metadata': false } ) }}
</div>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
{% endif %}
{% endif %}
{% if context != 'person' %}
{# TODO set this condition in configuration #}
<ul class="record_actions">
<li>
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}" class="btn btn-create">
{{ 'Add a new activity' | trans }}
</a>
</li>
</ul>
{% endif %}
</div>

View File

@ -5,5 +5,27 @@
{% block title %}{{ 'Activity list' |trans }}{% endblock title %}
{% block content %}
{% set person_id = null %}
{% if person %}
{% set person_id = person.id %}
{% endif %}
{% set accompanying_course_id = null %}
{% if accompanyingCourse %}
{% set accompanying_course_id = accompanyingCourse.id %}
{% endif %}
<h1>{{ 'Activity list' |trans }}</h1>
{% include 'ChillActivityBundle:Activity:list.html.twig' with {'context': 'accompanyingCourse'} %}
<ul class="record_actions">
<li>
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}" class="btn btn-create">
{{ 'Add a new activity' | trans }}
</a>
</li>
</ul>
{% endblock %}

View File

@ -21,5 +21,27 @@
{% block title %}{{ 'Activity list' |trans }}{% endblock title %}
{% block personcontent %}
{% set person_id = null %}
{% if person %}
{% set person_id = person.id %}
{% endif %}
{% set accompanying_course_id = null %}
{% if accompanyingCourse %}
{% set accompanying_course_id = accompanyingCourse.id %}
{% endif %}
<h1>{{ 'Activity list' |trans }}</h1>
{% include 'ChillActivityBundle:Activity:list.html.twig' with {'context': 'person'} %}
<ul class="record_actions">
<li>
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}"
class="btn btn-create disabled" tabindex="-1" role="button" aria-disabled="true">{{ 'Add a new activity' | trans }}
</a>
</li>
</ul>
{% endblock %}

View File

@ -1,28 +1,30 @@
<h2 class="chill-red">{{ "Activity creation"|trans }}</h2>
<div class="new-activity-select-type">
<h2 class="chill-red">{{ "Activity creation"|trans }}</h2>
{# TODO: refaire l'html css des tuilles #}
{# TODO: refaire l'html css des tuilles #}
{% for row in data %}
<h3>{{ row.activityTypeCategory.name|localize_translatable_string }}</h3>
<div class="activity-row">
{% for activityType in row.activityTypes %}
{% for row in data %}
<h3>{{ row.activityTypeCategory.name|localize_translatable_string }}</h3>
<div class="activity-row">
{% for activityType in row.activityTypes %}
{% set person_id = null %}
{% if person %}
{% set person_id = person.id %}
{% endif %}
{% set person_id = null %}
{% if person %}
{% set person_id = person.id %}
{% endif %}
{% set accompanying_course_id = null %}
{% if accompanyingCourse %}
{% set accompanying_course_id = accompanyingCourse.id %}
{% endif %}
{% set accompanying_course_id = null %}
{% if accompanyingCourse %}
{% set accompanying_course_id = accompanyingCourse.id %}
{% endif %}
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'activityType_id': activityType.id, 'accompanying_period_id': accompanying_course_id }) }}">
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'activityType_id': activityType.id, 'accompanying_period_id': accompanying_course_id }) }}">
<div class="bloc btn btn-primary btn-lg btn-block">
{{ activityType.name|localize_translatable_string }}
</div>
</a>
{% endfor %}
</div>
{% endfor %}
<div class="bloc btn btn-primary btn-lg btn-block">
{{ activityType.name|localize_translatable_string }}
</div>
</a>
{% endfor %}
</div>
{% endfor %}
</div>

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Application\Migrations;
namespace Chill\Migrations\AsideActivity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Application\Migrations;
namespace Chill\Migrations\AsideActivity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Application\Migrations;
namespace Chill\Migrations\AsideActivity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace Application\Migrations;
namespace Chill\Migrations\AsideActivity;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
@ -43,6 +43,6 @@ final class Version20210810084456 extends AbstractMigration
$this->addSql('COMMENT ON COLUMN chill_asideactivity.AsideActivity.createdat IS \'(DC2Type:datetime_immutable)\'');
$this->addSql('COMMENT ON COLUMN chill_asideactivity.AsideActivity.updatedat IS \'(DC2Type:datetime_immutable)\'');
$this->addSql('COMMENT ON COLUMN chill_asideactivity.AsideActivity.date IS \'(DC2Type:datetime_immutable)\'');
}
}

View File

@ -0,0 +1,11 @@
composer.lock
vendor/*
parameters.yml
*~
*.DS_Store
*.sass-cache
Resources/node_modules/
Tests/Fixtures/App/app/config/parameters.yml
/nbproject/private/
Resources/test/Fixtures/App/bootstrap.php.cache

View File

@ -0,0 +1,9 @@
<?php
namespace Chill\DocGeneratorBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class ChillDocGeneratorBundle extends Bundle
{
}

View File

@ -0,0 +1,29 @@
<?php
namespace Chill\DocGeneratorBundle\Context;
/**
* Interface for context for for document generation
*/
interface DocGeneratorContextInterface
{
/**
* has form
*/
public function hasForm(): bool;
/**
* Generate the form that display
*/
public function getForm($entity);
/**
* True of false which entity supports
*/
public function supports(string $entityClass): bool;
/**
* Get the data that will be injected to the generated document
*/
public function getData($entity): array;
}

View File

@ -0,0 +1,57 @@
<?php
namespace Chill\DocGeneratorBundle\Context;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
/**
* Context that display a form to select a member of a houseHold
*/
class HouseholdMemberSelectionContext implements DocGeneratorContextInterface
{
/**
* has form
*/
public function hasForm(): bool {
return true;
}
/**
* Generate the form that display
*/
public function getForm($entity) {
// TODO Get FormFactory and create a form
// access to the house hold for the AccompanyingPeriod pr the SocialAction
// and configure the form to select member of the family
}
/**
* True of false which entity supports
*/
public function supports(string $entityClass): bool {
return
($entityClass == AccompanyingPeriod::class) ||
($entityClass == SocialAction::class);
}
/**
* Get the data that will be injected to the generated document
*/
public function getData($entity): array {
$ret = [];
if(get_class($entity) == AccompanyingPeriod::class) {
// TODO mettre ça dans un service
$ret = ['AccompanyingPeriod' => $entity];
} elseif(get_class($entity) == SocialAction::class) {
$ret = ['SocialAction' => $entity];
}
// TODO AJOUTER LES DONNES DU FORMULAIRE
return $ret;
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace Chill\DocGeneratorBundle\Controller;
use Chill\MainBundle\CRUD\Controller\CRUDController;
class AdminDocGeneratorTemplateController extends CRUDController
{
}

View File

@ -0,0 +1,76 @@
<?php
namespace Chill\DocGeneratorBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\HeaderUtils;
use Symfony\Component\Routing\Annotation\Route;
use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlOpenstackGenerator;
use PhpOffice\PhpWord\TemplateProcessor;
/**
* Class DocGeneratorController
*
* @package Chill\DocGenerator\Controller
*/
class DocGeneratorController extends AbstractController
{
/**
* @Route(
* "{_locale}/doc/gen/test",
* name="chill_docgenerator_test"
* )
*
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function testAction()
{
return (new Response())
->setContent('Test');
}
/**
* @Route(
* "{_locale}/doc/gen/test",
* name="chill_docgenerator_test"
* )
*
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function getDoc(Request $request, TempUrlOpenstackGenerator $tempUrlGenerator)
{
$p = $tempUrlGenerator->generate(
'GET',
'FORMULAIRE_AEB.docx',
$request->query->has('expires_delay') ? $request->query->getInt('expires_delay', 0) : null
);
$tmpfname = tempnam(sys_get_temp_dir(), 'DOC_TEMPLATE');
file_put_contents($tmpfname, file_get_contents($p->{"url"}));
$templateProcessor = new TemplateProcessor($tmpfname);
$templateProcessor->setValues(array('firstname' => 'John', 'lastname' => 'Doe'));
$tmpfname2 = tempnam(sys_get_temp_dir(), 'DOC_GENERATED');
$templateProcessor->saveAs($tmpfname2);
unlink($tmpfname);
$fileContent = fopen($tmpfname2, 'r'); // the generated file content
$response = new Response(fread($fileContent, filesize($tmpfname2)));
$disposition = HeaderUtils::makeDisposition(
HeaderUtils::DISPOSITION_ATTACHMENT,
'foo.docx'
);
$response->headers->set('Content-Disposition', $disposition);
unlink($tmpfname2);
return $response;
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace Chill\DocGeneratorBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
/**
* Load DocGeneratorTemplate
*
* @author Champs-Libres Coop
*/
class LoadDocGeneratorTemplate extends AbstractFixture
{
public function load(ObjectManager $manager)
{
$templates = [
[
'name' => ['fr' => 'FORMULAIRE AEB'],
'desc' => 'stocké sur openstack comedienbe',
'file' => 'FORMULAIRE_AEB.docx',
'context' => 'Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext',
'entities' => ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction'],
], [
'name' => ['fr' => 'AIDE ALIMENTAIRE'],
'desc' => 'stocké sur openstack comedienbe',
'file' => 'AIDE_ALIMENTAIRE.docx',
'context' => 'Chill\DocGeneratorBundle\Context\HouseholdMemberSelectionContext',
'entities' => ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction'],
],
];
foreach ($templates as $template) {
print('Adding doc generator templates '.$template['file'].")\n");
$newTemplate = (new DocGeneratorTemplate())
->setName($template['name'])
->setDescription($template['desc'])
->setFile($template['file'])
->setContext($template['context'])
->setEntities($template['entities'])
;
$manager->persist($newTemplate);
$manager->flush();
}
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace Chill\DocGeneratorBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
/**
* This is the class that loads and manages your bundle configuration.
*
* @link http://symfony.com/doc/current/cookbook/bundles/extension.html
*/
class ChillDocGeneratorExtension extends Extension implements PrependExtensionInterface
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
$loader->load('services/controller.yml');
$loader->load('services/fixtures.yml');
$loader->load('services/form.yml');
}
public function prepend(ContainerBuilder $container)
{
$this->preprendRoutes($container);
$this->prependCruds($container);
}
protected function preprendRoutes(ContainerBuilder $container)
{
$container->prependExtensionConfig('chill_main', array(
'routing' => array(
'resources' => array(
'@ChillDocGeneratorBundle/Resources/config/routes.yml'
)
)
));
}
/**
* @param ContainerBuilder $container
*/
protected function prependCruds(ContainerBuilder $container)
{
$container->prependExtensionConfig('chill_main', [
'cruds' => [
[
'class' => \Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate::class,
'name' => 'docgen_template',
'base_path' => '/admin/docgen/template',
'form_class' => \Chill\DocGeneratorBundle\Form\DocGeneratorTemplateType::class,
'controller' => \Chill\DocGeneratorBundle\Controller\AdminDocGeneratorTemplateController::class,
'actions' => [
'index' => [
'template' => '@ChillDocGenerator/Admin/DocGeneratorTemplate/index.html.twig',
'role' => 'ROLE_ADMIN'
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillDocGenerator/Admin/DocGeneratorTemplate/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillDocGenerator/Admin/DocGeneratorTemplate/edit.html.twig',
]
]
]
]
]);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace Chill\DocGeneratorBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* This is the class that validates and merges configuration from your app/config files.
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/configuration.html}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('chill_calendar');
$rootNode = $treeBuilder->getRootNode('chill_calendar');
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for
// more information on that topic.
return $treeBuilder;
}
}

View File

@ -0,0 +1,123 @@
<?php
namespace Chill\DocGeneratorBundle\Entity;
use Chill\DocGeneratorBundle\Repository\DocGeneratorTemplateRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=DocGeneratorTemplateRepository::class)
* @ORM\Table(name="chill_docgen_template")
*/
class DocGeneratorTemplate
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private int $id;
/**
* @ORM\Column(type="json_array")
*/
private array $name = [];
/**
* @ORM\Column(type="text", nullable=true)
*/
private string $description;
/**
* @ORM\Column(type="simple_array")
*
* Class name of the entities for which this template can be used
*
* so if $entities = ['Chill\PersonBundle\Entity\AccompanyingPeriod', 'Chill\PersonBundle\Entity\SocialWork\SocialAction']
* this template can be selected for an AccompanyingPeriod or a SocialAction
*/
private array $entities = [];
/**
* @ORM\Column(type="string", length=255)
*
* Class name of the context to use
*
* so if $context = ''
* this template will use '' as context
*/
private string $context;
/**
* @ORM\Column(type="string", length=255)
*/
private string $file;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?array
{
return $this->name;
}
public function setName(array $name): self
{
$this->name = $name;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getFile(): ?string
{
return $this->file;
}
public function setFile(string $file): self
{
$this->file = $file;
return $this;
}
public function getEntities(): ?array
{
return $this->entities;
}
public function setEntities(array $entities): self
{
$this->entities = $entities;
return $this;
}
public function getContext(): ?string
{
return $this->context;
}
public function setContext(string $context): self
{
$this->context = $context;
return $this;
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace Chill\DocGeneratorBundle\Form;
use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
class DocGeneratorTemplateType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TranslatableStringFormType::class, [
'label' => 'Nom'
])
->add('description')
->add('file')
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', DocGeneratorTemplate::class)
;
}
}

View File

@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.

View File

@ -0,0 +1,5 @@
Doc generator bundle
====================
This bundle generates documents (from templates)

View File

@ -0,0 +1,21 @@
<?php
namespace Chill\DocGeneratorBundle\Repository;
use App\Entity\DocGeneratorTemplate;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method DocGeneratorTemplate|null find($id, $lockMode = null, $lockVersion = null)
* @method DocGeneratorTemplate|null findOneBy(array $criteria, array $orderBy = null)
* @method DocGeneratorTemplate[] findAll()
* @method DocGeneratorTemplate[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class DocGeneratorTemplateRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, DocGeneratorTemplate::class);
}
}

View File

@ -0,0 +1,3 @@
chill_docgen_controllers:
resource: '../../Controller/'
type: annotation

View File

@ -0,0 +1,8 @@
---
services:
Chill\DocGeneratorBundle\Repository\:
autowire: true
resource: '../../Repository/'
tags:
- { name: 'doctrine.repository_service' }

View File

@ -0,0 +1,5 @@
services:
Chill\DocGeneratorBundle\Controller\:
autowire: true
resource: '../../../Controller'
tags: ['controller.service_arguments']

View File

@ -0,0 +1,6 @@
---
services:
Chill\DocGeneratorBundle\DataFixtures\ORM\:
autowire: true
resource: ../../DataFixtures/ORM
tags: [ 'doctrine.fixture.orm' ]

View File

@ -0,0 +1,2 @@
---
services:

View File

@ -0,0 +1,12 @@
{% extends '@ChillPerson/Admin/layout.html.twig' %}
{% block title %}
{% include('@ChillMain/CRUD/_edit_title.html.twig') %}
{% endblock %}
{% block layout_wvm_content %}
{% embed '@ChillMain/CRUD/_edit_content.html.twig' %}
{% block content_form_actions_view %}{% endblock %}
{% block content_form_actions_save_and_show %}{% endblock %}
{% endembed %}
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends '@ChillPerson/Admin/layout.html.twig' %}
{% block layout_wvm_content %}
{% embed '@ChillMain/CRUD/_index.html.twig' %}
{% block table_entities_thead_tr %}
<th>{{ 'Title'|trans }}</th>
<th>{{ 'File'|trans }}</th>
{% endblock %}
{% block table_entities_tbody %}
{% for entity in entities %}
<tr>
<td>{{ entity.name | localize_translatable_string }}</td>
<td>{{ entity.file }}</td>
</tr>
{% endfor %}
{% endblock %}
{% endembed %}
{% endblock %}

View File

@ -0,0 +1,11 @@
{% extends '@ChillPerson/Admin/layout.html.twig' %}
{% block title %}
{% include('@ChillMain/CRUD/_new_title.html.twig') %}
{% endblock %}
{% block layout_wvm_content %}
{% embed '@ChillMain/CRUD/_new_content.html.twig' %}
{% block content_form_actions_save_and_show %}{% endblock %}
{% endembed %}
{% endblock %}

View File

@ -0,0 +1,6 @@
// this file loads all assets from the Chill DocGenerator bundle
module.exports = function(encore, entries) {
encore.addAliases({
ChillDocGeneratorAssets: __dirname + '/Resources/public'
});
};

View File

@ -0,0 +1,30 @@
{
"name": "chill-project/docgen",
"description": "This bundle extends chill for generation of documents",
"type": "symfony-bundle",
"license": "AGPL-3.0-or-later",
"keywords" : ["chill", "social work"],
"homepage" : "hhttps://gitlab.com/Chill-Projet/chill-bundles/",
"autoload": {
"psr-4": { "Chill\\DocGeneratorBundle\\": "" }
},
"autoload-dev": {
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
},
"authors": [
{
"name": "Champs-Libres",
"email": "info@champs-libres.coop"
}
],
"require": {
},
"require-dev": {
},
"extra": {
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
"symfony-app-dir": "Test/Fixtures/App/app/"
},
"minimum-stability": "dev",
"prefer-stable": true
}

View File

@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
namespace Chill\Migrations\DocGenerator;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Creation of table for storing DocGenTemplate
*/
final class Version20210805162522 extends AbstractMigration
{
public function getDescription(): string
{
return 'Creation of table for storing DocGenTemplate';
}
public function up(Schema $schema): void
{
$this->addSql('CREATE SEQUENCE chill_docgen_template_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE chill_docgen_template (id INT NOT NULL, name JSON NOT NULL, description TEXT DEFAULT NULL, file VARCHAR(255) NOT NULL, PRIMARY KEY(id))');
}
public function down(Schema $schema): void
{
$this->addSql('DROP SEQUENCE chill_docgen_template_id_seq CASCADE');
$this->addSql('DROP TABLE chill_docgen_template');
}
}

View File

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Chill\Migrations\DocGenerator;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Add entities and context fields to DocGenTemplate
*/
final class Version20210812214310 extends AbstractMigration
{
public function getDescription(): string
{
return 'Add entities and context fields to DocGenTemplate';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_docgen_template ADD entities TEXT');
$this->addSql('ALTER TABLE chill_docgen_template ADD context VARCHAR(255)');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.entities IS \'(DC2Type:simple_array)\'');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.name IS \'(DC2Type:json_array)\'');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE chill_docgen_template DROP entities');
$this->addSql('ALTER TABLE chill_docgen_template DROP context');
$this->addSql('COMMENT ON COLUMN chill_docgen_template.name IS NULL');
}
}

View File

@ -32,9 +32,8 @@ use Chill\MainBundle\Doctrine\DQL\JsonAggregate;
use Chill\MainBundle\Doctrine\DQL\JsonbExistsInArray;
use Chill\MainBundle\Doctrine\DQL\Similarity;
use Chill\MainBundle\Doctrine\DQL\OverlapsI;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
use Chill\MainBundle\Doctrine\DQL\Replace;
use Chill\MainBundle\Doctrine\ORM\Hydration\FlatHierarchyEntityHydrator;
use Chill\MainBundle\Doctrine\Type\NativeDateIntervalType;
use Chill\MainBundle\Doctrine\Type\PointType;
use Symfony\Component\HttpFoundation\Request;
@ -186,6 +185,9 @@ class ChillMainExtension extends Extension implements PrependExtensionInterface,
'OVERLAPSI' => OverlapsI::class,
],
],
'hydrators' => [
'chill_flat_hierarchy_list' => FlatHierarchyEntityHydrator::class,
],
],
],
);

View File

@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace Chill\MainBundle\Doctrine\ORM\Hydration;
use Doctrine\ORM\Internal\Hydration\ObjectHydrator;
use Generator;
final class FlatHierarchyEntityHydrator extends ObjectHydrator
{
public const LIST = 'chill_flat_hierarchy_list';
protected function hydrateAllData()
{
return array_values(iterator_to_array($this->flatListGenerator($this->buildChildrenHashmap(parent::hydrateAllData()))));
}
private function flatListGenerator(array $hashMap, ?object $parent = null): Generator
{
$parent = null === $parent ? null : spl_object_id($parent);
$hashMap += [$parent => []];
foreach ($hashMap[$parent] as $node) {
yield spl_object_id($node) => $node;
yield from $this->flatListGenerator($hashMap, $node);
}
}
private function buildChildrenHashmap(array $nodes): array
{
return array_reduce(
$nodes,
static function (array $collect, $node): array {
$parentId = (null === $parent = $node->getParent()) ?
null :
spl_object_id($parent);
$collect[$parentId][] = $node;
return $collect;
},
[]
);
}
}

View File

@ -4,23 +4,153 @@
// Chill mixins
@import './scss/mixins';
// Chill buttons
@import './scss/buttons';
// Chill forms
@import './scss/forms';
// Chill record_actions
@import './scss/record_actions';
// Chill entity render box system
@import './scss/render_box';
// Chill flex responsive table/block presentation
@import './scss/flex_table';
/*
* Specific rules
* BASE LAYOUT POSITION
*/
.custom_field_no_data,
.chill-no-data-statement {
font-style: italic;
body {
display: flex;
flex-direction: column;
min-height: 100vh;
footer {
margin-top: auto;
}
}
header {
nav.navbar {
padding: 0;
a.navbar-brand img {
height: 50px;
margin: 8px 0;
}
div.navbar-collapse {
float: right;
}
ul.navbar-nav {
display: flex;
align-items: stretch;
li.nav-item {
display: flex;
&.btn {
padding-top: 0;
padding-bottom: 0;
}
& > a {
align-self: center;
}
form.form-inline {
align-self: center;
display: flex;
input.form-control {
align-self: center;
height: 32px;
}
}
}
}
div.dropdown-menu {
margin: 0;
padding: 0;
border-radius: 0;
a.dropdown-item {
width: 120%;
border: 0;
border-bottom: 1px solid $gray-200;
font-size: smaller;
i {
float: right; }
&:hover {
color: $gray-500 !important; }
}
}
// fullwidth menu when navbar is collapsed
@media (max-width: 767px) {
& {
position: relative;
}
button.navbar-toggler {
float: right;
}
div.navbar-collapse {
float: none;
position: absolute;
top: 4em;
left: 0;
right: 0;
z-index: 2;
padding: 1em;
border-top: 1px solid shade-color($primary, 25%);
ul.navbar-nav {
display: grid;
grid-template-areas:
"sear sear sear"
"sect user lang";
li.nav-item {
flex-direction: column;
border: 0;
a.nav-link {}
&.navigation-search {
grid-area: sear;
margin-bottom: 1em;
form {
width: 100%;
input.form-control {}
button.btn {}
}
}
&.nav-section { grid-area: sect; }
&.nav-user { grid-area: user; }
&.nav-language { grid-area: lang; }
}
li.dropdown {
&, & > * {
background-color: transparent !important;
}
a.dropdown-toggle {}
div.dropdown-menu {
display: block;
border: 0;
a.dropdown-item {
width: 100%;
border: 0;
border-top: 1px dotted $gray-200;
background-color: transparent !important;
}
}
}
}
}
}
}
}
// styles communs pour tous les bandeaux
div.banner {
a {
text-decoration: none;
&.phone,
&.email {
color: $white;
}
}
.id-number {
font-weight: lighter;
font-size: 50%;
@ -28,17 +158,220 @@ div.banner {
&:before { content: '(n°'; }
&:after { content: ')'; }
}
a.phone,
a.email {
color: white;
}
ul.list-content {
//margin: 0 auto;
}
span.age {
margin-left: 0.5em;
&:before { content: '('; }
&:after { content: ')'; }
}
}
div.vertical-menu {
border-radius: 0;
margin-top: 0.5rem;
a.list-group-item {
background-color: $chill-yellow;
border: 0;
margin-bottom: 0.25rem;
&:hover {
background-color: tint-color($chill-yellow, 20%)
}
}
}
footer.footer {
background: $dark;
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
p {
font-family: Open Sans;
font-weight: 300;
clear: both;
color: $white;
font-size: 0.9em;
line-height: 1.5em;
margin: auto;
max-width: 35em;
text-align: center;
a, a:hover {
text-decoration: underline;
}
}
}
/*
* SPECIFIC RULES
*/
/// titles
h1, h2,
.h1, .h2 {
font-weight: $headings-font-weight + 200;
}
/// typography
.open_sansbold {
font-weight: bold;
}
/// no borders on head table
table.table-bordered {
thead, thead * {
border: 0 !important;
text-align: center;
}
}
/// comments quotes
.chill-user-quote {
border-left: 10px solid $yellow;
margin: 1.5em 10px;
padding: 0.5em 15px;
background-color: $gray-200;
color: $gray-800;
font-size: 90%;
// test a bottom right decoration (to be confirmed)
&.test {
position: relative;
&:after {
content: '';
position: absolute;
width: 0px; height: 0px;
bottom: 0; right: 0;
background: $white;
border-top: 10px solid $gray-200;
border-left: 10px solid $gray-200;
border-right: 10px solid $white;
border-bottom: 10px solid $white;
}
}
// ckeditor citation
blockquote p {
font-style: italic;
padding-left: 2em;
quotes: "" "";
position: relative;
&:before {
content: open-quote;
font-size: 400%;
color: $gray-400;
position: absolute;
top: -25px;
left: 0;
}
}
}
/// display definition list
// with dt and dd on same line
dl.definition-inline {
dd {
display: inline;
margin: 0;
&:after{
display: block;
content: '';
}
}
dt{
display: inline-block;
min-width: 200px;
}
}
/// when there is no data
.custom_field_no_data,
.chill-no-data-statement {
font-style: italic;
}
//// still used ?
// move from chillmain.css, converted to sass
div#usefulbar {
background-color: $yellow;
z-index: 1000;
padding-right: 15px;
form {
margin: 0;
}
i.menu {
font-size: 2em;
}
ul {
display: flex;
justify-content: flex-end;
margin: 0;
padding-top: 5px;
padding-right: 10px;
}
li {
color: $white;
margin-left: 10px;
a {
color: $white;
text-shadow: 0px 0px 1px $gray-600;
}
i.icon-user-add {
&:before {
vertical-align: -5px;
}
}
&#search_element {
text-align: right;
div#search_form {
margin: 0;
padding: 0;
div, .field {
margin: 0;
}
button {
color: $white;
border: none;
bottom: -2px;
height: 35px;
}
}
}
}
}
div#flashMessages {
margin-top: 20px;
.flash-notice {
margin-top: 10px;
margin-bottom: 10px;
}
}
.personName {
font-variant: small-caps;
text-transform: capitalize;
}
// probably used in client chill.
// think to rename like above
input.belgian_national_number_inversed_date {
width: 7em;
margin-right: 1em;
}
input.belgian_national_number_daily_counter {
width: 4em;
margin-right: 1em;
}
input.belgian_national_number_control_digit {
width: 3em;
}
//
input.belgian_national_number {
&.inversed_date {}
&.daily_counter {}
&.control_digit {}
}

View File

@ -1,25 +0,0 @@
div#usefulbar { background-color: #fbba3a; z-index: 1000; padding-right: 15px; }
div#usefulbar form { margin: 0; }
div#usefulbar i.menu { font-size: 2em; }
div#usefulbar ul { display: flex; justify-content: flex-end; margin: 0; padding-top: 5px; padding-right: 10px; }
div#usefulbar li { color: white; margin-left: 10px; }
div#usefulbar li a { color: white; text-shadow: 0px 0px 1px #555; }
div#usefulbar li i.icon-user-add:before { vertical-align: -5px; }
div#usefulbar li#search_element { text-align: right; }
div#usefulbar li#search_element div#search_form { margin: 0; padding: 0; }
div#usefulbar li#search_element div#search_form div { margin: 0; }
div#usefulbar li#search_element div#search_form .field { margin: 0; }
div#usefulbar li#search_element div#search_form button { color: white; border: none; bottom: -2px; height: 35px; }
div#flashMessages { margin-top: 20px; }
div#flashMessages .flash-notice { margin-top: 10px; margin-bottom: 10px; }
.personName { font-variant: small-caps; text-transform: capitalize; }
.personName { text-transform: capitalize; }
input.belgian_national_number_inversed_date { width: 7em; margin-right: 1em; }
input.belgian_national_number_daily_counter { width: 4em; margin-right: 1em; }
input.belgian_national_number_control_digit { width: 3em; }

View File

@ -14,12 +14,12 @@ global.select2 = select2;
require('select2/dist/css/select2.css');
require('select2-bootstrap-theme/dist/select2-bootstrap.css');
/*
* Load Chill themes assets
*/
require('./chillmain.scss');
require('./css/chillmain.css');
import { chill } from './js/chill.js';
global.chill = chill;
@ -34,6 +34,7 @@ require('./img/favicon.ico');
require('./img/logo-chill-sans-slogan_white.png');
require('./img/logo-chill-outil-accompagnement_white.png');
/*
* Load local libs
* Some libs are only used in a few pages, they are loaded on a case by case basis
@ -45,7 +46,6 @@ require('../lib/breadcrumb/index.js');
require('../lib/download-report/index.js');
require('../lib/select_interactive_loading/index.js');
require('../lib/export-list/index.js');
require('../lib/entity/index.js');
//require('../lib/show_hide/index.js');
//require('../lib/tabs/index.js');

View File

@ -62,10 +62,10 @@ $chill-theme-buttons: (
&.btn-view::before,
&.btn-save::before,
&.btn-duplicate::before,
&.btn-not-duplicate::before,
&.btn-submit::before,
&.btn-reset::before,
&.btn-action::before,
// &.btn-not-duplicate::before,
// &.btn-submit::before,
// &.btn-reset::before,
// &.btn-action::before,
&.btn-delete::before,
&.btn-remove::before,
&.btn-cancel::before {
@ -101,3 +101,13 @@ $chill-theme-buttons: (
color: $light;
}
}
/// allow to hide icon (herited from scratch)
.btn {
&.change-icon {
&::before {
content: '';
margin-right: 0;
}
}
}

View File

@ -1,59 +1,80 @@
/*
* FLEX RESPONSIVE TABLE/BLOCK PRESENTATION
*/
div.flex-bloc,
div.flex-table {
display: flex;
align-items: stretch;
align-content: stretch;
box-sizing: border-box;
margin: 1.5em 0;
div.item-bloc {
display: flex;
@include border-collapse;
padding: 1em;
div.item-row {
display: flex;
div.item-col:last-child {
display: flex;
}
}
}
h2, h3, h4, dl, p {
margin: 0;
}
h2, h3, h4 {
color: var(--bs-chill-blue);
color: $blue;
}
div.item-bloc {
@include border-collapse;
ul.record_actions {
margin: 0;
li {
margin-right: 5px;
}
}
}
/*
* Bloc appearance
*/
div.flex-bloc {
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: stretch;
align-content: stretch;
div.item-bloc {
flex-grow: 0; flex-shrink: 1; flex-basis: auto;
margin: 0;
padding: 1em;
display: flex;
flex-direction: column;
margin: 0;
div.item-row {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
flex-direction: column;
div.item-col {
&.separator {
margin-top: 0.5em;
border-top: 1px dotted $gray-900;
padding-top: 0.5em;
}
&:first-child {
flex-grow: 0; flex-shrink: 0; flex-basis: auto;
padding-bottom: 0.5em;
border-bottom: 1px dotted #0000004f;
margin-bottom: 0.5em;
}
&:last-child {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
.list-content { // ul, dl, or div
}
ul.record_actions {
margin: 0;
align-self: flex-end;
flex-grow: 1; flex-shrink: 0; flex-basis: auto;
margin: 0;
li {
margin-right: 5px;
}
@ -67,51 +88,47 @@ div.flex-bloc {
/*
* Table appearance
*/
div.flex-table {
display: flex;
flex-direction: column;
align-items: stretch;
align-content: stretch;
div.item-bloc {
display: flex;
flex-direction: column;
padding: 1em;
&:nth-child(even) {
background-color: $gray-200;
.chill-user-quote {
background-color: shade-color($gray-200, 5%)
}
}
div.item-row {
display: flex;
flex-direction: row;
&:not(:first-child) {
&.separator {
margin-top: 0.5em;
border-top: 1px dotted #0000004f;
border-top: 1px dotted $gray-900;
padding-top: 0.5em;
flex-direction: column;
//flex-direction: column;
}
div.item-col {
&:first-child {
flex-grow: 0; flex-shrink: 0; flex-basis: 33%;
flex-grow: 0; flex-shrink: 0; flex-basis: auto;
}
&:last-child {
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
display: flex;
justify-content: flex-end;
.list-content { // ul, dl, or div
}
ul.record_actions {
margin: 0;
align-self: flex-start;
flex-grow: 1; flex-shrink: 0; flex-basis: auto;
li {
margin-right: 5px;
}
align-self: flex-start;
}
}
}
@media only screen and (max-width: 900px) {
flex-direction: column;
div.item-col {
@ -122,9 +139,6 @@ div.flex-table {
}
}
}
// neutralize
div.chill_address div.chill_address_address p { text-indent: 0; }
}
}
}

View File

@ -0,0 +1,44 @@
/// forms
form {
/* avoid useless html in first level of the custom fields row loop in forms
* (better should to improve the loop)
*/
& > div.container-fluid {
& > div.row > .parent {
padding: 0;
& div.cf-fields span.cf-title {
margin: 1em -15px 0;
width: calc(100% + 30px);
@include title_in_form;
}
}
}
fieldset {
margin-top: 1em;
& > legend {
@include title_in_form;
}
}
// customfields titles in form
span.cf-title {
@include title_in_form;
}
label {
display: inline;
&.required:after {
content: " *";
color: $red;
}
}
}
.col-form-label {
padding-top: .5em;
padding-bottom: .5em;
font-weight: 700;
margin-bottom: .375em;
}

View File

@ -1,4 +1,18 @@
//
// Titles in forms
//
@mixin title_in_form {
font-size: 1.438em;
font-weight: 700;
width: 100%;
border-bottom: 3px solid $gray-200;
margin-bottom: 1em;
display: block;
}
// We use box-shadow instead of border
// to avoid to manage border double-width
// Then we can simulate border-collapse: collapse (table)

View File

@ -1,13 +1,22 @@
ul.record_actions,
ul.record_actions_column {
ul.record_actions {
display: flex;
flex-direction: row;
flex-wrap: wrap-reverse;
justify-content: flex-end;
padding: 0.5em 0;
&.record_actions--left {
&.column {
flex-direction: column;
}
&.left {
justify-content: flex-start;
}
padding: 0.5em 0;
flex-wrap: wrap-reverse;
&.sticky-form-buttons {
padding-left: 1em;
padding-right: 1em;
}
li {
display: inline-block;
@ -18,37 +27,33 @@ ul.record_actions_column {
&:last-child {
margin-right: 0;
}
}
li.cancel {
order: 1;
margin-right: auto;
&.cancel {
order: 1;
margin-right: auto;
}
}
}
ul.record_actions {
flex-direction: row;
}
ul.record_actions_column {
flex-direction: column;
}
ul.record_actions.sticky-form-buttons {
padding-left: 1em;
padding-right: 1em;
.sticky-form-buttons {
margin-top: 4em;
background-color: $beige;
position: sticky;
bottom: 0.3em;
text-align: center;
display: flex;
padding: 0.8em 1.6em;
border-radius: 0;
}
/// EXCEPTIONS
// inside table exceptions
table {
td ul.record_actions,
ul.record_actions_small {
li {
margin-right: 0.2em;
}
}
ul.record_actions {
margin: 0;
padding: 0.5em;

View File

@ -13,12 +13,18 @@ section.chill-entity {
}
// specific rules
// all render box doesn't use a section tag !
.chill-entity {
// used for: entity-person, entity-thirdparty
&.entity-person,
&.entity-thirdparty {
span.entity-raw {
& > span:not(:first-child):before {
content: " ";
}
}
div.entity-label {
div.denomination {
&.h3 {
@ -92,4 +98,19 @@ section.chill-entity {
&.address-until {}
}
}
// used for comment-embeddable
&.entity-comment-embeddable {
width: 100%;
div.metadata {
font-size: smaller;
color: $gray-600;
span.user, span.date {
text-decoration: underline dotted;
&:hover {
color: $gray-700;
}
}
}
}
}

View File

@ -1,6 +0,0 @@
.chill-entity__comment-embeddable {
.chill-entity__comment-embeddable__metadata {
font-size: smaller;
color: var(--chill-light-gray);
}
}

View File

@ -1,2 +0,0 @@
// css classes to render entities
require('./comment_embeddable.scss');

View File

@ -1,284 +1,6 @@
/*
* These custom styles will override bootstrap enabled stylesheets
* in mod_bootstrap entrypoint
*/
/// chill buttons
@import 'custom/_buttons';
// chill record_actions
@import 'custom/_record_actions';
/// titles
h1, h2, .h1, .h2 {
font-weight: $headings-font-weight + 200;
}
/// typography
.open_sansbold {
font-weight: bold;
}
/// forms
@mixin title_in_form {
font-size: 1.438em;
font-weight: 700;
width: 100%;
border-bottom: 3px solid $gray-200;
margin-bottom: 1em;
display: block;
}
.col-form-label {
padding-top: .5em;
padding-bottom: .5em;
font-weight: 700;
margin-bottom: .375em;
}
form {
/* avoid useless html in first level of the custom fields row loop in forms
* (better should to improve the loop)
*/
& > div.container-fluid {
& > div.row > .parent {
padding: 0;
& div.cf-fields span.cf-title {
margin: 1em -15px 0;
width: calc(100% + 30px);
@include title_in_form;
}
}
}
fieldset {
margin-top: 1em;
& > legend {
@include title_in_form;
}
}
label {
display: inline;
&.required:after {
content: " *";
color: $red;
}
}
}
/// table
table.table-bordered {
thead, thead * {
border: 0 !important;
text-align: center;
}
}
/// chill elements of design
.sticky-form-buttons {
margin-top: 4em;
background-color: $beige;
position: sticky;
bottom: 0.3em;
text-align: center;
display: flex;
padding: 0.8em 1.6em;
border-radius: 0;
}
.chill-user-quote {
border-left: 10px solid $yellow;
margin: 1.5em 10px;
padding: 0.5em 15px;
quotes: "\201C" "\201D" "\2018" "\2019";
background-color: $gray-200;
blockquote {
border-left: 0.4em solid $gray-400;
padding-left: 0.9em;
margin-left: 0.9em;
font-style: italic;
}
}
div.chill_address {
div.chill_address_address {
margin: 0.7em 0;
font-size: 98%;
font-variant: small-caps;
p {
display: inline-block;
margin: 0 0 0 1.5em;
text-indent: -1.5em;
}
}
}
/// base layout positions
body {
display: flex;
flex-direction: column;
min-height: 100vh;
footer {
margin-top: auto;
}
}
header {
nav.navbar {
padding: 0;
a.navbar-brand img {
height: 50px;
margin: 8px 0;
}
div.navbar-collapse {
float: right;
}
ul.navbar-nav {
display: flex;
align-items: stretch;
li.nav-item {
display: flex;
&.btn {
padding-top: 0;
padding-bottom: 0;
}
& > a {
align-self: center;
}
form.form-inline {
align-self: center;
display: flex;
input.form-control {
align-self: center;
height: 32px;
}
}
}
}
div.dropdown-menu {
margin: 0;
padding: 0;
border-radius: 0;
a.dropdown-item {
width: 120%;
border: 0;
border-bottom: 1px solid $gray-200;
font-size: smaller;
i {
float: right; }
&:hover {
color: $gray-500 !important; }
}
}
// fullwidth menu when navbar is collapsed
@media (max-width: 767px) {
& {
position: relative;
}
button.navbar-toggler {
float: right;
}
div.navbar-collapse {
float: none;
position: absolute;
top: 4em;
left: 0;
right: 0;
z-index: 2;
padding: 1em;
border-top: 1px solid shade-color($primary, 25%);
ul.navbar-nav {
display: grid;
grid-template-areas:
"sear sear sear"
"sect user lang";
li.nav-item {
flex-direction: column;
border: 0;
a.nav-link {}
&.navigation-search {
grid-area: sear;
margin-bottom: 1em;
form {
width: 100%;
input.form-control {}
button.btn {}
}
}
&.nav-section { grid-area: sect; }
&.nav-user { grid-area: user; }
&.nav-language { grid-area: lang; }
}
li.dropdown {
&, & > * {
background-color: transparent !important;
}
a.dropdown-toggle {}
div.dropdown-menu {
display: block;
border: 0;
a.dropdown-item {
width: 100%;
border: 0;
border-top: 1px dotted $gray-200;
background-color: transparent !important;
}
}
}
}
}
}
}
}
div.banner {
div.header-name,
div.header-details {
div.row > div:first-child {
@media (min-width: 576px) {
//margin-left: 1.5em;
}
}
}
a {
text-decoration: none;
}
}
div.vertical-menu {
border-radius: 0;
margin-top: 0.5rem;
a.list-group-item {
background-color: $chill-yellow;
border: 0;
margin-bottom: 0.25rem;
&:hover {
background-color: tint-color($chill-yellow, 20%)
}
}
}
footer.footer {
background: $dark;
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
p {
font-family: Open Sans;
font-weight: 300;
clear: both;
color: $white;
font-size: 0.9em;
line-height: 1.5em;
margin: auto;
max-width: 35em;
text-align: center;
a, a:hover {
text-decoration: underline;
}
}
}

View File

@ -14,7 +14,7 @@ $gray-400: #ced4da !default;
$gray-500: #b2b2b2 !default;
$gray-600: #6c757d !default;
$gray-700: #495057 !default;
$gray-800: #333333 !default;
$gray-800: #2c2d2f !default;
$gray-900: #212529 !default;
$black: #111 !default;
// scss-docs-end gray-color-variables
@ -160,7 +160,7 @@ $chill-pink: $pink;
$chill-gray: $gray-600;
$chill-dark-gray: $gray-800;
$chill-light-gray: $gray-200;
$chill-llight-gray: $gray-100;
$chill-llight-gray: $gray-100;
// scss-docs-end theme-color-variables
// scss-docs-start theme-colors-map
@ -176,7 +176,7 @@ $theme-colors: (
) !default;
// scss-docs-end theme-colors-map
$chill-colors: (
$chill-colors: (
"chill-blue": $chill-blue,
"chill-green": $chill-green,
"chill-green-dark": $chill-green-dark,
@ -382,7 +382,7 @@ $border-color: $gray-300 !default;
// scss-docs-end border-variables
// scss-docs-start border-radius-variables
$border-radius: .25rem !default; // <==
$border-radius: .25rem !default; // <==
$border-radius-sm: .2rem !default;
$border-radius-lg: .3rem !default;
$border-radius-pill: 50rem !default;

View File

@ -1,36 +1,45 @@
{{ opening_box|raw }}
<div class="">
<div class="comment-embeddable_comment">
{%- if options['limit_lines'] is not null -%}
{% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %}
{%- else -%}
{% set content = comment.comment %}
{%- endif -%}
{#
Template to render a comment
<blockquote class="chill-user-quote">
OPTIONS
* disable_markdown bool
* limit_lines integer|null
* metadata bool
#}
{{ opening_box|raw }}
{%- if options['limit_lines'] is not null -%}
{% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %}
{%- else -%}
{% set content = comment.comment %}
{%- endif -%}
<blockquote class="chill-user-quote">
{% if options['disable_markdown'] %}
{{ content|nl2br }}
{% else %}
{{ content|chill_markdown_to_html }}
{% endif %}
</blockquote>
</div>
</div>
{% if options['metadata'] %}
<div class="chill-entity__comment-embeddable__metadata">
{% if user is not empty %}
<span class="chill-entity__comment-embeddable__user">
{{ 'Last updated by'| trans }} {{ user|chill_entity_render_box(options['user']) }}
</span>';
{% endif %}
{% if comment.date is not empty %}
<span class="chill-entity__comment-embeddable__date">
{% if user is empty %}{{ 'Last updated on'|trans ~ ' ' }}{% else %}{{ 'on'|trans ~ ' ' }}{% endif %}
{{ comment.date|format_datetime("medium", "short") }}
</span>
{% endif %}
</div>
{% endif %}
{{ closing_box|raw }}
{% if options['metadata'] %}
<div class="metadata">
{% if user is not empty %}
{{ 'Last updated by'| trans }}
<span class="user">
{{ user|chill_entity_render_box(options['user']) }}
</span>
{% endif %}
{% if comment.date is not empty %}
{% if user is empty %}
{{ 'Last updated on'|trans ~ ' ' }}
{% else %}
{{ 'on'|trans ~ ' ' }}
{% endif %}
<span class="date">
{{ comment.date|format_datetime("medium", "short") }}
</span>
{% endif %}
</div>
{% endif %}
</blockquote>
{{ closing_box|raw }}

View File

@ -53,23 +53,30 @@
{% block sublayout_content %}
<div class="row justify-content-center my-5">
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 mb-5 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{# Flash messages ! #}
{% if app.session.flashbag.keys()|length > 0 %}
<div class="col-8 mb-5 flash_message">
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 mb-5 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 mb-5 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
</div>
{% endif %}
{% block content %}
<div class="col-8 main_search">

View File

@ -27,23 +27,30 @@
<div class="row">
<div class="col-md-9 my-5">
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 mb-5 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{# Flash messages ! #}
{% if app.session.flashbag.keys()|length > 0 %}
<div class="row justify-content-center mb-5">
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 mb-5 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('success') %}
<div class="col-8 alert alert-success flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 mb-5 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('error') %}
<div class="col-8 alert alert-danger flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="col-8 alert alert-warning flash_message">
<span>{{ flashMessage|raw }}</span>
</div>
{% endfor %}
</div>
{% endif %}
{% block layout_wvm_content %}<!-- content of the layoutWithVerticalMenu is empty -->
{% endblock %}

View File

@ -6,10 +6,12 @@ use Chill\MainBundle\CRUD\Controller\ApiController;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Serializer\Model\Collection;
use Chill\PersonBundle\Entity\Person;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Repository\Household\HouseholdRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Routing\Annotation\Route;
class HouseholdApiController extends ApiController
{
@ -50,4 +52,45 @@ class HouseholdApiController extends ApiController
return $this->json($collection, Response::HTTP_OK, [],
[ "groups" => ["read"]]);
}
/**
* @Route("/api/1.0/person/address/suggest/by-household/{household_id}.{_format}",
* name="chill_person_address_suggest_by_household",
* requirements={
* "_format"="json"
* }
* )
* @ParamConverter("household", options={"id" = "household_id"})
*/
public function suggestAddressByHousehold(Household $household, string $_format)
{
// TODO add acl
$addresses = [];
// collect addresses from location in courses
foreach ($household->getCurrentPersons() as $person) {
foreach ($person->getAccompanyingPeriodParticipations() as $participation) {
if (null !== $participation->getAccompanyingPeriod()->getAddressLocation()) {
$a = $participation->getAccompanyingPeriod()->getAddressLocation();
$addresses[$a->getId()] = $a;
}
if (null !== $personLocation = $participation
->getAccompanyingPeriod()->getPersonLocation()) {
$a = $personLocation->getCurrentHouseholdAddress();
if (null !== $a) {
$addresses[$a->getId()] = $a;
}
}
}
}
// remove the actual address
$actual = $household->getCurrentAddress();
if (null !== $actual) {
$addresses = \array_filter($addresses, fn($a) => $a !== $actual);
}
return $this->json(\array_values($addresses), Response::HTTP_OK, [],
[ 'groups' => [ 'read' ] ]);
}
}

View File

@ -18,12 +18,15 @@
namespace Chill\PersonBundle\Controller;
use Chill\PersonBundle\Security\Authorization\PersonVoter;
use Chill\PersonBundle\Entity\Person;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
use Symfony\Component\Security\Core\Role\Role;
use Chill\MainBundle\CRUD\Controller\ApiController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Chill\MainBundle\Entity\Address;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
class PersonApiController extends ApiController
{
@ -54,4 +57,41 @@ class PersonApiController extends ApiController
return $this->addRemoveSomething('address', $id, $request, $_format, 'address', Address::class, [ 'groups' => [ 'read' ] ]);
}
/**
* @Route("/api/1.0/person/address/suggest/by-person/{person_id}.{_format}",
* name="chill_person_address_suggest_by_person",
* requirements={
* "_format"="json"
* }
* )
* @ParamConverter("person", options={"id" = "person_id"})
*/
public function suggestAddress(Person $person, Request $request, string $_format): Response
{
$this->denyAccessUnlessGranted(PersonVoter::SEE, $person);
$addresses = [];
// collect addresses from location in courses
foreach ($person->getAccompanyingPeriodParticipations() as $participation) {
if (null !== $participation->getAccompanyingPeriod()->getAddressLocation()) {
$a = $participation->getAccompanyingPeriod()->getAddressLocation();
$addresses[$a->getId()] = $a;
}
if (null !== $personLocation = $participation
->getAccompanyingPeriod()->getPersonLocation()) {
$a = $personLocation->getCurrentHouseholdAddress();
if (null !== $a) {
$addresses[$a->getId()] = $a;
}
}
}
// remove the actual address
$actual = $person->getCurrentHouseholdAddress();
if (null !== $actual) {
$addresses = \array_filter($addresses, fn($a) => $a !== $actual);
}
return $this->json(\array_values($addresses), Response::HTTP_OK, [], [ 'groups' => [ 'read' ]]);
}
}

View File

@ -3,8 +3,12 @@
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\ApiController;
use Chill\MainBundle\Doctrine\ORM\Hydration\FlatHierarchyEntityHydrator;
use Chill\MainBundle\Pagination\PaginatorInterface;
use DateTimeImmutable;
use Doctrine\ORM\Query;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class SocialIssueApiController extends ApiController
{
@ -16,6 +20,25 @@ class SocialIssueApiController extends ApiController
$query->expr()->isNull('e.desactivationDate')
)
);
$query->setParameter('now', new \DateTimeImmutable());
$query->setParameter('now', new DateTimeImmutable());
}
protected function getQueryResult(string $action, Request $request, string $_format, int $totalItems, PaginatorInterface $paginator, $query)
{
// In order to work, this hydrator only works with
// entities having the field "children" set up.
return $query
->getQuery()
->setHint(Query::HINT_INCLUDE_META_COLUMNS, true)
->getResult(FlatHierarchyEntityHydrator::LIST);
}
protected function onPostIndexBuildQuery(string $action, Request $request, string $_format, int $totalItems, PaginatorInterface $paginator, $query): ?Response
{
$query
->orderBy("GET_JSON_FIELD_BY_KEY(e.title, :locale)", 'ASC')
->setParameter(':locale', $request->getLocale());
return null;
}
}

View File

@ -0,0 +1,33 @@
<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Controller\SocialWork;
use Chill\MainBundle\CRUD\Controller\CRUDController;
/**
* Class AdminSocialIssueController
* Controller for social issues
*
* @package Chill\PersonBundle\Controller
*/
class AdminEvaluationController extends CRUDController
{
}

View File

@ -0,0 +1,33 @@
<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Controller\SocialWork;
use Chill\MainBundle\CRUD\Controller\CRUDController;
/**
* Class AdminSocialIssueController
* Controller for social issues
*
* @package Chill\PersonBundle\Controller
*/
class AdminGoalController extends CRUDController
{
}

View File

@ -0,0 +1,33 @@
<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Controller\SocialWork;
use Chill\MainBundle\CRUD\Controller\CRUDController;
/**
* Class AdminSocialIssueController
* Controller for social issues
*
* @package Chill\PersonBundle\Controller
*/
class AdminResultController extends CRUDController
{
}

View File

@ -0,0 +1,33 @@
<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Controller\SocialWork;
use Chill\MainBundle\CRUD\Controller\CRUDController;
/**
* Class AdminSocialIssueController
* Controller for social issues
*
* @package Chill\PersonBundle\Controller
*/
class AdminSocialActionController extends CRUDController
{
}

View File

@ -0,0 +1,33 @@
<?php
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Controller\SocialWork;
use Chill\MainBundle\CRUD\Controller\CRUDController;
/**
* Class AdminSocialIssueController
* Controller for social issues
*
* @package Chill\PersonBundle\Controller
*/
class AdminSocialIssueController extends CRUDController
{
}

View File

@ -0,0 +1,46 @@
<?php
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\MainBundle\Serializer\Model\Collection;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
class SocialWorkEvaluationApiController extends AbstractController
{
private PaginatorFactory $paginatorFactory;
/**
* @param PaginatorFactory $paginatorFactory
*/
public function __construct(PaginatorFactory $paginatorFactory)
{
$this->paginatorFactory = $paginatorFactory;
}
/**
* @Route("/api/1.0/person/social-work/evaluation/by-social-action/{action_id}.json",
* name="chill_person_evaluation_index_by_social_action",
* requirements={
* "_format": "json"
* }
* )
* @ParamConverter("action", options={"id": "action_id"})
* @param SocialAction $action
* @return Response
*/
public function listEvaluationBySocialAction(SocialAction $action): Response
{
$pagination = $this->paginatorFactory->create($action->getEvaluations()->count());
$evaluations = $action->getEvaluations()->slice($pagination->getCurrentPageFirstItemNumber(),
$pagination->getItemsPerPage());
$collection = new Collection($evaluations, $pagination);
return $this->json($collection, Response::HTTP_OK, [], [ 'groups' => [ 'read' ]]);
}
}

View File

@ -0,0 +1,140 @@
<?php
namespace Chill\PersonBundle\DataFixtures\ORM;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\Evaluation;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\PersonBundle\Repository\AccompanyingPeriodRepository;
use Chill\PersonBundle\Repository\SocialWork\EvaluationRepository;
use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository;
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\DataFixtures\ORM\LoadPeople;
class LoadAccompanyingPeriodWork extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Doctrine\Common\DataFixtures\DependentFixtureInterface
{
private AccompanyingPeriodRepository $periodRepository;
private EvaluationRepository $evaluationRepository;
/**
* @var Evaluation[]|array
*/
private array $cacheEvaluations = [];
/**
* @param AccompanyingPeriodRepository $periodRepository
*/
public function __construct(
AccompanyingPeriodRepository $periodRepository,
EvaluationRepository $evaluationRepository
) {
$this->periodRepository = $periodRepository;
$this->evaluationRepository = $evaluationRepository;
}
/**
* @inheritDoc
*/
public function getDependencies()
{
return [
LoadPeople::class
];
}
private function getRandomAction(SocialIssue $socialIssue): ?SocialAction
{
$actions = $socialIssue->getRecursiveSocialActions()->toArray();
if (0 === count($actions)) {
return null;
}
return $actions[\array_rand($actions)];
}
private function getRandomEvaluation(): Evaluation
{
if (0 === count($this->cacheEvaluations)) {
$this->cacheEvaluations = $this->evaluationRepository
->findAll();
}
return $this->cacheEvaluations[\array_rand($this->cacheEvaluations)];
}
/**
* @inheritDoc
*/
public function load(ObjectManager $manager)
{
// load all the period which are confirmed
$periods = $this->periodRepository
->findBy(['step' => AccompanyingPeriod::STEP_CONFIRMED])
;
$i = 0;
while (null !== $period = \array_pop($periods)) {
/** @var AccompanyingPeriod $period */
$i++;
if (0 === $i % 15) {
$manager->flush();
}
if (0 === $period->getSocialIssues()->count()) {
continue;
}
$work = new AccompanyingPeriod\AccompanyingPeriodWork();
$action = $this->getRandomAction($period->getSocialIssues()->first());
if (null !== $action) {
$work
->setAccompanyingPeriod($period)
->setSocialAction($action)
->setStartDate(new \DateTimeImmutable('today'))
->addPerson($period->getPersons()->first())
->setCreatedAt(new \DateTimeImmutable())
->setCreatedBy($this->getReference('center a_social'))
->setUpdatedAt(new \DateTimeImmutable())
->setUpdatedBy($this->getReference('center a_social'));
$manager->persist($work);
if ($action->getEvaluations()->count() > 0) {
$ev = $action->getEvaluations()->first();
$evaluation = new AccompanyingPeriod\AccompanyingPeriodWorkEvaluation();
$evaluation->setAccompanyingPeriodWork($work)
->setEvaluation($ev);
$manager->persist($evaluation);
}
}
// 1 of 10, force an evaluation
if (0 === $i % 10) {
$evaluation = $this->getRandomEvaluation();
$action = $evaluation->getSocialAction();
$issue = $action->getIssue();
$period->addSocialIssue($issue);
$work
->setAccompanyingPeriod($period)
->setSocialAction($action)
->setStartDate(new \DateTimeImmutable('today'))
->addPerson($period->getPersons()->first())
->setCreatedAt(new \DateTimeImmutable())
->setCreatedBy($this->getReference('center a_social'))
->setUpdatedAt(new \DateTimeImmutable())
->setUpdatedBy($this->getReference('center a_social'))
;
$manager->persist($work);
$ev = new AccompanyingPeriod\AccompanyingPeriodWorkEvaluation();
$ev->setAccompanyingPeriodWork($work)
->setEvaluation($evaluation);
$manager->persist($ev);
}
}
$manager->flush();
}
}

View File

@ -21,15 +21,25 @@
namespace Chill\PersonBundle\DataFixtures\ORM;
use Chill\MainBundle\Entity\PostalCode;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\ThirdPartyBundle\Entity\ThirdParty;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\Entity\Person;
use Faker\Factory;
use Faker\Generator;
use Nelmio\Alice\Loader\NativeLoader;
use Nelmio\Alice\ObjectSet;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Chill\MainBundle\DataFixtures\ORM\LoadPostalCodes;
use Chill\MainBundle\Entity\Address;
use Chill\MainBundle\Doctrine\Model\Point;
use Symfony\Component\Workflow\Registry;
use Symfony\Component\Workflow\Workflow;
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
/**
* Load people into database
@ -39,14 +49,21 @@ use Chill\MainBundle\Doctrine\Model\Point;
*/
class LoadPeople extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
use \Symfony\Component\DependencyInjection\ContainerAwareTrait;
protected $faker;
protected Generator $faker;
public function __construct()
protected Registry $workflowRegistry;
protected SocialIssueRepository $socialIssueRepository;
protected array $cacheSocialIssues = array();
public function __construct(Registry $workflowRegistry, SocialIssueRepository $socialIssueRepository)
{
$this->faker = \Faker\Factory::create('fr_FR');
$this->faker = Factory::create('fr_FR');
$this->workflowRegistry = $workflowRegistry;
$this->socialIssueRepository = $socialIssueRepository;
}
public function prepare()
@ -165,7 +182,7 @@ class LoadPeople extends AbstractFixture implements OrderedFixtureInterface, Con
'Birthdate' => "1960-10-12",
'PlaceOfBirth' => "Ottignies Louvain-La-Neuve",
'Gender' => Person::MALE_GENDER,
'Email' => "Email d'un ami: roger@tt.com",
'Email' => "roger@yopmail.com",
'CountryOfBirth' => 'BE',
'Nationality' => 'BE',
'CFData' => array(),
@ -173,6 +190,15 @@ class LoadPeople extends AbstractFixture implements OrderedFixtureInterface, Con
), $specific);
}
private function getRandomSocialIssue(): SocialIssue
{
if (0 === count($this->cacheSocialIssues)) {
$this->cacheSocialIssues = $this->socialIssueRepository->findAll();
}
return $this->cacheSocialIssues[\array_rand($this->cacheSocialIssues)];
}
/**
* create a new person from array data
*
@ -183,14 +209,21 @@ class LoadPeople extends AbstractFixture implements OrderedFixtureInterface, Con
private function addAPerson(array $person, ObjectManager $manager)
{
$p = new Person();
$p->addAccompanyingPeriod(
new AccompanyingPeriod(
(new \DateTime())
->sub(
new \DateInterval('P'.\random_int(0, 180).'D')
)
)
$accompanyingPeriod = new AccompanyingPeriod(
(new \DateTime())
->sub(
new \DateInterval('P' . \random_int(0, 180) . 'D')
)
);
$p->addAccompanyingPeriod($accompanyingPeriod);
$accompanyingPeriod->addSocialIssue($this->getRandomSocialIssue());
if (\random_int(0, 10) > 3) {
$accompanyingPeriod->setAddressLocation($this->createAddress());
$manager->persist($accompanyingPeriod->getAddressLocation());
$workflow = $this->workflowRegistry->get($accompanyingPeriod);
$workflow->apply($accompanyingPeriod, 'confirm');
}
foreach ($person as $key => $value) {
switch ($key) {
@ -235,6 +268,29 @@ class LoadPeople extends AbstractFixture implements OrderedFixtureInterface, Con
echo "add person'".$p->__toString()."'\n";
}
private function createAddress(): Address
{
$loader = new NativeLoader();
$objectSet = $loader->loadData([
Address::class => [
'address' => [
'street' => '<fr_FR:streetName()>',
'streetNumber' => '<fr_FR:buildingNumber()>',
'validFrom' => '<dateTimeBetween(\'-1 year\', \'now\')>',
'postCode' => $this->getPostalCode()
],
],
]);
return $objectSet->getObjects()['address'];
}
private function getPostalCode(): PostalCode
{
$ref = LoadPostalCodes::$refs[\array_rand(LoadPostalCodes::$refs)];
return $this->getReference($ref);
}
/**
* Create a random point

View File

@ -1,82 +0,0 @@
<?php
/*
* Chill is a suite of a modules, Chill is a software for social workers
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
/**
* Create social actions
*
*/
class LoadSocialActions extends AbstractFixture implements OrderedFixtureInterface
{
public function getOrder()
{
return 10020;
}
public static $socialActions = [
'social_action_info_conseil' => [
'title' => [
'fr' => 'Informer, conseiller'
],
'issue' => 'social_issue_prev_prot'
],
'social_action_instruire' => [
'title' => [
'fr' => 'Instruire l\'imprime unique pour des impayés'
],
'issue' => 'social_issue_prev_prot'
],
'social_action_MASP' => [
'title' => [
'fr' => 'MASP'
],
'issue' => 'social_issue_diff_fin'
],
'social_action_protection_enfant' => [
'title' => [
'fr' => 'Protection Enfant confié dans le cadre judiciaire'
],
'issue' => 'social_issue_enfant_protection'
],
];
public function load(ObjectManager $manager)
{
foreach (static::$socialActions as $ref => $new) {
$socialAction = new SocialAction();
$socialAction->setTitle($new['title']);
$socialAction->setIssue($this->getReference($new['issue']));
$socialAction->setDefaultNotificationDelay(new \DateInterval('P5D'));
$manager->persist($socialAction);
$this->addReference($ref, $socialAction);
print("Adding SocialAction '".$new['title']['fr']."'\n");
}
$manager->flush();
}
}

View File

@ -1,70 +0,0 @@
<?php
/*
* Chill is a suite of a modules, Chill is a software for social workers
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\Entity\SocialWork\Goal;
/**
* Create social goals
*
*/
class LoadSocialGoals extends AbstractFixture implements OrderedFixtureInterface
{
public function getOrder()
{
return 10030;
}
public static $socialGoals = [
'social_goal_instuire_dossier' => [
'title' => [
'fr' => 'Instruire le dossier de surendettement'
],
'action' => 'social_action_MASP'
],
'social_goal_proteger' => [
'title' => [
'fr' => 'Protéger via une assistance educative placement'
],
'action' => 'social_action_protection_enfant'
],
];
public function load(ObjectManager $manager)
{
foreach (static::$socialGoals as $ref => $new) {
$socialGoal = new Goal();
$socialGoal->setTitle($new['title']);
$socialGoal->addSocialAction($this->getReference($new['action']));
$manager->persist($socialGoal);
$this->addReference($ref, $socialGoal);
print("Adding SocialGoal '".$new['title']['fr']."'\n");
}
$manager->flush();
}
}

View File

@ -1,90 +0,0 @@
<?php
/*
* Chill is a suite of a modules, Chill is a software for social workers
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
/**
* Create social issues
*
*/
class LoadSocialIssues extends AbstractFixture implements OrderedFixtureInterface
{
public function getOrder()
{
return 10010;
}
public static $socialIssues = [
'social_issue_diff_fin_or_admin' => [
'title' => [
'fr' => 'ADULTE - DIFFICULTES FINANCIERES ET/OU ADMINISTRATIVES'
]
],
'social_issue_prev_prot' => [
'title' => [
'fr' => 'ADULTE PREVENTION/PROTECTION'
],
'parent' => 'social_issue_diff_fin_or_admin'
],
'social_issue_diff_fin' => [
'title' => [
'fr' => 'Difficulté financière'
],
'parent' => 'social_issue_diff_fin_or_admin'
],
'social_issue_enfant_famille' => [
'title' => [
'fr' => 'Enfant / famille'
]
],
'social_issue_enfant_protection' => [
'title' => [
'fr' => 'enfant - protection'
],
'parent' => 'social_issue_enfant_famille'
],
];
public function load(ObjectManager $manager)
{
foreach (static::$socialIssues as $ref => $new) {
$socialIssue = new SocialIssue();
$socialIssue->setTitle($new['title']);
if ( array_key_exists('parent', $new)) {
$parentRef = $new['parent'];
$parent = $this->getReference($parentRef);
$socialIssue->setParent($parent);
}
$manager->persist($socialIssue);
$this->addReference($ref, $socialIssue);
print("Adding SocialIssue '".$new['title']['fr']."'\n");
}
$manager->flush();
}
}

View File

@ -1,94 +0,0 @@
<?php
/*
* Chill is a suite of a modules, Chill is a software for social workers
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Persistence\ObjectManager;
use Chill\PersonBundle\Entity\SocialWork\Result;
/**
* Create social results
*
*/
class LoadSocialResults extends AbstractFixture implements OrderedFixtureInterface
{
public function getOrder()
{
return 10040;
}
public static $socialResults = [
'social_result_FSL_acces' => [
'title' => [
'fr' => 'FSL - accès cautionnement'
],
'action' => 'social_action_instruire'
],
'social_result_FSL_maintien' => [
'title' => [
'fr' => 'FSL maintien - impayés de loyer'
],
'action' => 'social_action_MASP'
],
'social_result_soutien_parental' => [
'title' => [
'fr' => 'Soutien parental'
],
// 'action' => 'social_action_protection_enfant', (via le goal)
'goal' => 'social_goal_proteger'
],
'social_result_accompagnement_mineur' => [
'title' => [
'fr' => 'Accompagnement du mineur'
],
// 'action' => 'social_action_protection_enfant', (via le goal)
'goal' => 'social_goal_proteger',
],
];
public function load(ObjectManager $manager)
{
foreach (static::$socialResults as $ref => $new) {
$socialResult = new Result();
$socialResult->setTitle($new['title']);
if ( array_key_exists('action', $new)) {
$action = $this->getReference($new['action']);
$socialResult->addSocialAction($action);
}
if ( array_key_exists('goal', $new)) {
$goal = $this->getReference($new['goal']);
$socialResult->addGoal($goal);
}
$manager->persist($socialResult);
$this->addReference($ref, $socialResult);
print("Adding SocialResult '".$new['title']['fr']."'\n");
}
$manager->flush();
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace Chill\PersonBundle\DataFixtures\ORM;
use Chill\PersonBundle\Service\Import\SocialWorkMetadata;
use Doctrine\Persistence\ObjectManager;
use League\Csv\Reader;
class LoadSocialWorkMetadata extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Doctrine\Common\DataFixtures\OrderedFixtureInterface
{
private SocialWorkMetadata $importer;
/**
* @param SocialWorkMetadata $importer
*/
public function __construct(SocialWorkMetadata $importer)
{
$this->importer = $importer;
}
/**
* @inheritDoc
*/
public function load(ObjectManager $manager)
{
try {
$csv = Reader::createFromPath(__DIR__.'/data/social_work_metadata.csv');
} catch (Throwable $e) {
throw new Exception('Error while loading CSV.',0, $e);
}
$csv->setDelimiter(";");
$this->importer->import($csv);
}
/**
* @inheritDoc
*/
public function getOrder()
{
return 9500;
}
}

View File

@ -0,0 +1,420 @@
AD - PREVENTION, ACCES AUX DROITS, BUDGET;ACCES AUX DROITS;Informer, conseiller;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;ACCES AUX DROITS;Aider à l'inclusion numérique;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;ACCES AUX DROITS;Demander une aide juridictionnelle;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;ACCES AUX DROITS;Aider à l'ouverture aux droits;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;ACCES AUX DROITS;Demander une aide alimentaire;;;;Demande aide alimentaire
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Informer, conseiller;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : Centre Communal dAction Sociale;;Demande aide impayé CCAS
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : CAF/MSA - Secours durgence;;Demande aide impayé CAF
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : CAF/MSA - Aide financière;;Demande aide impayé CAF
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : Caisse Primaire dAssurance Maladie;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : FSL Maintien - Impayés de loyer;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : FSL Maintien - Énergie / Fluides;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : FSL Maintien - Impayés télécommunication;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : FSL Maintien - Impayés aire d'accueil GDV ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : FSL Maintien - Lié à la COVID;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une aide pour des impayés;;Objectif : Secours exceptionnels;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Instruire le dossier de surendettement;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une mesure de protection adulte;;Objectif : Sauvegarde de justice;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une mesure de protection adulte;;Objectif : Mesure d'Accompagnement Judiciaire (MAJ);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une mesure de protection adulte;;Objectif : Signalement personne vulnérable;;Formulaire signalement personne vulnérable
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander une mesure de protection adulte;;Objectif : Mesure de protection personne majeure (tutelle, curatelle);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Faire une demande auprès des associations caritatives;;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Instruire des formulaires auprès d'autres organismes (Locapass, Fastt, …);;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Instruire une première demande d'AEB;;;;Demande AEB
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander un renouvellement d'AEB;;Objectif : Dans l'attente d'une mesure de protection ;;Renouvellement AEB
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander un renouvellement d'AEB;;Objectif : Pour poursuivre les objectifs engagés;;Renouvellement AEB
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Instruire une première demande de MASP;;;;Demande MAPS
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander un renouvellement MASP;;Objectif : Dans l'attente d'une mesure de protection ;;Renouvellement MASP
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Demander un renouvellement MASP;;Objectif : Pour poursuivre les objectifs engagés;;Renouvellement MASP
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Soutenir dans les démarches administratives;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Aider au tri, au classement et à larchivage des documents administratifs;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Soutenir les ménages dans lapurement des dettes, accompagner les ménages endettées, surendettées;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Accompagner les ménages dans leur gestion budgétaire;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Aider les ménages à se questionner sur leur mode de consommation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Assurer une fonction de médiation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Soutenir les ménages dans les démarches liées au logement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Aider à l'accès aux droits;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Aider à l'inclusion numérique;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Instruire des formulaires d'autres organismes non référencés…;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Instruire le dossier de surendettement ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Cibler des objectifs avec l'usager;Objectif : Demander ou renouveler la couverture santé (ACS);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide alimentaire;;;Demande aide alimentaire
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : Centre Communal dAction Sociale;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : CAF/MSA - Secours durgence;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : CAF/MSA - Aide financière;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : Caisse Primaire dAssurance Maladie ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Cautionnement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Dépôt de garantie;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - 1er loyer;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Frais dagence;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Assurances;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Déménagement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Aide à linstallation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Facture résiliation énergie (nv logement);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés de loyer;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Énergie / Fluides;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés télécommunication;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés aire d'accueil GDV ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Lié à la COVID;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : Secours exceptionnels;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une aide pour des impayés ou accès logement;Objectif : Mesure ASLL;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Faire une demande auprès de Association caritative;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une mesure de protection ;Objectif : Sauvegarde de justice;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une mesure de protection ;Objectif : Signalement personne vulnérable;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une mesure de protection ;Objectif : Mesure de protection personne majeure (tutelle, curatelle);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une mesure de protection ;Objectif : Mesure d'Accompagnement Judiciaire (MAJ);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Demander une mesure de protection ;Objectif : Mesure Judiciaire d'Aide à la Gestion du Budget Familial (MJAGBF);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Arrêt à l'initiative du ménage pour déménagement;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Suspension momentanée de l'accompagnement par le ménage ou le professionnel;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Arrêt pour absence d'adhésion;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Arrêt à l'initiative du ménage pour séparation;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Arrêt à l'initiative du professionnel pour absence d'avancée ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Retour à l'autonomie;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Transmission pour mesure judiciaire d'aide à la gestion du budget familial;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Orientation vers une MASP;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Transmission pour une mesure d'accompagnement judiciaire ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Renouvellement de l'AEB dans l'attente d'une mesure de protection ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer un AEB;Conclure l'AEB;;Résultat : Renouvellement de l'AEB pour poursuivre les objectifs engagés;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Soutenir dans les démarches administratives;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Aider au tri, au classement et à larchivage des documents administratifs;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Soutenir les ménages dans lapurement des dettes, accompagner les ménages endettées, surendettées;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Accompagner les ménages dans leur gestion budgétaire;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Aider les ménages à se questionner sur leur mode de consommation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Assurer une fonction de médiation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Soutenir les ménages dans les démarches liées au logement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Aider à l'accès aux droits;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Aider à l'inclusion numérique;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Instruire des formulaires d'autres organismes non référencés…;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Instruire le dossier de surendettement ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Cibler des objectifs avec l'usager;Objectif : Demander ou renouveler la couverture santé (ACS);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide alimentaire;;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : Centre Communal dAction Sociale;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : CAF/MSA - Secours durgence;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : CAF/MSA - Aide financière;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : Caisse Primaire dAssurance Maladie ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Cautionnement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Dépôt de garantie;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - 1er loyer;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Frais dagence;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Assurances;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Déménagement;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Aide à linstallation;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Accès - Facture résiliation énergie (nv logement);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés de loyer;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Énergie / Fluides;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés télécommunication;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Impayés aire d'accueil GDV ;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : FSL Maintien - Lié à la COVID;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : Secours exceptionnels;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une aide pour des impayés ou accès logement;Objectif : Mesure ASLL;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une mesure de protection adulte;Objectif : Sauvegarde de justice;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une mesure de protection adulte;Objectif : Signalement personne vulnérable;;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une mesure de protection adulte;Objectif : Mesure de protection personne majeure (tutelle, curatelle);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une mesure de protection adulte;Objectif : Mesure d'Accompagnement Judiciaire (MAJ);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Demander une mesure de protection adulte;Objectif : Mesure Judiciaire d'Aide à la Gestion du Budget Familial (MJAGBF);;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Arrêt à l'initiative du ménage pour déménagement;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Suspension momentanée de l'accompagnement par le ménage ou le professionnel;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Arrêt pour absence d'adhésion;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Arrêt à l'initiative du ménage pour séparation;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Arrêt à l'initiative du professionnel pour absence d'avancée ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Retour à l'autonomie;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Transmission pour mesure judiciaire d'aide à la gestion du budget familial;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Transmission pour une mesure d'accompagnement judiciaire ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Renouvellement de MASP dans l'attente d'une mesure de protection ;
AD - PREVENTION, ACCES AUX DROITS, BUDGET;SOUTIEN EQUILIBRE BUDGET;Exercer une MASP;Conclure la MASP;;Résultat : Renouvellement de MASP pour poursuivre les objectifs engagés;
AD - LOGEMENT;ACCES LOGEMENT (RE);Informer, conseiller;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Cautionnement;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Dépôt de garantie;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - 1er loyer;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Frais dagence;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Assurances;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Déménagement;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Aide à linstallation;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Facture résiliation énergie (nv logement);;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander une aide pour l'accès;;Objectif : FSL Accès - Mesure ASLL;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Demander auprès des Bailleurs sociaux, mairies, partenaires;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Instruire une demande DALO, DAHO;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Instruire une demande SIAO;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Instruire une demande ASLL;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Instruire une demande au Contingent préfectoral;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Instruire une demande au 115;;;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Intervenir au commandement de payer;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire la fiche Assignation;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Répondre au commandement de quitter les lieux;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Répondre au concours de la force publique;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Demander une aide financière FSL pour impayé de loyer;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Déposer un dossier de surendettement;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Demander auprès des Bailleurs sociaux, mairies, partenaires;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire une demande DALO, DAHO;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire une demande SIAO;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire une demande ASLL;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire une demande au Contingent préfectoral;;
AD - LOGEMENT;ACCES LOGEMENT (RE);Prévenir de l'expulsion;;Objectif : Instruire une demande au 115;;
AD - LOGEMENT;HABITAT INDIGNE;Informer, conseiller;;;;
AD - LOGEMENT;HABITAT INDIGNE;Demander une aide pour incurie;;Objectif : FSL maintien - aide incurie;;
AD - LOGEMENT;HABITAT INDIGNE;Instruire la grille de signalement;;;;
AD - LOGEMENT;HABITAT INDIGNE;Faire intervenir d'autres partenaires;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Informer, conseiller;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Demander un accompagnement psychologue insertion;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Exercer l'accompagnement psychologue insertion;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Renouveller l'accompagnement psychologue insertion;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Réorienter l'usager vers autres structures pour un accompagnement psychologique;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Demander l'accompagnement global;;Objectif : Axe 2;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Exercer l'accompagnement global;;Objectif : Axe 2;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Renouveller l'accompagnement global;;Objectif : Axe 2;;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Demander l'accompagnement global;;Objectif : Axe 3 (agent d'insertion);;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Exercer l'accompagnement global;;Objectif : Axe 3 (agent d'insertion);;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Renouveller l'accompagnement global;;Objectif : Axe 3 (agent d'insertion);;
AD - INSERTION SOCIALE PROFESSIONNELLE;ACCOMPAGNEMENT INSERTION;Instruire une demande MOVEA;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Informer, conseiller;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;"Aider à l'ouverture de droits
";;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renseigner la plateforme INCLUSION@COM pour les chantiers d'insertion;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Soutenir le parcours professionnel (emploi, formation, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander la médiation emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Création d'entreprise;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement travailleur non salarié;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement ASR CEIDRE;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier MDPH;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier retraite;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Soutenir l'accès au logement;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Accompagner le budget;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander le psychologue insertion;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Etre accompagné dans la parentalité;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Initier ou maintenir un parcours santé (cure, hospitalisation, CMP, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Solliciliter un FAII;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Demander un réorientation Pôle Emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire le 1er Contrat d'Engagement Réciproque;;Objectif : Autre;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Soutenir le parcours professionnel (emploi, formation, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander la médiation emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Création d'entreprise;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement travailleur non salarié;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement ASR CEIDRE;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier MDPH;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier retraite;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Soutenir l'accès au logement;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Accompagner le budget;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander le psychologue insertion;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Etre accompagné dans la parentalité;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Initier ou maintenir un parcours santé;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Solliciliter un FAII;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Demander un réorientation Pôle Emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Renouveler le Contrat d'Engagement Réciproque;;Objectif : Autre;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Soutenir le parcours professionnel (emploi, formation, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander la médiation emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Création d'entreprise;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement travailleur non salarié;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander l'accompagnement ASR CEIDRE;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier MDPH;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Déposer un dossier retraite;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Soutenir l'accès au logement;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Accompagner le budget;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …);;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander le psychologue insertion;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Etre accompagné dans la parentalité;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Initié ou maintenir un parcours santé;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Solliciliter un FAII;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Demander un réorientation Pôle Emploi;;
AD - INSERTION SOCIALE PROFESSIONNELLE;RSA;Faire un avenant au Contrat d'Engagement Réciproque;;Objectif : Autre;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Informer, conseiller;;;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Demander une aide FAJ;;Objectif : SU bons alimentaires;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Demander une aide FAJ;;Objectif : SU bons hygiène;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Demander une aide FAJ;;Objectif : SU bons carburant;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Demander une aide FAJ;;Objectif : SU virement;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Solliciter le comité FAJ;;Objectif : Aide financière;;
AD - INSERTION SOCIALE PROFESSIONNELLE;JEUNES 16/25 AIDE FINANCIERE INSERTION;Solliciter le comité FAJ;;Objectif : Action daccompagnement;;
AD - SANTE;;Informer, conseiller;;;;
AD - SANTE;;Orienter vers une structure de soins (CMP, psychologue, cure, …);;;;
AD - SANTE;;Instruire un dossier MDPH;;;;
AD - SANTE;;Accompagner le dépôt de dossier de pension d'invalidité;;;;
AD - SANTE;;Instruire le dossier Complémentaire santé ACS;;;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Informer, conseiller;;;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Procéder à une élection de domicile;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Demander une aide financière;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Demander un interprète;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Prendre contact avec le CADA;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Aider à la constitution de dossier auprès de la préfecture;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Faire le lien avec les associations;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Demander une aide médicale d'état;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Demander une carte mobilité;;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Accompagner pour la scolarité des enfants (crèches, collège, péri scolaire, cantine…);;
AD ACCOMPAGNEMENT SPECIFIQUE;;Accompagner des publics spécifiques;;Objectif : Aider à la compréhension du français;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Informer, conseiller;;;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Orienter vers une autre structure;;;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Instruire une première demande d'Accompagnement Educatif de Prevention;;;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Demander le renouvellement de l'Accompagnement Educatif de Prévention;;;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : : Conduite à risque / Passage à l'acte isolé de l'enfant/adolescent;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Comportement de l'enfant/adolescent en difficulté avec les limites, les interdits, les règles sociales;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Difficultés de l'enfant en milieu scolaire ou extra-scolaire;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Difficultés liées à la prise d'autonomie;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Evènement - Traumatisme qui affecte l'équilibre familial;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Problème de communication intrafamiliale;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : Parents démunis sur le plan éducatif;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Problèmatique : conflits parentaux ayant des résonnances sur l'enfant/l'adolescent;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : travailler la place de chacun;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : Conseiller et soutenir le positionnement éducatif;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : Accompagner la relation parent-enfant;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : Accompagner les parents en lien avec les lieux de scolarisation et de socialisation de leurs enfants;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : Accompagner/orienter les parents en lien avec les lieux de soins ;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : Accompagnement dun jeune majeur;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Objectif : évaluation / Orientation;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : mise en place TISF;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Mise en place AED;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Mise en place CJM;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Mise en place d'un AP;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Transmission judiciaire pour AEMO;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Tramsmission judiciaire pour MJIE;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Excercer un Accompagnement Educatif de Prévention;;Dispositif : Transmission judiciaire pour une mesure de protection;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Arrêt à linitiative de la famille;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Souhait interruption momentanée de laccompagnement par la famille ;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Orientation vers un partenaire extérieur;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Relais avec AS et/ou Puér;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Arrêt à échéance;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Transmission à lASE pour une mesure administrative;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Transmission à lASE pour une mesure judiciaire;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Renouvellement de lAEP dans lattente dune mesure ASE;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Conclure un Accompagnement Educatif de Prévention;;;Résultat : Renouvellement de lAEP pour poursuivre les objectifs engagés;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Réaliser une permanence éducative;;;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Médiatiser les relations familiales;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander le passage en IRCP;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une mise en place TISF;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander le renouvellement TISF;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une mise en place AED;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une mise en place AESF;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une mise en place d'un AP (accueil provisoire);;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une mesure ASMI;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une entrée en centre maternelle;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une entrée en centre parental;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une entrée en Unité Mère Enfant (UME);;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une MJAGBF;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une AED TDC;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander la désignation un TDC;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander un CAP ASE;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une AMAE (allocation mensuelle d'aide éducative);;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une allocation socio-éducatif spécifique;;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander un CAFI (aides fi);;
ENFANT / FAMILLE;SOUTIEN A LA PARENTALITE;Solliciter les moyens dans le cadre d'un accompagnement à la parentalité ;;Demander une autre aide (associations…);;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;Motif : arrêt de l'adhésion des parents à l'accompagnement du soutien à la parentalité;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;Motif : violence intra-familiale;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;Motif : suite à une ISG;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;;Faire une FRIP;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;;Demander une MJIE;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;;Demander une mesure de protection;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;;Demander un OPP;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter la CRIP;;;Demander un placement;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;Motif : arrêt de l'adhésion des parents à l'accompagnement du soutien à la parentalité;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;Motif : violence intra-familiale;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;Motif : suite à une ISG;;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;;Demander une MJIE;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;;Demander une mesure de protection;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;;Demander un OPP;
ENFANT / FAMILLE;ENFANT PREVENTION;Alerter l'ASE (RJA) pour situation connue;;;Demander un placement;
ENFANT / FAMILLE;ENFANT PREVENTION;Répondre à Eléments en votre possession;;;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation sans suite;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation demande d'accompagnement médico-sociale;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation pur demande de MJIE;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation pour demande d'AEMO;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation pour demande de placement;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Evaluation pour demande d'OPP;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation IP pour la CRIP;;;Note complémentaire actualisation;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation sans suite;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation demande d'accompagnement médico-sociale;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation pur demande de MJIE;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation pour demande d'AEMO;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation pour demande de placement;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Evaluation pour demande d'OPP;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Réaliser une Evaluation pour l'ASE;;;Note complémentaire actualisation;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander un AEP;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander une mise en place AED;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander une mise en place TISF;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander la mise en place d'un Accueil Provisoire;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander l'orientation vers d'autres structures (soins, MDA, …);;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander l'entrée en centre maternel ;;
ENFANT / FAMILLE;INFORMATIONS PREOCCUPANTES;Mettre en place un accompagnement médicosocial suite à une IP;;Demander l'entrée unité mère / enfant;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Informer, conseiller;;;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Orienter vers SOS femme;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Proposer un conseiller ou une thérapie conjugale;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Proposer une médiation familiale;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Aider au dépôt de plainte;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Signaler un adulte vulnérable au procureur ;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Demander une mesure de protection majeur;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Faire une FRIP pour enfant en danger;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Protéger des violences intra familiales;;Instruire la fiche VIF;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Conseiller ;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Problématique : VIF;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Problématique : Difficultés éducatives;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Problématique : Protection de lenfance;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Problématique : Violences sexuelles;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Problématique : Information suite à une séparation;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Orienter vers l'AS de secteur;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Orienter vers SOS femme;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Orienter vers un accompagnement CMP/libéral;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Orienter vers un conseiller ou thérapeute conjugal;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Aider au dépôt de plainte;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Signaler un adulte vulnérable au procureur ;;
ENFANT / FAMILLE;VIOLENCES INTRA-FAMILIALES;Réaliser l'intervention sociale en gendarmerie;;Demander une mesure de protection majeur;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le lieu d'accueil;;;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Mise en place TISF;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Demande aide financière / SU;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Demande SU;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Participation à des actions collectives;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Mise en place d'un loisir familial ;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Mettre en place un soutien parental;;Mise en place d'une aide transport;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le mineur;;Demande mise en place d'un accompagnement psychologique;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le mineur;;Construire le PPE;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le mineur;;Mise en place CJM;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le mineur;;Demande MDPH ;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Accompagner le mineur;;Organiser la mise en place d'un loisir;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Elaborer le lien partenarial;;;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Demander une protection majeur vulnérable;;;;
ENFANT PROTECTION;ACCUEIL PROVISOIRE;Demande de MJIE (mesure judiciaire d'investigation éducative);;;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Accompagner le lieu d'accueil;;;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Mettre en place un soutien parental;;Mise en place TISF;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Mettre en place un soutien parental;;Demande aide financière;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Mettre en place un soutien parental;;Demande SU;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Mettre en place un soutien parental;;Demande de protection majeur vulnérable;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Accompagner le mineur;;;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL;Elaborer le lien partenarial;;;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT;Mettre en place un soutien parental;;;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT;Accompagner le mineur;;Construire le PPE;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT;Accompagner le mineur;;Mise en place CJM;;
ENFANT PROTECTION;ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT;Accompagner le mineur;;Organiser la participation à un camp de vacances;;
ENFANT PROTECTION;DELEGATION D'AUTORITE PARENTALE;Accompagner le lieu d'accueil;;;;
ENFANT PROTECTION;DELEGATION D'AUTORITE PARENTALE;Accompagner le mineur;;;;
ENFANT PROTECTION;DELEGATION D'AUTORITE PARENTALE;Elaborer le lien partenarial;;;;
ENFANT PROTECTION;TUTELLE DEPARTEMENTALE;;;;;
ENFANT PROTECTION;TUTELLE D'ETAT;Accompagner le lieu d'accueil;;;;
ENFANT PROTECTION;TUTELLE D'ETAT;Accompagner le mineur;;;;
ENFANT PROTECTION;TUTELLE D'ETAT;Elaborer le lien partenarial;;;;
ENFANT PROTECTION;AEMO TDC;Accompagner le lieu d'accueil;;;;
ENFANT PROTECTION;AEMO TDC;Mettre en place un soutien parental;;;;
ENFANT PROTECTION;AEMO TDC;Accompagner le mineur;;;;
ENFANT PROTECTION;AEMO TDC;Elaborer le lien partenarial;;;;
ENFANT PROTECTION;AEMO FAMILLE;Mettre en place un soutien parental;;;;
ENFANT PROTECTION;AEMO FAMILLE;Accompagner le mineur;;;;
ENFANT PROTECTION;AEMO FAMILLE;Elaborer le lien partenarial;;;;
AGREMENT;ASSISTANT MATERNEL;Instruire une première demande;;;;
AGREMENT;ASSISTANT MATERNEL;Instruire un renouvellement;;;;
AGREMENT;ASSISTANT MATERNEL;Instruire une modification;;;;
AGREMENT;ASSISTANT MATERNEL;Suivre un(e) ASSMAT;;;;
AGREMENT;ASSISTANT MATERNEL;Contrôler un(e) ASSMAT;;;;
AGREMENT;ASSISTANT MATERNEL;Accompagner un(e) ASSMAT;;;;
AGREMENT;ASSISTANT FAMILIAL;Instruire une première demande;;;;
AGREMENT;ASSISTANT FAMILIAL;Instruire un renouvellement;;;;
AGREMENT;ASSISTANT FAMILIAL;Instruire une modification;;;;
AGREMENT;ASSISTANT FAMILIAL;Suivre un(e) ASSFAM;;;;
AGREMENT;ASSISTANT FAMILIAL;Contrôler un(e) ASSFAM;;;;
AGREMENT;ASSISTANT FAMILIAL;Accompagner un(e) ASSFAM;;;;
AGREMENT;FAMILLE D'ACCUEIL PA/PH;Contribuer à l'évaluation si Famille d'Accueil connue;;Première demande;;
AGREMENT;FAMILLE D'ACCUEIL PA/PH;Contribuer à l'évaluation si Famille d'Accueil connue;;Renouvellement;;
AGREMENT;FAMILLE D'ACCUEIL PA/PH;Contribuer à l'évaluation si Famille d'Accueil connue;;Modification;;
AGREMENT;FAMILLE D'ACCUEIL PA/PH;Contribuer à l'évaluation si Famille d'Accueil connue;;Suivi;;
1 AD - PREVENTION, ACCES AUX DROITS, BUDGET ACCES AUX DROITS Informer, conseiller
2 AD - PREVENTION, ACCES AUX DROITS, BUDGET ACCES AUX DROITS Aider à l'inclusion numérique
3 AD - PREVENTION, ACCES AUX DROITS, BUDGET ACCES AUX DROITS Demander une aide juridictionnelle
4 AD - PREVENTION, ACCES AUX DROITS, BUDGET ACCES AUX DROITS Aider à l'ouverture aux droits
5 AD - PREVENTION, ACCES AUX DROITS, BUDGET ACCES AUX DROITS Demander une aide alimentaire Demande aide alimentaire
6 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Informer, conseiller
7 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : Centre Communal d’Action Sociale Demande aide impayé CCAS
8 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : CAF/MSA - Secours d’urgence Demande aide impayé CAF
9 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : CAF/MSA - Aide financière Demande aide impayé CAF
10 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : Caisse Primaire d’Assurance Maladie
11 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : FSL Maintien - Impayés de loyer
12 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : FSL Maintien - Énergie / Fluides
13 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : FSL Maintien - Impayés télécommunication
14 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : FSL Maintien - Impayés aire d'accueil GDV
15 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : FSL Maintien - Lié à la COVID
16 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une aide pour des impayés Objectif : Secours exceptionnels
17 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Instruire le dossier de surendettement
18 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une mesure de protection adulte Objectif : Sauvegarde de justice
19 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une mesure de protection adulte Objectif : Mesure d'Accompagnement Judiciaire (MAJ)
20 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une mesure de protection adulte Objectif : Signalement personne vulnérable Formulaire signalement personne vulnérable
21 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander une mesure de protection adulte Objectif : Mesure de protection personne majeure (tutelle, curatelle)
22 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Faire une demande auprès des associations caritatives
23 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Instruire des formulaires auprès d'autres organismes (Locapass, Fastt, …)
24 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Instruire une première demande d'AEB Demande AEB
25 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander un renouvellement d'AEB Objectif : Dans l'attente d'une mesure de protection Renouvellement AEB
26 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander un renouvellement d'AEB Objectif : Pour poursuivre les objectifs engagés Renouvellement AEB
27 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Instruire une première demande de MASP Demande MAPS
28 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander un renouvellement MASP Objectif : Dans l'attente d'une mesure de protection Renouvellement MASP
29 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Demander un renouvellement MASP Objectif : Pour poursuivre les objectifs engagés Renouvellement MASP
30 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Soutenir dans les démarches administratives
31 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Aider au tri, au classement et à l’archivage des documents administratifs
32 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Soutenir les ménages dans l’apurement des dettes, accompagner les ménages endettées, surendettées
33 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Accompagner les ménages dans leur gestion budgétaire
34 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Aider les ménages à se questionner sur leur mode de consommation
35 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Assurer une fonction de médiation
36 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Soutenir les ménages dans les démarches liées au logement
37 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Aider à l'accès aux droits
38 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Aider à l'inclusion numérique
39 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Instruire des formulaires d'autres organismes non référencés…
40 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Instruire le dossier de surendettement
41 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Cibler des objectifs avec l'usager Objectif : Demander ou renouveler la couverture santé (ACS)
42 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide alimentaire Demande aide alimentaire
43 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : Centre Communal d’Action Sociale
44 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : CAF/MSA - Secours d’urgence
45 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : CAF/MSA - Aide financière
46 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : Caisse Primaire d’Assurance Maladie
47 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Cautionnement
48 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Dépôt de garantie
49 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - 1er loyer
50 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Frais d’agence
51 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Assurances
52 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Déménagement
53 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Aide à l’installation
54 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Facture résiliation énergie (nv logement)
55 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés de loyer
56 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Énergie / Fluides
57 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés télécommunication
58 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés aire d'accueil GDV
59 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Lié à la COVID
60 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : Secours exceptionnels
61 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une aide pour des impayés ou accès logement Objectif : Mesure ASLL
62 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Faire une demande auprès de Association caritative
63 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une mesure de protection Objectif : Sauvegarde de justice
64 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une mesure de protection Objectif : Signalement personne vulnérable
65 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une mesure de protection Objectif : Mesure de protection personne majeure (tutelle, curatelle)
66 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une mesure de protection Objectif : Mesure d'Accompagnement Judiciaire (MAJ)
67 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Demander une mesure de protection Objectif : Mesure Judiciaire d'Aide à la Gestion du Budget Familial (MJAGBF)
68 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Arrêt à l'initiative du ménage pour déménagement
69 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Suspension momentanée de l'accompagnement par le ménage ou le professionnel
70 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Arrêt pour absence d'adhésion
71 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Arrêt à l'initiative du ménage pour séparation
72 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Arrêt à l'initiative du professionnel pour absence d'avancée
73 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Retour à l'autonomie
74 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Transmission pour mesure judiciaire d'aide à la gestion du budget familial
75 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Orientation vers une MASP
76 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Transmission pour une mesure d'accompagnement judiciaire
77 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Renouvellement de l'AEB dans l'attente d'une mesure de protection
78 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer un AEB Conclure l'AEB Résultat : Renouvellement de l'AEB pour poursuivre les objectifs engagés
79 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Soutenir dans les démarches administratives
80 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Aider au tri, au classement et à l’archivage des documents administratifs
81 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Soutenir les ménages dans l’apurement des dettes, accompagner les ménages endettées, surendettées
82 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Accompagner les ménages dans leur gestion budgétaire
83 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Aider les ménages à se questionner sur leur mode de consommation
84 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Assurer une fonction de médiation
85 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Soutenir les ménages dans les démarches liées au logement
86 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Aider à l'accès aux droits
87 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Aider à l'inclusion numérique
88 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Instruire des formulaires d'autres organismes non référencés…
89 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Instruire le dossier de surendettement
90 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Cibler des objectifs avec l'usager Objectif : Demander ou renouveler la couverture santé (ACS)
91 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide alimentaire
92 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : Centre Communal d’Action Sociale
93 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : CAF/MSA - Secours d’urgence
94 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : CAF/MSA - Aide financière
95 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : Caisse Primaire d’Assurance Maladie
96 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Cautionnement
97 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Dépôt de garantie
98 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - 1er loyer
99 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Frais d’agence
100 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Assurances
101 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Déménagement
102 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Aide à l’installation
103 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Accès - Facture résiliation énergie (nv logement)
104 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés de loyer
105 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Énergie / Fluides
106 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés télécommunication
107 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Impayés aire d'accueil GDV
108 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : FSL Maintien - Lié à la COVID
109 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : Secours exceptionnels
110 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une aide pour des impayés ou accès logement Objectif : Mesure ASLL
111 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une mesure de protection adulte Objectif : Sauvegarde de justice
112 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une mesure de protection adulte Objectif : Signalement personne vulnérable
113 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une mesure de protection adulte Objectif : Mesure de protection personne majeure (tutelle, curatelle)
114 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une mesure de protection adulte Objectif : Mesure d'Accompagnement Judiciaire (MAJ)
115 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Demander une mesure de protection adulte Objectif : Mesure Judiciaire d'Aide à la Gestion du Budget Familial (MJAGBF)
116 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Arrêt à l'initiative du ménage pour déménagement
117 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Suspension momentanée de l'accompagnement par le ménage ou le professionnel
118 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Arrêt pour absence d'adhésion
119 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Arrêt à l'initiative du ménage pour séparation
120 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Arrêt à l'initiative du professionnel pour absence d'avancée
121 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Retour à l'autonomie
122 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Transmission pour mesure judiciaire d'aide à la gestion du budget familial
123 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Transmission pour une mesure d'accompagnement judiciaire
124 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Renouvellement de MASP dans l'attente d'une mesure de protection
125 AD - PREVENTION, ACCES AUX DROITS, BUDGET SOUTIEN EQUILIBRE BUDGET Exercer une MASP Conclure la MASP Résultat : Renouvellement de MASP pour poursuivre les objectifs engagés
126 AD - LOGEMENT ACCES LOGEMENT (RE) Informer, conseiller
127 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Cautionnement
128 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Dépôt de garantie
129 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - 1er loyer
130 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Frais d’agence
131 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Assurances
132 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Déménagement
133 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Aide à l’installation
134 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Facture résiliation énergie (nv logement)
135 AD - LOGEMENT ACCES LOGEMENT (RE) Demander une aide pour l'accès Objectif : FSL Accès - Mesure ASLL
136 AD - LOGEMENT ACCES LOGEMENT (RE) Demander auprès des Bailleurs sociaux, mairies, partenaires
137 AD - LOGEMENT ACCES LOGEMENT (RE) Instruire une demande DALO, DAHO
138 AD - LOGEMENT ACCES LOGEMENT (RE) Instruire une demande SIAO
139 AD - LOGEMENT ACCES LOGEMENT (RE) Instruire une demande ASLL
140 AD - LOGEMENT ACCES LOGEMENT (RE) Instruire une demande au Contingent préfectoral
141 AD - LOGEMENT ACCES LOGEMENT (RE) Instruire une demande au 115
142 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Intervenir au commandement de payer
143 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire la fiche Assignation
144 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Répondre au commandement de quitter les lieux
145 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Répondre au concours de la force publique
146 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Demander une aide financière FSL pour impayé de loyer
147 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Déposer un dossier de surendettement
148 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Demander auprès des Bailleurs sociaux, mairies, partenaires
149 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire une demande DALO, DAHO
150 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire une demande SIAO
151 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire une demande ASLL
152 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire une demande au Contingent préfectoral
153 AD - LOGEMENT ACCES LOGEMENT (RE) Prévenir de l'expulsion Objectif : Instruire une demande au 115
154 AD - LOGEMENT HABITAT INDIGNE Informer, conseiller
155 AD - LOGEMENT HABITAT INDIGNE Demander une aide pour incurie Objectif : FSL maintien - aide incurie
156 AD - LOGEMENT HABITAT INDIGNE Instruire la grille de signalement
157 AD - LOGEMENT HABITAT INDIGNE Faire intervenir d'autres partenaires
158 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Informer, conseiller
159 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Demander un accompagnement psychologue insertion
160 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Exercer l'accompagnement psychologue insertion
161 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Renouveller l'accompagnement psychologue insertion
162 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Réorienter l'usager vers autres structures pour un accompagnement psychologique
163 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Demander l'accompagnement global Objectif : Axe 2
164 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Exercer l'accompagnement global Objectif : Axe 2
165 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Renouveller l'accompagnement global Objectif : Axe 2
166 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Demander l'accompagnement global Objectif : Axe 3 (agent d'insertion)
167 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Exercer l'accompagnement global Objectif : Axe 3 (agent d'insertion)
168 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Renouveller l'accompagnement global Objectif : Axe 3 (agent d'insertion)
169 AD - INSERTION SOCIALE PROFESSIONNELLE ACCOMPAGNEMENT INSERTION Instruire une demande MOVEA
170 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Informer, conseiller
171 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Aider à l'ouverture de droits
172 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renseigner la plateforme INCLUSION@COM pour les chantiers d'insertion
173 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Soutenir le parcours professionnel (emploi, formation, …)
174 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi)
175 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …)
176 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander la médiation emploi
177 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Création d'entreprise
178 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement travailleur non salarié
179 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement ASR CEIDRE
180 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Déposer un dossier MDPH
181 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Déposer un dossier retraite
182 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Soutenir l'accès au logement
183 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Accompagner le budget
184 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …)
185 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander le psychologue insertion
186 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Etre accompagné dans la parentalité
187 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Initier ou maintenir un parcours santé (cure, hospitalisation, CMP, …)
188 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Solliciliter un FAII
189 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Demander un réorientation Pôle Emploi
190 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire le 1er Contrat d'Engagement Réciproque Objectif : Autre
191 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Soutenir le parcours professionnel (emploi, formation, …)
192 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi)
193 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …)
194 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander la médiation emploi
195 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Création d'entreprise
196 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement travailleur non salarié
197 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement ASR CEIDRE
198 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Déposer un dossier MDPH
199 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Déposer un dossier retraite
200 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Soutenir l'accès au logement
201 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Accompagner le budget
202 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …)
203 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander le psychologue insertion
204 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Etre accompagné dans la parentalité
205 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Initier ou maintenir un parcours santé
206 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Solliciliter un FAII
207 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Demander un réorientation Pôle Emploi
208 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Renouveler le Contrat d'Engagement Réciproque Objectif : Autre
209 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Soutenir le parcours professionnel (emploi, formation, …)
210 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement global Axe 2 (orientation Pôle Emploi)
211 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Orienter vers une structure de l'insertion (chantier, AI, ETTI, …)
212 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander la médiation emploi
213 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Création d'entreprise
214 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement travailleur non salarié
215 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander l'accompagnement ASR CEIDRE
216 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Déposer un dossier MDPH
217 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Déposer un dossier retraite
218 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Soutenir l'accès au logement
219 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Accompagner le budget
220 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Soutenir la mobilité (MOVEA, transport solidaire, PST, …)
221 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander le psychologue insertion
222 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Etre accompagné dans la parentalité
223 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Initié ou maintenir un parcours santé
224 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Solliciliter un FAII
225 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Demander un réorientation Pôle Emploi
226 AD - INSERTION SOCIALE PROFESSIONNELLE RSA Faire un avenant au Contrat d'Engagement Réciproque Objectif : Autre
227 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Informer, conseiller
228 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Demander une aide FAJ Objectif : SU bons alimentaires
229 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Demander une aide FAJ Objectif : SU bons hygiène
230 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Demander une aide FAJ Objectif : SU bons carburant
231 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Demander une aide FAJ Objectif : SU virement
232 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Solliciter le comité FAJ Objectif : Aide financière
233 AD - INSERTION SOCIALE PROFESSIONNELLE JEUNES 16/25 AIDE FINANCIERE INSERTION Solliciter le comité FAJ Objectif : Action d’accompagnement
234 AD - SANTE Informer, conseiller
235 AD - SANTE Orienter vers une structure de soins (CMP, psychologue, cure, …)
236 AD - SANTE Instruire un dossier MDPH
237 AD - SANTE Accompagner le dépôt de dossier de pension d'invalidité
238 AD - SANTE Instruire le dossier Complémentaire santé ACS
239 AD – ACCOMPAGNEMENT SPECIFIQUE Informer, conseiller
240 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Procéder à une élection de domicile
241 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Demander une aide financière
242 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Demander un interprète
243 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Prendre contact avec le CADA
244 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Aider à la constitution de dossier auprès de la préfecture
245 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Faire le lien avec les associations
246 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Demander une aide médicale d'état
247 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Demander une carte mobilité
248 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Accompagner pour la scolarité des enfants (crèches, collège, péri scolaire, cantine…)
249 AD – ACCOMPAGNEMENT SPECIFIQUE Accompagner des publics spécifiques Objectif : Aider à la compréhension du français
250 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Informer, conseiller
251 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Orienter vers une autre structure
252 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Instruire une première demande d'Accompagnement Educatif de Prevention
253 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Demander le renouvellement de l'Accompagnement Educatif de Prévention
254 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : : Conduite à risque / Passage à l'acte isolé de l'enfant/adolescent
255 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Comportement de l'enfant/adolescent en difficulté avec les limites, les interdits, les règles sociales
256 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Difficultés de l'enfant en milieu scolaire ou extra-scolaire
257 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Difficultés liées à la prise d'autonomie
258 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Evènement - Traumatisme qui affecte l'équilibre familial
259 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Problème de communication intrafamiliale
260 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : Parents démunis sur le plan éducatif
261 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Problèmatique : conflits parentaux ayant des résonnances sur l'enfant/l'adolescent
262 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : travailler la place de chacun
263 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : Conseiller et soutenir le positionnement éducatif
264 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : Accompagner la relation parent-enfant
265 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : Accompagner les parents en lien avec les lieux de scolarisation et de socialisation de leurs enfants
266 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : Accompagner/orienter les parents en lien avec les lieux de soins
267 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : Accompagnement d’un jeune majeur
268 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Objectif : évaluation / Orientation
269 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : mise en place TISF
270 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Mise en place AED
271 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Mise en place CJM
272 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Mise en place d'un AP
273 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Transmission judiciaire pour AEMO
274 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Tramsmission judiciaire pour MJIE
275 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Excercer un Accompagnement Educatif de Prévention Dispositif : Transmission judiciaire pour une mesure de protection
276 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Arrêt à l’initiative de la famille
277 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Souhait interruption momentanée de l’accompagnement par la famille
278 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Orientation vers un partenaire extérieur
279 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Relais avec AS et/ou Puér
280 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Arrêt à échéance
281 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Transmission à l’ASE pour une mesure administrative
282 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Transmission à l’ASE pour une mesure judiciaire
283 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Renouvellement de l’AEP dans l’attente d’une mesure ASE
284 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Conclure un Accompagnement Educatif de Prévention Résultat : Renouvellement de l’AEP pour poursuivre les objectifs engagés
285 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Réaliser une permanence éducative
286 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Médiatiser les relations familiales
287 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander le passage en IRCP
288 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une mise en place TISF
289 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander le renouvellement TISF
290 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une mise en place AED
291 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une mise en place AESF
292 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une mise en place d'un AP (accueil provisoire)
293 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une mesure ASMI
294 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une entrée en centre maternelle
295 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une entrée en centre parental
296 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une entrée en Unité Mère Enfant (UME)
297 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une MJAGBF
298 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une AED TDC
299 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander la désignation un TDC
300 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander un CAP ASE
301 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une AMAE (allocation mensuelle d'aide éducative)
302 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une allocation socio-éducatif spécifique
303 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander un CAFI (aides fi)
304 ENFANT / FAMILLE SOUTIEN A LA PARENTALITE Solliciter les moyens dans le cadre d'un accompagnement à la parentalité Demander une autre aide (associations…)
305 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Motif : arrêt de l'adhésion des parents à l'accompagnement du soutien à la parentalité
306 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Motif : violence intra-familiale
307 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Motif : suite à une ISG
308 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Faire une FRIP
309 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Demander une MJIE
310 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Demander une mesure de protection
311 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Demander un OPP
312 ENFANT / FAMILLE ENFANT PREVENTION Alerter la CRIP Demander un placement
313 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Motif : arrêt de l'adhésion des parents à l'accompagnement du soutien à la parentalité
314 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Motif : violence intra-familiale
315 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Motif : suite à une ISG
316 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Demander une MJIE
317 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Demander une mesure de protection
318 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Demander un OPP
319 ENFANT / FAMILLE ENFANT PREVENTION Alerter l'ASE (RJA) pour situation connue Demander un placement
320 ENFANT / FAMILLE ENFANT PREVENTION Répondre à Eléments en votre possession
321 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation sans suite
322 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation demande d'accompagnement médico-sociale
323 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation pur demande de MJIE
324 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation pour demande d'AEMO
325 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation pour demande de placement
326 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Evaluation pour demande d'OPP
327 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation IP pour la CRIP Note complémentaire actualisation
328 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation sans suite
329 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation demande d'accompagnement médico-sociale
330 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation pur demande de MJIE
331 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation pour demande d'AEMO
332 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation pour demande de placement
333 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Evaluation pour demande d'OPP
334 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Réaliser une Evaluation pour l'ASE Note complémentaire actualisation
335 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander un AEP
336 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander une mise en place AED
337 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander une mise en place TISF
338 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander la mise en place d'un Accueil Provisoire
339 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander l'orientation vers d'autres structures (soins, MDA, …)
340 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander l'entrée en centre maternel
341 ENFANT / FAMILLE INFORMATIONS PREOCCUPANTES Mettre en place un accompagnement médicosocial suite à une IP Demander l'entrée unité mère / enfant
342 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Informer, conseiller
343 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Orienter vers SOS femme
344 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Proposer un conseiller ou une thérapie conjugale
345 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Proposer une médiation familiale
346 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Aider au dépôt de plainte
347 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Signaler un adulte vulnérable au procureur
348 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Demander une mesure de protection majeur
349 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Faire une FRIP pour enfant en danger
350 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Protéger des violences intra familiales Instruire la fiche VIF
351 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Conseiller
352 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Problématique : VIF
353 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Problématique : Difficultés éducatives
354 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Problématique : Protection de l’enfance
355 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Problématique : Violences sexuelles
356 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Problématique : Information suite à une séparation
357 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Orienter vers l'AS de secteur
358 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Orienter vers SOS femme
359 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Orienter vers un accompagnement CMP/libéral
360 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Orienter vers un conseiller ou thérapeute conjugal
361 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Aider au dépôt de plainte
362 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Signaler un adulte vulnérable au procureur
363 ENFANT / FAMILLE VIOLENCES INTRA-FAMILIALES Réaliser l'intervention sociale en gendarmerie Demander une mesure de protection majeur
364 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le lieu d'accueil
365 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Mise en place TISF
366 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Demande aide financière / SU
367 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Demande SU
368 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Participation à des actions collectives
369 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Mise en place d'un loisir familial
370 ENFANT PROTECTION ACCUEIL PROVISOIRE Mettre en place un soutien parental Mise en place d'une aide transport
371 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le mineur Demande mise en place d'un accompagnement psychologique
372 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le mineur Construire le PPE
373 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le mineur Mise en place CJM
374 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le mineur Demande MDPH
375 ENFANT PROTECTION ACCUEIL PROVISOIRE Accompagner le mineur Organiser la mise en place d'un loisir
376 ENFANT PROTECTION ACCUEIL PROVISOIRE Elaborer le lien partenarial
377 ENFANT PROTECTION ACCUEIL PROVISOIRE Demander une protection majeur vulnérable
378 ENFANT PROTECTION ACCUEIL PROVISOIRE Demande de MJIE (mesure judiciaire d'investigation éducative)
379 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Accompagner le lieu d'accueil
380 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Mettre en place un soutien parental Mise en place TISF
381 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Mettre en place un soutien parental Demande aide financière
382 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Mettre en place un soutien parental Demande SU
383 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Mettre en place un soutien parental Demande de protection majeur vulnérable
384 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Accompagner le mineur
385 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT DANS UN LIEU D'ACCUEIL Elaborer le lien partenarial
386 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT Mettre en place un soutien parental
387 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT Accompagner le mineur Construire le PPE
388 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT Accompagner le mineur Mise en place CJM
389 ENFANT PROTECTION ASSISTANCE EDUCATIVE DE PLACEMENT CHEZ LE PARENT Accompagner le mineur Organiser la participation à un camp de vacances
390 ENFANT PROTECTION DELEGATION D'AUTORITE PARENTALE Accompagner le lieu d'accueil
391 ENFANT PROTECTION DELEGATION D'AUTORITE PARENTALE Accompagner le mineur
392 ENFANT PROTECTION DELEGATION D'AUTORITE PARENTALE Elaborer le lien partenarial
393 ENFANT PROTECTION TUTELLE DEPARTEMENTALE
394 ENFANT PROTECTION TUTELLE D'ETAT Accompagner le lieu d'accueil
395 ENFANT PROTECTION TUTELLE D'ETAT Accompagner le mineur
396 ENFANT PROTECTION TUTELLE D'ETAT Elaborer le lien partenarial
397 ENFANT PROTECTION AEMO TDC Accompagner le lieu d'accueil
398 ENFANT PROTECTION AEMO TDC Mettre en place un soutien parental
399 ENFANT PROTECTION AEMO TDC Accompagner le mineur
400 ENFANT PROTECTION AEMO TDC Elaborer le lien partenarial
401 ENFANT PROTECTION AEMO FAMILLE Mettre en place un soutien parental
402 ENFANT PROTECTION AEMO FAMILLE Accompagner le mineur
403 ENFANT PROTECTION AEMO FAMILLE Elaborer le lien partenarial
404 AGREMENT ASSISTANT MATERNEL Instruire une première demande
405 AGREMENT ASSISTANT MATERNEL Instruire un renouvellement
406 AGREMENT ASSISTANT MATERNEL Instruire une modification
407 AGREMENT ASSISTANT MATERNEL Suivre un(e) ASSMAT
408 AGREMENT ASSISTANT MATERNEL Contrôler un(e) ASSMAT
409 AGREMENT ASSISTANT MATERNEL Accompagner un(e) ASSMAT
410 AGREMENT ASSISTANT FAMILIAL Instruire une première demande
411 AGREMENT ASSISTANT FAMILIAL Instruire un renouvellement
412 AGREMENT ASSISTANT FAMILIAL Instruire une modification
413 AGREMENT ASSISTANT FAMILIAL Suivre un(e) ASSFAM
414 AGREMENT ASSISTANT FAMILIAL Contrôler un(e) ASSFAM
415 AGREMENT ASSISTANT FAMILIAL Accompagner un(e) ASSFAM
416 AGREMENT FAMILLE D'ACCUEIL PA/PH Contribuer à l'évaluation si Famille d'Accueil connue Première demande
417 AGREMENT FAMILLE D'ACCUEIL PA/PH Contribuer à l'évaluation si Famille d'Accueil connue Renouvellement
418 AGREMENT FAMILLE D'ACCUEIL PA/PH Contribuer à l'évaluation si Famille d'Accueil connue Modification
419 AGREMENT FAMILLE D'ACCUEIL PA/PH Contribuer à l'évaluation si Famille d'Accueil connue Suivi

View File

@ -345,6 +345,111 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
]
]
],
[
'class' => \Chill\PersonBundle\Entity\SocialWork\SocialIssue::class,
'name' => 'social_issue',
'base_path' => '/admin/social-work/social-issue',
'form_class' => \Chill\PersonBundle\Form\SocialWork\SocialIssueType::class,
'controller' => \Chill\PersonBundle\Controller\SocialWork\AdminSocialIssueController::class,
'actions' => [
'index' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/SocialIssue/index.html.twig',
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/edit.html.twig',
]
]
],
[
'class' => \Chill\PersonBundle\Entity\SocialWork\SocialAction::class,
'name' => 'social_action',
'base_path' => '/admin/social-work/social-action',
'form_class' => \Chill\PersonBundle\Form\SocialWork\SocialActionType::class,
'controller' => \Chill\PersonBundle\Controller\SocialWork\AdminSocialActionController::class,
'actions' => [
'index' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/SocialAction/index.html.twig',
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/edit.html.twig',
]
]
],
[
'class' => \Chill\PersonBundle\Entity\SocialWork\Goal::class,
'name' => 'social_goal',
'base_path' => '/admin/social-work/goal',
'form_class' => \Chill\PersonBundle\Form\SocialWork\GoalType::class,
'controller' => \Chill\PersonBundle\Controller\SocialWork\AdminGoalController::class,
'actions' => [
'index' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/Goal/index.html.twig',
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/edit.html.twig',
]
]
],
[
'class' => \Chill\PersonBundle\Entity\SocialWork\Result::class,
'name' => 'social_result',
'base_path' => '/admin/social-work/result',
'form_class' => \Chill\PersonBundle\Form\SocialWork\ResultType::class,
'controller' => \Chill\PersonBundle\Controller\SocialWork\AdminResultController::class,
'actions' => [
'index' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/Result/index.html.twig',
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/edit.html.twig',
]
]
],
[
'class' => \Chill\PersonBundle\Entity\SocialWork\Evaluation::class,
'name' => 'social_evaluation',
'base_path' => '/admin/social-work/evaluation',
'form_class' => \Chill\PersonBundle\Form\SocialWork\EvaluationType::class,
'controller' => \Chill\PersonBundle\Controller\SocialWork\AdminEvaluationController::class,
'actions' => [
'index' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/Evaluation/index.html.twig',
],
'new' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/new.html.twig',
],
'edit' => [
'role' => 'ROLE_ADMIN',
'template' => '@ChillPerson/SocialWork/edit.html.twig',
]
]
],
],
'apis' => [
[

View File

@ -25,6 +25,7 @@ namespace Chill\PersonBundle\Entity;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Entity\Address;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
use Chill\PersonBundle\Entity\AccompanyingPeriod\Comment;
@ -291,6 +292,22 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
*/
private Collection $works;
/**
* @ORM\ManyToOne(
* targetEntity=Person::class,
* inversedBy="periodLocatedOn"
* )
*/
private ?Person $personLocation = null;
/**
* @ORM\ManyToOne(
* targetEntity=Address::class
* )
*/
private ?Address $addressLocation = null;
/**
* AccompanyingPeriod constructor.
*
@ -824,7 +841,9 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
public function addSocialIssue(SocialIssue $socialIssue): self
{
$this->socialIssues[] = $socialIssue;
if (!$this->socialIssues->contains($socialIssue)) {
$this->socialIssues[] = $socialIssue;
}
return $this;
}
@ -931,4 +950,67 @@ class AccompanyingPeriod implements TrackCreationInterface, TrackUpdateInterface
return $this;
}
public function getAddressLocation(): ?Address
{
return $this->addressLocation;
}
/**
* @Groups({"write"})
*/
public function setAddressLocation(?Address $addressLocation = null): self
{
$this->addressLocation = $addressLocation;
return $this;
}
/**
* @Groups({"read"})
*/
public function getPersonLocation(): ?Person
{
return $this->personLocation;
}
/**
* @Groups({"write"})
*/
public function setPersonLocation(?Person $person = null): self
{
$this->personLocation = $person;
return $this;
}
/**
* Get the location, taking precedence into account
*
* @Groups({"read"})
*/
public function getLocation(\DateTimeImmutable $at = null): ?Address
{
if ($this->getPersonLocation() instanceof Person) {
return $this->getPersonLocation()->getCurrentHouseholdAddress($at);
}
return $this->getAddressLocation();
}
/**
* Get where the location is
*
* @Groups({"read"})
*/
public function getLocationStatus(): string
{
if ($this->getPersonLocation() instanceof Person) {
return 'person';
} elseif ($this->getAddressLocation() instanceof Address) {
return 'address';
} else {
return 'none';
}
}
}

View File

@ -160,12 +160,26 @@ use Symfony\Component\Validator\Constraints as Assert;
*/
private Collection $persons;
/**
* @var Collection
* @ORM\OneToMany(
* targetEntity=AccompanyingPeriodWorkEvaluation::class,
* mappedBy="accompanyingPeriodWork",
* cascade={"persist"},
* orphanRemoval=true
* )
* @Serializer\Groups({"read"})
* @internal /!\ the serialization for read / write evaluations is handled in `AccompanyingPeriodWorkDenormalizer`
*/
private Collection $accompanyingPeriodWorkEvaluations;
public function __construct()
{
$this->goals = new ArrayCollection();
$this->results = new ArrayCollection();
$this->thirdParties = new ArrayCollection();
$this->persons = new ArrayCollection();
$this->accompanyingPeriodWorkEvaluations = new ArrayCollection();
}
public function getId(): ?int
@ -388,6 +402,11 @@ use Symfony\Component\Validator\Constraints as Assert;
return $this->thirdParties;
}
public function getThirdPartys(): Collection
{
return $this->getThirdParties();
}
public function addThirdParty(ThirdParty $thirdParty): self
{
if (!$this->thirdParties->contains($thirdParty)) {
@ -424,4 +443,31 @@ use Symfony\Component\Validator\Constraints as Assert;
return $this;
}
/**
* @return Collection
*/
public function getAccompanyingPeriodWorkEvaluations()
{
return $this->accompanyingPeriodWorkEvaluations;
}
public function addAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self
{
if (!$this->accompanyingPeriodWorkEvaluations->contains($evaluation)) {
$this->accompanyingPeriodWorkEvaluations[] = $evaluation;
$evaluation->setAccompanyingPeriodWork($this);
}
return $this;
}
public function removeAccompanyingPeriodWorkEvaluation(AccompanyingPeriodWorkEvaluation $evaluation): self
{
$this->accompanyingPeriodWorkEvaluations
->removeElement($evaluation);
$evaluation->setAccompanyingPeriodWork(null);
return $this;
}
}

View File

@ -0,0 +1,369 @@
<?php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\SocialWork\Evaluation;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluationDocument;
use DateInterval;
use DateTimeImmutable;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer;
/**
* @ORM\Entity
* @ORM\Table("chill_person_accompanying_period_work_evaluation")
* @Serializer\DiscriminatorMap(typeProperty="type", mapping={
* "accompanying_period_work_evaluation"=AccompanyingPeriodWorkEvaluation::class,
* })
*/
class AccompanyingPeriodWorkEvaluation implements TrackUpdateInterface, TrackCreationInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Serializer\Groups({"read"})
*/
private ?int $id = null;
/**
* @ORM\ManyToOne(
* targetEntity=AccompanyingPeriodWork::class,
* inversedBy="accompanyingPeriodWorkEvaluations"
* )
*/
private ?AccompanyingPeriodWork $accompanyingPeriodWork = null;
/**
* @ORM\ManyToOne(
* targetEntity=Evaluation::class
* )
* @Serializer\Groups({"read"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private ?Evaluation $evaluation = null;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
* @Serializer\Groups({"write"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private ?DateTimeImmutable $startDate = null;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
* @Serializer\Groups({"write"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private ?DateTimeImmutable $endDate = null;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private ?DateTimeImmutable $maxDate = null;
/**
* @ORM\Column(type="dateinterval", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private ?DateInterval $warningInterval = null;
/**
* @var string
* @ORM\Column(type="text", nullable=false, options={"default": ""})
* @Serializer\Groups({"read"})
* @Serializer\Groups({"write"})
* @Serializer\Groups({"accompanying_period_work_evaluation:create"})
*/
private string $comment = '';
/**
* @ORM\ManyToOne(
* targetEntity=User::class
* )
* @Serializer\Groups({"read"})
*/
private ?User $createdBy = null;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private ?DateTimeImmutable $createdAt = null;
/**
* @ORM\ManyToOne(
* targetEntity=User::class
* )
* @Serializer\Groups({"read"})
*/
private ?User $updatedBy = null;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private ?DateTimeImmutable $updatedAt = null;
/**
* @var Collection
* @ORM\OneToMany(
* targetEntity=AccompanyingPeriodWorkEvaluationDocument::class,
* mappedBy="accompanyingPeriodWorkEvaluation"
* )
* @Serializer\Groups({"read"})
*/
private Collection $documents;
public function __construct()
{
$this->documents = new ArrayCollection();
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return AccompanyingPeriodWork|null
*/
public function getAccompanyingPeriodWork(): ?AccompanyingPeriodWork
{
return $this->accompanyingPeriodWork;
}
/**
* @param AccompanyingPeriodWork|null $accompanyingPeriodWork
* @return AccompanyingPeriodWorkEvaluation
*/
public function setAccompanyingPeriodWork(?AccompanyingPeriodWork $accompanyingPeriodWork): AccompanyingPeriodWorkEvaluation
{
if (
$accompanyingPeriodWork instanceof AccompanyingPeriodWork
&& $this->accompanyingPeriodWork instanceof AccompanyingPeriodWork
&& $this->accompanyingPeriodWork->getId() !== $accompanyingPeriodWork->getId()) {
throw new \RuntimeException("Changing the ".
"accompanyingPeriodWork is not allowed");
}
$this->accompanyingPeriodWork = $accompanyingPeriodWork;
return $this;
}
/**
* @return Evaluation|null
*/
public function getEvaluation(): ?Evaluation
{
return $this->evaluation;
}
/**
* @param Evaluation|null $evaluation
* @return AccompanyingPeriodWorkEvaluation
*/
public function setEvaluation(?Evaluation $evaluation): AccompanyingPeriodWorkEvaluation
{
if (
($evaluation instanceof Evaluation
&& $this->evaluation instanceof Evaluation
&& $evaluation->getId() !== $this->evaluation->getId())
||
($this->evaluation instanceof Evaluation
&& null === $evaluation)
) {
throw new \LogicException("once set, an ${self::class} cannot
change or remove the linked Evaluation::class");
}
$this->evaluation = $evaluation;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getStartDate(): ?DateTimeImmutable
{
return $this->startDate;
}
/**
* @param DateTimeImmutable|null $startDate
* @return AccompanyingPeriodWorkEvaluation
*/
public function setStartDate(?DateTimeImmutable $startDate): AccompanyingPeriodWorkEvaluation
{
$this->startDate = $startDate;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getEndDate(): ?DateTimeImmutable
{
return $this->endDate;
}
/**
* @param DateTimeImmutable|null $endDate
* @return AccompanyingPeriodWorkEvaluation
*/
public function setEndDate(?DateTimeImmutable $endDate): AccompanyingPeriodWorkEvaluation
{
$this->endDate = $endDate;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getMaxDate(): ?DateTimeImmutable
{
return $this->maxDate;
}
/**
* @param DateTimeImmutable|null $maxDate
* @return AccompanyingPeriodWorkEvaluation
*/
public function setMaxDate(?DateTimeImmutable $maxDate): AccompanyingPeriodWorkEvaluation
{
$this->maxDate = $maxDate;
return $this;
}
/**
* @return DateInterval|null
*/
public function getWarningInterval(): ?DateInterval
{
return $this->warningInterval;
}
/**
* @param DateInterval|null $warningInterval
* @return AccompanyingPeriodWorkEvaluation
*/
public function setWarningInterval(?DateInterval $warningInterval): AccompanyingPeriodWorkEvaluation
{
$this->warningInterval = $warningInterval;
return $this;
}
/**
* @return string
*/
public function getComment(): string
{
return $this->comment;
}
/**
* @param string $comment
* @return AccompanyingPeriodWorkEvaluation
*/
public function setComment(string $comment): AccompanyingPeriodWorkEvaluation
{
$this->comment = $comment;
return $this;
}
/**
* @return User|null
*/
public function getCreatedBy(): ?User
{
return $this->createdBy;
}
/**
* @param User|null $createdBy
* @return AccompanyingPeriodWorkEvaluation
*/
public function setCreatedBy(?User $createdBy): AccompanyingPeriodWorkEvaluation
{
$this->createdBy = $createdBy;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getCreatedAt(): ?DateTimeImmutable
{
return $this->createdAt;
}
/**
* @param DateTimeImmutable|null $createdAt
* @return AccompanyingPeriodWorkEvaluation
*/
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
/**
* @return User|null
*/
public function getUpdatedBy(): ?User
{
return $this->updatedBy;
}
/**
* @param User|null $updatedBy
* @return AccompanyingPeriodWorkEvaluation
*/
public function setUpdatedBy(?User $updatedBy): AccompanyingPeriodWorkEvaluation
{
$this->updatedBy = $updatedBy;
return $this;
}
/**
* @return DateTimeImmutable|null
*/
public function getUpdatedAt(): ?DateTimeImmutable
{
return $this->updatedAt;
}
/**
* @param DateTimeImmutable|null $updatedAt
* @return AccompanyingPeriodWorkEvaluation
*/
public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* @return Collection
*/
public function getDocuments()
{
return $this->documents;
}
}

View File

@ -0,0 +1,175 @@
<?php
namespace Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Entity\User;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer;
/**
* @ORM\Entity
* @ORM\Table("chill_person_accompanying_period_work_evaluation_document")
* @Serializer\DiscriminatorMap(typeProperty="type", mapping={
* "accompanying_period_work_evaluation_document"=AccompanyingPeriodWorkEvaluationDocument::class
* })
*/
class AccompanyingPeriodWorkEvaluationDocument implements \Chill\MainBundle\Doctrine\Model\TrackCreationInterface, \Chill\MainBundle\Doctrine\Model\TrackUpdateInterface
{
/**
* @var int|null
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @internal the default name exceeds 64 characters, we must set manually:
* @ORM\SequenceGenerator(sequenceName="chill_person_social_work_eval_doc_id_seq", allocationSize=1, initialValue=1000)
* @Serializer\Groups({"read"})
*/
private ?int $id;
/**
* @var AccompanyingPeriodWorkEvaluation|null
* @ORM\ManyToOne(
* targetEntity=AccompanyingPeriodWorkEvaluation::class,
* inversedBy="documents"
* )
*/
private ?AccompanyingPeriodWorkEvaluation $accompanyingPeriodWorkEvaluation;
/**
* @ORM\ManyToOne(
* targetEntity=User::class
* )
* @Serializer\Groups({"read"})
*/
private ?User $createdBy;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private ?\DateTimeImmutable $createdAt;
/**
* @ORM\ManyToOne(
* targetEntity=User::class
* )
* @Serializer\Groups({"read"})
*/
private ?User $updatedBy;
/**
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private ?DateTimeImmutable $updatedAt;
// TODO: indiquer le document généré par le module "document"
private ?StoredObject $storedObject;
// TODO: ajouter gabarit
/**
* @return AccompanyingPeriodWorkEvaluation|null
*/
public function getAccompanyingPeriodWorkEvaluation(): ?AccompanyingPeriodWorkEvaluation
{
return $this->accompanyingPeriodWorkEvaluation;
}
/**
* @param AccompanyingPeriodWorkEvaluation|null $accompanyingPeriodWorkEvaluation
* @return AccompanyingPeriodWorkEvaluationDocument
*/
public function setAccompanyingPeriodWorkEvaluation(?AccompanyingPeriodWorkEvaluation $accompanyingPeriodWorkEvaluation): AccompanyingPeriodWorkEvaluationDocument
{
$this->accompanyingPeriodWorkEvaluation = $accompanyingPeriodWorkEvaluation;
return $this;
}
/**
* @return StoredObject|null
*/
public function getStoredObject(): ?StoredObject
{
return $this->storedObject;
}
/**
* @param StoredObject|null $storedObject
* @return AccompanyingPeriodWorkEvaluationDocument
*/
public function setStoredObject(?StoredObject $storedObject): AccompanyingPeriodWorkEvaluationDocument
{
$this->storedObject = $storedObject;
return $this;
}
public function setCreatedBy(User $user): \Chill\MainBundle\Doctrine\Model\TrackCreationInterface
{
$this->createdBy = $user;
return $this;
}
public function setCreatedAt(\DateTimeInterface $datetime): \Chill\MainBundle\Doctrine\Model\TrackCreationInterface
{
$this->createdAt = $datetime;
return $this;
}
public function setUpdatedBy(User $user): \Chill\MainBundle\Doctrine\Model\TrackUpdateInterface
{
$this->updatedBy = $user;
return $this;
}
public function setUpdatedAt(\DateTimeInterface $datetime): \Chill\MainBundle\Doctrine\Model\TrackUpdateInterface
{
$this->updatedAt = $datetime;
return $this;
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return User|null
*/
public function getCreatedBy(): ?User
{
return $this->createdBy;
}
/**
* @return \DateTimeImmutable|null
*/
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
/**
* @return User|null
*/
public function getUpdatedBy(): ?User
{
return $this->updatedBy;
}
/**
* @return DateTimeImmutable|null
*/
public function getUpdatedAt(): ?DateTimeInterface
{
return $this->updatedAt;
}
}

View File

@ -30,6 +30,7 @@ use Chill\MainBundle\Entity\Country;
use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Entity\MaritalStatus;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\MainBundle\Entity\HasCenterInterface;
use Chill\MainBundle\Entity\Address;
@ -379,6 +380,19 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI
*/
private Collection $householdAddresses;
/**
* @ORM\OneToMany(
* targetEntity=AccompanyingPeriod::class,
* mappedBy="personLocation"
* )
*/
private Collection $periodLocatedOn;
/**
* Person constructor.
*
* @param \DateTime|null $opening
*/
public function __construct()
{
$this->accompanyingPeriodParticipations = new ArrayCollection();

View File

@ -3,10 +3,14 @@
namespace Chill\PersonBundle\Entity\SocialWork;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation as Serializer;
/**
* @ORM\Entity
* @ORM\Table(name="chill_person_social_work_evaluation")
* @Serializer\DiscriminatorMap(typeProperty="type", mapping={
* "social_work_evaluation"=Evaluation::class
* })
*/
class Evaluation
{
@ -14,26 +18,33 @@ class Evaluation
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Serializer\Groups({"read"})
*/
private $id;
/**
* @ORM\Column(type="json")
* @Serializer\Groups({"read"})
*/
private $title = [];
/**
* @ORM\Column(type="dateinterval", nullable=true)
* @ORM\Column(type="dateinterval", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private $delay;
/**
* @ORM\Column(type="dateinterval")
* @ORM\Column(type="dateinterval", nullable=true, options={"default": null})
* @Serializer\Groups({"read"})
*/
private $notificationDelay;
/**
* @ORM\ManyToOne(targetEntity=SocialAction::class)
* @ORM\ManyToOne(
* targetEntity=SocialAction::class,
* inversedBy="evaluations"
* )
*/
private $socialAction;

View File

@ -68,6 +68,15 @@ class SocialAction
*/
private $results;
/**
* @var Collection
* @ORM\OneToMany(
* targetEntity=Evaluation::class,
* mappedBy="socialAction"
* )
*/
private Collection $evaluations;
public function __construct()
{
$this->children = new ArrayCollection();
@ -257,4 +266,12 @@ class SocialAction
return $this;
}
/**
* @return Collection
*/
public function getEvaluations(): Collection
{
return $this->evaluations;
}
}

View File

@ -0,0 +1,71 @@
<?php
/*
*
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Form\SocialWork;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\PersonBundle\Entity\SocialWork\Evaluation;
/**
* Class EvaluationType
*
* @package Chill\PersonBundle\Form
*/
class EvaluationType extends AbstractType
{
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
public function __construct(TranslatableStringHelper $translatableStringHelper) {
$this->translatableStringHelper = $translatableStringHelper;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TranslatableStringFormType::class, [
'label' => 'Nom',
])
->add('delay')
->add('notificationDelay');
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', Evaluation::class)
;
}
}

View File

@ -0,0 +1,85 @@
<?php
/*
*
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Form\SocialWork;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\PersonBundle\Entity\SocialWork\Goal;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
/**
* Class GoalType
*
* @package Chill\PersonBundle\Form
*/
class GoalType extends AbstractType
{
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
public function __construct(TranslatableStringHelper $translatableStringHelper) {
$this->translatableStringHelper = $translatableStringHelper;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TranslatableStringFormType::class, [
'label' => 'Nom'
])
->add('socialActions', EntityType::class, [
'class' => SocialAction::class,
'required' => false,
'multiple' => true,
'choice_label' => function (SocialAction $issue) {
return $this->translatableStringHelper->localize($issue->getTitle());
}
])
->add('desactivationDate', DateType::class, [
'attr' => array('class' => 'datepicker'),
'widget'=> 'single_text',
'format' => 'dd-MM-yyyy',
'required' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', Goal::class)
;
}
}

View File

@ -0,0 +1,76 @@
<?php
/*
*
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Form\SocialWork;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\PersonBundle\Entity\SocialWork\Result;
/**
* Class ResultType
*
* @package Chill\PersonBundle\Form
*/
class ResultType extends AbstractType
{
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
public function __construct(TranslatableStringHelper $translatableStringHelper) {
$this->translatableStringHelper = $translatableStringHelper;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TranslatableStringFormType::class, [
'label' => 'Nom'
])
->add('accompanyingPeriodWorks')
->add('accompanyingPeriodWorkGoals')
->add('desactivationDate', DateType::class, [
'attr' => array('class' => 'datepicker'),
'widget'=> 'single_text',
'format' => 'dd-MM-yyyy',
'required' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', Result::class)
;
}
}

View File

@ -0,0 +1,90 @@
<?php
/*
*
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Form\SocialWork;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
/**
* Class SocialActionType
*
* @package Chill\PersonBundle\Form
*/
class SocialActionType extends AbstractType
{
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
public function __construct(TranslatableStringHelper $translatableStringHelper) {
$this->translatableStringHelper = $translatableStringHelper;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TranslatableStringFormType::class, [
'label' => 'Nom'
])
->add('issue', EntityType::class, [
'class' => SocialIssue::class,
'choice_label' => function (SocialIssue $issue) {
return $this->translatableStringHelper->localize($issue->getTitle());
}
])
->add('parent', EntityType::class, [
'class' => SocialAction::class,
'required' => false,
'choice_label' => function (SocialAction $issue) {
return $this->translatableStringHelper->localize($issue->getTitle());
}
])
->add('defaultNotificationDelay')
->add('desactivationDate', DateType::class, [
'attr' => array('class' => 'datepicker'),
'widget'=> 'single_text',
'format' => 'dd-MM-yyyy',
'required' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', SocialIssue::class)
;
}
}

View File

@ -0,0 +1,83 @@
<?php
/*
*
* Copyright (C) 2014-2021, Champs Libres Cooperative SCRLFS, <http://www.champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Form\SocialWork;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
/**
* Class SocialIssueType
*
* @package Chill\PersonBundle\Form
*/
class SocialIssueType extends AbstractType
{
/**
*
* @var TranslatableStringHelper
*/
protected $translatableStringHelper;
public function __construct(TranslatableStringHelper $translatableStringHelper) {
$this->translatableStringHelper = $translatableStringHelper;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TranslatableStringFormType::class, [
'label' => 'Nom'
])
->add('parent', EntityType::class, [
'class' => SocialIssue::class,
'required' => false,
'choice_label' => function (SocialIssue $issue) {
return $this->translatableStringHelper->localize($issue->getTitle());
}
])
->add('desactivationDate', DateType::class, [
'attr' => ['class' => 'datepicker'],
'widget'=> 'single_text',
'format' => 'dd-MM-yyyy',
'required' => false,
]);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('class', SocialIssue::class)
;
}
}

View File

@ -25,6 +25,7 @@ namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ObjectRepository;
final class AccompanyingPeriodRepository implements ObjectRepository
@ -48,7 +49,7 @@ final class AccompanyingPeriodRepository implements ObjectRepository
return $this->repository->findAll();
}
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): ?AccompanyingPeriod
public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null): array
{
return $this->repository->findBy($criteria, $orderBy, $limit, $offset);
}
@ -62,5 +63,4 @@ final class AccompanyingPeriodRepository implements ObjectRepository
{
return AccompanyingPeriod::class;
}
}

View File

@ -18,11 +18,13 @@
namespace Chill\PersonBundle\Repository;
use Chill\PersonBundle\Entity\Person;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
final class PersonRepository
{
private EntityRepository $repository;
@ -113,11 +115,20 @@ final class PersonRepository
$qb->setParameter('phonenumber', '%'.$phonenumber.'%');
}
/**
* @param $phonenumber
* @return string
*/
protected function parsePhoneNumber(string $phonenumber): string
{
return \str_replace(' ', '', $phonenumber);
}
/**
* @param QueryBuilder $qb
* @param array $centers
*/
protected function addByCenters(QueryBuilder $qb, array $centers): void
{
if (count($centers) > 0) {

View File

@ -1,6 +1,25 @@
<?php
declare(strict_types=1);
/*
* Chill is a software for social workers
*
* Copyright (C) 2021, Champs Libres Cooperative SCRLFS,
* <http://www.champs-libres.coop>, <info@champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\PersonBundle\Repository\SocialWork;

View File

@ -4,29 +4,24 @@
/*
* PERSON CONTEXT
*/
div#header-person-name {
background: none repeat scroll 0 0 $chill-green-dark;
color: #FFF;
padding-top: 1em;
padding-bottom: 1em;
}
div#header-person-details {
background: none repeat scroll 0 0 $chill-green;
color: #FFF;
padding-top: 1em;
padding-bottom: 1em;
div.contact {
& > * {
margin-right: 1em;
}
}
}
div#person_details_container {
padding-top: 20px;
padding-bottom: 20px;
div.banner {
div#header-person-name {
background: none repeat scroll 0 0 $chill-green-dark;
color: $white;
padding-top: 1em;
padding-bottom: 1em;
}
div#header-person-details {
background: none repeat scroll 0 0 $chill-green;
color: $white;
padding-top: 1em;
padding-bottom: 1em;
div.contact {
& > * {
margin-right: 1em;
}
}
}
}
div.person-view {
@ -83,80 +78,77 @@ div.person-view {
* ACCOMPANYING_COURSE CONTEXT
* Header custom for Accompanying Course
*/
$chill-accourse-context: #718596;
div#header-accompanying_course-name {
background: none repeat scroll 0 0 #718596;
color: #FFF;
h1 {
margin: 0.4em 0;
}
span {
a {
color: white;
div.banner {
div#header-accompanying_course-name {
background: none repeat scroll 0 0 $chill-accourse-context;
color: $white;
h1 {
margin: 0.4em 0;
}
span {
a {
color: $white;
}
a:hover {
text-decoration: underline;
}
}
}
a:hover {
text-decoration: underline;
div#header-accompanying_course-details {
background: none repeat scroll 0 0 tint-color($chill-accourse-context, 20%);
color: $white;
padding-top: 1em;
padding-bottom: 1em;
}
}
}
div#header-accompanying_course-details {
background: none repeat scroll 0 0 #718596ab;
color: #FFF;
padding-top: 1em;
padding-bottom: 1em;
}
/*
* HOUSEHOLD CONTEXT
* Header custom for Household
*/
$chill-household-context: #929d69;
div#header-household-name {
background: none repeat scroll 0 0 #929d69; //#b97a7a;
color: #FFF;
h1 {
margin: 0.4em 0;
}
span {
a {
color: white;
}
a:hover {
text-decoration: underline;
}
}
div.banner {
div#header-household-name {
background: none repeat scroll 0 0 $chill-household-context;
color: $white;
h1 {
margin: 0.4em 0;
}
span {
a {
color: $white;
}
a:hover {
text-decoration: underline;
}
}
div.household-members {
display: flex;
flex-direction: row;
flex-wrap: wrap;
span.badge-member {
flex-shrink: 0; flex-grow: 0; flex-basis: auto;
color: $white;
border: 1px solid #ffffff3b;
border-radius: 8px;
padding: 0.4em 0.8em;
margin-bottom: 0.2em;
margin-right: 0.3em;
&.holder { order: -1; }
&.child { order: 2; }
}
}
}
div#header-household-details {
background: none repeat scroll 0 0 tint-color($chill-household-context, 15%);
color: $white;
padding-top: 1em;
padding-bottom: 1em;
span.current-members-explain {
font-weight: bold;
}
}
}
div#header-household-details {
background: none repeat scroll 0 0 #b0b984; //#d29791;
color: #FFF;
padding-top: 1em;
padding-bottom: 1em;
span.current-members-explain {
font-weight: bold;
}
}
div.household-members {
display: flex;
flex-direction: row;
flex-wrap: wrap;
//justify-content: flex-end;
span.badge-member {
flex-shrink: 0; flex-grow: 0; flex-basis: auto;
border: 1px solid #ffffff3b;
color: #ffffff;
padding: 0.4em 0.8em;
margin-bottom: 0.2em;
margin-right: 0.3em;
border-radius: 8px;
&.holder {
order: -1;
}
&.child {
order: 2;
}
}
}

View File

@ -8,6 +8,7 @@ require('./scss/household_banner.scss');
require('./scss/accompanying_period_work.scss');
require('./scss/person_by_phonenumber.scss');
require('./scss/render_box.scss');
require('./scss/flex_table.scss');
require('./scss/address_history.scss');
require('./svg/phone-alt-solid.svg');

View File

@ -0,0 +1,31 @@
/*
* flex-table overwrite: precision and exceptions
*/
///
div.accompanyingcourse-resume {
div.associated-persons {
.flex-table .item-row .item-col:first-child {
flex-basis: 33%;
}
}
}
///
div.accompanyingcourse-list, div.household-members {
.flex-table .item-bloc .item-row {
&:nth-child(2) {
flex-direction: row;
}
&:last-child {
flex-direction: column;
}
}
}
///
div.list-with-period {
div.flex-table div.item-row div.item-col:first-child {
flex-basis: 33%;
}
}

View File

@ -1,10 +1,7 @@
/// complete and overwrite flex-table in chillmain.scss
div.list-with-period,
div.list-household-members {
div.comment {
// for the comment for household-members
}
///
div.list-with-period, div.list-household-members {
div.periods {
div.header,
div.list-content {
@ -13,7 +10,7 @@ div.list-household-members {
}
div.header {
position: relative;
a.sc-button {
a.btn {
position: absolute;
width: 30px;
height: 30px;

View File

@ -0,0 +1,99 @@
<template>
<div>
<div class="item-title" @click="removeEvaluation(e)">
<i class="fa fa-fw fa-times"></i>
{{ evaluation.evaluation.title.fr }}
</div>
<div v-if="!editEvaluation">
<dl class="item-details definition-inline">
<dt v-if="evaluation.startDate">{{ $t('startDate') }} :</dt>
<dd v-if="evaluation.startDate">{{ $d(evaluation.startDate.datetime, 'short') }}</dd>
<dt v-if="evaluation.endDate">{{ $t('endDate') }} :</dt>
<dd v-if="evaluation.endDate">{{ $d(evaluation.endDate.datetime, 'short') }}</dd>
<dt v-if="evaluation.maxDate">{{ $t('maxDate') }} :</dt>
<dd v-if="evaluation.maxDate">{{ $d(evaluation.maxDate.datetime, 'short') }}</dd>
<dt v-if="evaluation.warningInterval">{{ $t('warningInterval') }} :</dt>
<dd v-if="evaluation.warningInterval">{{ evaluation.warningInterval }}</dd>
<dt v-if="evaluation.documents && evaluation.documents.length > 0">{{ $t('documents') }} :</dt>
<dd v-if="evaluation.documents && evaluation.documents.length > 0">{{ evaluation.documents.length }}</dd>
</dl>
<dl class="item-details">
<dt v-if="evaluation.comment">{{ $t('comment') }} :</dt>
<dd v-if="evaluation.comment">{{ evaluation.comment }}</dd>
</dl>
<ul class="record_actions">
<li>
<a class="btn btn-sm btn-update" @click="toggleEditEvaluation(e)">{{ $t('action.edit') }}</a>
</li>
</ul>
</div>
<div v-if="editEvaluation">
<form-evaluation ref="FormEvaluation" :key="evaluation.id" :evaluation="evaluation"></form-evaluation>
<ul class="record_actions">
<li>
<button class="btn btn-sm btn-update" @click="submitForm">{{ $t('action.save') }}</button>
</li>
</ul>
</div>
</div>
</template>
<script>
import FormEvaluation from './FormEvaluation.vue';
const i18n = {
messages: {
fr: {
no_evaluation_associated: "Aucune évaluation associée",
add_an_evaluation: "Évaluations disponibles",
evaluation_has_no_evaluation: "Aucune évaluation disponible",
startDate: "Date d'ouverture",
endDate: "Date de fin",
maxDate: "Date d'échéance",
warningInterval: "Rappel (jours)",
comment: "Note publique",
documents: "Documents",
}
}
};
export default {
name: "AddEvaluation",
components: {
FormEvaluation
},
props: ['evaluation'],
i18n,
data() {
return {
editEvaluation: false,
};
},
computed: {
pickedEvaluations() {
return this.$store.state.evaluationsPicked;
}
},
methods: {
removeEvaluation(e) {
this.$store.commit('removeEvaluation', e);
return;
},
toggleEditEvaluation(e) {
this.editEvaluation = !this.editEvaluation;
},
submitForm() {
this.$refs.FormEvaluation.saveEvaluation();
this.toggleEditEvaluation();
}
}
}
</script>

View File

@ -1,166 +1,128 @@
<template>
<div class="addResult" v-if="hasResult">
<p class="chill-no-data-statement" v-if="pickedResults.length ===0">
Aucun résultat associé
</p>
<ul class="list-results">
<li v-for="r in pickedResults" @click="removeResult(r)" class="badge bg-primary">
<i class="fa fa-times"></i>
{{ r.title.fr }}
</li>
<template v-if="isExpanded">
<li v-for="r in availableForCheckResults" @click="addResult(r)" class="badge bg-primary">
<i class="fa fa-plus"></i>
{{ r.title.fr }}
</li>
</template>
</ul>
<ul class="record_actions">
<li v-if="isExpanded">
<button @click="toggleSelect" class="btn btn-hide" >
<i class="fa fa-eye-slash"></i>
Masquer résultats et orientations disponibles
</button>
</li>
<li v-else>
<button @click="toggleSelect" class="btn btn-show">
Afficher résultats et orientations disponibles
</button>
</li>
</ul>
</div>
<div class="noResult" v-if="!hasResult">
<div class="chill-no-data-statement">
{{ $t('goal_has_no_result') }}
</div>
</div>
<div v-if="hasResult" class="addResult">
<p v-if="pickedResults.length ===0" class="chill-no-data-statement">
Aucun résultat associé
</p>
<ul class="list-results">
<li v-for="r in pickedResults" class="badge bg-primary" @click="removeResult(r)">
<i class="fa fa-times"></i>
{{ r.title.fr }}
</li>
<template v-if="isExpanded">
<li v-for="r in availableForCheckResults" class="badge bg-primary" @click="addResult(r)">
<i class="fa fa-plus"></i>
{{ r.title.fr }}
</li>
</template>
</ul>
<ul class="record_actions">
<li v-if="isExpanded">
<button class="btn btn-hide" @click="toggleSelect">
<i class="fa fa-eye-slash"></i>
Masquer résultats et orientations disponibles
</button>
</li>
<li v-else>
<button class="btn btn-show" @click="toggleSelect">
Afficher résultats et orientations disponibles
</button>
</li>
</ul>
</div>
<div v-if="!hasResult" class="noResult">
<div class="chill-no-data-statement">
{{ $t('goal_has_no_result') }}
</div>
</div>
</template>
<style lang="scss">
button.hide {
background-color: rgb(51, 77, 92);
}
ul.list-results {
list-style-type: none;
padding: 0;
li {
margin: 0.5rem;
}
li.badge {
padding-bottom: 0;
padding-top: 0;
padding-left: 0;
i.fa {
/*border-radius: 0.25rem; */
padding: 0.25rem;
}
i.fa-plus {
background-color: green;
}
i.fa-times {
background-color: red;
color: white;
}
}
}
</style>
<script>
const i18n = {
messages: {
fr: {
add_a_result: "Résultat - orientation disponibles",
goal_has_no_result: "Aucun résultat - orientation disponible",
}
}
messages: {
fr: {
add_a_result: "Résultat - orientation disponibles",
goal_has_no_result: "Aucun résultat - orientation disponible",
}
}
};
export default {
name: "AddResult",
props: [ 'destination', 'goal' ],
i18n,
data() {
return {
isExpanded: false,
};
},
computed: {
hasResult() {
if (this.destination === 'action') {
return this.$store.state.resultsForAction.length > 0;
} else if (this.destination === 'goal') {
return this.$store.getters.resultsForGoal(this.goal).length > 0;
}
name: "AddResult",
props: ['destination', 'goal', 'availableResults'],
i18n,
data() {
return {
isExpanded: false,
};
},
computed: {
hasResult() {
if (this.destination === 'action') {
return this.$store.state.resultsForAction.length > 0;
} else if (this.destination === 'goal') {
return this.$store.getters.resultsForGoal(this.goal).length > 0;
}
throw Error(`this.destination is not implemented: ${this.destination}`);
},
pickedResults() {
console.log('get checked');
console.log('this.destination', this.destination);
console.log('this.goal', this.goal);
if (this.destination === 'action') {
return this.$store.state.resultsPicked;
} else if (this.destination === 'goal') {
return this.$store.getters.resultsPickedForGoal(this.goal);
}
throw Error(`this.destination is not implemented: ${this.destination}`);
},
pickedResults() {
//console.log('get checked');
//console.log('this.destination', this.destination);
//console.log('this.goal', this.goal);
if (this.destination === 'action') {
return this.$store.state.resultsPicked;
} else if (this.destination === 'goal') {
return this.$store.getters.resultsPickedForGoal(this.goal);
}
throw Error(`this.destination is not implemented: ${this.destination}`);
},
availableForCheckResults() {
console.log('availableForCheckResults');
console.log('this.destination', this.destination);
console.log('this.goal', this.goal);
if (this.destination === 'action') {
let pickedIds = this.$store.state.resultsPicked.map(r => r.id);
console.log('picked ids', pickedIds);
throw Error(`this.destination is not implemented: ${this.destination}`);
},
availableForCheckResults() {
//console.log('availableForCheckResults');
//console.log('this.destination', this.destination);
//console.log('this.goal', this.goal);
if (this.destination === 'action') {
let pickedIds = this.$store.state.resultsPicked.map(r => r.id);
//console.log('picked ids', pickedIds);
return this.$store.state.resultsForAction.filter(r => !pickedIds.includes(r.id));
} else if (this.destination === 'goal') {
console.log('results picked for goal', this.$store.getters.resultsPickedForGoal(this.goal));
let pickedIds = this.$store.getters.resultsPickedForGoal(this.goal).map(r => r.id);
return this.$store.state.resultsForAction.filter(r => !pickedIds.includes(r.id));
} else if (this.destination === 'goal') {
//console.log('results picked for goal', this.$store.getters.resultsPickedForGoal(this.goal));
let pickedIds = this.$store.getters.resultsPickedForGoal(this.goal).map(r => r.id);
return this.$store.getters.resultsForGoal(this.goal).filter(r => !pickedIds.includes(r.id));
}
return this.$store.getters.resultsForGoal(this.goal).filter(r => !pickedIds.includes(r.id));
}
throw Error(`this.destination is not implemented: ${this.destination}`);
}
},
methods: {
toggleSelect() {
this.isExpanded = !this.isExpanded;
},
addResult(r) {
console.log('addResult', r);
if (this.destination === 'action') {
this.$store.commit('addResultPicked', r);
return;
} else if (this.destination === 'goal') {
this.$store.commit('addResultForGoalPicked', { goal: this.goal, result: r });
return;
throw Error(`this.destination is not implemented: ${this.destination}`);
}
throw Error(`this.destination is not implemented: ${this.destination}`);
},
removeResult(r) {
console.log('removeresult', r);
if (this.destination === 'action') {
this.$store.commit('removeResultPicked', r);
return;
} else if (this.destination === 'goal') {
this.$store.commit('removeResultForGoalPicked', { goal: this.goal, result: r });
return;
},
methods: {
toggleSelect() {
this.isExpanded = !this.isExpanded;
},
addResult(r) {
//console.log('addResult', r);
if (this.destination === 'action') {
this.$store.commit('addResultPicked', r);
return;
} else if (this.destination === 'goal') {
this.$store.commit('addResultForGoalPicked', {goal: this.goal, result: r});
return;
}
throw Error(`this.destination is not implemented: ${this.destination}`);
},
removeResult(r) {
//console.log('removeresult', r);
if (this.destination === 'action') {
this.$store.commit('removeResultPicked', r);
return;
} else if (this.destination === 'goal') {
this.$store.commit('removeResultForGoalPicked', {goal: this.goal, result: r});
return;
}
throw Error(`this.destination is not implemented: ${this.destination}`);
}
throw Error(`this.destination is not implemented: ${this.destination}`);
}
}
}
}
</script>

View File

@ -0,0 +1,217 @@
<template>
<div>
<!--h2>
{{ $t('evaluation_title') }}
</h2-->
<div class="m-md-3">
<!--div class="row mb-3">
<label class="col-sm-4 col-form-label">{{ $t('evaluation_status') }}</label>
<div class="col-sm-8">
<select class="form-select form-select-sm" v-model="status">
<option disabled value="">{{ $t('evaluation_choose_a_status') }}</option>
<option v-for="s in listAllStatus" :value="s.id">
{{ s.id }}
</option>
</select>
</div>
</div-->
<div class="row mb-3">
<label class="col-4 col-sm-2 col-md-4 col-lg-2 col-form-label">
{{ $t('evaluation_startdate') }}
</label>
<div class="col-8 col-sm-4 col-md-8 col-lg-4">
<input class="form-control form-control-sm" type="date" v-model="startDate"/>
</div>
<label class="col-4 col-sm-2 col-md-4 col-lg-2 col-form-label">
{{ $t('evaluation_enddate') }}
</label>
<div class="col-8 col-sm-4 col-md-8 col-lg-4">
<input class="form-control form-control-sm" type="date" v-model="endDate"/>
</div>
</div>
<div class="row mb-3">
<label class="col-4 col-sm-2 col-md-4 col-lg-2 col-form-label">
{{ $t('evaluation_maxdate') }}
</label>
<div class="col-8 col-sm-4 col-md-8 col-lg-4">
<input class="form-control form-control-sm" type="date" v-model="maxDate"/>
</div>
<label class="col-4 col-sm-2 col-md-4 col-lg-2 col-form-label">
{{ $t('evaluation_warning_interval') }}
</label>
<div class="col-8 col-sm-4 col-md-8 col-lg-4">
<input class="form-control form-control-sm" type="number" v-model.number="warningInterval"/>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-4 col-form-label">{{ $t('evaluation_public_comment') }}</label>
<div class="col-sm-8">
<ckeditor
:editor="editor"
:placeholder="$t('evaluation_comment_placeholder')"
v-model="comment"
tag-name="textarea"
></ckeditor>
</div>
</div>
<div class="row mb-3">
<label class="col-sm-4 col-form-label">{{ $t('evaluation_generate_a_document') }}</label>
<div class="col-sm-8">
<div class="input-group">
<select class="form-select form-select-sm" v-model="template">
<option disabled value="">{{ $t('evaluation_choose_a_template') }}</option>
<option>A</option>
</select>
<button class="btn btn-update btn-sm change-icon" type="button"><i class="fa fa-fw fa-cog"></i></button>
</div>
</div>
</div>
<!--div class="row mb-3">
<label class="col-sm-4 col-form-label">{{ $t('evaluation_add_a_document') }}</label>
<div class="col-sm-8">
<button class="btn btn-create btn-sm" @click="documents"></button>
</div>
</div-->
</div>
</div>
</template>
<script>
import {dateToISO, ISOToDate, ISOToDatetime} from 'ChillMainAssets/chill/js/date.js';
import CKEditor from '@ckeditor/ckeditor5-vue';
import ClassicEditor from 'ChillMainAssets/module/ckeditor5/index.js';
const i18n = {
messages: {
fr: {
evaluation_title: "Ecrire une évaluation",
evaluation_status: "Statut",
evaluation_choose_a_status: "Choisir un statut",
evaluation_startdate: "Date d'ouverture",
evaluation_enddate: "Date de fin",
evaluation_maxdate: "Date d'échéance",
evaluation_warning_interval: "Rappel (jours)",
evaluation_public_comment: "Note publique",
evaluation_comment_placeholder: "Commencez à écrire ...",
evaluation_generate_a_document: "Générer un document",
evaluation_choose_a_template: "Choisir un gabarit",
evaluation_add_a_document: "Ajouter un document",
evaluation_add: "Ajouter une évaluation"
}
}
};
export default {
name: "FormEvaluation",
props: ['evaluation'],
components: {
ckeditor: CKEditor.component,
},
i18n,
data() {
return {
editor: ClassicEditor,
//evaluation: {
// status: null,
// startDate: null,
// endDate: null,
// maxDate: null,
// warningInterval: null,
// comment: null,
// template: null,
// //documents: null
//}
}
},
computed: {
/*
status: {
get() { return this.evaluation.status; },
set(v) { this.evaluation.status = v; }
},
*/
startDate: {
get() {
if (this.evaluation.startDate) {
return this.evaluation.startDate.datetime.split('T')[0];
}
return null;
},
set(v) {
this.evaluation.startDate.datetime = `${v}T00:00:00+0100`;
}
},
endDate: {
get() {
if (this.evaluation.endDate) {
return this.evaluation.endDate.datetime.split('T')[0];
}
return null;
},
set(v) {
this.evaluation.endDate.datetime = `${v}T00:00:00+0100`;
}
},
maxDate: {
get() {
if (this.evaluation.maxDate) {
return this.evaluation.maxDate.datetime.split('T')[0];
}
return null;
},
set(v) {
this.evaluation.maxDate.datetime = `${v}T00:00:00+0100`;
}
},
warningInterval: {
get() { return this.evaluation.warningInterval; },
set(v) { this.evaluation.warningInterval = v; }
},
comment: {
get() { return this.evaluation.comment; },
set(v) { this.evaluation.comment = v; }
},
template: {
get() { return this.evaluation.template; },
set(v) { this.evaluation.template = v; }
},
/*
documents: {
get() { return this.evaluation.documents; },
set(v) { this.evaluation.documents = v; }
}
*/
},
methods: {
listAllStatus() {
console.log('load all status');
let url = `/api/`;
fetch(url)
.then(response => {
if (response.ok) {
return response.json();
}
throw { m: 'yeeah', s: response.status, b: response.body };
})
;
},
saveEvaluation() {
console.log('save evaluation');
console.log('dispatch action: post/patch/put evaluation');
console.log('commit mutation: update state.mutation');
}
},
mounted() {
//this.listAllStatus();
}
}
</script>

View File

@ -5,7 +5,7 @@ import { create } from 'ChillPersonAssets/vuejs/_api/AccompanyingCourseWork.js';
const debug = process.env.NODE_ENV !== 'production';
console.log(window.accompanyingCourseWork);
console.log('acw', window.accompanyingCourseWork);
const store = createStore({
strict: debug,
@ -16,10 +16,12 @@ const store = createStore({
ISOToDatetime(window.accompanyingCourseWork.endDate.datetime) : null),
note: window.accompanyingCourseWork.note,
goalsPicked: window.accompanyingCourseWork.goals,
goalsForAction: [],
resultsPicked: window.accompanyingCourseWork.results,
resultsForAction: [],
goalsForAction: [],
resultsForGoal: [],
evaluationsPicked: window.accompanyingCourseWork.accompanyingPeriodWorkEvaluations,
evaluationsForAction: [],
personsPicked: window.accompanyingCourseWork.persons,
personsReachables: window.accompanyingCourseWork.accompanyingPeriod.participations.filter(p => p.endDate == null)
.map(p => p.person),
@ -79,11 +81,28 @@ const store = createStore({
},
results: g.results.map(r => ({id: r.id, type: r.type})),
};
if (g.id !== undefined) {
o.id = g.id;
}
return o;
}),
accompanyingPeriodWorkEvaluations: state.evaluationsPicked.map(e => {
let o = {
type: e.type,
evaluation: {
id: e.evaluation.id,
type: e.evaluation.type
},
startDate: e.startDate,
endDate: e.endDate,
maxDate: e.maxDate,
warningInterval: e.warningInterval,
comment: e.comment,
documents: e.documents
};
if (e.id !== undefined) {
o.id = e.id;
}
return o;
})
};
@ -97,19 +116,24 @@ const store = createStore({
state.endDate = date;
},
setResultsForAction(state, results) {
console.log('set results for action', results);
//console.log('set results for action', results);
state.resultsForAction = results;
},
setResultsForGoal(state, { goal, results }) {
console.log('set results for goal', results);
//console.log('set results for goal', results);
state.goalsForAction.push(goal);
for (let i in results) {
let r = results[i];
r.goalId = goal.id;
console.log('adding result', r);
//console.log('adding result', r);
state.resultsForGoal.push(r);
}
},
setEvaluationsForAction(state, results) {
//console.log('set evaluations for action', results);
state.evaluationsForAction = results;
console.log('e4a', state.evaluationsForAction);
},
addResultPicked(state, result) {
state.resultsPicked.push(result);
},
@ -130,10 +154,10 @@ const store = createStore({
},
addResultForGoalPicked(state, { goal, result}) {
let found = state.goalsPicked.find(g => g.goal.id === goal.id);
console.log('adResultForGoalPicked');
console.log('found', found);
console.log('goal', goal);
console.log('result', result);
//console.log('adResultForGoalPicked');
//console.log('found', found);
//console.log('goal', goal);
//console.log('result', result);
if (found === undefined) {
return;
@ -150,8 +174,26 @@ const store = createStore({
found.results = found.results.filter(r => r.id !== result.id);
},
addEvaluation(state, evaluation) {
let e = {
type: "accompanying_period_work_evaluation",
evaluation: evaluation,
//startDate,
//endDate,
//maxDate,
//warningInterval
//comment,
//documents,
}
state.evaluationsPicked.push(e);
console.log('ep', state.evaluationsPicked);
},
removeEvaluation(state, evaluation) {
state.evaluationsPicked = state.evaluationsPicked.filter(e => e.id !== evaluation.id);
console.log('ep', state.evaluationsPicked);
},
setPersonsPickedIds(state, ids) {
console.log('persons ids', ids);
//console.log('persons ids', ids);
state.personsPicked = state.personsReachables
.filter(p => ids.includes(p.id))
},
@ -162,11 +204,11 @@ const store = createStore({
state.handlingThirdParty = thirdParty;
},
addThirdParties(state, thirdParties) {
console.log('addThirdParties', thirdParties);
//console.log('addThirdParties', thirdParties);
// filter to remove existing thirdparties
let ids = state.thirdParties.map(t => t.id);
let unexistings = thirdParties.filter(t => !ids.includes(t.id));
console.log('unexisting third parties', unexistings);
//console.log('unexisting third parties', unexistings);
for (let i in unexistings) {
state.thirdParties.push(unexistings[i]);
}
@ -176,7 +218,7 @@ const store = createStore({
.filter(t => t.id !== thirdParty.id);
},
setErrors(state, errors) {
console.log('handling errors', errors);
//console.log('handling errors', errors);
state.errors = errors;
},
setIsPosting(state, st) {
@ -185,14 +227,12 @@ const store = createStore({
},
actions: {
getReachablesGoalsForAction({ getters, commit, dispatch }) {
console.log('getReachablesGoalsForAction');
//console.log('getReachablesGoalsForAction');
let
socialActionId = getters.socialAction.id,
url = `/api/1.0/person/social-work/goal/by-social-action/${socialActionId}.json`
;
console.log(url);
//console.log(url);
window
.fetch(
url
@ -210,13 +250,11 @@ const store = createStore({
});
},
getReachablesResultsForGoal({ commit }, goal) {
console.log('getReachablesResultsForGoal');
//console.log('getReachablesResultsForGoal');
let
url = `/api/1.0/person/social-work/result/by-goal/${goal.id}.json`
;
console.log(url);
//console.log(url);
window.fetch(url)
.then(response => {
if (response.ok) {
@ -226,19 +264,17 @@ const store = createStore({
throw { m: 'Error while retriving results for goal', s: response.status, b: response.body };
})
.then(data => {
console.log('data');
//console.log('data');
commit('setResultsForGoal', { goal, results: data.results });
});
},
getReachablesResultsForAction({ getters, commit }) {
console.log('getReachablesResultsForAction');
//console.log('getReachablesResultsForAction');
let
socialActionId = getters.socialAction.id,
url = `/api/1.0/person/social-work/result/by-social-action/${socialActionId}.json`
;
console.log(url);
//console.log(url);
window.fetch(url)
.then(response => {
if (response.ok) {
@ -248,20 +284,35 @@ const store = createStore({
throw { m: 'Error while retriving results for social action', s: response.status, b: response.body };
})
.then(data => {
console.log('data retrived', data);
//console.log('data retrived', data);
commit('setResultsForAction', data.results);
});
},
getReachablesEvaluationsForAction({ getters, commit }) {
//console.log('getReachablesEvaluationsForAction');
let
socialActionId = getters.socialAction.id,
url = `/api/1.0/person/social-work/evaluation/by-social-action/${socialActionId}.json`
;
window.fetch(url)
.then(response => {
if (response.ok) {
return response.json();
}
throw { m: 'Error while retriving evaluations for social action', s: response.status, b: response.body };
})
.then(data => {
commit('setEvaluationsForAction', data.results);
});
},
submit({ getters, state, commit }) {
let
payload = getters.buildPayload,
url = `/api/1.0/person/accompanying-course/work/${state.work.id}.json`,
errors = []
;
console.log('action subitting', payload, url);
//console.log('action submitting', payload, url);
commit('setIsPosting', true);
window.fetch(url, {
method: 'PUT',
headers: {
@ -295,6 +346,9 @@ const store = createStore({
initAsync({ dispatch }) {
dispatch('getReachablesResultsForAction');
dispatch('getReachablesGoalsForAction');
dispatch('getReachablesEvaluationsForAction');
console.log('ep', this.state.evaluationsPicked);
},
}
});

View File

@ -22,8 +22,8 @@
class="item-bloc"
v-bind:key="conc.person.id"
>
<div class="item-row person">
<div class="item-col box-person">
<div class="item-row">
<div class="item-col">
<div>
<person :person="conc.person"></person>
</div>
@ -33,7 +33,7 @@
</div>
</div>
<div class="item-col box-where">
<div class="item-col">
<ul class="list-content fa-ul">
<li>
<i class="fa fa-li fa-map-marker"></i>

Some files were not shown because too many files have changed in this diff Show More