<?php namespace Lc\ShopBundle\Services ; use Doctrine\ORM\EntityManagerInterface; use Lc\ShopBundle\Context\CreditHistoryInterface; use Lc\ShopBundle\Context\MerchantInterface; use Lc\ShopBundle\Context\MerchantUtilsInterface; use Lc\ShopBundle\Context\UserInterface; use Lc\ShopBundle\Context\UserMerchantInterface; class CreditUtils { protected $em ; protected $merchantUtils ; protected $userMerchantRepository ; public function __construct(EntityManagerInterface $em, MerchantUtilsInterface $merchantUtils) { $this->em = $em ; $this->merchantUtils = $merchantUtils ; $this->userMerchantRepository = $this->em->getRepository($this->em->getClassMetadata(UserMerchantInterface::class)->getName()) ; } public function getUserMerchant(UserInterface $user, MerchantInterface $merchant = null) { $merchant = $this->getMerchant($merchant) ; $userMerchant = $this->userMerchantRepository->findOneBy([ 'user' => $user, 'merchant' => $merchant ]) ; return $userMerchant ; } public function createUserMerchant(UserInterface $user, MerchantInterface $merchant = null) { $merchant = $this->getMerchant($merchant) ; $classUserMerchant = $this->em->getClassMetadata(UserMerchantInterface::class)->getName(); $userMerchant = new $classUserMerchant ; $userMerchant->setUser($user) ; $userMerchant->setMerchant($merchant) ; $userMerchant->setCredit(0) ; $userMerchant->setCreditActive(true) ; $this->em->persist($userMerchant) ; $this->em->flush() ; return $userMerchant ; } public function updateCreditActive($user, $merchant = null, $creditActive = true) { $userMerchant = $this->getUserMerchant($user, $merchant) ; if(!$userMerchant) { $userMerchant = $this->createUserMerchant($user, $merchant) ; } $userMerchant->setCreditActive($creditActive) ; $this->em->persist($userMerchant) ; $this->em->flush() ; return $userMerchant ; } public function activeCredit($user, $merchant = null) { return $this->updateCreditActive($user, $merchant, true) ; } public function unactiveCredit($user, $merchant = null) { return $this->updateCreditActive($user, $merchant, false) ; } public function createCreditHistory($user, $amount, $meanPayment, $comment = null, $merchant = null) { $userMerchant = $this->getUserMerchant($user, $merchant) ; if($userMerchant && $userMerchant->isCreditActive()) { $classCreditHistory = $this->em->getClassMetadata(CreditHistoryInterface::class)->getName(); $creditHistory = new $classCreditHistory ; } return $creditHistory ; } public function addCredit($user, $amount, $merchant = null) { $merchant = $this->getMerchant($merchant) ; } public function removeCredit($user, $amount, $merchant = null) { $merchant = $this->getMerchant($merchant) ; } public function setCredit($user, $amount, $merchant = null) { } public function getMerchant($merchant) { if(!$merchant) { $merchant = $this->merchantUtils->getMerchantCurrent() ; } return $merchant ; } }