<?php
namespace App\EventListener;
use App\Services\Functions;
use Pimcore\Event\Model\ElementEventInterface;
use Pimcore\Event\Model\DataObjectEvent;
use Pimcore\Log\ApplicationLogger;
use Symfony\Component\Messenger\MessageBusInterface;
use Carbon\Carbon;
use Pimcore\Log\Simple;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\Attestation;
use Pimcore\Model\DataObject\LocationSource;
use Pimcore\Model\DataObject\MembershipModule;
class AttestationListener
{
private $bus;
private $logger;
public function __construct(MessageBusInterface $bus, ApplicationLogger $logger)
{
$this->bus = $bus;
$this->logger = $logger;
}
public function onPostUpdate(ElementEventInterface $e)
{
if ($e instanceof DataObjectEvent) {
$object = $e->getObject();
if ($object instanceof Attestation) {
$this->saveMembership($object);
}
}
}
protected function saveMembership(Attestation $object)
{
try {
/** $pathConvention could be "/restricted-assets/{MembersKey}-{MembersUsername}" */
$pathConvention = Functions::getLeadPathConvention([Carbon::today()->toDateString()]);
$data = unserialize($object->getAttestationData());
$email = isset($data['email']) ? $data['email'] : null;
$locatore = isset($data['locatori'][0]) ? $data['locatori'][0] : [];
$sourceObj = LocationSource::getById($object->getAccount());
if (!empty($locatore)) {
if (!empty($email)) {
if (null == ($membership = MembershipModule::getByEmail($email, 1))) {
// Check Asset folder
$folder = DataObject\Folder::getByPath('/membership/' . $pathConvention);
if (!($folder instanceof DataObject\Folder))
$folder = DataObject\Service::createFolderByPath('/membership/' . $pathConvention);
$time = Carbon::now();
$membership = new MembershipModule();
$membership->getMembershipRequestDate($time);
$membership->setParentId($folder->getId());
$membership->setKey(\Pimcore\Model\Element\Service::getValidKey($email . '-' . $time->getTimestamp(), 'object'));
$membership->setPublished(true);
$membership->setName($locatore['nome']);
$membership->setSurname($locatore['cognome']);
$membership->setFiscalcode($locatore['cf']);
if (isset($locatore['datanascita']) && !empty($locatore['datanascita'])) {
$membership->setBirthDate(Carbon::createFromFormat('d/m/Y', $locatore['datanascita']));
}
$membership->setBirthPlace($locatore['paesenascita']);
$membership->setCity($locatore['citta']);
$membership->setAddress($locatore['residenza']);
$membership->setCap($locatore['codicePostale']);
$membership->setAddressNumber($locatore['civico']);
$membership->setIdentityNumber($locatore['ci']);
$membership->setEmail($email);
$membership->setMobile($data['phone']);
$membership->setAttestation($object);
$membership->setAccount($sourceObj->getStripeAccount()->getAccount());
$membership->save();
} else {
$membership->setName($locatore['nome']);
$membership->setSurname($locatore['cognome']);
$membership->setFiscalcode($locatore['cf']);
if (isset($locatore['datanascita']) && !empty($locatore['datanascita'])) {
$membership->setBirthDate(Carbon::createFromFormat('d/m/Y', $locatore['datanascita']));
}
$membership->setBirthPlace($locatore['paesenascita']);
$membership->setCity($locatore['citta']);
$membership->setAddress($locatore['residenza']);
$membership->setCap($locatore['codicePostale']);
$membership->setAddressNumber($locatore['civico']);
$membership->setIdentityNumber($locatore['ci']);
$membership->setEmail($email);
$membership->setMobile($data['phone']);
$membership->setAttestation($object);
$membership->setAccount($sourceObj->getStripeAccount()->getAccount());
$membership->save();
}
} else {
$membershipModule = new MembershipModule\Listing();
$membershipModule->setCondition('name = ? AND surname = ? AND attestation__id = ?', [
$locatore['nome'],
$locatore['cognome'],
$object->getId()
]);
$membershipModule->setLimit(1);
$membership = $membershipModule->current();
if ($membership instanceof MembershipModule) {
$membership->setName($locatore['nome']);
$membership->setSurname($locatore['cognome']);
$membership->setFiscalcode($locatore['cf']);
if (isset($locatore['datanascita']) && !empty($locatore['datanascita'])) {
$membership->setBirthDate(Carbon::createFromFormat('d/m/Y', $locatore['datanascita']));
}
if (isset($locatore['paesenascita'])) {
$membership->setBirthPlace($locatore['paesenascita']);
}
if (isset($locatore['citta'])) {
$membership->setCity($locatore['citta']);
}
if (isset($locatore['residenza'])) {
$membership->setAddress($locatore['residenza']);
}
if (isset($data['phone'])) {
$membership->setMobile($data['phone']);
}
if (isset($data['codicePostale'])) {
$membership->setCap($locatore['codicePostale']);
}
if (isset($data['civico'])) {
$membership->setAddressNumber($locatore['civico']);
}
$membership->setIdentityNumber($locatore['ci']);
$membership->setEmail($email);
$membership->setAttestation($object);
// $membership->setAccount($sourceObj->getStripeAccount()->getAccount());
$membership->save();
} else {
// Check Asset folder
$folder = DataObject\Folder::getByPath('/membership/' . $pathConvention);
if (!($folder instanceof DataObject\Folder))
$folder = DataObject\Service::createFolderByPath('/membership/' . $pathConvention);
$time = Carbon::now();
$membership = new MembershipModule();
$membership->getMembershipRequestDate($time);
$membership->setParentId($folder->getId());
$membership->setKey(\Pimcore\Model\Element\Service::getValidKey($locatore['nome'] . '-' . $locatore['cognome'] . '-' . $time->getTimestamp(), 'object'));
$membership->setPublished(true);
$membership->setName($locatore['nome']);
$membership->setSurname($locatore['cognome']);
$membership->setFiscalcode($locatore['cf']);
if (isset($locatore['datanascita']) && !empty($locatore['datanascita'])) {
$membership->setBirthDate(Carbon::createFromFormat('d/m/Y', $locatore['datanascita']));
}
if (isset($locatore['paesenascita'])) {
$membership->setBirthPlace($locatore['paesenascita']);
}
if (isset($locatore['citta'])) {
$membership->setCity($locatore['citta']);
}
if (isset($locatore['residenza'])) {
$membership->setAddress($locatore['residenza']);
}
if (isset($data['phone'])) {
$membership->setMobile($data['phone']);
}
if (isset($data['codicePostale'])) {
$membership->setCap($locatore['codicePostale']);
}
if (isset($data['civico'])) {
$membership->setAddressNumber($locatore['civico']);
}
$membership->setIdentityNumber($locatore['ci']);
$membership->setEmail($email);
$membership->setAttestation($object);
$membership->setAccount($sourceObj->getStripeAccount()->getAccount());
$membership->save();
}
}
}
} catch (\Exception $e) {
$this->logger->error($e);
}
}
public function onPostAdd(ElementEventInterface $e)
{
if ($e instanceof DataObjectEvent) {
$object = $e->getObject();
if ($object instanceof Attestation) {
$this->saveMembership($object);
}
}
}
}