Commit 1803fb59 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Refonte du validateur de numéro INSEE

parent cf2d326a
Loading
Loading
Loading
Loading
+44 −70
Original line number Diff line number Diff line
@@ -25,83 +25,57 @@ var_dump($r);

$bdd = $oa->getBdd();

$ds           = $bdd->select('SELECT * FROM DEPARTEMENT');
$departements = [];
foreach ($ds as $d) {
    $departements[$d['CODE']] = $d;
}
var_dump($departements);

$c->println("Calcul du tableau de bord piece_jointe_demande");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe_demande\'); END;');

$c->println("Calcul du tableau de bord piece_jointe_fournie");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe_fournie\'); END;');

$c->println("Calcul du tableau de bord piece_jointe");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe\'); END;');

$c->println("");

/* On fournie et on valide de force les PJ qui n'étaient pas tout le temps demandées avant */
$sql = '
        SELECT
          TPJ.INTERVENANT_ID, TPJ.TYPE_PIECE_JOINTE_ID, I.STRUCTURE_ID, TV.ID TYPE_VALIDATION_ID, P.VALEUR UTILISATEUR_ID
        FROM 
          TBL_PIECE_JOINTE TPJ
          JOIN INTERVENANT I ON I.ID = TPJ.INTERVENANT_ID AND I.HISTO_DESTRUCTION IS NULL
          JOIN TYPE_PIECE_JOINTE_STATUT TPJS ON TPJS.HISTO_DESTRUCTION IS NULL AND TPJS.TYPE_PIECE_JOINTE_ID = TPJ.TYPE_PIECE_JOINTE_ID AND TPJS.STATUT_INTERVENANT_ID = I.STATUT_ID AND TPJS.DUREE_VIE = 99
          JOIN PARAMETRE P ON P.NOM = \'oseuser\'
          JOIN TYPE_VALIDATION TV ON TV.CODE = \'PIECE_JOINTE\'
          LEFT JOIN PIECE_JOINTE PJ ON PJ.TYPE_PIECE_JOINTE_ID = TPJ.TYPE_PIECE_JOINTE_ID AND PJ.INTERVENANT_ID = I.ID AND PJ.HISTO_DESTRUCTION IS NULL
        WHERE 
          TPJ.DEMANDEE = 1 AND TPJ.FOURNIE = 0 AND TPJ.OBLIGATOIRE = 1
          AND I.PREMIER_RECRUTEMENT = 0
          AND PJ.ID IS NULL
SELECT DISTINCT 
  I.NUMERO_INSEE, I.NUMERO_INSEE_EST_PROVISOIRE NUMERO_INSEE_PROVISOIRE, D.CODE, D.LIBELLE_LONG
FROM DOSSIER I
JOIN DEPARTEMENT D ON D.ID = I.DEPT_NAISSANCE_ID
WHERE NUMERO_INSEE IS NOT NULL
';

$r     = $bdd->select($sql);
$count = 0;
foreach ($r as $i) {
    $dep = getDep($i['NUMERO_INSEE']);

    if (is_int($dep) && $dep != 99) {
        $dep = '0' . $dep;
    }

    if ($dep != $i['CODE'] && $dep != 99) {
        $count++;
    $o = ['histo-user-id' => $i['UTILISATEUR_ID']];

    $fichier = [
        'ID'          => $bdd->sequenceNextVal('FICHIER_ID_SEQ'),
        'NOM'         => 'Fichier non fourni',
        'TYPE'        => 'text/plain',
        'TAILLE'      => 0,
        'DESCRIPTION' => 'Fichier non fourni',
    ];
    $bdd->getTable('FICHIER')->insert($fichier, $o);

    $validation = [
        'ID'                 => $bdd->sequenceNextVal('VALIDATION_ID_SEQ'),
        'TYPE_VALIDATION_ID' => $i['TYPE_VALIDATION_ID'],
        'INTERVENANT_ID'     => $i['INTERVENANT_ID'],
        'STRUCTURE_ID'       => $i['STRUCTURE_ID'],
    ];
    $bdd->getTable('VALIDATION')->insert($validation, $o);

    $pieceJointe = [
        'ID'                   => $bdd->sequenceNextVal('PIECE_JOINTE_ID_SEQ'),
        'TYPE_PIECE_JOINTE_ID' => $i['TYPE_PIECE_JOINTE_ID'],
        'INTERVENANT_ID'       => $i['INTERVENANT_ID'],
        'VALIDATION_ID'        => $validation['ID'],
    ];
    $bdd->getTable('PIECE_JOINTE')->insert($pieceJointe, $o);

    $pjf = [
        'PIECE_JOINTE_ID' => $pieceJointe['ID'],
        'FICHIER_ID'      => $fichier['ID'],
    ];
    $bdd->getTable('PIECE_JOINTE_FICHIER')->insert($pjf, $o);
    $c->print("Insertion des pièces jointes manquantes : $count / " . count($r) . "\r");
        $prov = $i['NUMERO_INSEE_PROVISOIRE'] == 1 ? ' P' : '  ';
        $c->println($i['NUMERO_INSEE'] . $prov . '       .' . $i['CODE'] . '. ' . $dep);
    }
}

