find(); $con = Propel::getConnection(); /** @var CustomerFamily $customerFamily */ foreach ($customerFamilies as $customerFamily) { $categoryRestrictionSql = "SELECT c.id, c.parent, ci18n.title, cfac.`customer_family_id`, CASE WHEN cfac.`customer_family_id` IS NOT NULL THEN 1 ELSE 0 END as available FROM category c LEFT JOIN `category_i18n` ci18n on c.`id` = ci18n.id AND ci18n.locale = :locale LEFT JOIN `customer_family_available_category` cfac ON c.`id` = cfac.`category_id` AND cfac.`customer_family_id` = :customerFamilyId"; $stmt = $con->prepare($categoryRestrictionSql); $stmt->bindValue('locale', $this->getCurrentEditionLocale()); $stmt->bindValue('customerFamilyId', $customerFamily->getId()); $stmt->execute(); $categoryRestrictions[$customerFamily->getId()] = $stmt->fetchAll(\PDO::FETCH_ASSOC); $brandRestrictionSql = "SELECT b.id, bi18n.title, cfab.`customer_family_id`, CASE WHEN cfab.`customer_family_id` IS NOT NULL THEN 1 ELSE 0 END as available FROM brand b LEFT JOIN `brand_i18n` bi18n on b.`id` = bi18n.id AND bi18n.locale = :locale LEFT JOIN `customer_family_available_brand` cfab ON b.`id` = cfab.`brand_id` AND cfab.`customer_family_id` = :customerFamilyId"; $stmt = $con->prepare($brandRestrictionSql); $stmt->bindValue('locale', $this->getCurrentEditionLocale()); $stmt->bindValue('customerFamilyId', $customerFamily->getId()); $stmt->execute(); $brandRestrictions[$customerFamily->getId()] = $stmt->fetchAll(\PDO::FETCH_ASSOC); } return $this->render("customer_family_module_configuration", compact('categoryRestrictions', 'brandRestrictions')); } /** * @param Request $request * @return mixed|\Thelia\Core\HttpFoundation\Response */ public function createAction(Request $request) { if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), array('CustomerFamily'), AccessManager::CREATE)) { return $response; } $error = ""; $form = new CustomerFamilyCreateForm($request); try { $formValidate = $this->validateForm($form); $event = new CustomerFamilyEvent(); $event->hydrateByForm($formValidate); $this->dispatch(CustomerFamilyEvents::CUSTOMER_FAMILY_CREATE, $event); } catch (\Exception $e) { $error = $e->getMessage(); } $message = Translator::getInstance()->trans( "Customer family was created successfully", array(), CustomerFamily::MODULE_DOMAIN ); return self::renderAdminConfig($form, $message, $error); } /** * @param Request $request * @param $id * @return mixed|\Thelia\Core\HttpFoundation\Response */ public function updateAction(Request $request, $id) { if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), array('CustomerFamily'), AccessManager::UPDATE)) { return $response; } $error = ""; $form = new CustomerFamilyUpdateForm($request); try { $formValidate = $this->validateForm($form); $customerFamily = CustomerFamilyQuery::create()->findPk($id); if ($customerFamily === null) { throw new \Exception("Customer Family not found by Id"); } $event = new CustomerFamilyEvent($customerFamily); $event->hydrateByForm($formValidate); $this->dispatch(CustomerFamilyEvents::CUSTOMER_FAMILY_UPDATE, $event); } catch (\Exception $e) { $error = $e->getMessage(); } $message = Translator::getInstance()->trans( "Customer family was updated successfully", array(), CustomerFamily::MODULE_DOMAIN ); return self::renderAdminConfig($form, $message, $error); } /** * Update default family * There must be at least one default family * * @return mixed|\Symfony\Component\HttpFoundation\Response|static */ public function updateDefaultAction() { if (null !== $response = $this->checkAuth([AdminResources::MODULE], ['CustomerFamily'], AccessManager::UPDATE)) { return $response; } $error = null; $ex = null; $form = $this->createForm('customer_family_update_default_form'); try { $vForm = $this->validateForm($form); // Get customer_family to update $customerFamily = CustomerFamilyQuery::create()->findOneById($vForm->get('customer_family_id')->getData()); // If the customer_family exists if (null !== $customerFamily) { // If the family to update is not already the default one if (!$customerFamily->getIsDefault()) { // Remove old default family if (null !== $defaultCustomerFamilies = CustomerFamilyQuery::create()->findByIsDefault(1)) { /** @var \CustomerFamily\Model\CustomerFamily $defaultCustomerFamily */ foreach ($defaultCustomerFamilies as $defaultCustomerFamily) { $defaultCustomerFamily ->setIsDefault(0) ->save(); } } // Save new default family $customerFamily ->setIsDefault(1) ->save(); } } } catch (FormValidationException $ex) { $error = $this->createStandardFormValidationErrorMessage($ex); } catch (\Exception $ex) { $error = $ex->getMessage(); } if ($error !== null) { $this->setupFormErrorContext( $this->getTranslator()->trans("Error updating default family", [], CustomerFamily::MODULE_DOMAIN), $error, $form, $ex ); return JsonResponse::create(['error'=>$error], 500); } return RedirectResponse::create(URL::getInstance()->absoluteUrl("/admin/module/CustomerFamily")); } /** * @param Request $request * @param $id * @return mixed|\Thelia\Core\HttpFoundation\Response */ public function deleteAction(Request $request, $id) { if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), array('CustomerFamily'), AccessManager::DELETE)) { return $response; } $error = ""; $form = new CustomerFamilyDeleteForm($request); try { $formValidate = $this->validateForm($form); $customerFamily = CustomerFamilyQuery::create()->findPk($id); if ($customerFamily === null) { throw new \Exception("Customer Family not found by Id"); } $event = new CustomerFamilyEvent($customerFamily); $this->dispatch(CustomerFamilyEvents::CUSTOMER_FAMILY_DELETE, $event); } catch (\Exception $e) { $error = $e->getMessage(); } $message = Translator::getInstance()->trans( "Customer family was deleted successfully", array(), CustomerFamily::MODULE_DOMAIN ); return self::renderAdminConfig($form, $message, $error); } /** * @param BaseForm $form * @param string $successMessage * @param string $errorMessage * @return \Symfony\Component\HttpFoundation\Response|static */ protected function renderAdminConfig($form, $successMessage, $errorMessage) { if (!empty($errorMessage)) { $form->setErrorMessage($errorMessage); $this->getParserContext() ->addForm($form) ->setGeneralError($errorMessage); } //for compatibility 2.0 if (method_exists($this->getSession(), "getFlashBag")) { if (empty($errorMessage)) { $this->getSession()->getFlashBag()->add("success", $successMessage); } else { $this->getSession()->getFlashBag()->add("danger", $errorMessage); } } return RedirectResponse::create( URL::getInstance()->absoluteUrl("/admin/module/CustomerFamily") ); } /** * @param Request $request * @return mixed|\Thelia\Core\HttpFoundation\Response */ public function customerUpdateAction(Request $request) { if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), array('CustomerFamily'), AccessManager::UPDATE)) { return $response; } $error = ""; $form = new CustomerCustomerFamilyForm($request); try { $formValidate = $this->validateForm($form); $event = new CustomerCustomerFamilyEvent($formValidate->get('customer_id')->getData()); $event ->setCustomerFamilyId($formValidate->get('customer_family_id')->getData()) ->setSiret($formValidate->get('siret')->getData()) ->setVat($formValidate->get('vat')->getData()) ; $this->dispatch(CustomerFamilyEvents::CUSTOMER_CUSTOMER_FAMILY_UPDATE, $event); return $this->generateRedirect(URL::getInstance()->absoluteUrl( '/admin/customer/update?customer_id='.$formValidate->get('customer_id')->getData() )); } catch (FormValidationException $ex) { $error = $this->createStandardFormValidationErrorMessage($ex); } catch (\Exception $e) { $error = $e->getMessage(); } if (!empty($error)) { $form->setErrorMessage($error); } $this->getParserContext() ->addForm($form) ->setGeneralError($error); //Don't forget to fill the Customer form $customerId = $request->get('customer_customer_family_form')['customer_id']; if (null != $customer = CustomerQuery::create()->findPk($customerId)) { $customerForm = $this->hydrateCustomerForm($customer); $this->getParserContext()->addForm($customerForm); } return $this->render('customer-edit', array( 'customer_id' => $request->get('customer_customer_family_form')['customer_id'], "order_creation_error" => Translator::getInstance()->trans($error, array(), CustomerFamily::MESSAGE_DOMAIN) )); } public function saveCustomerFamilyCategoryRestriction($customerFamilyId) { $customerFamily = CustomerFamilyQuery::create() ->findOneById($customerFamilyId); $restrictionEnabled = $this->getRequest()->get('restriction_enabled') === "on"; $customerFamily->setCategoryRestrictionEnabled($restrictionEnabled); $customerFamily->save(); $con = Propel::getConnection(); $deleteSql = "DELETE FROM `customer_family_available_category` WHERE `customer_family_available_category`.`customer_family_id` = :customerFamilyId"; $stmt = $con->prepare($deleteSql); $stmt->bindValue('customerFamilyId', $customerFamilyId); $stmt->execute(); $brands = $this->getRequest()->get('available_categories'); if (is_array($brands)) { foreach ($this->getRequest()->get('available_categories') as $availableCategoryId) { var_dump($customerFamilyId); var_dump($availableCategoryId); $customerFamilyAvailableCategory = new CustomerFamilyAvailableCategory(); $customerFamilyAvailableCategory->setCustomerFamilyId($customerFamilyId) ->setCategoryId($availableCategoryId) ->save(); } } return $this->renderAdminConfig(null, "", ""); } public function saveCustomerFamilyBrandRestriction($customerFamilyId) { $customerFamily = CustomerFamilyQuery::create() ->findOneById($customerFamilyId); $restrictionEnabled = $this->getRequest()->get('restriction_enabled') === "on"; $customerFamily->setBrandRestrictionEnabled($restrictionEnabled); $customerFamily->save(); $con = Propel::getConnection(); $deleteSql = "DELETE FROM `customer_family_available_brand` WHERE `customer_family_available_brand`.`customer_family_id` = :customerFamilyId"; $stmt = $con->prepare($deleteSql); $stmt->bindValue('customerFamilyId', $customerFamilyId); $stmt->execute(); $categories = $this->getRequest()->get('available_categories'); if (is_array($categories)) { foreach ($this->getRequest()->get('available_categories') as $availableBrandId) { var_dump($customerFamilyId); var_dump($availableBrandId); $customerFamilyAvailableBrand = new CustomerFamilyAvailableBrand(); $customerFamilyAvailableBrand->setCustomerFamilyId($customerFamilyId) ->setBrandId($availableBrandId) ->save(); } } return $this->renderAdminConfig(null, "", ""); } /** * @param Customer $customer * @return CustomerUpdateForm */ protected function hydrateCustomerForm(Customer $customer) { // Get default adress of the customer $address = $customer->getDefaultAddress(); // Prepare the data that will hydrate the form $data = array( 'id' => $customer->getId(), 'firstname' => $customer->getFirstname(), 'lastname' => $customer->getLastname(), 'email' => $customer->getEmail(), 'title' => $customer->getTitleId(), 'discount' => $customer->getDiscount(), 'reseller' => $customer->getReseller(), ); if ($address !== null) { $data['company'] = $address->getCompany(); $data['address1'] = $address->getAddress1(); $data['address2'] = $address->getAddress2(); $data['address3'] = $address->getAddress3(); $data['phone'] = $address->getPhone(); $data['cellphone'] = $address->getCellphone(); $data['zipcode'] = $address->getZipcode(); $data['city'] = $address->getCity(); $data['country'] = $address->getCountryId(); } // A loop is used in the template return new CustomerUpdateForm($this->getRequest(), 'form', $data); } }