Commit 0ebad910 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Mise à jour du code

- Ajout d'événements
- Fix des notifications en cours (à revoir)
parent 30bad651
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -25,14 +25,17 @@ class SignatureListCommand extends SignatureCommandAbstract
        $headers = ["ID", "Label", "Description", "Parafeur", "Destinataires", "Tous", "Doc ID", "Statut"];
        $rows = [];

        $this->getSignatureService()->testTrigger();

        /** @var Signature $signature */
        foreach ($this->getSignatureService()->getSignatures() as $signature) {
            $nbrSigned = count($signature->getSignedRecipients());
            $rows[] = [
                $signature->getId(),
                $signature->getLabel(),
                $signature->getDescription(),
                $signature->getLetterfileKey(),
                count($signature->getRecipientsEmailsArray()) . ' mail(s)',
                $nbrSigned . '/' . count($signature->getRecipientsEmailsArray()),
                $signature->getAllSignToComplete() ? "O" : "N",
                $signature->getDocumentRemotekey(),
                $signature->getStatusText(),
+4 −0
Original line number Diff line number Diff line
@@ -25,6 +25,10 @@ class SignatureSendCommand extends SignatureCommandAbstract

        try {
            $signature = $this->getSignatureService()->getSignature($input->getArgument('id'));
            if( $signature->getProcessStep() ){
                $io->warning("Cette signature fait partie d'un processus, utilisez les commandes de processus");
                return self::INVALID;
            }
            $this->getSignatureService()->sendSignature($signature);
            $io->title("Envoi de la signature '$signature'");
        } catch (\Exception $exception) {
+17 −0
Original line number Diff line number Diff line
@@ -463,6 +463,22 @@ class Signature
        return $this->recipients;
    }

    /**
     * Retourne la liste des destinaires qui ont signé.
     *
     * @return array
     */
    public function getSignedRecipients() :array
    {
        $signed = [];
        foreach ($this->getRecipients() as $recipient) {
            if( $recipient->isSigned() ){
                $signed[] = $recipient;
            }
        }
        return $signed;
    }

    /**
     * @param array $recipients
     * @return Signature
@@ -478,6 +494,7 @@ class Signature
     */
    public function addRecipient(SignatureRecipient $recipient): self
    {
        $recipient->setSignature($this);
        $this->recipients->add($recipient);
        return $this;
    }
+4 −0
Original line number Diff line number Diff line
@@ -327,6 +327,10 @@ class SignatureRecipient
        return $this->getStatus() == Signature::STATUS_SIGNATURE_REJECT;
    }

    public function isDone() :bool {
        return $this->isSigned() || $this->isRefused();
    }

    public function isNotifiable() :bool
    {
        return $this->getStatus() == Signature::STATUS_SIGNATURE_WAIT;
+77 −18
Original line number Diff line number Diff line
@@ -562,31 +562,53 @@ class SignatureService

                $statusChanged = $signature->getStatus() !== $status;

                if (!$statusChanged) {
                    return false;
                $changed = false;
                $signature->setStatus($status);
                if ($statusChanged) {
                    $signature->setDateUpdate(new \DateTime());
                }

                $signature->setStatus($status)
                    ->setDateUpdate(new \DateTime());
                $events = [];


                // Si la signature est finie, on met à jour le status des destinaires en attente sur cancel
                foreach ($signature->getRecipients() as $recipient) {
                    if ($infos->isAccepted($recipient->getEmail())) {
                    if ($infos->isAccepted($recipient->getEmail()) && !$recipient->isDone()) {
                        $recipient->setStatus(Signature::STATUS_SIGNATURE_SIGNED, true);
                        $recipient->setDateFinished($infos->getDateDone($recipient->getEmail()));
                        $this->getLoggerService()->debug("Mise à jour [SIGNATURE] pour '$recipient'");

                        //$this->triggerRecipientEvent($recipient, SignatureConstants::EVENT_RECIPIENT_ACCEPTED);

                        $events[] = [
                            'spot' => 'recipient',
                            'type' => SignatureConstants::EVENT_RECIPIENT_ACCEPTED,
                            'id'   => $recipient->getId()
                        ];
                    }
                    if ($infos->isRefused($recipient->getEmail())) {
                    if ($infos->isRefused($recipient->getEmail()) && !$recipient->isDone()) {
                        $recipient->setStatus(Signature::STATUS_SIGNATURE_REJECT, true);
                        $this->getLoggerService()->debug("Mise à jour [REFUS] '$recipient'");

                        // $this->triggerRecipientEvent($recipient, SignatureConstants::EVENT_RECIPIENT_REJECTED);

                        $events[] = [
                            'spot' => 'recipient',
                            'type' => SignatureConstants::EVENT_RECIPIENT_REJECTED,
                            'id'   => $recipient->getId()
                        ];
                        // TODO vérifier si on a la date de refus
                    }
                    if ($signature->isFinished() && $recipient->getStatus() == Signature::STATUS_SIGNATURE_WAIT) {
                        $recipient->setStatus(Signature::STATUS_SIGNATURE_CANCEL, true)
                            ->setDateUpdate(new \DateTime());
                    }
                }
                $this->getObjectManager()->flush();

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

                if ($signature->getStatus() == Signature::STATUS_SIGNATURE_SIGNED) {
                    $this->getLoggerService()->debug("Transfert du document");
                    // TODO 'backup' de l'original

                    $documentSrc = $this->getSignatureConfigurationService()->getDocumentsLocation()
                        . DIRECTORY_SEPARATOR
@@ -601,10 +623,41 @@ class SignatureService
                            "Impossible d'écrire le document"
                        );
                    }

                    $events[] = [
                        'spot' => 'signature',
                        'type' => SignatureConstants::EVENT_SIGNATURE_SIGNED,
                        'id'   => $signature->getId()
                    ];
                }

                if ($signature->getStatus() == Signature::STATUS_SIGNATURE_REJECT) {
                    $events[] = [
                        'spot' => 'signature',
                        'type' => SignatureConstants::EVENT_SIGNATURE_REJECTED,
                        'id'   => $signature->getId()
                    ];
                }

                $this->getLoggerService()->debug("Nombre d'événement : " . count($events));

                if( count($events) ){
                    $em = new EventManager($this->getSharedEventManager());
                    foreach ($events as $event) {
                        $this->getLoggerService()->info(
                            sprintf(
                                '[EVENT %s] - %s (id = %s)',
                                $event['spot'],
                                $event['type'],
                                $event['id']
                            )
                        );
                        $em->trigger($event['type'], null, ['id' => $event['id']]);
                    }
                }

                // Notification
                if ($signature->getObservers()) {
                if ($signature->getObservers() && count($events)) {
                    $this->notificationsObserversStatut($signature);
                }

@@ -614,9 +667,6 @@ class SignatureService
                    $processService->trigger($signature->getProcessStep()->getProcess());
                }

                if ($statusChanged) {
                    $this->triggerSignatureEvent($signature, SignatureEvent::EVENT_TYPE_STATUS);
                }
                return true;
            }
            else {
@@ -629,6 +679,11 @@ class SignatureService
        return false;
    }

    public function testTrigger(){
        $em = new EventManager($this->getSharedEventManager());
        $em->trigger(SignatureConstants::EVENT_SIGNATURE_SIGNED, null, ['id' => 666]);
    }

    /**
     * Mise à jour des signatures.
     *
@@ -797,17 +852,16 @@ class SignatureService
                $this->getObjectManager()->flush();
                $send = true;
            } catch (Exception $exception) {
                $this->getLoggerService()->critical("Can't save Signature, DB error : " . $exception->getMessage() . " - " . $exception->getTraceAsString());
                $this->getLoggerService()->critical(
                    "Can't save Signature, DB error : " . $exception->getMessage(
                    ) . " - " . $exception->getTraceAsString()
                );
                throw new SignatureException(
                    "La demande a été envoyé mais un problème est survenu lors de l'enregistrement"
                );
            }
            if ($send) {
                try {
                $this->triggerSignatureEvent($signature, SignatureEvent::EVENT_TYPE_SEND);
                } catch (Exception $e) {
                    $this->getLoggerService()->critical("Impossible de déclencher la signature : " . $e->getMessage());
                }

                try {
                    $this->notifications($signature);
@@ -977,7 +1031,6 @@ class SignatureService
                ];

                $this->notificationsTrigger($datas);

            }
        }
    }
@@ -1026,4 +1079,10 @@ class SignatureService
        $em = new EventManager($this->getSharedEventManager());
        $em->trigger($eventType, null, ['id' => $signature->getId()]);
    }

    protected function triggerRecipientEvent(SignatureRecipient $signatureRecipient, string $eventType): void
    {
        $em = new EventManager($this->getSharedEventManager());
        $em->trigger($eventType, null, ['id' => $signatureRecipient->getId()]);
    }
}
 No newline at end of file
Loading