Commit 18f78092 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Système permettant d'obtenir les signatures internes pour une personne

parent f27fc21a
Loading
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -53,13 +53,14 @@ class SignatureController extends AbstractActionController
    public function myDocumentsAction(): ViewModel
    {
        try {
            return new ViewModel([
            $datas = [
                'signatureRecipients' => $this->getSignatureService()
                    ->getSignaturesRecipientsByEmail(
                        $this->getSignatureService()->getSignatureConfigurationService(
                        )->getCurrentUserMail()
                    ),
                                 ]);
            ];
            return new ViewModel($datas);
        } catch (Exception $e) {
            $this->flash()->addErrorMessage($e->getMessage());
            return new ViewModel(['signatures' => []]);
+35 −11
Original line number Diff line number Diff line
@@ -12,16 +12,40 @@ class SignatureRecipientRepository extends EntityRepository
     */
    public function getForEmail(string $email) :array
    {
        $status = [Signature::STATUS_SIGNATURE_WAIT,Signature::STATUS_SIGNATURE_SIGNED,Signature::STATUS_SIGNATURE_REJECT];

        return $this->createQueryBuilder('sr')
            ->leftJoin( 'sr.signature', 's')
            ->where('sr.status IN(:status) AND sr.email = :email')
            ->setParameters([
                'status' => $status,
                'email' => $email,
            ])
            ->getQuery()
            ->getResult();
        return $this->getRecipientSignatures(
            $email,
            [Signature::STATUS_SIGNATURE_WAIT,Signature::STATUS_SIGNATURE_SIGNED,Signature::STATUS_SIGNATURE_REJECT]
        );
    }

    /**
     * @return Signature[]
     */
    public function getRecipientSignatures(string|null $email = null, array|null $status = null, string|null $letterfile = null ) :array
    {
        $params = [];
        $qb = $this->createQueryBuilder('sr')
            ->leftJoin( 'sr.signature', 's');

        if( $email ){
            $qb->andWhere('sr.email = :email');
            $params['email'] = $email;
        }

        if( $status ){
            $qb->andWhere('sr.status IN (:status)');
            $params['status'] = $status;
        }

        if( $letterfile ){
            $qb->andWhere('s.letterfile_key = :letterfile');
            $params['letterfile'] = $letterfile;
        }

        if( $params ){
            $qb->setParameters($params);
        }

        return $qb->getQuery()->getResult();
    }
}
 No newline at end of file
+30 −0
Original line number Diff line number Diff line
@@ -37,4 +37,34 @@ class SignatureRepository extends EntityRepository
            ->getQuery()
            ->getResult();
    }

    public function getSignatures(string|null $recipient_mail = null, string|null $letterfile = null, array|null $status = []) {
        $params = [];
        $qb = $this->createQueryBuilder('s')
            ->leftJoin('s.recipients', 'r');

        if( $recipient_mail ){
            $qb->where('r.email = :recipient_mail');
            $params['recipient_mail'] = $recipient_mail;
        }

        if( $letterfile ){
            $qb->where('s.letterfile_key = :letterfile_key');
            $params['letterfile_key'] = $letterfile;
        }

        if( $status ){
            $qb->where('s.status IN (status)');
            $params['status'] = $status;
        }

        if( $params ){
            $qb->setParameters($params);
        }

        $qb->orderBy('s.dateUpdate', 'DESC')
            ->getQuery();

        return $qb->getResult();
    }
}
 No newline at end of file
+16 −1
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace UnicaenSignature\Service;
use DoctrineModule\Persistence\ProvidesObjectManager;
use UnicaenSignature\Entity\Db\Signature;
use UnicaenSignature\Entity\Db\SignatureRecipient;
use UnicaenSignature\Entity\Repository\SignatureRepository;
use UnicaenSignature\Utils\SignatureException;

