<?php
namespace App\EventSubscriber;
use App\Event\EventData;
use App\Entity\User;
use App\Entity\Teacher;
use Doctrine\ORM\EntityManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel;
use App\Controller\BaseController;
use App\Service\MangoPayService;
class KYCDocumentSubscriber extends BaseController implements EventSubscriberInterface
{
/**
* List of event
*
* @return array
*/
public static function getSubscribedEvents()
{
// un evennement invoice.payment_succeeded a été lancé
return array(
EventData::ON_EVENT_UPLOAD_MANGOPAY_KYC_DOCUEMENT => array(
array('uploadMangopayKycDocument', 1)
),
EventData::ON_EVENT_MANGOPAY_KYC_SUCCEEDED => array(
array('onMangopayKycDocumentValid', 1)
),
);
}
/**
* Upload KYC document
* @param EventData $event
*/
public function uploadMangopayKycDocument(EventData $event)
{
$datas = $event->getData();
$user = $datas['user'] ;
$type = $datas['type'] ;
$mangoPayService = $this->mangoPayService ;
//Mis à jour chez mangopay
$typeIdentity = $typeAdress = false ;
if($type == MangoPayService::DOCUMENT_TYPE_IDENTITY_PROOF){
$file = $this->getParameter("file_kyc_directory")."/".$user->getIdentityProof() ;
$typeIdentity = true ;
}
if($type == MangoPayService::DOCUMENT_TYPE_ADDRESS_PROOF){
$file = $this->getParameter("file_kyc_directory")."/".$user->getAddressProof() ;
$typeAdress = true ;
}
$document = $mangoPayService->createKYCDocument($user->getNaturalUser(), $file, $type) ;
if($typeIdentity == true){
$user->setIdentityProofId($document->Id) ;
}
if($typeAdress == true){
$user->setAddressProofId($document->Id) ;
}
$this->save($user);
return $user ;
}
/**
* On KYC document valid
* @param EventData $event
*/
public function onMangopayKycDocumentValid(EventData $event)
{
$datas = $event->getData();
$id = $datas['RessourceId'] ;
//Verifier si la clé du document est un identity proof
//Si pas un identity proof , on verifie si la clé du document est un address proof
$teacher = $this->entityManager->getRepository(Teacher::class)->findOneBy(['identityProofId' => $id]) ;
if(!empty($teacher)){
$teacher->setIdentityProofStatus(true) ;
$this->save($teacher);
}else{
$teacher = $this->entityManager->getRepository(Teacher::class)->findOneBy(['addressProofId' => $id]) ;
if(!empty($teacher)){
$teacher->setAddressProofStatus(true) ;
$this->save($teacher);
}
}
return true ;
}
}