Loading CHANGELOG.md +8 −0 Changes for CHANGELOG.md: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,14 @@ [OSE 18.1](#ose-181-31052022) # OSE 19 (à venir) ## Nouveautés * Ajout d'un paramètre général qui permet de choisir si un contrat peut avoir une date de retour signé ou non s'il n'y a pas de fichier * Ajout d'un paramètre général pour empêcher la création d'avenants * Ajout d'un paramètre général pour permettre de créer les contrats sans passer par un projet de contrat * Ajout de date de dernière modification des données dans les indicateurs notifiant d'une validation en attente # OSE 18.1 (31/05/2022) Loading data/ddl/view/V_INDICATEUR_430.sql +1 −0 Changes for data/ddl/view/V_INDICATEUR_430.sql: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ SELECT w.structure_id FROM intervenant i JOIN PARAMETRE p ON p.VALEUR = 'avenant' JOIN tbl_workflow w ON w.intervenant_id = i.id JOIN ( SELECT DISTINCT Loading data/parametres.php +10 −0 Changes for data/parametres.php: 10 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -228,4 +228,14 @@ Cordialement, "VALEUR" => "avenant", "DESCRIPTION" => "Permettre la création d'avenants au contrat", ], "contrat_direct" => [ "VALEUR" => "desactive", "DESCRIPTION" => "Permettre la création d'un contrat sans passé par le projet", ], "contrat_date" => [ "VALEUR" => "desactive", "DESCRIPTION" => "Permettre de saisir une date de retour signé pour un contrat sans ajouter de fichier", ], ]; No newline at end of file module/Application/src/Assertion/ContratAssertion.php +19 −3 Changes for module/Application/src/Assertion/ContratAssertion.php: 19 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -5,10 +5,11 @@ namespace Application\Assertion; use Application\Acl\Role; use Application\Entity\Db\Contrat; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Parametre; use Application\Entity\Db\Structure; use Application\Entity\Db\WfEtape; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ParametresServiceAwareTrait; // sous réserve que vous utilisiez les privilèges d'UnicaenAuth et que vous ayez généré votre fournisseur use Application\Service\Traits\WorkflowServiceAwareTrait; use UnicaenAuth\Assertion\AbstractAssertion; Loading @@ -22,6 +23,8 @@ use Laminas\Permissions\Acl\Resource\ResourceInterface; */ class ContratAssertion extends AbstractAssertion { use ParametresServiceAwareTrait; const PRIV_LISTER_FICHIERS = 'contrat-lister-fichiers'; const PRIV_SUPPRIMER_FICHIER = 'contrat-supprimer-fichier'; const PRIV_AJOUTER_FICHIER = 'contrat-ajouter-fichier'; Loading Loading @@ -181,9 +184,12 @@ class ContratAssertion extends AbstractAssertion $devalid = true; } $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return $this->asserts([ $this->assertRole($contrat), $contrat->getValidation(), $contrat->getValidation() && !$contratDirect, !$contrat->getDateRetourSigne(), $devalid, ]); Loading @@ -193,9 +199,19 @@ class ContratAssertion extends AbstractAssertion protected function assertSuppression(Contrat $contrat) { if (!$contrat->estUnAvenant()) { $devalid = $contrat->getIntervenant()->getContrat()->count() == 1; // on ne peut supprimer un contrat que si aucun avenant n'existe } else { $devalid = true; } $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return $this->asserts([ $this->assertRole($contrat), !$contrat->getValidation(), !$contrat->getValidation() || ($contratDirect && $devalid), !$contrat->getDateRetourSigne(), ]); } Loading module/Application/src/Controller/ContratController.php +31 −3 Changes for module/Application/src/Controller/ContratController.php: 31 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -139,7 +139,11 @@ class ContratController extends AbstractController $avenantResult = $this->getServiceParametres()->get('avenant'); $avenant = ($avenantResult == Parametre::AVENANT); return compact('title', 'intervenant', 'contrats', 'services', 'emailIntervenant', 'avenant'); $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return compact('title', 'intervenant', 'contrats', 'services', 'emailIntervenant', 'avenant', 'contratDirect'); } Loading @@ -152,6 +156,9 @@ class ContratController extends AbstractController $structure = $this->getEvent()->getParam('structure'); /* @var $structure Structure */ $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); if (!$intervenant) { throw new \LogicException('L\'intervenant n\'est pas précisé'); } Loading @@ -167,8 +174,16 @@ class ContratController extends AbstractController } else { try { $this->getProcessusContrat()->enregistrer($contrat); if ($contratDirect) { $this->getProcessusContrat()->valider($contrat); } $this->updateTableauxBord($contrat->getIntervenant()); if ($contratDirect) { $this->flashMessenger()->addSuccessMessage(($contrat->estUnAvenant() ? 'L\'avenant' : 'Le contrat') . ' a bien été créé.'); } else { $this->flashMessenger()->addSuccessMessage('Le projet ' . ($contrat->estUnAvenant() ? 'd\'avenant' : 'de contrat') . ' a bien été créé.'); } } catch (\Exception $e) { $this->flashMessenger()->addErrorMessage($this->translate($e)); } Loading Loading @@ -199,6 +214,11 @@ class ContratController extends AbstractController if ($this->getRequest()->isPost()) { try { $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); if ($contratDirect && $contrat->getValidation()) { $this->getProcessusContrat()->devalider($contrat); } $this->getProcessusContrat()->supprimer($contrat); $this->updateTableauxBord($contrat->getIntervenant()); $this->flashMessenger()->addSuccessMessage("Suppression $contratToString effectuée avec succès."); Loading Loading @@ -269,6 +289,7 @@ class ContratController extends AbstractController if ($this->isAllowed($contrat, Privileges::CONTRAT_DEVALIDATION)) { if ($this->getRequest()->isPost()) { try { $this->getProcessusContrat()->devalider($contrat); $this->updateTableauxBord($contrat->getIntervenant()); Loading Loading @@ -311,7 +332,11 @@ class ContratController extends AbstractController throw new UnAuthorizedException('Vous n\'avez pas les droits requis pour saisir la date de retour du contrat signé.'); } $canSaisieDateSigne = true; if ($contrat->getDateRetourSigne() != null || $contrat->getFichier()->count() > 0) { $contratDateSansFichierResult = $this->getServiceParametres()->get('contrat_date'); $contratDateSansFichier = ($contratDateSansFichierResult == Parametre::CONTRAT_DATE); if ($contrat->getDateRetourSigne() != null || $contrat->getFichier()->count() > 0 || $contratDateSansFichier) { $form->bindRequestSave($contrat, $this->getRequest(), function () use ($contrat, $contratToString) { $this->getServiceContrat()->save($contrat); Loading @@ -324,7 +349,10 @@ class ContratController extends AbstractController $canSaisieDateSigne = false; } return compact('form', 'done', 'title', 'canSaisieDateSigne'); $contratDateResult = $this->getServiceParametres()->get('contrat_date'); $contratDate = ($contratDateResult == Parametre::CONTRAT_DATE); return compact('form', 'done', 'title', 'canSaisieDateSigne', 'contratDate'); } Loading Loading
CHANGELOG.md +8 −0 Changes for CHANGELOG.md: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -2,6 +2,14 @@ [OSE 18.1](#ose-181-31052022) # OSE 19 (à venir) ## Nouveautés * Ajout d'un paramètre général qui permet de choisir si un contrat peut avoir une date de retour signé ou non s'il n'y a pas de fichier * Ajout d'un paramètre général pour empêcher la création d'avenants * Ajout d'un paramètre général pour permettre de créer les contrats sans passer par un projet de contrat * Ajout de date de dernière modification des données dans les indicateurs notifiant d'une validation en attente # OSE 18.1 (31/05/2022) Loading
data/ddl/view/V_INDICATEUR_430.sql +1 −0 Changes for data/ddl/view/V_INDICATEUR_430.sql: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ SELECT w.structure_id FROM intervenant i JOIN PARAMETRE p ON p.VALEUR = 'avenant' JOIN tbl_workflow w ON w.intervenant_id = i.id JOIN ( SELECT DISTINCT Loading
data/parametres.php +10 −0 Changes for data/parametres.php: 10 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -228,4 +228,14 @@ Cordialement, "VALEUR" => "avenant", "DESCRIPTION" => "Permettre la création d'avenants au contrat", ], "contrat_direct" => [ "VALEUR" => "desactive", "DESCRIPTION" => "Permettre la création d'un contrat sans passé par le projet", ], "contrat_date" => [ "VALEUR" => "desactive", "DESCRIPTION" => "Permettre de saisir une date de retour signé pour un contrat sans ajouter de fichier", ], ]; No newline at end of file
module/Application/src/Assertion/ContratAssertion.php +19 −3 Changes for module/Application/src/Assertion/ContratAssertion.php: 19 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -5,10 +5,11 @@ namespace Application\Assertion; use Application\Acl\Role; use Application\Entity\Db\Contrat; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Parametre; use Application\Entity\Db\Structure; use Application\Entity\Db\WfEtape; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ParametresServiceAwareTrait; // sous réserve que vous utilisiez les privilèges d'UnicaenAuth et que vous ayez généré votre fournisseur use Application\Service\Traits\WorkflowServiceAwareTrait; use UnicaenAuth\Assertion\AbstractAssertion; Loading @@ -22,6 +23,8 @@ use Laminas\Permissions\Acl\Resource\ResourceInterface; */ class ContratAssertion extends AbstractAssertion { use ParametresServiceAwareTrait; const PRIV_LISTER_FICHIERS = 'contrat-lister-fichiers'; const PRIV_SUPPRIMER_FICHIER = 'contrat-supprimer-fichier'; const PRIV_AJOUTER_FICHIER = 'contrat-ajouter-fichier'; Loading Loading @@ -181,9 +184,12 @@ class ContratAssertion extends AbstractAssertion $devalid = true; } $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return $this->asserts([ $this->assertRole($contrat), $contrat->getValidation(), $contrat->getValidation() && !$contratDirect, !$contrat->getDateRetourSigne(), $devalid, ]); Loading @@ -193,9 +199,19 @@ class ContratAssertion extends AbstractAssertion protected function assertSuppression(Contrat $contrat) { if (!$contrat->estUnAvenant()) { $devalid = $contrat->getIntervenant()->getContrat()->count() == 1; // on ne peut supprimer un contrat que si aucun avenant n'existe } else { $devalid = true; } $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return $this->asserts([ $this->assertRole($contrat), !$contrat->getValidation(), !$contrat->getValidation() || ($contratDirect && $devalid), !$contrat->getDateRetourSigne(), ]); } Loading
module/Application/src/Controller/ContratController.php +31 −3 Changes for module/Application/src/Controller/ContratController.php: 31 added lines, 3 removed lines. Original line number Diff line number Diff line Loading @@ -139,7 +139,11 @@ class ContratController extends AbstractController $avenantResult = $this->getServiceParametres()->get('avenant'); $avenant = ($avenantResult == Parametre::AVENANT); return compact('title', 'intervenant', 'contrats', 'services', 'emailIntervenant', 'avenant'); $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); return compact('title', 'intervenant', 'contrats', 'services', 'emailIntervenant', 'avenant', 'contratDirect'); } Loading @@ -152,6 +156,9 @@ class ContratController extends AbstractController $structure = $this->getEvent()->getParam('structure'); /* @var $structure Structure */ $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); if (!$intervenant) { throw new \LogicException('L\'intervenant n\'est pas précisé'); } Loading @@ -167,8 +174,16 @@ class ContratController extends AbstractController } else { try { $this->getProcessusContrat()->enregistrer($contrat); if ($contratDirect) { $this->getProcessusContrat()->valider($contrat); } $this->updateTableauxBord($contrat->getIntervenant()); if ($contratDirect) { $this->flashMessenger()->addSuccessMessage(($contrat->estUnAvenant() ? 'L\'avenant' : 'Le contrat') . ' a bien été créé.'); } else { $this->flashMessenger()->addSuccessMessage('Le projet ' . ($contrat->estUnAvenant() ? 'd\'avenant' : 'de contrat') . ' a bien été créé.'); } } catch (\Exception $e) { $this->flashMessenger()->addErrorMessage($this->translate($e)); } Loading Loading @@ -199,6 +214,11 @@ class ContratController extends AbstractController if ($this->getRequest()->isPost()) { try { $contratDirectResult = $this->getServiceParametres()->get('contrat_direct'); $contratDirect = ($contratDirectResult == Parametre::CONTRAT_DIRECT); if ($contratDirect && $contrat->getValidation()) { $this->getProcessusContrat()->devalider($contrat); } $this->getProcessusContrat()->supprimer($contrat); $this->updateTableauxBord($contrat->getIntervenant()); $this->flashMessenger()->addSuccessMessage("Suppression $contratToString effectuée avec succès."); Loading Loading @@ -269,6 +289,7 @@ class ContratController extends AbstractController if ($this->isAllowed($contrat, Privileges::CONTRAT_DEVALIDATION)) { if ($this->getRequest()->isPost()) { try { $this->getProcessusContrat()->devalider($contrat); $this->updateTableauxBord($contrat->getIntervenant()); Loading Loading @@ -311,7 +332,11 @@ class ContratController extends AbstractController throw new UnAuthorizedException('Vous n\'avez pas les droits requis pour saisir la date de retour du contrat signé.'); } $canSaisieDateSigne = true; if ($contrat->getDateRetourSigne() != null || $contrat->getFichier()->count() > 0) { $contratDateSansFichierResult = $this->getServiceParametres()->get('contrat_date'); $contratDateSansFichier = ($contratDateSansFichierResult == Parametre::CONTRAT_DATE); if ($contrat->getDateRetourSigne() != null || $contrat->getFichier()->count() > 0 || $contratDateSansFichier) { $form->bindRequestSave($contrat, $this->getRequest(), function () use ($contrat, $contratToString) { $this->getServiceContrat()->save($contrat); Loading @@ -324,7 +349,10 @@ class ContratController extends AbstractController $canSaisieDateSigne = false; } return compact('form', 'done', 'title', 'canSaisieDateSigne'); $contratDateResult = $this->getServiceParametres()->get('contrat_date'); $contratDate = ($contratDateResult == Parametre::CONTRAT_DATE); return compact('form', 'done', 'title', 'canSaisieDateSigne', 'contratDate'); } Loading