Commit 6a4578e1 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Ajout du commentaire de refus dans l'objet Signature

 - Traitement des Post-its côté ESUP pour isoler les commentaires de refus et les ajouter dans les Signatures
parent 5a5702c0
Loading
Loading
Loading
Loading
Loading

CHANGELOG.md

0 → 100644
+18 −0
Original line number Diff line number Diff line
# CHANGELOG

## 16 octobre 2024

### Général
 
 - Ajout de tests unitaires (intégrés dans Gitlab au push)
 - Traitement des commentaires dans `SignRequestInfo`
 - Ajout des messages de refus : mise à jour du champ information - non testé* - sur `SignatureRecipient` et ajout d'un champ pour le message d'erreur dans `Signature::refused_text`

```sql
ALTER TABLE unicaen_signature_signature ADD refused_text TEXT DEFAULT NULL;

```

### ESUP
 - **Prise en charge des commentaires/Post-its ESUP** Cependant, la version actuelle d'ESUP ne permet pas de déterminer l'auteur du Post-it, donc ils seront traité de façon global
 - Les commentaires/Post-its sont ignorés pour le moment
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ class ProcessStep
            'order' => $this->getOrder(),
            'status' => $this->getStatus(),
            'status_text' => $this->getStatusText(),
            'refused_text' => $this->getSignature()->getRefusedText(),
            'allSignToComplete' => $this->getSignature()->getAllSignToComplete(),
            'dateSignatureUpdate' => $this->getSignature()->getDateUpdate(),
            'recipients' => $recipients,
