src/Front/Modules/Cart/Service/CartService.php line 289
<?phpnamespace App\Front\Modules\Cart\Service;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Form\Form;use Doctrine\Persistence\ManagerRegistry;use App\Admin\Modules\OnlineService\Service\SettingsService as AdminOnlineServiceSettingsService;use App\Admin\Modules\OnlineService\Service\CreatorPriceListService as AdminCreatorPriceListService;use App\Admin\Modules\OnlineService\Entity\OnlineServiceCreatorCategoryItem;use App\Modules\User\Service\UserService;class CartService{const ITEM_TYPE_ONLINE_SERVICE = 1;private $_requestStack;private $_doctrine;private $_adminOnlineServiceSettingsService;private $_adminCreatorPriceListService;private $_userService;private $_sessionKey = 'cart';public function __construct(RequestStack $requestStack,ManagerRegistry $doctrine,AdminOnlineServiceSettingsService $adminOnlineServiceSettingsService,AdminCreatorPriceListService $adminCreatorPriceListService,UserService $userService){$this->_requestStack = $requestStack;$this->_doctrine = $doctrine;$this->_adminOnlineServiceSettingsService = $adminOnlineServiceSettingsService;$this->_adminCreatorPriceListService = $adminCreatorPriceListService;$this->_userService = $userService;}private static $_cartDetails;public function getDetails(){if (self::$_cartDetails === null){$data = array_merge($this->_getData(), array('online_services' => array(),'vat' => null,'total_quantity' => 0,'total_items_price' => 0,'total_items_gross_price' => 0,'total_gross_price' => 0));if ($data['items']){foreach($data['items'] as $cartItemId => $cartItemData){switch($cartItemData['type']){case self::ITEM_TYPE_ONLINE_SERVICE:$item = $this->_doctrine->getRepository(OnlineServiceCreatorCategoryItem::class)->find($cartItemData['id']);if (!$item)continue 2;$priceListItemData = $this->_adminCreatorPriceListService->getItemDetails($item->getPriceListItem());$cartItemData = array_merge($cartItemData, array('entity' => $item,'gross_price' => $priceListItemData['gross_price']));if (!isset($data['online_services'][$item->getCategory()->getId()])){$data['online_services'][$item->getCategory()->getId()] = array('entity' => $item->getCategory(),'items' => array(),'total_price' => 0,'total_gross_price' => 0);}$data['online_services'][$item->getCategory()->getId()]['items'][$cartItemId] = $cartItemData;$data['online_services'][$item->getCategory()->getId()]['total_price'] += $item->getPriceListItem()->getPrice();$data['online_services'][$item->getCategory()->getId()]['total_gross_price'] += $cartItemData['gross_price'];$data['total_quantity'] += $cartItemData['quantity'];$data['total_items_price'] += $item->getPriceListItem()->getPrice();$data['total_items_gross_price'] += $cartItemData['gross_price'];$data['items'][$cartItemId] = &$data['online_services'][$item->getCategory()->getId()]['items'][$cartItemId];$data['vat'] = $this->_adminOnlineServiceSettingsService->getData()['vat'] ?? 0;break;default:throw new \Exception('Nieznany typ produktu.');}}//$data['total_gross_price'] = $data['total_items_gross_price'];// voucherif ($data['voucher']){if ($data['voucher']['is_percentage']){$data['voucher']['amount'] = round($data['voucher']['value'] / 100 * $data['total_gross_price'], 2);$data['total_gross_price'] -= $data['voucher']['amount'];}else{$data['voucher']['amount'] = $data['voucher']['value'];$data['total_gross_price'] = max($data['total_gross_price'] - $data['voucher']['amount'], 0);}}}self::$_cartDetails = $data;}return self::$_cartDetails;}public function addItem(OnlineServiceCreatorCategoryItem $item, $quantity = 1, &$totalQuantity = null){$cartData = $this->_getData();if ($item instanceof OnlineServiceCreatorCategoryItem)$itemType = self::ITEM_TYPE_ONLINE_SERVICE;elsethrow new \Exception('Nieznay typ produktu.');$itemId = $itemType . '_' . $item->getId();if (isset($cartData['items'][$itemId])){if ($itemType == self::ITEM_TYPE_ONLINE_SERVICE){$cartData['items'][$itemId]['quantity'] = 1;$totalQuantity = 1;}else{$cartData['items'][$itemId]['quantity'] += $quantity;$totalQuantity = $cartData['items'][$itemId]['quantity'];}$this->_setData($cartData);return;}$itemData = array('id' => $item->getId(),'type' => $itemType,'quantity' => $quantity);$cartData['items'][$itemId] = $itemData;$totalQuantity = $quantity;$this->_setData($cartData);}public function deleteItem($id){$cartData = $this->_getData();unset($cartData['items'][$id]);$this->_setData($cartData);}public function updateCartFromForm(Form $form){$formType = $form->getConfig()->getType()->getInnerType();$cartData = $this->_getData();// pozycje w koszykuforeach(array_keys($cartData['items']) as $itemId){$itemExists = false;// if (in_array($itemId, array_keys($form['items']->getData())))// $itemExists = true;if (!$itemExists && in_array($itemId, array_keys($form['onlineServices']->getData())))$itemExists = true;if (!$itemExists)unset($cartData['items'][$itemId]);}$this->_setData($cartData);$formType->cartData = $this->getDetails();}public function setAccountData(Form $form){$cartData = $this->_getData();$cartData['account_data'] = array('email' => $form['email']->getData(),'password' => $form['password']->getData());$this->_setData($cartData);}public function setClientData(Form $form){$cartData = $this->_getData();// dane klienta$cartData['client_data'] = $form->getData();unset($cartData['client_data']['delivery']);$this->_setData($cartData);}public function setPaymentData(Form $form){$data = $this->_getData();$data['payment_data'] = $form->getData();$this->_setData($data);}public function setVoucher(?string $id = null, ?string $number = null, ?float $value = null, ?bool $isPercentageValue = null){$cartData = $this->_getData();$cartData['voucher'] = $id ? array('id' => $id,'number' => $number,'is_percentage' => $isPercentageValue,'value' => $value) : null;$this->_setData($cartData);}public function setUserPanelCartView(bool $set){$data = $this->_getData();$data['is_user_panel_cart'] = $set;$this->_setData($data);}public function isValid(){$data = $this->getDetails();if (!$this->_userService->getLoggedUser(false) && empty($data['account_data']))return false;if ($data['vat'] === null || empty($data['items']) || empty($data['client_data']))return false;return true;}public function clear(){$oldData = $this->_getData();$this->_setData(null);$data = $this->_getData();$data['is_user_panel_cart'] = $oldData['is_user_panel_cart'];$this->_setData($data);}private function _getData(){$data = $this->_requestStack->getSession()->get($this->_sessionKey);if (!$data){$data = array('items' => array(),'account_data' => null,'client_data' => null,'voucher' => null,'is_user_panel_cart' => false);}return $data;}private function _setData($data){self::$_cartDetails = null;$this->_requestStack->getSession()->set($this->_sessionKey, $data);}}