class InternalLetterfileService
@@ -16,19 +17,33 @@ class InternalLetterfileService
        SignatureConfigurationServiceAwareTrait,
        SignatureServiceAwareTrait;

    /**
     * @return SignatureRepository
     */
    protected function getSignatureRepository() :SignatureRepository {
        return $this->getObjectManager()->getRepository(Signature::class);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * @return Signature[]
     */
    public function getSignaturesInternal() :array
    public function getSignaturesInternal( string $userEmail ) :array
    {
        return [];
    }

    /**
     * Retourne les documents à viser dans le parapheur interne.
     *
     * @param string $user_mail
     * @return array
     */
    public function getDocumentsUser(string $user_mail) :array
    {
        $email = $this->getSignatureConfigurationService()->getCurrentUserMail();
        $signatures = $this->getSignatureRepository()->getSignaturesInternal($user_mail, 'internal');
    }

    /**
+47 −3
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ use UnicaenSignature\Entity\Db\SignatureFlowStep;
use UnicaenSignature\Entity\Db\SignatureRecipient;
use UnicaenSignature\Entity\Repository\ProcessRepository;
use UnicaenSignature\Entity\Repository\SignatureFlowRepository;
use UnicaenSignature\Entity\Repository\SignatureRecipientRepository;
use UnicaenSignature\Entity\Repository\SignatureRepository;
use UnicaenSignature\Event\SignatureEvent;
use UnicaenSignature\Formatter\ObjectFormatter;
@@ -49,6 +50,12 @@ class SignatureService
        return $this->getObjectManager()->getRepository(Process::class);
    }

    protected function getSignatureRecipientRepository(): SignatureRecipientRepository
    {
        return $this->getObjectManager()
            ->getRepository(SignatureRecipient::class);
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///// LISTES

@@ -123,9 +130,33 @@ class SignatureService
    public function getSignaturesRecipientsByEmail(?string $email): array
    {
        if ($email) {
            return $this->getObjectManager()
                ->getRepository(SignatureRecipient::class)
                ->getForEmail($email);
            return $this->getSignatureRecipientRepository()->getRecipientSignatures(
                $email,
                [
                    Signature::STATUS_SIGNATURE_WAIT,
                    Signature::STATUS_SIGNATURE_SIGNED,
                    Signature::STATUS_SIGNATURE_REJECT
                ]
            );
        }
        throw new SignatureException("Impossible de charger vos documents");
    }

    /**
     * @param string|null $email
     * @return SignatureRecipient[]
     */
    public function getSignaturesRecipientsByEmailWaiting(?string $email, string|null $letterfile = null): array
    {
        if ($email) {
            $this->getLoggerService()->debug("Get with letterfile '$letterfile'");
            return $this->getSignatureRecipientRepository()->getRecipientSignatures(
                $email,
                [
                    Signature::STATUS_SIGNATURE_WAIT
                ],
                $letterfile
            );
        }
        throw new SignatureException("Impossible de charger vos documents");
    }
@@ -211,10 +242,13 @@ class SignatureService
            'id'          => $signatureFlow->getId(),
            'label'       => $signatureFlow->getLabel(),
            'description' => $signatureFlow->getDescription(),
            //'missing_recipients' => false,
            'doc_url'     => $urlDocPreview,
            'steps'       => []
        ];

        $missing_recipients = false;

        $letterfiles = $this->getSignatureConfigurationService()->getLetterFiles();


@@ -237,6 +271,7 @@ class SignatureService
            $currentStep['level_in_letterfile'] = $levels[$step->getLevel()]['key_in_letterfile'];
            $currentStep['allSignToComplete'] = true;
            $currentStep['editable'] = false;
            $currentStep['missing_recipients'] = false;
            $currentStep['dynamicRecipients'] = is_callable($method['getRecipients']);
            $currentStep['recipients'] = [];

@@ -249,8 +284,17 @@ class SignatureService
                $currentStep['recipients'] = $step->getOptions()['recipients'];
            }

            if (count($currentStep['recipients']) == 0) {
                $missing_recipients = true;
                $currentStep['missing_recipients'] = true;
            }

            $out['signatureflow']['steps'][] = $currentStep;
        }


        $out['signatureflow']['missing_recipients'] = $missing_recipients;

        return $out;
    }