circuit of creating a person

This commit is contained in:
Julien Fastré 2013-12-07 12:40:12 +01:00
parent 5750c73574
commit fcbe220c6c
6 changed files with 237 additions and 25 deletions

View File

@ -166,21 +166,46 @@ class PersonController extends Controller {
* @return \CL\Chill\PersonBundle\Entity\Person
*/
private function _bindCreationForm($form) {
$date = new \DateTime($form['creation_date']->getData());
$person = new Person($date);
$date = new \DateTime();
$person = new Person($form['creation_date']->getData());
$date_of_birth = new \DateTime($form['dateOfBirth']->getData());
$date_of_birth = new \DateTime();
$person->setName($form['name']->getData())
->setSurname($form['surname']->getData())
->setGenre($form['genre']->getData())
->setDateOfBirth($date_of_birth)
->setDateOfBirth($form['dateOfBirth']->getData())
;
return $person;
}
/**
*
* @param \CL\Chill\PersonBundle\Entity\Person $person
* @return \Symfony\Component\Validator\ConstraintViolationListInterface
*/
private function _validatePersonAndHistory(Person $person) {
$errors = $this->get('validator')
->validate($person, array('creation'));
//validate history
$histories = $person->getHistories();
foreach ($histories as $history) {
$errors_history = $this->get('validator')
->validate($history);
//group errors :
foreach($errors_history as $error) {
$errors->add($error);
}
}
return $errors;
}
public function reviewAction() {
$request = $this->getRequest();
@ -198,21 +223,7 @@ class PersonController extends Controller {
$person = $this->_bindCreationForm($form);
$errors = $this->get('validator')
->validate($person, array('creation'));
//validate history
$histories = $person->getHistories();
foreach ($histories as $history) {
$errors_history = $this->get('validator')
->validate($history);
//group errors :
foreach($errors_history as $error) {
$errors->add($error);
}
}
$errors = $this->_validatePersonAndHistory($person);
@ -279,6 +290,42 @@ class PersonController extends Controller {
}
public function createAction() {
$request = $this->getRequest();
if ($request->getMethod() !== 'POST') {
$r = new Response('You must send something to create a person !');
$r->setStatusCode(400);
return $r;
}
$form = $this->createForm(new CreationPersonType());
$form->handleRequest($request);
$person = $this->_bindCreationForm($form);
$errors = $this->_validatePersonAndHistory($person);
if ($errors->count() === 0) {
$em = $this->getDoctrine()->getManager();
$em->persist($person);
$em->flush();
return $this->redirect($this->generateUrl('chill_person_view',
array('id' => $person->getId())));
} else {
$r = new Response('this should not happen if you reviewed your submission');
$r->setStatusCode(400);
return $r;
}
}
/**
* easy getting a person by his id
* @return \CL\Chill\PersonBundle\Entity\Person

View File

@ -46,7 +46,7 @@ class Person
/**
* @var string
*/
private $civil_union;
private $civil_union = self::CIVIL_UNKNOW;
/*Célibataire
Marié(e)
Veuf Veuve
@ -339,6 +339,10 @@ ou une valeur vide lorsque la donnée nest pas connue*/
*/
public function setPlaceOfBirth($placeOfBirth)
{
if ($placeOfBirth === null) {
$placeOfBirth = '';
}
$this->placeOfBirth = $placeOfBirth;
return $this;
@ -443,6 +447,10 @@ ou une valeur vide lorsque la donnée nest pas connue*/
*/
public function setBelgianNationalNumber($belgianNationalNumber)
{
if ($belgianNationalNumber === null) {
$belgianNationalNumber = '';
}
$this->belgian_national_number = $belgianNationalNumber;
return $this;
@ -520,6 +528,10 @@ ou une valeur vide lorsque la donnée nest pas connue*/
*/
public function setEmail($email)
{
if ($email === null) {
$email = '';
}
$this->email = $email;
return $this;

View File

@ -8,6 +8,7 @@ use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use CL\Chill\PersonBundle\Form\Type\CivilType;
use CL\Chill\PersonBundle\Form\Type\GenderType;
use CL\BelgianNationalNumberBundle\Form\BelgianNationalNumberType;
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
class CreationPersonType extends AbstractType
{
@ -31,11 +32,20 @@ class CreationPersonType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
{
if ($this->form_status === self::FORM_BEING_REVIEWED) {
$dateToStringTransformer = new DateTimeToStringTransformer(
null, null, 'Y-m-d', true);
$builder->add('name', 'hidden')
->add('surname', 'hidden')
->add('dateOfBirth', 'hidden')
->add( $builder->create('dateOfBirth', 'hidden')
->addModelTransformer($dateToStringTransformer)
)
->add('genre', 'hidden')
->add('creation_date', 'hidden')
->add( $builder->create('creation_date', 'hidden')
->addModelTransformer($dateToStringTransformer)
)
->add('form_status', 'hidden')
;
} else {
@ -44,7 +54,7 @@ class CreationPersonType extends AbstractType
->add('surname')
->add('dateOfBirth', 'date', array('required' => false, 'widget' => 'single_text'))
->add('genre', new GenderType(), array(
'required' => false
'required' => true
))
->add('creation_date', 'date', array('required' => true,
'widget' => 'single_text', 'data' => new \DateTime()))

View File

@ -0,0 +1,51 @@
{% extends "CLChillMainBundle::layout.html.twig" %}
{% block title %}{{ 'views.Person.creation.title'|trans }}{% endblock title %}
{% block css %}
{% stylesheets output="css/all.css" filter="cssrewrite"
"bundles/clchillperson/css/person.css"
%}
<link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
{% endblock %}
{% form_theme form 'CLChillMainBundle:Form:fields.html.twig' %}
{% block content %}
<div id="person_wrapper">
<div id="person_details">
{{ form_start(form) }}
<h1>{{ 'views.Person.creation.open'|trans }}</h1>
{{ form_row(form.name, { 'label' : 'views.Person.view.name'|trans }) }}
{{ form_row(form.surname, { 'label' : 'views.Person.view.surname'|trans }) }}
{{ form_row(form.dateOfBirth, { 'label' : 'views.Person.view.dateOfBirth'|trans }) }}
{{ form_row(form.genre, { 'label' : 'views.Person.view.gender'|trans }) }}
{{ form_row(form.creation_date, { 'label' : 'views.Person.review.creation_date'|trans }) }}
{{ form_rest(form) }}
<div class="form_control">
<div class="medium success btn icon-right entypo icon-user-add">
<button type="submit">{{ 'views.Person.creation.add'|trans }}</button>
</div>
</div>
{{ form_end(form) }}
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,87 @@
{% extends "CLChillMainBundle::layout.html.twig" %}
{% block title %}{{ 'views.Person.review.title'|trans }}{% endblock title %}
{% block css %}
{% stylesheets output="css/all.css" filter="cssrewrite"
"bundles/clchillperson/css/person.css"
%}
<link rel="stylesheet" href="{{ asset_url }}"/>
{% endstylesheets %}
{% endblock %}
{% form_theme form 'CLChillMainBundle:Form:fields.html.twig' %}
{% block content %}
<div id="person_wrapper">
{% if alternatePersons is not empty %}
<table class="rounded stripped">
<thead>
<tr>
<th>{{ 'views.Person.review.altName'|trans }}</th>
<th>{{ 'views.Person.review.altDateOfBirth'|trans }}</th>
<th>{{ 'views.Person.review.altNationality'|trans }}</th>
</tr>
</thead>
<tbody>
{% for person in alternatePersons %}
<tr>
<td>
<a href="{{ path('chill_person_view', {'id': person.id } ) }}">
{{ person }}{% spaceless %}{% if person.isOpen == false %}<i class="icon-lock"></i>{% endif %}
{% endspaceless %}
</a>
</td>
<td>{{ person.dateOfBirth|date(date_format) }}</td>
<td>{{ person.nationality|default('person.without_nationality'|trans) }}
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
<div id="person_details">
{{ form_start(form) }}
<h2>{{ 'views.Person.review.you_will_create_this_person'|trans }}</h2>
<dl>
<dt>{{ 'views.Person.view.name'|trans }}</dt>
<dd>{{ name }}</dd>
<dt>{{ 'views.Person.view.surname'|trans }}</dt>
<dd>{{ surname }}</dd>
<dt>{{ 'views.Person.view.dateOfBirth'|trans }}</dt>
<dd>{{ dateOfBirth|date(date_format)|default( 'person.without_date_of_birth'|trans ) }}</dd>
<dt>{{ 'views.Person.view.gender'|trans }}</dt>
<dd>{{ ('person.gender.' ~ genre)|trans }}</dd>
<dt>{{ 'views.Person.review.creation_date'|trans }}</dt>
<dd>{{ creation_date|date(date_format) }}</dd>
</dl>
{{ form_rest(form) }}
<div class="form_control">
<div class="btn medium success entypo icon-right icon-user-add">
<button type="submit">{{ 'views.Person.review.confirm_creation'|trans }}</button>
</div>
</div>
{{ form_end(form) }}
</div>
</div>
{% endblock content %}

View File

@ -21,6 +21,11 @@
<a href="{{ path('chill_person_view', {id : person.id}) }}">
<span class="personSurname">{{person.surname}}</span>
<span class="personName">{{person.name}}</span>
{% spaceless %}
{% if person.isOpen == false %}
<i class="icon-lock"></i>
{% endif %}
{% endspaceless %}
</a>
</td>
<td><span class="personDateOfBirth">{{person.dateOfBirth.format(date_format)}}</span></td>