Loading src/Command/SignatureListCommand.php +4 −1 Original line number Diff line number Diff line Loading @@ -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(), Loading src/Command/SignatureSendCommand.php +4 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading src/Entity/Db/Signature.php +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -478,6 +494,7 @@ class Signature */ public function addRecipient(SignatureRecipient $recipient): self { $recipient->setSignature($this); $this->recipients->add($recipient); return $this; } Loading src/Entity/Db/SignatureRecipient.php +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading src/Service/SignatureService.php +77 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); } Loading @@ -614,9 +667,6 @@ class SignatureService $processService->trigger($signature->getProcessStep()->getProcess()); } if ($statusChanged) { $this->triggerSignatureEvent($signature, SignatureEvent::EVENT_TYPE_STATUS); } return true; } else { Loading @@ -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. * Loading Loading @@ -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); Loading Loading @@ -977,7 +1031,6 @@ class SignatureService ]; $this->notificationsTrigger($datas); } } } Loading Loading @@ -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
src/Command/SignatureListCommand.php +4 −1 Original line number Diff line number Diff line Loading @@ -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(), Loading
src/Command/SignatureSendCommand.php +4 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
src/Entity/Db/Signature.php +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -478,6 +494,7 @@ class Signature */ public function addRecipient(SignatureRecipient $recipient): self { $recipient->setSignature($this); $this->recipients->add($recipient); return $this; } Loading
src/Entity/Db/SignatureRecipient.php +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
src/Service/SignatureService.php +77 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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); } Loading @@ -614,9 +667,6 @@ class SignatureService $processService->trigger($signature->getProcessStep()->getProcess()); } if ($statusChanged) { $this->triggerSignatureEvent($signature, SignatureEvent::EVENT_TYPE_STATUS); } return true; } else { Loading @@ -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. * Loading Loading @@ -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); Loading Loading @@ -977,7 +1031,6 @@ class SignatureService ]; $this->notificationsTrigger($datas); } } } Loading Loading @@ -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