$c->println("Calcul du tableau de bord piece_jointe_demande");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe_demande\'); END;');
$c->println($count . ' concernés');


//var_dump($r);

$c->println("Calcul du tableau de bord piece_jointe_fournie");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe_fournie\'); END;');

$c->println("Calcul du tableau de bord piece_jointe");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'piece_jointe\'); END;');
function getDep($thisvalue)
{
    $iDepartement = substr(strtoupper($thisvalue), 5, 2);
    if ($iDepartement == '2A' || $iDepartement == '2B') {
        return $iDepartement; // corse
    }
    if ($iDepartement == '99') {
        return 99; // étranger
    }
    if ($iDepartement == '97' || $iDepartement == '98') {
        $iDepartement = substr(strtoupper($thisvalue), 5, 3);

$c->println("Calcul du tableau de bord workflow");
$bdd->exec('BEGIN unicaen_tbl.calculer(\'workflow\'); END;');
        return (int)$iDepartement;
    }

$c->println("Terminé");
 No newline at end of file
    return (int)$iDepartement;
}
 No newline at end of file
+46 −24
Original line number Diff line number Diff line
@@ -8,27 +8,49 @@
 * @var $viewFile   string
 */

use Application\Service\ModeleContratService;
use Unicaen\OpenDocument\Document;

$fichier = '/home/laurent/Téléchargements/testfill.odt';
//$fichier = '/home/laurent/UnicaenCode/srcodt.odt';
//$fichier = '/home/laurent/tt.odt';
//$fichier = '/home/laurent/Téléchargements/Contrat.odt';

$modeleContrat = $container->get(ModeleContratService::class)->get(13);

$document = new Document();
$document->setTmpDir('/home/laurent/UnicaenCode');
//$document->loadFromFile($fichier);
$document->loadFromData($modeleContrat->getFichier());

$document->getStylist()->addFiligrane('PROJET');

$document->setStylesChanged(true);
xmlDump($document->getStyles());
$document->setPdfOutput(true);
//$document->saveToFile('/home/laurent/UnicaenCode/odtExport.pdf');


//$document->download('exp.pdf');
/** @var \Application\Service\IntervenantService $si */
$si = $container->get(\Application\Service\IntervenantService::class);


