<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Partner;
use App\Entity\Wholesaler;
use App\Entity\Partnerfiles;
use App\Entity\Task;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Form\Resources\PartnerSearch;
use App\Form\Type\PartnerlevelbyvendorEditType;
use App\Form\Type\PartnerEditType;
use App\Form\Type\PartnerQuestionnaireEditType;
use App\Service\RegisterEvent;
use App\Service\ServiceCompanyLogo;
use App\Service\TrafficTracker;
use App\Service\Translation;
use App\Service\ServiceNotification;
use App\Command\ProcessPartnerFiles;
use App\Entity\Currency;
use DateTime;
use Ramsey\Uuid\Uuid;
use App\Entity\Partnerproducttype;
use App\Entity\Partnervendorsinterested;
use App\Entity\Partnercategoryinterested;
use App\Entity\Vendors;
use App\Service\CustomerCreator;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Entity\CompanyAddress;
use App\Entity\Regions;
use App\Entity\Countries;
use Psr\Log\LoggerInterface;
class PartnerController extends AbstractController
{
private $customerCreator;
private $passwordHasher;
public function __construct(UserPasswordHasherInterface $passwordHasher, CustomerCreator $customerCreator)
{
$this->passwordHasher = $passwordHasher;
$this->customerCreator = $customerCreator;
}
/**
* @Route("/partner/default/index", name="partner_index")
*/
public function index(TranslatorInterface $translator, Translation $translation, Request $request, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$data = array();
$user = $this->getUser();
$userRepository = $this->getDoctrine()->getRepository(User::class);
$queryData = $userRepository->MyComercialQuery($user);
$comercialUsers = $queryData->getQuery()->execute();
$form = $this->createForm(PartnerSearch::class, null, array(
'translator' => $translator,
'text' => $request->get('text'),
'idcommercialagent' => $request->get('idcommercialagent'),
'province' => $request->get('province'),
'comercial' => $comercialUsers,
'active' => $request->get('active'),
));
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$partnerQ = $partnerRepository->MyPartnerQuery($user);
$partnerList = $partnerQ->getQuery()->execute();
foreach ($partnerList as $partner) {
if ($partner->getIdcommercialagent() == NULL) {
$commercialName = $translator->trans('app.ManageUsers&Profiles.NoAgent');
} else {
$iduser = $partner->getIdcommercialagent();
$wholesalerUser = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.id = :userId')
->setParameter('userId', $iduser)
->getOneOrNullResult();
$commercialName = $wholesalerUser->getName() . ' ' . $wholesalerUser->getSurname();
}
$partnerPrealta = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partnerprealta p'
. ' WHERE p.unregistrationdate IS NULL'
. ' AND p.partner = :partner')
->setParameter('partner', $partner)
->getOneOrNullResult();
if (!empty($partnerPrealta)) {
$prealta = true;
} else {
$prealta = false;
}
$region = $em->createQuery('SELECT r'
. ' FROM App\Entity\Regions r'
. ' WHERE r.id = :id')
->setParameter('id', $partner->getRegion()->getId())
->getOneOrNullResult();
$data[] = array(
'id' => $partner->getId(),
'name' => $partner->getSocialReason(),
'nameComercial' => $partner->getName(),
'partnerLevel' => $partner->getkatyPartnerLevel(),
'comercial' => $commercialName,
'registrationDate' => $partner->getRegistrationdate(),
'unregistrationDate' => $partner->getUnRegistrationdate(),
'region' => $translation->getTranslationBy($region, $locale, 'regionName'),
'prealta' => $prealta,
'katyAccess' => $partner->getKatyAccess(),
'externalId' => $partner->getExternalId(),
'creditLimit' => $partner->getFinancialRisk(),
'cif' => $partner->getCif()
);
}
return $this->render('partner/index.html.twig', [
'data' => $data,
'form' => $form->createView(),
]);
}
/**
* @Route("/partner/default/view/{id}", name="partner_view", requirements={"id"="\d+"})
*/
public function view(TranslatorInterface $translator, Translation $translation, Request $request, $id, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$session = $this->get('session');
$sector = 'N/A';
$level_by_vendor = [];
$user = $this->getUser();
/** @var CompanyAddress */
$companyAddressRepository = $em->getRepository(CompanyAddress::class);
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$partner = $partnerRepository->MyPartnerQuery($user)
->andWhere('p.id = :id')
->setParameter('id', $id)
->getQuery()->getOneOrNullResult();
if (is_null($partner)) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.NoResults'));
if ($user->getPartner()) {
return $this->redirect($this->generateUrl('home'));
} else {
return $this->redirect($this->generateUrl('partner_index'));
}
}
$users = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.partner = :partner'
. ' AND u.ghost = false')
->setParameter('partner', $partner)
->getResult();
$userList = [];
foreach ($users as $user) {
$userroles = $em->createQuery('SELECT r'
. ' FROM App\Entity\Role r'
. ' WHERE r.internalRole in (:roles)')
->setParameter('roles', $user->getRoles())
->getResult();
$roles = array();
foreach ($userroles as $userR) {
$roleName = $translation->getTranslationBy($userR, $locale, 'name');
$roles[] = $roleName;
}
$userList[] = [
'user' => $user,
'roles' => $roles,
];
}
if ($partner->getIdcommercialagent() == NULL) {
$commercialName = "No asignado";
} else {
$iduser = $partner->getIdCommercialAgent();
$user = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.id = :userId')
->setParameter('userId', $iduser)
->getOneOrNullResult();
$commercialName = $user->getName() . ' ' . $user->getSurname();
}
//Agreements
$vendor_agreements = $em->createQuery('SELECT a'
. ' FROM App\Entity\Agreements a'
. ' JOIN a.programm vp'
. ' JOIN vp.vendor v'
. ' WHERE a.partner = :partner'
. ' ORDER BY v.name')
->setParameter('partner', $partner)
->getResult();
//Level by vendor
$level_by_vendorQuery = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partnerlevelbyvendor p'
. ' JOIN p.vendor v'
. ' WHERE v.followskatypartnerlevel = 0'
. ' AND p.partner = :partner'
. ' ORDER BY v.name')
->setParameter('partner', $partner)
->getResult();
$level_by_vendor = [];
foreach ($level_by_vendorQuery as $partnerLevel) {
$level = $partnerLevel->getLevel();
$levelName = $em->createQuery('SELECT v'
. ' FROM App\Entity\Vendorpartnerlevel v'
. ' WHERE v.vendor = :vendor'
. ' AND v.level = :level')
->setParameter('vendor', $partnerLevel->getVendor())
->setParameter('level', $partnerLevel->getLevel())
->getOneOrNullResult();
if (!empty($levelName)) {
$level = $levelName->getName();
}
$level_by_vendor[] = [
'id' => $partnerLevel->getId(),
'vendor' => $partnerLevel->getVendor()->getName(),
'level' => $level
];
}
if (is_null($partner->getExternalId())) {
$partner->setExternalId('N/A');
}
$country = $em->createQuery('SELECT c'
. ' FROM App\Entity\Countries c'
. ' JOIN App\Entity\Regions r'
. ' WITH c.id = r.country'
. ' WHERE r.id = :id')
->setParameter('id', $partner->getRegion()->getId())
->getOneOrNullResult();
$companyAddresses = $companyAddressRepository->MyCompanyAddressQuery($partner)->getQuery()->getResult();
return $this->render('partner/view.html.twig', [
'id' => $id,
'partner' => $partner,
'country' => $translation->getTranslationBy($country, $locale, 'name'),
'sector' => $sector,
'commercial_agent' => $commercialName,
'vendor_agreements' => $vendor_agreements,
'level_by_vendor' => $level_by_vendor,
'datasales' => $this->SalesTotal($id),
'totalclient' => $this->TotalClient($id),
'totalsalesWidget' => $this->TotalSalesWidget($id),
'totalTicket' => $this->TotalTicket($id),
'users' => $userList,
'user' => $this->getUser(),
'companyAddresses' => $companyAddresses
]);
}
/**
* @Route("/partner/default/create", name="partner_create")
*/
public function create(TranslatorInterface $translator, Translation $translation, ServiceNotification $serviceNotification, Request $request, RegisterEvent $registerEvent, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$session = $this->get('session');
$user = $this->getUser();
$userRepository = $this->getDoctrine()->getRepository(User::class);
$regionsRepository = $em->getRepository(Regions::class);
$country = null;
$edit = false;
$partner = new Partner();
$wholesalerRepository = $this->getDoctrine()->getRepository(Wholesaler::class);
$wholesaler = $wholesalerRepository->find($user->getWholesaler()->getId());
$country = $wholesaler->getCountry();
$localelist = explode("|", $this->getParameter('app_locales'));
$queryData = $userRepository->MyComercialQuery($user);
$comercial = $queryData->getQuery()->execute();
$editFinancialRisk = 0;
//search if the wholesaler user has the role to manage the financial risk of the partner
$hasFinancialRiskRole = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.id = :user'
. ' AND (u.roles like :role_one'
. ' OR u.roles like :role_two)')
->setParameter('user', $user->getId())
->setParameter('role_one', '%ROLE_MANAGE_PARTNER_FINANCIAL_RISK%')
->setParameter('role_two', '%ROLE_ADMIN_USER_NEW%')
->getOneOrNullResult();
if (!is_null($hasFinancialRiskRole)) {
$editFinancialRisk = 1;
}
if ($user->getMaster() || in_array("ROLE_ADMIN_USER_NEW", $user->getRoles()) || in_array("ROLE_MANAGE_PARTNERS_NEW", $user->getRoles())) {
$canEditMfa = true;
} else {
$canEditMfa = false;
}
$form = $this->createForm(PartnerEditType::class, $partner, array(
'localelist' => $localelist,
'locale' => $locale,
'comercial' => $comercial,
'country' => $country,
'edit' => $edit,
'translator' => $translator,
'entitymanager' => $em,
'translation' => $translation,
'editFinancialRisk' => $editFinancialRisk,
'canEditCurrency' => $user->getWholesaler() ? true : false,
'mandatoryMfa' => $partner->isMandatoryMfa(),
'canEditMfa' => $canEditMfa,
'currentUser' => $this->getUser(),
'wholesaler' => $wholesaler,
'currencyRepository' => $this->getDoctrine()->getRepository(Currency::class),
'partner' => $partner ? $partner : null,
'country_default' => $partner->getCountry() ? $partner->getCountry() : $wholesaler->getCountry()
));
// If posting data
$form->handleRequest($request);
if ($form->isSubmitted()) {
// If cancelled
if ($form->getClickedButton() && 'cancel' === $form->getClickedButton()->getName()) {
return $this->redirect($this->generateUrl('partner_index'));
}
if ($form->isValid()) {
$post = $form->getData();
$userAdmin = new User();
if (!is_null($form->get('userEmail')->getData())) {
$userExist = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.email = :email')
->setParameter('email', $form->get('userEmail')->getData())
->getOneOrNullResult();
if (!is_null($userExist)) {
$session->getFlashBag()->add('warning', $translator->trans('app.Settings.MyAccount.ValidEmail'));
return $this->render('partner/create.html.twig', [
'form' => $form->createView(),
'edit' => $edit,
'editFinancialRisk' => $editFinancialRisk,
'canEditMfa' => $canEditMfa
]);
}
$existPartner = $em->createQuery('SELECT count(p.id)'
. ' FROM App\Entity\Partner p'
. ' WHERE p.katycif = :cif'
. ' AND p.wholesaler = :wholesaler')
->setParameter('cif', preg_replace("/[^a-zA-Z0-9]/", "", strtoupper($form->get('cif')->getData())))
->setParameter('wholesaler', $user->getWholesaler())
->getSingleScalarResult();
if ($existPartner != 0) {
$session->getFlashBag()->add('warning', $translator->trans('app.ManageUsers&Profiles.CifDuplicated'));
return $this->render('partner/create.html.twig', [
'form' => $form->createView(),
'edit' => $edit,
'editFinancialRisk' => $editFinancialRisk,
'canEditMfa' => $canEditMfa
]);
}
$existPartnerExternalId = $em->createQuery('SELECT count(p.id)'
. ' FROM App\Entity\Partner p'
. ' WHERE p.externalid = :externalId'
. ' AND p.wholesaler = :wholesaler')
->setParameter('externalId', $post->getExternalId())
->setParameter('wholesaler', $user->getWholesaler())
->getSingleScalarResult();
if ($existPartnerExternalId != 0) {
$session->getFlashBag()->add('warning', $translator->trans('app.ManageUsers&Profiles.ExternalIdDuplicated'));
return $this->render('partner/create.html.twig', [
'form' => $form->createView(),
'edit' => $edit,
'editFinancialRisk' => $editFinancialRisk,
]);
}
$userAdmin->setEmail($form->get('userEmail')->getData());
$userAdmin->setTimezone($user->getTimezone());
$myPassword = $userRepository->randomPassword();
$userAdmin->setPassword($this->passwordHasher->hashPassword($user, $myPassword));
}
if (!is_null($form->get('region')) && $form->get('region')->getData()) {
$reg = $regionsRepository->find($form->get('region')->getData());
$partner->setRegion($reg);
}
if (!$partner->getCountry()) {
$partner->setCountry($country);
}
if (!$partner->getRegion()) {
$region1 = $regionsRepository->findRegionsByCountry($partner->getCountry())->getQuery()->getResult();
$partner->setRegion(reset($region1));
}
if ($editFinancialRisk != 0) {
$partner->setFinancialRisk($post->getFinancialRisk());
} else {
$partner->setFinancialRisk(0);
}
if ($userRepository->isMiniVendor($user)) {
$partner->setRelatedVendor($user->getVendor());
}
$partner->setWholesaler($wholesaler);
$partner->setRegistrationDate(new DateTime());
$partner->setKatyCif(preg_replace("/[^a-zA-Z0-9]/", "", strtoupper($form->get('cif')->getData())));
$country = $em->createQuery('SELECT c'
. ' FROM App\Entity\Countries c'
. ' WHERE c.id = :id')
->setParameter('id', $form->get('country')->getData())
->getOneOrNullResult();
$partner->setCountry($country);
$em->persist($partner);
$em->flush();
$registerEvent->addCreatedBy($partner, $user->getId());
$userAdmin->setMaster(true);
$userAdmin->setRegistrationdate(new DateTime());
$userAdmin->setPartner($partner);
$userAdmin->setName($form->get('userName')->getData());
$userAdmin->setSurname($form->get('userSurname')->getData());
$userAdmin->setLocale($form->get('userLocale')->getData());
$userAdmin->setTimeZone($form->get('userTimeZone')->getData());
$userAdmin->setPhone($form->get('userPhone')->getData());
$roles = $this->addUserRoles();
$userAdmin->setRoles($roles);
$em->persist($userAdmin);
$em->flush();
$registerEvent->addCreatedBy($userAdmin, $user->getId());
$data = [
'password' => $myPassword,
'user' => $userAdmin,
];
$selfConsumptionCustomer = $this->customerCreator->createSelfConsumptionCustomer($partner);
//Send email
$serviceNotification->Notify(1, array($userAdmin), $data);
// Redirect and show result
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.Created'));
return $this->redirect($this->generateUrl('partner_view', array('id' => $partner->getId())));
}
}
return $this->render('partner/create.html.twig', [
'form' => $form->createView(),
'edit' => $edit,
'editFinancialRisk' => $editFinancialRisk,
'canEditMfa' => $canEditMfa
]);
}
/**
* @Route("/partner/default/edit/{id}", name="partner_edit", requirements={"id"="\d+"})
*/
public function edit(TranslatorInterface $translator, Translation $translation, ServiceNotification $serviceNotification, Request $request, RegisterEvent $registerEvent, $id, ServiceCompanyLogo $companylogoService, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$session = $this->get('session');
$user = $this->getUser();
$userRepository = $this->getDoctrine()->getRepository(User::class);
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$partner = $partnerRepository->find($id);
if (is_null($partner)) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.NoResults'));
return $this->redirect($this->generateUrl('partner_index'));
}
$country = $partner->getWholesaler()->getCountry();
$edit = true;
$userList = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.partner = :partner'
. ' ORDER BY u.master desc')
->setParameter('partner', $partner)
->getResult();
$userListMaster = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.partner = :partner'
. ' AND u.ghost = 0'
. ' AND u.unregistrationdate is null'
. ' ORDER BY u.master desc')
->setParameter('partner', $partner)
->getResult();
$companyLogoId = $companylogoService->checkLogo();
if ($companyLogoId) {
$path = '/uploads/images/companylogo/';
$logo = $em->createQuery('SELECT c'
. ' FROM App\Entity\Companylogo c'
. ' WHERE c.id = :id')
->setParameter('id', $companyLogoId)
->getOneOrNullResult();
$companyLogo = [
'id' => $logo->getId(),
'pathNegative' => $path . $logo->getFilenameNegative(),
'pathPositive' => $path . $logo->getFilenamePositive(),
'hasNegative' => $logo->getFilenameNegative(),
'hasPositive' => $logo->getFilenamePositive(),
];
} else {
$companyLogo = null;
}
$localelist = explode("|", $this->getParameter('app_locales'));
$queryData = $userRepository->MyComercialQuery($user);
$comercial = $queryData->getQuery()->execute();
$editFinancialRisk = 0;
if (!$user->getPartner()) {
//search if the wholesaler user has the role to manage the financial risk of the partner
$hasFinancialRiskRole = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.id = :user'
. ' AND (u.roles like :role_one'
. ' OR u.roles like :role_two)')
->setParameter('user', $user->getId())
->setParameter('role_one', '%ROLE_MANAGE_PARTNER_FINANCIAL_RISK%')
->setParameter('role_two', '%ROLE_ADMIN_USER_NEW%')
->getOneOrNullResult();
if (!is_null($hasFinancialRiskRole)) {
$editFinancialRisk = 1;
}
}
if ($user->getWholesaler() && ($user->getMaster() || in_array("ROLE_ADMIN_USER_NEW", $user->getRoles()) || in_array("ROLE_MANAGE_PARTNERS_NEW", $user->getRoles()))) {
$canEditMfa = true;
} else {
$canEditMfa = false;
}
$form = $this->createForm(PartnerEditType::class, $partner, array(
'localelist' => $localelist,
'locale' => $locale,
'comercial' => $comercial,
'country' => $country,
'edit' => $edit,
'userList' => $userList,
'userListMaster' => $userListMaster,
'wholesaler' => $user->getWholesaler() ? $user->getWholesaler() : null,
'partnerUser' => $user->getPartner(),
'translator' => $translator,
'entitymanager' => $em,
'translation' => $translation,
'currentRegion' => $partner->getRegion()->getId(),
'editFinancialRisk' => $editFinancialRisk,
'canEditCurrency' => $user->getWholesaler() ? true : false,
'katyAccess' => $partner->getKatyAccess(),
'mandatoryMfa' => $partner->isMandatoryMfa(),
'currentUser' => $this->getUser(),
'currencyRepository' => $this->getDoctrine()->getRepository(Currency::class),
'canEditMfa' => $canEditMfa,
'partner' => $partner ? $partner : null,
'regions_default' => $partner->getRegion() ? $partner->getRegion()->getId() : null,
'country_default' => $partner->getCountry() ? $partner->getCountry() : $wholesaler->getCountry()
));
// If posting data
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->getClickedButton() && PartnerEditType::BUTTON_CANCEL === $form->getClickedButton()->getName()) {
return $this->redirect($this->generateUrl('partner_view', array('id' => $id)));
} else {
if ($user->getPartner()) {
if ($form->getClickedButton() && PartnerEditType::BUTTON_CHANGE_MASTER === $form->getClickedButton()->getName()) {
$partner = $partnerRepository->find($user->getPartner()->getId());
$comercialUser = $em->createQuery('SELECT distinct u'
. ' FROM App\Entity\User u'
. ' WHERE u.wholesaler = :wholesaler'
. ' AND (u.id = :commercialId'
. ' OR u.roles like :role_one)')
->setParameter('commercialId', $partner->getIdcommercialagent())
->setParameter('role_one', '%ROLE_MANAGE_PARTNERS_NEW%')
->setParameter('wholesaler', $partner->getWholesaler())
->getResult();
$currentUserMaster = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 1'
. ' AND u.partner = :partner')
->setParameter('partner', $user->getPartner())
->getOneOrNullResult();
$data = [
'companyName' => $partner->getName(),
'user_email' => $user->getEmail(),
'master' => $currentUserMaster,
'route' => 'partner_view',
'idview' => $partner->getId(),
];
$serviceNotification->Notify(68, $comercialUser, $data);
$session->getFlashBag()->add('success', $translator->trans('app.ManageUsers&Profiles.CTAs.RequestMasterChange'));
return $this->redirect($this->generateUrl('partner_view', array('id' => $id)));
}
}
}
if ($form->isValid()) {
$currentUserMaster = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 1'
. ' AND u.partner = :partner')
->setParameter('partner', $partner)
->getOneOrNullResult();
$fileNegative = null;
$filePositive = null;
$wholesaler = $user->getWholesaler() ?? $user->getPartner()->getWholesaler();
$existPartner = $em->createQuery('SELECT count(p.id)'
. ' FROM App\Entity\Partner p'
. ' WHERE p.katycif = :cif'
. ' AND p.wholesaler = :wholesaler'
. ' AND p.id != :id')
->setParameter('cif', preg_replace("/[^a-zA-Z0-9]/", "", strtoupper($form->get('cif')->getData())))
->setParameter('wholesaler', $wholesaler)
->setParameter('id', $id)
->getSingleScalarResult();
if ($existPartner != 0) {
$session->getFlashBag()->add('warning', $translator->trans('app.ManageUsers&Profiles.CifDuplicated'));
return $this->redirect($this->generateUrl('partner_edit', array('id' => $id)));
}
$existPartnerExternalId = $em->createQuery('SELECT count(p.id)'
. ' FROM App\Entity\Partner p'
. ' WHERE p.externalid = :externalId'
. ' AND p.wholesaler = :wholesaler'
. ' AND p.id != :id')
->setParameter('externalId', $form->get('externalId')->getData())
->setParameter('wholesaler', $wholesaler)
->setParameter('id', $id)
->getSingleScalarResult();
if ($existPartnerExternalId != 0) {
$session->getFlashBag()->add('warning', $translator->trans('app.ManageUsers&Profiles.ExternalIdDuplicated'));
return $this->redirect($this->generateUrl('partner_edit', array('id' => $id)));
}
if (!is_null($form->get('region')) && $form->get('region')->getData()) {
$regionsRepository = $em->getRepository(Regions::class);
$reg = $regionsRepository->find($form->get('region')->getData());
$partner->setRegion($reg);
}
if ($edit && $user->getPartner()) {
$fileNegative = $form->get('fileNegative')->getData();
$logocompanyNegative = $companylogoService->setCompanyLogo($fileNegative, 0);
$filePositive = $form->get('filePositive')->getData();
$logocompanyPositive = $companylogoService->setCompanyLogo($filePositive, 1);
if (!$logocompanyNegative || !$logocompanyPositive) {
return $this->redirect($this->generateUrl('partner_edit', array('id' => $id)));
}
}
$lastMaster = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 1'
. ' AND u.partner = :partner')
->setParameter('partner', $partner)
->getOneOrNullResult();
$partner->setCif($form->get('cif')->getData());
$partner->setKatyCif(preg_replace("/[^a-zA-Z0-9]/", "", strtoupper($form->get('cif')->getData())));
$country = $em->createQuery('SELECT c'
. ' FROM App\Entity\Countries c'
. ' WHERE c.id = :id')
->setParameter('id', $form->get('country')->getData())
->getOneOrNullResult();
$partner->setCountry($country);
$em->persist($partner);
$em->flush();
$registerEvent->addModifiedBy($partner, $user->getId());
if ($user->getWholesaler() && ($lastMaster->getId() != $form->get('master')->getData())) {
$lastMaster->setMaster(0);
$em->persist($lastMaster);
$em->flush();
$registerEvent->addModifiedBy($lastMaster, $user->getId());
$newMaster = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.id = :id')
->setParameter('id', $form->get('master')->getData())
->getOneOrNullResult();
$newMaster->setMaster(1);
$roles = $this->addUserRoles();
$newMaster->setRoles($roles);
$em->persist($newMaster);
$em->flush();
$registerEvent->addModifiedBy($newMaster, $user->getId());
}
// Redirect and show result
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
return $this->redirect($this->generateUrl('partner_view', array('id' => $id)));
}
}
return $this->render('partner/edit.html.twig', [
'form' => $form->createView(),
'edit' => $edit,
'editFinancialRisk' => $editFinancialRisk,
'user' => $user->getWholesaler() ? $user->getWholesaler()->getId() : null,
'companylogo' => $companyLogo,
'fRisk' => $partner->getFinancialrisk(),
'canEditMfa' => $canEditMfa
]);
}
/**
* @Route("/partner/default/editlevelbyvendor/{id}/{idlevel}", name="partner_editlevelbyvendor", requirements={"id"="\d+", "idlevel"="\d+"})
*/
public function editlevelbyvendor($idlevel = 0, $id, TranslatorInterface $translator, Request $request, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$session = $this->get('session');
$partner = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partner p'
. ' WHERE p.id = :id')
->setParameter('id', $id)
->getOneOrNullResult();
$partnerLevelByVendor = null;
if ($idlevel) {
$partnerLevelByVendor = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partnerlevelbyvendor p'
. ' WHERE p.id = :id')
->setParameter('id', $idlevel)
->getOneOrNullResult();
$currentlevel = $partnerLevelByVendor->getLevel();
$action = 'edit';
} else {
$action = 'new';
$currentlevel = null;
}
$form = $this->createForm(PartnerlevelbyvendorEditType::class, null, array(
'translator' => $translator,
'action' => $action,
'level' => $partnerLevelByVendor,
'partner' => $partner,
'entitymanager' => $em,
));
$form->handleRequest($request);
// If cancelled
if ($form->getClickedButton() && 'cancel' === $form->getClickedButton()->getName()) {
return $this->redirect($this->generateUrl('partner_view', array('id' => $partner->getId())));
}
if ($form->isSubmitted() && $form->isValid()) {
$post = $form->getData();
if ($post['level'] == 0 && !$idlevel) {
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
} else {
if (!$idlevel) {
$partnerLevelByVendor = new \App\Entity\Partnerlevelbyvendor();
$partnerLevelByVendor->setPartner($partner);
}
if ($post['level'] == 0) {
$em->remove($partnerLevelByVendor);
$em->flush();
} else {
$vendor = $em->createQuery('SELECT v'
. ' FROM App\Entity\Vendors v'
. ' WHERE v.id = :id')
->setParameter('id', $post['idVendor'])
->getOneOrNullResult();
$partnerLevelByVendor->setVendor($vendor);
$partnerLevelByVendor->setLevel($post['level']);
$em->persist($partnerLevelByVendor);
$em->flush();
}
// Redirect and show result
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
}
return $this->redirect($this->generateUrl('partner_view', array('id' => $partner->getId())));
}
return $this->render('partner/editlevelbyvendor.html.twig', [
'currentlevel' => $currentlevel,
'form' => $form->createView(),
]);
}
/**
* @Route("/partner/default/findvendorpartnerlevels", name="partner_findvendorpartnerlevels")
*/
public function findvendorpartnerlevels(Request $request)
{
$em = $this->getDoctrine()->getManager();
$idVendor = $request->request->get('idVendor');
$levels = $em->createQuery('SELECT v'
. ' FROM App\Entity\Vendorpartnerlevel v'
. ' WHERE v.vendor = :idvendor')
->setParameter('idvendor', $idVendor)
->getResult();
$vendorPartnerLevels = array();
$vendorPartnerLevels[0] = "---";
foreach ($levels as $level) {
$vendorPartnerLevels[$level->getLevel()] = $level->getName();
}
$response = new \Symfony\Component\HttpFoundation\JsonResponse();
$response->setStatusCode(200);
$response->setData($vendorPartnerLevels);
return $response;
}
/**
* @Route("/partner/default/block/{id}", name="partner_block", requirements={"id"="\d+"})
*/
public function block(TranslatorInterface $translator, Request $request, RegisterEvent $registerEvent, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$session = $this->get('session');
$currentUser = $this->getUser();
$id = $request->get('id');
$partner = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partner p'
. ' WHERE p.id = :id'
. ' AND p.unregistrationdate is null')
->setParameter('id', $id)
->getOneOrNullResult();
$partner->setKatyAccess(0);
$em->persist($partner);
$em->flush();
$registerEvent->addModifiedBy($partner, $currentUser->getId());
$master = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 1'
. ' AND u.partner = :partner')
->setParameter('partner', $partner)
->getOneOrNullResult();
$master->setLocked(1);
$em->persist($master);
$em->flush();
$registerEvent->addModifiedBy($master, $currentUser->getId());
$users = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 0'
. ' AND u.partner = :partner')
->setParameter('partner', $partner)
->getResult();
foreach ($users as $user) {
$user->setLocked(1);
$em->persist($user);
$em->flush();
$registerEvent->addModifiedBy($user, $currentUser->getId());
}
$session->getFlashBag()->add('success', $partner->getName() . ' ' . $translator->trans('app.General.SystemMessages.Blocked'));
return $this->redirect($this->generateUrl('partner_view', ['id' => $id]));
}
/**
* @Route("/partner/default/unblock/{id}", name="partner_unblock", requirements={"id"="\d+"})
*/
public function unblock(TranslatorInterface $translator, Request $request, ServiceNotification $serviceNotification, RegisterEvent $registerEvent, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$em = $this->getDoctrine()->getManager();
$session = $this->get('session');
$currentUser = $this->getUser();
$userRepository = $this->getDoctrine()->getRepository(User::class);
$id = $request->get('id');
$partner = $em->createQuery('SELECT p'
. ' FROM App\Entity\Partner p'
. ' WHERE p.id = :id'
. ' AND p.unregistrationdate is null')
->setParameter('id', $id)
->getOneOrNullResult();
$partner->setKatyAccess(1);
$em->persist($partner);
$em->flush();
$registerEvent->addModifiedBy($partner, $currentUser->getId());
$master = $em->createQuery('SELECT u'
. ' FROM App\Entity\User u'
. ' WHERE u.master = 1'
. ' AND u.partner = :partner')
->setParameter('partner', $partner)
->getOneOrNullResult();
$master->setLocked(0);
$myPassword = $userRepository->randomPassword();
$master->setPassword($this->passwordHasher->hashPassword($currentUser, $myPassword));
$master->setChangepassdate(null);
$em->persist($master);
$em->flush();
$registerEvent->addModifiedBy($master, $currentUser->getId());
$data = [
'password' => $myPassword,
'user' => $master,
];
//Send email
$serviceNotification->Notify(1, array($master), $data);
$session->getFlashBag()->add('success', $partner->getName() . ' ' . $translator->trans('app.General.SystemMessages.Activated'));
return $this->redirect($this->generateUrl('partner_view', ['id' => $id]));
}
/**
* @Route("/partner/default/partnerquestionnaire", name="partner_questionnaire")
*/
public function partnerquestionnaire(TranslatorInterface $translator, Translation $translation, Request $request, TrafficTracker $trafficTracker): Response
{
$trafficTracker->registerTraffic();
$session = $this->get('session');
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
$locale = $request->getLocale();
$partnerProfile = new \App\Entity\Partnerprofile();
$partnerProfile->setPartner($user->getPartner());
$employeesRange = $em->createQuery('SELECT er'
. ' FROM App\Entity\Employeesrange er')
->getResult();
$categoryList = $em->createQuery('SELECT c'
. ' FROM App\Entity\Category c'
. ' ORDER BY c.name')
->getResult();
$invoiceRange = $em->createQuery('SELECT ir'
. ' FROM App\Entity\Invoicerange ir')
->getResult();
$vendorsList = $em->createQuery('SELECT v'
. ' FROM App\Entity\Vendors v'
. ' WHERE v.isminivendor = 0'
. ' AND v.name not like \'Katy\''
. ' ORDER BY v.name')
->getResult();
$productTypes = $em->createQuery('SELECT q'
. ' FROM App\Entity\Questionnaireproducttype q')
->getResult();
// Init form
$form = $this->createForm(PartnerQuestionnaireEditType::class, null, array(
'translator' => $translator,
'employeesRange' => $employeesRange,
'categoryList' => $categoryList,
'invoiceRange' => $invoiceRange,
'vendorsList' => $vendorsList,
'productTypes' => $productTypes,
'translation' => $translation,
'locale' => $locale,
));
// If posting data
$form->handleRequest($request);
if ($form->isSubmitted()) {
$post = $form->getData();
if (
empty($post['businessType']) || empty($post['productType']) ||
(empty($post['vendorsInterested']) && empty($post['otherVendorsInterested']))
|| (empty($post['categoryInterested']) && empty($post['otherCategoryInterested']))
) {
$session->getFlashBag()->add('warning', $translator->trans('app.ManageUsers&Profiles.CheckAllLists'));
return $this->render('partner/partnerquestionnaire.html.twig', [
'form' => $form->createView(),
]);
}
$employeesRange = $em->createQuery('SELECT er'
. ' FROM App\Entity\Employeesrange er'
. ' WHERE er.id = :id')
->setParameter('id', $form->get('idEmployeesRange')->getData())
->getOneOrNullResult();
$partnerProfile->setEpmloyeesRange($employeesRange);
$partnerProfile->setActiveclients($post['activeClients']);
$invoiceRange = $em->createQuery('SELECT ir'
. ' FROM App\Entity\Invoicerange ir'
. ' WHERE ir.id = :id')
->setParameter('id', $form->get('idInvoiceRange')->getData())
->getOneOrNullResult();
$partnerProfile->setInvoiceRange($invoiceRange);
$businessType = '';
$businessTypeData = $post['businessType'];
if (count($businessTypeData) == 2) {
$businessType = $translator->trans('app.ManageUsers&Profiles.PartnerForm.A1Business') . ' / ' . $translator->trans('app.ManageUsers&Profiles.PartnerForm.A2Business');
} else {
switch ($businessTypeData[0]) {
case 1:
$businessType = $translator->trans('app.ManageUsers&Profiles.PartnerForm.A1Business');
break;
case 2:
$businessType = $translator->trans('app.ManageUsers&Profiles.PartnerForm.A2Business');
break;
}
}
$partnerProfile->setBusinesstype($businessType);
foreach ($post['productType'] as $key => $value) {
if ($value != 0) {
$partnerProductType = new Partnerproducttype();
$partnerProductType->setPartner($user->getPartner());
$questionnaireProductType = $em->createQuery('SELECT q'
. ' FROM App\Entity\QuestionnaireProductType q'
. ' WHERE q.id = :id')
->setParameter('id', $value)
->getOneOrNullResult();
$partnerProductType->setQuestionnaireProductType($questionnaireProductType);
$em->persist($partnerProductType);
$em->flush();
}
}
foreach ($post['vendorsInterested'] as $key => $value) {
if ($value != 0) {
$partnerVendorsInterested = new Partnervendorsinterested();
$partnerVendorsInterested->setPartner($user->getPartner());
$vendor = $em->createQuery('SELECT v'
. ' FROM App\Entity\Vendors v'
. ' WHERE v.id = :id')
->setParameter('id', $value)
->getOneOrNullResult();
$partnerVendorsInterested->setVendor($vendor);
$em->persist($partnerVendorsInterested);
$em->flush();
}
}
$partnerProfile->setOthervendorsinterested($post['otherVendorsInterested']);
foreach ($post['categoryInterested'] as $key => $value) {
if ($value != 0) {
$partnerCategoryInterested = new Partnercategoryinterested();
$partnerCategoryInterested->setPartner($user->getPartner());
$category = $em->createQuery('SELECT c'
. ' FROM App\Entity\Category c'
. ' WHERE c.id = :id')
->setParameter('id', $value)
->getOneOrNullResult();
$partnerCategoryInterested->setCategory($category);
$em->persist($partnerCategoryInterested);
$em->flush();
}
}
$partnerProfile->setOthercategoryinterested($post['otherCategoryInterested']);
$partnerProfile->setCreatedby($user);
$partnerProfile->setModifiedby($user);
$partnerProfile->setSupporttool($post['supportTool']);
if ($post['supportTool'] == 1) {
$partnerProfile->setInfosupporttool($post['infoSupportTool']);
}
$em->persist($partnerProfile);
$em->flush();
// Redirect and show result
$session->getFlashBag()->add('success', $translator->trans('app.General.SystemMessages.ChangesSaved'));
if (!$user->getAcceptedpolicies() || !$user->getAcceptedcookies()) {
return $this->redirectToRoute('user_policies');
}
return $this->redirectToRoute('home');
}
return $this->render('partner/partnerquestionnaire.html.twig', [
'form' => $form->createView(),
]);
}
private function addUserRoles()
{
$em = $this->getDoctrine()->getManager();
$partnerRoles = $em->createQuery('SELECT r'
. ' FROM App\Entity\Role r'
. ' WHERE r.partner = true')
->getResult();
$roles = array();
foreach ($partnerRoles as $roleValue) {
$roles[] = $roleValue->getInternalRole();
}
return $roles;
}
private function SalesTotal($idpartner)
{
$em = $this->getDoctrine()->getManager();
$arraysales = $em->createQuery('SELECT SUM(s.price) as totalprice,'
. ' CONCAT(YEAR(s.datecreated), \' -\',MONTH(s.datecreated), \' -\', DAY(s.datecreated)) as date'
. ' FROM App\Entity\Sales s'
. ' JOIN s.customer c'
. ' JOIN c.partner p'
. ' WHERE p.id = :idpartner'
. ' GROUP BY date')
->setParameter('idpartner', $idpartner)
->getArrayResult();
$data = array();
$salesdata = array();
foreach ($arraysales as $sales) {
$data['date'] = $sales['date'];
$data['value'] = $sales['totalprice'];
array_push($salesdata, $data);
}
return json_encode($salesdata);
}
private function TotalClient($idpartner)
{
$em = $this->getDoctrine()->getManager();
$total_client = $em->createQuery('SELECT count(c.id)'
. ' FROM App\Entity\Customer c'
. ' JOIN c.partner p'
. ' WHERE p.id = :idpartner'
. ' AND p.wholesaler = :wholesaler')
->setParameter('idpartner', $idpartner)
->setParameter('wholesaler', $this->getUser()->getWholesaler())
->getOneOrNullResult();
return $total_client[1];
}
private function TotalSalesWidget($idpartner)
{
$em = $this->getDoctrine()->getManager();
$total_sales = $em->createQuery('SELECT count(s.id)'
. ' FROM App\Entity\Sales s'
. ' JOIN s.customer c'
. ' JOIN c.partner p'
. ' WHERE p.id = :idpartner'
. ' AND p.wholesaler = :wholesaler')
->setParameter('idpartner', $idpartner)
->setParameter('wholesaler', $this->getUser()->getWholesaler())
->getOneOrNullResult();
return $total_sales[1];
}
private function TotalTicket($idpartner)
{
$em = $this->getDoctrine()->getManager();
$total_ticket = $em->createQuery('SELECT count(t.id)'
. ' FROM App\Entity\Ticket t'
. ' JOIN t.user u'
. ' JOIN u.partner p'
. ' WHERE p.id = :idpartner'
. ' AND p.wholesaler = :wholesaler')
->setParameter('idpartner', $idpartner)
->setParameter('wholesaler', $this->getUser()->getWholesaler())
->getOneOrNullResult();
return $total_ticket[1];
}
/**
* @Route("/partner/default/getregions", name="partner_create_regions" )
*/
public function partnerCreateRegions(Request $request, TrafficTracker $trafficTracker, TranslatorInterface $translator, Translation $translation)
{
$trafficTracker->registerTraffic();
/** @var EntityManager */
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$responseArray = null;
$countryRepository = $entityManager->getRepository(Countries::class);
$country = $countryRepository->find($request->get('country'));
$regionsRepository = $entityManager->getRepository(Regions::class);
$regions = $regionsRepository->findRegionsByCountry($country)->getQuery()->getResult();
foreach ($regions as $region) {
$responseArray[$region->getId()] = $translation->getTranslationBy($region, $user->getLocale(), 'regionName') . ' (' . $region->getCode() . ')';
}
$response = json_encode($responseArray);
return new Response($response, 200, array(
'Content-Type' => 'application/json'
));
}
}