<?php
namespace App\Controller;
use App\Form\RenewMembershipCartViewClubFormType;
use App\Form\RenewMembershipClubFormType;
use App\Services\CheckwebsitesettingService;
use App\Services\GetPricesForMembershipService;
use App\Services\MollieService;
use App\Services\RenewMembershipFactory;
use MultilingualBundle\Service\DocumentLookupService;
use Pimcore\Model\DataObject\Attendees;
use Pimcore\Model\DataObject\Campscourse;
use Pimcore\Model\DataObject\Fieldcollection;
use Pimcore\Model\DataObject\Fieldcollection\Data\Leden;
use Pimcore\Model\DataObject\LidKaart;
use Pimcore\Twig\Extension\Templating\PimcoreUrl;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class LidcardClubController extends BaseController
{
protected $checkwebsitesettingService;
protected $inotherlang;
protected $pimcoreUrl;
public function __construct(CheckwebsitesettingService $checkwebsitesettingService, DocumentLookupService $inotherlang, PimcoreUrl $pimcoreUrl)
{
$this->checkwebsitesettingService = $checkwebsitesettingService;
$this->inotherlang = $inotherlang;
$this->pimcoreUrl = $pimcoreUrl;
}
/**
* @Route("{_locale}/lidkaart", name="renew_membership")
*/
public function renewMembership(Request $request, SessionInterface $session): Response
{
$form = $this->createForm(RenewMembershipClubFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Process form data here, for example, persist it to the database
$data = $form->getData();
$session->set('membership_data', $data);
return $this->redirectToRoute("renew_membership-cart-view");
}
return $this->render('lidkaart/renew-membership.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("{_locale}/lidkaart-cart-view", name="renew_membership-cart-view")
* @throws \Exception
*/
public function renewMembershipCartView(Request $request, SessionInterface $session): Response
{
$memberCard = new GetPricesForMembershipService();
$prices = $memberCard->getPrices();
// Retrieve the data from the session
$dataclient = $session->get('membership_data');
if ($dataclient) {
$form = $this->createForm(RenewMembershipCartViewClubFormType::class);
if ($dataclient['club'] === 'sailing'){
$form->remove('loodstext');
$form->remove('loods');
$type = "Z";
}else{
$form->remove('parkingtext');
$form->remove('parking');
$type = "S";
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$dataclient += $data;
$newsub = new RenewMembershipFactory($this->pimcoreUrl);
$newsub->createRenewedMembership($dataclient, $type);
$session->remove('membership_data');
}
return $this->render('lidkaart/cart-view-lidcard.html.twig', [
'form' => $form->createView(),
'club' => $dataclient['club'],
'membershiptype' => $dataclient['membershipType'],
'type'=> $type,
'members'=> $dataclient['members'],
'prices' => $prices
]);
}
return $this->redirectToRoute("renew_membership");
}
/**
* Checkpayment cart page
*
* @Route("{_locale}/payconnect/checkpayment-renew", name="checkpayment-page-renew")
*
* @param Request $request
* @return Response
* @throws \Exception
*/
public function checkpaymentAction(Request $request)
{
if ($request->isMethod('POST')) {
$mollie = new MollieService();
$LidKaart = LidKaart::getById($request->get('id-pay', null));
$paymentId = $LidKaart->getPaymentId();
$response = $mollie->checkPayment($paymentId);
// Process response
if ($response) {
$payment = $response;
$this->sendNotificationFromOrder($payment, $LidKaart);
}
} else {
return $this->redirect("/" . $this->language);
}
return $this->redirect("/" . $this->language);
}
/**
* Redirectpayment cart page
*
* @Route("{_locale}/redirectpayment-renew", name="redirectpayment-page-renew")
*
* @param Request $request
* @return Response
* @throws \Exception
*/
public function redirectpaymentAction(Request $request, \Pimcore\Config\Config $websiteConfig)
{
if ($this->checkwebsitesettingService->check("payment_successfull_lid", "document")) {
$paymentSuccesfullDocument = $websiteConfig->get('payment_successfull_lid');
}
if ($paymentSuccesfullDocument) {
$language = $request->getLocale();
$paymentObject = $request->get('id-pay');
$returnAddress = $this->inotherlang->getLocalizedDocument($paymentSuccesfullDocument, "$language") . '?o=' . $paymentObject;
return $this->redirect($returnAddress);
}
}
/**
* Redirectpayment cart page
*
* @Route("{_locale}/bedankt-lid", name="thanks-page-lid")
*
* @param Request $request
* @return Response
* @throws \Exception
*/
public function redirectpaymentviewLidAction(Request $request)
{
if (!$this->editmode) {
$language = $request->getLocale();
$paymentItem = LidKaart::getById($request->get('o', null));
if ($paymentItem) {
return $this->render('services/cart-redirect-payment.html.twig', [
'paymentItem' => $paymentItem
]);
} else {
return $this->redirect("/" . $language);
}
} else {
$paymentItem = null;
return $this->render('services/cart-redirect-payment.html.twig', [
'paymentItem' => $paymentItem
]);
}
}
public function sendNotificationFromOrder($payment, $lidkaart)
{
try {
$order_id = $payment->metadata->order_id;
$invoicenumber = $payment->metadata->invoicenumber;
$paymentObject = LidKaart::getById($order_id);
$orderIdPimcore = $paymentObject->getKey();
$keyattendees = $lidkaart->getKey();
if ($payment->isPaid() && $paymentObject) {
if (!$paymentObject->getPayed()) {
$dateToday = \Carbon\Carbon::now();
$paymentObject->setPayed(true);
$paymentObject->setDatePayment($dateToday);
$paymentObject->setPublished(true);
$paymentObject->save();
$mailData = $this->getMailData($paymentObject);
$emailTemplate = 'lid-mail-user';
$emailTemplateAdmin = 'lid-mail-club';
//send mail + Order voor bevestingen
if ($this->checkwebsitesettingService->check((string)$emailTemplate, "document")) {
$getEmailTemplate = \Pimcore\Model\WebsiteSetting::getByName((string)$emailTemplate);
$getEmailTemplateConfig = $getEmailTemplate->getData();
$emailDocument = $this->inotherlang->getLocalizedDocument($getEmailTemplateConfig, 'nl');
}
if ($this->checkwebsitesettingService->check((string)$emailTemplateAdmin, "document")) {
$getEmailTemplateAdmin = \Pimcore\Model\WebsiteSetting::getByName((string)$emailTemplateAdmin);
$getEmailTemplateConfigAdmin = $getEmailTemplateAdmin->getData();
$emailDocumentAdmin = $this->inotherlang->getLocalizedDocument($getEmailTemplateConfigAdmin, 'nl');
}
error_log(date('l jS \of F Y h:i:s A') . " Payment for $keyattendees succesfull paid \n", 3, PIMCORE_LOG_DIRECTORY . "/payments-lidkaart.log");
//send email to seller
if (!$paymentObject->getMailsend()) {
//send email to seller
(new \Pimcore\Mail())
->from('noreply@zsg.be')
->subject('Order lidkaart : ' . $invoicenumber)
->setDocument($emailDocumentAdmin)
->setParams($mailData)
->send();
// send customer e-mail confirmation
(new \Pimcore\Mail())
->to($paymentObject->getEmailAddress())
->from('noreply@zsg.be')
->subject('Order lidkaart: ' . $invoicenumber)
->setParams($mailData)
->setDocument($emailDocument)
->send();
$paymentObject->setMailsend(true);
$paymentObject->save();
}
$paymentObject->save();
}
} elseif ($payment->isOpen() == FALSE) {
//send email to seller
// $mailSeller = new MailService();
// $documentSalesNotpaid = $inotherlang->getLocalizedDocument($config->payment_notice);
// $mailSeller->setSubject($translator->trans("Order ").' '.$invoicenumber.' '.$translator->trans("is not paid"));
// $mailSeller->setDocument($documentSalesNotpaid);
// $mailSeller->setParams($mailData);
// $mailSeller->send();
/*
* The payment isn't paid and isn't open anymore. We can assume it was aborted.
*/
error_log(date('l jS \of F Y h:i:s A') . " Problem with $keyattendees, not paid \n", 3, PIMCORE_LOG_DIRECTORY . "/payments-lidkaart.log");
}
$paymentObject->save();
header('HTTP/1.1 200 OK');
die();
} catch (Mollie_API_Exception $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
}
protected function getMemberProperties($member): array
{
$fields = [
'firstName' => 'getVoornaam',
'WWSV' => 'getWWSV_licentienummer',
'lastName' => 'getAchternaam',
'gender' => 'getGender',
'birthDate' => 'getGeboortedatum',
'email' => 'getEmail',
'nationality' => 'getNationaliteit',
'sport1' => 'getSporttakOne',
'sport2' => 'getSporttakTwo',
'telephone1' => 'getTelefoon',
'mobile' => 'getGsm',
];
$memberData = [];
foreach ($fields as $key => $method) {
$memberData[$key] = $member->$method();
}
return $memberData;
}
private function getMailData(LidKaart $paymentObject): array
{
$mailData = [];
$mailData['Soort'] = $paymentObject->getMembershipType();
$mailData['Club'] = $paymentObject->getClub();
$mailData['countLeden'] = $paymentObject->getLedenKaart()?->getCount() ;
$mailData['kaartNummer'] = $paymentObject->getKaartnummer();
$mailData['amout'] = $paymentObject->getAmount();
$mailData['Opmerking'] = $paymentObject->getOpmerking();
$mailData['Email'] = $paymentObject->getOpmerking();
$mailData['Jaar'] = $paymentObject->getValidYear();
$mailData['Adres'] = $paymentObject->getStraat() . ' ' . $paymentObject->getStraatNummer() . ' ' . $paymentObject->getPostcode() . ' ' . $paymentObject->getStad() . ' ' . $paymentObject->getLand();
if($mailData['Club'] == "sailing"){
$mailData['loodsparking'] = $paymentObject->getParking();
$mailData['loodsparkingnummer'] = $paymentObject->getNummer_parking();
}else{
$mailData['loodsparking'] = $paymentObject->getLoods();
$mailData['loodsparkingnummer'] = $paymentObject->getNummer_loods();
}
$leden = '';
foreach ($paymentObject->getLedenKaart() as $lid) {
/** @var $lid Fieldcollection\Data\Leden */
$infoLid = $this->getMemberProperties($lid);
$leden .= '<div>';
$leden .= '<p><strong>Naam:</strong> ' . $infoLid['firstName'] . ' ' . $infoLid['lastName'] . '</p>';
$leden .= '<p><strong>E-mail:</strong> ' . $infoLid['email'] . '</p>';
$leden .= '<p><strong>WWSV Nummer:</strong> ' . $infoLid['WWSV'] . '</p>';
$leden .= '<p><strong>Geslacht:</strong> ' . $infoLid['gender'] . '</p>';
$leden .= '<p><strong>Geboortedatum:</strong> ' . $infoLid['birthDate'] . '</p>';
$leden .= '<p><strong>Nationaliteit:</strong> ' . $infoLid['nationality'] . '</p>';
$leden .= '<p><strong>Sport 1:</strong> ' . $infoLid['sport1'] . '</p>';
$leden .= '<p><strong>Sport 2:</strong> ' . $infoLid['sport2'] . '</p>';
$leden .= '<p><strong>Telefoon:</strong> ' . $infoLid['telephone1'] . '</p>';
$leden .= '<p><strong>Mobile:</strong> ' . $infoLid['mobile'] . '</p>';
$leden .= '</div>';
$leden .= '</br>';
}
$mailData["kaarthouders"] = $leden;
return $mailData;
}
}