+21 −0
Original line number Diff line number Diff line
@@ -186,6 +186,14 @@ class Signature
     */
    private ?string $context_long;

    /**
     * Message de refus
     *
     * @var ?string
     * @ORM\Column (type="text", nullable=true)
     */
    private ?string $refused_text;

    /**
     * Clef permettant d'identifier le parapheur
     *
@@ -326,6 +334,7 @@ class Signature

    /**
     * @param ProcessStep|null $processStep
     * @return Signature
     */
    public function setProcessStep(?ProcessStep $processStep): self
    {
@@ -362,6 +371,7 @@ class Signature

    /**
     * @param DateTime|null $dateSend
     * @return Signature
     */
    public function setDateSend(?DateTime $dateSend): self
    {
@@ -459,6 +469,17 @@ class Signature
        return $this;
    }

    public function getRefusedText(): ?string
    {
        return $this->refused_text;
    }

    public function setRefusedText(?string $refused_text): self
    {
        $this->refused_text = $refused_text;
        return $this;
    }

    /**
     * @return SignatureRecipient[]
     */
+7 −1
Original line number Diff line number Diff line
@@ -544,6 +544,7 @@ class SignatureService
    ): bool {
        $this->getLoggerService()->debug("### UPDATE STATUS '$signature'");
        try {

            if (!$signature->isFinished()) {
                $documentSrc = $this->getSignatureConfigurationService()->getDocumentsLocation()
                    . DIRECTORY_SEPARATOR
@@ -555,7 +556,6 @@ class SignatureService
                    throw new SignatureException($err);
                }


                $letterFileStrategy = $this->getLetterfileService()->getLetterFileStrategy(
                    $signature->getLetterfileKey()
                );
@@ -598,6 +598,7 @@ class SignatureService
                    if ($infos->isAccepted($recipient->getEmail()) && $updateRequired) {
                        $this->getLoggerService()->debug("$recipient a signé");
                        $recipient->setStatus(Signature::STATUS_SIGNATURE_SIGNED, true);
                        $recipient->setInformations($infos->getCommentByFlat($recipient->getEmail()));
                        $recipient->setDateFinished($infos->getDateDone($recipient->getEmail()));
                        $events[] = [
                            'spot' => 'recipient',
@@ -608,6 +609,10 @@ class SignatureService
                    }
                    if ($infos->isRefused($recipient->getEmail()) && $updateRequired) {
                        $recipient->setStatus(Signature::STATUS_SIGNATURE_REJECT, true);
                        $recipient->setInformations($infos->getRefusedCommentsByFlat($recipient->getEmail()));
                        $refusedText = $infos->getRefusedCommentsByFlat();
                        $this->getLoggerService()->debug("COMMENTAIRE de REFUS : '$refusedText'");
                        $signature->setRefusedText($refusedText);
                        $this->getLoggerService()->debug("$recipient a REJETé");
                        $events[] = [
                            'spot' => 'recipient',
@@ -624,6 +629,7 @@ class SignatureService
                            ->setDateUpdate(new \DateTime());
                    }
                }

                $this->getObjectManager()->flush();

                if ($signature->getStatus() == Signature::STATUS_SIGNATURE_SIGNED) {
+2 −61
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ use UnicaenSignature\Exception\SignatureDataMissingException;
use UnicaenSignature\Service\LoggerServiceAwareTrait;
use UnicaenSignature\Service\ServiceContainerAwareTrait;
use UnicaenSignature\Service\SignatureConfigurationServiceAwareTrait;
use UnicaenSignature\Strategy\Letterfile\Esup\Response\SignRequestInfo;
use UnicaenSignature\Strategy\Letterfile\ILetterfileStrategy;
use UnicaenSignature\Strategy\Letterfile\ISignRequest;
use UnicaenSignature\Strategy\Letterfile\Tools\CurlAccess;
@@ -350,68 +351,8 @@ class EsupLetterfileStrategy implements ILetterfileStrategy
                throw new Exception("La signature n'existe plus dans Esup");
            }

            $responseInfos = new ResponseInfos();
            return SignRequestInfo::getFromSignRequestGetId($returned);

            // On regarde si une personne a refusée
            if (array_key_exists('recipientHasSigned', $returned)) {
                foreach ($returned['recipientHasSigned'] as $item) {
                    if (array_key_exists('actionType', $item) && $item['actionType'] == 'refused') {
                        $responseInfos->setForceRefuse(true);
                    }
                }
            }

            // La clef auditTrail permet d'obtenir les personnes qui ont signées
            if ($returned['auditTrail'] != null && array_key_exists('auditSteps', $returned['auditTrail'])) {
                foreach ($returned['auditTrail']['auditSteps'] as $auditStep) {
                    $email = $auditStep['email'];
                    $date = $auditStep['timeStampDate'];
                    $dateAccepted = new \DateTime($date);
                    $responseInfos->addAccepted($email, $dateAccepted);
                }
            }

            // Récupération des emails qui ont réagit
            if (array_key_exists('parentSignBook', $returned)
                && array_key_exists('liveWorkflow', $returned['parentSignBook'])
                && array_key_exists('currentStep', $returned['parentSignBook']['liveWorkflow'])
                && array_key_exists('recipients', $returned['parentSignBook']['liveWorkflow']['currentStep'])
            ) {
                $allSignToComplete = $returned['parentSignBook']['liveWorkflow']['currentStep']['allSignToComplete'];
                $responseInfos->setAllSignToComplete($allSignToComplete);

                foreach ($returned['parentSignBook']['liveWorkflow']['currentStep']['recipients'] as $recipient) {
                    $signed = $recipient['signed'];
                    $email = $recipient['user']['email'];
                    $recipients[] = $email;
                    $responseInfos->addRecipient($email);
                    if ($signed) {
                        if (!$responseInfos->isAccepted($email)) {
                            $responseInfos->addRefused($email);
                        }
                    }
                    else {
                        $responseInfos->addNone($email);
                    }
                }
            }


            // Commentaires
            foreach ($returned['comments'] as $com) {
                var_dump($com);
                $responseInfos->addComment("unknow", $email);
            }

            // Status
            $status_remote = $returned['status'];
            $responseInfos->setStatusRemote($status_remote);

            // Suppression dans le parapheur
            if ($status_remote == 'deleted') {
                $responseInfos->setStatus(Signature::STATUS_SIGNATURE_DELETE);
            }
            return $responseInfos;
        } catch (Exception $e) {
            $msg = "Impossible de charger les informations de la SignRequest '$id' dans ESUP";
            $this->getLoggerService()->critical(
Loading