$is = $si->getEntityManager()->getConnection()->fetchAll('
SELECT 
  ID, NUMERO_INSEE, NUMERO_INSEE_CLE, DATE_NAISSANCE, CIVILITE_ID, PAYS_NAISSANCE_ID, DEP_NAISSANCE_ID , NUMERO_INSEE_PROVISOIRE
FROM 
  INTERVENANT 
WHERE 
  NUMERO_INSEE IS NOT NULL 
  AND HISTO_DESTRUCTION IS NOT NULL 
--AND ID = 6391
');


$iv = new \Application\Validator\NumeroINSEEValidator(['provisoire' => false]);
$ov = new \Application\Validator\NumeroINSEEValidatorOld(['provisoire' => false]);

echo '<table class="table table-bordered">';
foreach ($is as $i) {
    $dn      = substr($i['DATE_NAISSANCE'], 0, 10);
    $dn      = \DateTime::createFromFormat('Y-m-d', $dn);
    $dn      = $dn->format(\Application\Constants::DATE_FORMAT);
    $context = [
        'civilite'             => $i['CIVILITE_ID'],
        'dateNaissance'        => $dn,
        'paysNaissance'        => $i['PAYS_NAISSANCE_ID'],
        'departementNaissance' => $i['DEP_NAISSANCE_ID'],
    ];
    $insee   = $i['NUMERO_INSEE'] . $i['NUMERO_INSEE_CLE'];
    $valid   = $iv->isValid($insee, $context);

    $ovValid = $ov->isValid($insee, $context);

    if ($valid != $ovValid) {
        echo '<tr>
<th>' . $i['ID'] . '</th>
<td>' . ($i['NUMERO_INSEE_PROVISOIRE'] ? 'oui' : 'non') . '</td>
<td>' . $insee . '</td>
<td>' . ($valid ? 'oui' : 'non') . '</td>
<td>' . ($ovValid ? 'oui' : 'non') . '</td>
</tr>';
    }
}
echo '</table>';
 No newline at end of file
+28 −34
Original line number Diff line number Diff line
@@ -63,16 +63,10 @@ class Dossier extends AbstractForm
                'value' => "J'enregistre",
            ],
        ]);

    }








    public function personnaliser(Intervenant $intervenant, $lastHETD = 0)
    {
        $dossier         = $this->getServiceDossier()->getByIntervenant($intervenant);
@@ -91,7 +85,7 @@ class Dossier extends AbstractForm
         * Pas de sélection de la France par défaut si le numéro INSEE correspond à une naissance hors France.
         */
        if ($dossier->getNumeroInsee() && !$dossier->getNumeroInseeEstProvisoire()) {
            if (NumeroINSEEValidator::hasCodeDepartementEtranger($dossier->getNumeroInsee())) {
            if (substr($dossier->getNumeroInsee(), 5, 2) == '99') {
                $dossierFieldset->get('paysNaissance')->setValue(null);
            }
        }
@@ -160,7 +154,7 @@ class Dossier extends AbstractForm
        foreach ($roElements as $roe => $attr) {
            $roe = explode('/', $roe);
            if (2 == count($roe)) {
                list($e, $se) = $roe;
                [$e, $se] = $roe;
            } else {
                $e  = $roe[0];
                $se = null;
+1 −4
Original line number Diff line number Diff line
@@ -399,9 +399,6 @@ class DossierFieldset extends AbstractFieldset
                'validators' => [
                    new NumeroINSEEValidator([
                        'provisoire' => $numeroInseeProvisoire,
                        'france_id'          => self::$franceId,
                        'serviceDepartement' => $this->getServiceDepartement(),
                        'serviceCivilite'    => $this->getServiceCivilite(),
                    ]),
                ],
            ],
+43 −5
Original line number Diff line number Diff line
@@ -14,7 +14,8 @@ class PaysService extends AbstractEntityService
{
    CONST PAYS_FRANCE  = 'france';
    CONST PAYS_ALGERIE = 'algerie';

    CONST PAYS_MAROC   = 'maroc';
    CONST PAYS_TUNISIE = 'tunisie';

    use ParametresServiceAwareTrait;

@@ -24,6 +25,7 @@ class PaysService extends AbstractEntityService
    private $idsByLibelle;



    /**
     * retourne la classe des entités
     *
@@ -54,7 +56,7 @@ class PaysService extends AbstractEntityService
    public function getIdByLibelle(string $libelle)
    {
        if (!isset($this->idsByLibelle[$libelle])) {
            $sql = 'SELECT id FROM pays WHERE ose_divers.str_reduce(libelle_court) = :pays AND histo_destruction IS NULL';
            $sql = 'SELECT ID FROM PAYS WHERE OSE_DIVERS.str_reduce(LIBELLE_COURT) = :pays AND HISTO_DESTRUCTION IS NULL';

            $res = $this->getEntityManager()->getConnection()->fetchAll($sql, ['pays' => Util::reduce($libelle)]);

@@ -82,6 +84,42 @@ class PaysService extends AbstractEntityService



    /**
     * @param Pays $pays
     *
     * @return bool
     */
    public function isAlgerie(Pays $pays): bool
    {
        return $pays->getId() == $this->getIdByLibelle(self::PAYS_ALGERIE);
    }



    /**
     * @param Pays $pays
     *
     * @return bool
     */
    public function isMaroc(Pays $pays): bool
    {
        return $pays->getId() == $this->getIdByLibelle(self::PAYS_MAROC);
    }



    /**
     * @param Pays $pays
     *
     * @return bool
     */
    public function isTunisie(Pays $pays): bool
    {
        return $pays->getId() == $this->getIdByLibelle(self::PAYS_TUNISIE);
    }



    /**
     * Retourne la liste des pays, triés par libellé long.
     *
@@ -91,7 +129,7 @@ class PaysService extends AbstractEntityService
     */
    public function getList(QueryBuilder $qb = null, $alias = null)
    {
        list($qb, $alias) = $this->initQuery($qb, $alias);
        [$qb, $alias] = $this->initQuery($qb, $alias);
        $qb->addOrderBy("$alias.libelleLong");

        return parent::getList($qb, $alias);
Loading