<?php
/**
* Created by PhpStorm.
* User: maloku
* Date: 15.08.2018
* Time: 16:16
*/
namespace App\Controller;
use App\Service\Mail;
use App\Service\MailFailedException;
use Doctrine\Persistence\ManagerRegistry;
use Psr\Log\LoggerInterface;
use App\Entity\AddressSupplier;
use App\Entity\Calculations;
use App\Entity\CompanyRelations;
use App\Entity\Customer;
use App\Entity\CustomerSupplierRelation;
use App\Entity\InvoiceList;
use App\Entity\Process;
use App\Entity\Report;
use App\Entity\ReportData;
use App\Entity\ReportingPeriod;
use App\Entity\ReportRelease;
use App\Entity\Supplier;
use App\Entity\Todos;
use App\Entity\User;
use App\Entity\UserGroups;
use App\Entity\UserRoles;
use App\Entity\UserStatus;
use App\Service\Ajax;
use App\Service\UserPermissionService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Config\Definition\Exception\Exception;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* Supplier controller.
*
* @Route("/supplier")
*/
class SupplierController extends AbstractController
{
private $dbLogger;
private $doctrine;
public function __construct(LoggerInterface $dbLogger, ManagerRegistry $doctrine)
{
$this->dbLogger = $dbLogger;
$this->doctrine = $doctrine;
}
/**
* Lists all supplier entities.
*
* @Route("/", name="supplier_index", methods={"GET", "POST"})
*/
public function indexAction(Request $request,
TranslatorInterface $translator,
LoggerInterface $logger,
ValidatorInterface $validator,
UserInterface $user = null,
UserPermissionService $userPermissionService,
Ajax $ajax)
{
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'),
"roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
$user = $this->getUser();
if($request->isXmlHttpRequest() || $request->query->get('showJson') == 1)
{
$data = $ajax->call($request);
return new JsonResponse($data);
}
return $this->render('supplier/index.html.twig', array(
'helpdesk' => $helpdesk,
));
}
/**
* Creates a new supplier entity.
*
* @Route("/new", name="supplier_new", methods={"GET", "POST"})
*/
public function newAction(
Request $request,
TranslatorInterface $translator,
LoggerInterface $logger,
ValidatorInterface $validator)
{
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'), "roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
$supplier = new Supplier();
$user = new User();
$addressSupplier = new AddressSupplier();
$invoiceAddress = new AddressSupplier();
$parentCompanyRelation = new CompanyRelations();
$subsidiaryCompanyRelation = new CompanyRelations();
$user->addSupplier($supplier);
$supplier->addUser($user);
$supplier->addAddressSupplier($addressSupplier);
$customersList = $em->getRepository(Customer::class)->findAll();
$form = $this->createForm(\App\Form\SupplierType::class, $supplier);
$invoiceForm = $this->createForm(\App\Form\AddressSupplierType::class, $invoiceAddress, ['setRequired' => false]);
$errors = $validator->validate($supplier);
$form->handleRequest($request);
$invoiceForm->handleRequest($request);
//AJAX
if($request->isXmlHttpRequest() || $request->query->get('showJson') == 1)
{
$retval = array();
$test = $request->get("industryid");
$subindustries = $em->getRepository(\App\Entity\SubIndustry::class)->findBy(['industries' => $test]);
$i = 0;
foreach($subindustries as $subindustry)
{
$retval[$i] = array (
'id' => $subindustry->getId(),
'name' => $subindustry->getName(),
);
$i++;
}
return new JsonResponse($retval);
}
if ($form->isSubmitted() && $form->isValid()) {
try {
$exists = $em->getRepository(Supplier::class)->findOneBy(['companyName' => $supplier->getCompanyName()]);
$addressExists = $em->getRepository(AddressSupplier::class)->findOneBy(['street' => $addressSupplier->getStreet(), 'houseNumber' => $addressSupplier->getHouseNumber(),
'zipCode' => $addressSupplier->getZipCode(), 'city' => $addressSupplier->getCity()]);
$stop = false;
foreach ($form->get('users')->getData() as $user)
{
$userExist = $em->getRepository(\App\Entity\User::class)->findBy(['email' => $user->getEmail(), 'active' => 1, 'supplier' => null]);
if ($userExist != null)
{
$this->addFlash('error', 'Es gibt bereits einen Benutzer, der einem Kunden zugewiesen ist, mit dieser Email Addresse: ' . $user->getEmail());
// $form->get('user')->addError(new FormError('test' . $user->getLastname()));
$stop = true;
}
}
if (strpos($supplier->getCompanyName(), '?') || strpos($supplier->getCompanyName(), '/') ||
strpos($supplier->getCompanyName(), '\\') || strpos($supplier->getCompanyName(), '^') ||
strpos($supplier->getCompanyName(), '|') || strpos($supplier->getCompanyName(), ';') !== false )
{
$stop = true;
$form->get('companyName')->addError(new FormError($translator->trans('supplier.illegalCharacters')));
}
if ($exists != null && $addressExists != null)
{
$form->get('companyName')->addError(new FormError($translator->trans('supplier.formDuplicateName')));
$form->get('addressSupplier')->get('street')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$form->get('addressSupplier')->get('houseNumber')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$form->get('addressSupplier')->get('zipCode')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$form->get('addressSupplier')->get('city')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$stop = true;
}
if ($stop)
{
// stays on the same page with form errors/warnings
} else {
$status = $em->getRepository(UserStatus::class)->findOneBy(['id' => UserStatus::STATUS_REGISTERED]);
$role = $em->getRepository(UserRoles::class)->findOneBy(['id' => UserRoles::ROLE_SUPPLIER]);
$data = $supplier->getUser()->getValues();
foreach ($data as $user)
{
if ($user->getEmail() == null)
{
$supplier->removeUser($user);
$em->remove($user);
$em->flush();
continue;
}
$dbUser = $em->getRepository(User::class)->findOneBy(['email' => $user->getEmail()]);
if ($dbUser != null)
{
if ($dbUser->getSupplier() != null)
{
if ($dbUser->getRoles() === null && $dbUser->getUserStatus() === null)
{
$dbUser->setRoles($role);
$dbUser->setUserStatus($status);
} else {
$em->remove($user);
$em->flush();
}
if ($dbUser->getActive() == null)
{
$dbUser->setActive(1);
}
$dbUser->addUserSupplierList($supplier);
$em->persist($dbUser);
$em->persist($supplier);
$em->flush();
} else {
$this->addFlash('error', 'Es gibt bereits einen Benutzer mit dieser E-Mail und dieser ist einem Kunden zugewiesen.');
throw new Exception('Es gibt bereits einen Benutzer mit dieser E-Mail und dieser ist einem Kunden zugewiesen.');
}
} else {
if ($user->getRoles() === null && $user->getUserStatus() === null)
{
$user->setRoles($role);
$user->setUserStatus($status);
$user->setActive(1);
$em->persist($user);
$em->flush();
$user->addUserSupplierList($supplier);
}
}
}
$em->persist($supplier);
$em->flush();
$parentCompanys = $request->request->get('ParentCompanys');
if ($parentCompanys != "" || $parentCompanys != null)
{
foreach ($parentCompanys as $item)
{
$parentId = substr($item, 1);
if(substr($item,0,1) == 'c')
{
$parent = $em->getRepository(Customer::class)->findOneBy(['id' => $parentId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['cm' => $parent, 'ss' => $supplier]);
if ($exists == null)
{
$parentCompanyRelation = new CompanyRelations();
$parentCompanyRelation->setCm($em->getRepository(Customer::class)->findOneBy(['id' => $parentId]));
$parentCompanyRelation->setSs($supplier);
$em->persist($parentCompanyRelation);
}
}
else if(substr($item,0,1) == 's')
{
$parent = $em->getRepository(Supplier::class)->findOneBy(['id' => $parentId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['sm' => $parent, 'ss' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation = new CompanyRelations();
$subsidiaryCompanyRelation->setSm($em->getRepository(Supplier::class)->findOneBy(['id' => $parentId]));
$subsidiaryCompanyRelation->setSs($supplier);
$em->persist($subsidiaryCompanyRelation);
}
}
}
}
$subsidiaryCompanys = $request->request->get('SubsidiaryCompanys');
if ($subsidiaryCompanys != "" || $subsidiaryCompanys != null)
{
foreach ($subsidiaryCompanys as $item)
{
$subsidiaryId = substr($item, 1);
if(substr($item, 0,1) == 'c')
{
$subsidiary = $em->getRepository(Customer::class)->findOneBy(['id' => $subsidiaryId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['cs' => $subsidiary, 'sm' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation->setCs($em->getRepository(Customer::class)->findOneBy(['id' => $subsidiaryId]));
$subsidiaryCompanyRelation->setSm($supplier);
$em->persist($subsidiaryCompanyRelation);
}
}
else if(substr($item, 0,1) == 's')
{
$subsidiary = $em->getRepository(Customer::class)->findOneBy(['id' => $subsidiaryId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['ss' => $subsidiary, 'sm' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation->setSs($em->getRepository(Supplier::class)->findOneBy(['id' => $subsidiaryId]));
$subsidiaryCompanyRelation->setSm($supplier);
$em->persist($subsidiaryCompanyRelation);
}
}
}
}
$savedCustomers = array();
$customers = $request->request->get('Customers');
if ($customers != "" || $customers != null)
{
foreach ($customers as $customer)
{
$customerDb = $em->getRepository(Customer::class)->findOneBy(['id' => $customer]);
$exists = $em->getRepository(CustomerSupplierRelation::class)->findOneBy(['customer' => $customerDb, 'supplier' => $supplier]);
if ($exists == null)
{
$customerSupplierRelation = new CustomerSupplierRelation();
$customerSupplierRelation->setSupplier($supplier);
$customerSupplierRelation->setCustomer($customerDb);
$em->persist($customerSupplierRelation);
}
}
}
$supplier->getAddressSupplier()->setSupplier($supplier);
$supplier->getAddressSupplier()->setType('company');
if ($invoiceAddress->getStreet() == null && $invoiceAddress->getHouseNumber() == null && $invoiceAddress->getZipCode() == null && $invoiceAddress->getCountry() == null)
{
$invoiceAddress->setStreet($addressSupplier->getStreet());
$invoiceAddress->setHouseNumber($addressSupplier->getHouseNumber());
$invoiceAddress->setZipCode($addressSupplier->getZipCode());
$invoiceAddress->setCity($addressSupplier->getCity());
$invoiceAddress->setCountry($addressSupplier->getCountry());
}
$invoiceAddress->setSupplier($supplier);
$invoiceAddress->setType('invoice');
$supplier->setActive(1);
$em->persist($supplier);
$em->persist($invoiceAddress);
$em->flush();
// foreach ($users as $item)
// {
// $item->addSupplier($supplier);
// $em->persist($item);
// $em->flush();
// }
$this->dbLogger->info('Create Supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $supplier,
'route' => $request->get('_route')
]);
if ($exists != null)
{
$this->addFlash('info', $translator->trans('supplier.duplicateName'));
} elseif ($addressExists != null) {
$this->addFlash('info', $translator->trans('supplier.duplicateAddress'));
} else {
$this->addFlash('success', $translator->trans('supplier.create_success'));
}
return $this->redirectToRoute('supplier_index');
}
} catch (\Exception $exception) {
$this->addFlash('error', $translator->trans('supplier.create_error' . $exception->getMessage()));
$logger->error('Error while create Admin Supplier', ['e' => $exception]);
$this->dbLogger->error('Error when creating Supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $supplier,
'route' => $request->get('_route'),
]);
}
}
$companys = array();
$companysList = array();
array_push($companys, $em->getRepository(Customer::class)->findAll());
array_push($companys, $em->getRepository(Supplier::class)->findAll());
$idx = 0;
//Why used a Foreach $none never used
foreach($companys as $none)
{
foreach($companys[$idx] as $company)
{
if($company instanceof Customer)
{
$tmp = ['c'.$company->getId(), $company->getcompanyName()];
}
else if ($company instanceof Supplier)
{
$tmp = ['s'.$company->getId(), $company->getCompanyName()];
}
array_push($companysList, $tmp);
}
$idx++;
}
return $this->render('supplier/supplier.html.twig', array(
'supplier' => $supplier,
'form' => $form->createView(),
'errors' => $errors,
'companys' => $companysList,
'invoiceForm' => $invoiceForm->createView(),
'linkedParentCompanys' => array(),
'linkedSubsidiaryCompanys' => array(),
'oldCustomers' => array(),
'customersList' => $customersList,
'helpdesk' => $helpdesk,
));
}
/**
* Update supplier entity.
*
* @Route("/edit/{id}", name="supplier_edit", methods={"GET", "POST"})
*/
public function editAction(
Request $request,
Supplier $supplier,
TranslatorInterface $translator,
LoggerInterface $logger,
ValidatorInterface $validator)
{
$headerTitle = $supplier->getCompanyName();
$request->attributes->set('headerTitle', $headerTitle);
$user = $this->getUser();
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'), "roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
$supplierManagement = $em->getRepository(Supplier::class)->findOneBy(['id' => $supplier]);
$role = $em->getRepository(UserRoles::class)->findOneBy(['role' => 'ROLE_SUPPLIER']);
$status = $em->getRepository(UserStatus::class)->findOneBy(['name' => 'registered']);
$errors = $validator->validate($supplierManagement);
$invoiceAddress = $em->getRepository(AddressSupplier::class)->findOneBy(['supplier' => $supplier, 'type' => 'invoice']);
if ($invoiceAddress == null)
{
$invoiceAddress = new AddressSupplier();
}
if ($supplierManagement->getAddressSupplier() == null)
{
$addressSupplier = new AddressSupplier();
$supplierManagement->addAddressSupplier($addressSupplier);
}
$tempLinkedParentCompanys = $em->getRepository(CompanyRelations::class)->findBy(['ss' => $supplier]);
$tempLinkedSubsidiaryCompanys = $em->getRepository(CompanyRelations::class)->findBy(['sm' => $supplier]);
$customersDB = $em->getRepository(Customer::class)->findAll();
$oldUsers = $supplierManagement->getUsers()->getValues();
$userGroup = $em->getRepository(UserGroups::class)->findOneBy(['id' => 1]);
$editForm = $this->createForm(\App\Form\SupplierType::class, $supplierManagement);
if ($user->getRole()->getId() != User::ROLE_SUPER_ADMIN && $user->getRole()->getId() != User::ROLE_ADMIN)
{
$editForm->remove('customerSupplierRelation');
$editForm->remove('notice');
}
$editForm->handleRequest($request);
$editInvoiceForm = $this->createForm(\App\Form\AddressSupplierType::class, $invoiceAddress, ['setRequired' => false]);
$editInvoiceForm->handleRequest($request);
if (!$supplier) {
$this->addFlash('error', $translator->trans('supplier.not_exist'));
return $this->redirectToRoute('supplier_index');
}
//AJAX
if($request->isXmlHttpRequest() || $request->query->get('showJson') == 1)
{
$retval = array();
$test = $request->get("industryid");
$subindustries = $em->getRepository(\App\Entity\SubIndustry::class)->findBy(['industries' => $test]);
$i = 0;
foreach($subindustries as $subindustry)
{
$retval[$i] = array (
'id' => $subindustry->getId(),
'name' => $subindustry->getName(),
);
$i++;
}
return new JsonResponse($retval);
}
$oldCustomers = array();
foreach ($supplierManagement->getCustomerSupplierRelation()->getValues() as $csRelation)
{
array_push($oldCustomers, $csRelation->getCustomer());
}
$customerList = array();
foreach ($customersDB as $customer) {
if (!in_array($customer, $oldCustomers)) {
array_push($customerList, $customer);
}
}
$companys = array();
$companysListWihtoutParent = array();
$companysListWihtoutSubsidiary = array();
$companysList = array();
array_push($companys, $em->getRepository(Customer::class)->findAll());
array_push($companys, $em->getRepository(Supplier::class)->findAll());
$idx = 0;
//Why used a Foreach $none never used
foreach($companys as $none)
{
foreach($companys[$idx] as $company)
{
if($company instanceof Customer)
{
$tmp = ['c'.$company->getId(), $company->getcompanyName()];
array_push($companysList, $tmp);
}
else if ($company instanceof Supplier)
{
if ($company !== $supplier)
{
$tmp = ['s'.$company->getId(), $company->getCompanyName()];
array_push($companysList, $tmp);
}
}
}
$idx++;
}
$oldParents = array();
$oldSubsidiarys = array();
$tempRelationCustomer = [array(),array()];
foreach ($tempLinkedParentCompanys as $relation)
{
if($relation->getCm() instanceof Customer)
{
array_push($tempRelationCustomer[0], $relation->getCm());
}
else if ($relation->getSm() instanceof Supplier)
{
array_push($tempRelationCustomer[1], $relation->getSm());
}
}
$tempRelationSubsidiary = [array(),array()];
foreach ($tempLinkedSubsidiaryCompanys as $relation)
{
if($relation->getCs() instanceof Customer)
{
array_push($tempRelationSubsidiary[0], $relation->getCs());
}
else if ($relation->getSs() instanceof Supplier)
{
array_push($tempRelationSubsidiary[1], $relation->getSs());
}
}
for ($i=0;$i<count($companys);$i++)
{
foreach ($companys[$i] as $company)
{
if($company instanceof Customer)
{
if (!in_array($company, $tempRelationCustomer[0]))
{
$tmpList = ['c'.$company->getId(), $company->getcompanyName()];
array_push($companysListWihtoutParent, $tmpList);
}
if (!in_array($company, $tempRelationSubsidiary[0]))
{
$tmpList = ['c'.$company->getId(), $company->getcompanyName()];
array_push($companysListWihtoutSubsidiary, $tmpList);
}
}
else if ($company instanceof Supplier)
{
if (!in_array($company, $tempRelationCustomer[1]))
{
if ($company !== $supplier)
{
$tmpList = ['s'.$company->getId(), $company->getCompanyName()];
array_push($companysListWihtoutParent, $tmpList);
}
}
if (!in_array($company, $tempRelationSubsidiary[1]))
{
if ($company !== $supplier)
{
$tmpList = ['s'.$company->getId(), $company->getCompanyName()];
array_push($companysListWihtoutSubsidiary, $tmpList);
}
}
}
}
}
$linkedParentCompanys = array();
foreach ($tempLinkedParentCompanys as $tempParent)
{
if ($tempParent->getCm() != null)
{
$tmp = ['c'.$tempParent->getCm()->getId(), $tempParent->getCm()->getcompanyName()];
$tmpOld = $tempParent->getCm();
}
if ($tempParent->getSm() != null)
{
$tmp = ['s'.$tempParent->getSm()->getId(), $tempParent->getSm()->getCompanyName()];
$tmpOld = $tempParent->getSm();
}
array_push($linkedParentCompanys, $tmp);
array_push($oldParents, $tmpOld);
}
$linkedSubsidiaryCompanys = array();
foreach ($tempLinkedSubsidiaryCompanys as $tempSubsidiary)
{
if ($tempSubsidiary->getCs() != null)
{
$tmp = ['c'.$tempSubsidiary->getCs()->getId(), $tempSubsidiary->getCs()->getcompanyName()];
$tmpOld = $tempSubsidiary->getCs();
}
if ($tempSubsidiary->getSs() != null)
{
$tmp = ['s'.$tempSubsidiary->getSs()->getId(), $tempSubsidiary->getSs()->getCompanyName()];
$tmpOld = $tempSubsidiary->getSs();
}
array_push($linkedSubsidiaryCompanys, $tmp);
array_push($oldSubsidiarys, $tmpOld);
}
if ($editForm->isSubmitted()) {
try {
if ($user->getCustomer() != null)
{
$system = $em->getRepository(\App\Entity\User::class)->findOneBy(['email' => 'scorebox@fra-services.de']);
$todo = $em->getRepository(\App\Entity\Todo::class)->findOneBy(['id' => 5]);
$processes = $em->getRepository(\App\Entity\Processes::class)->findOneBy(['id' => 1]);
$process = new Process();
$process->setProcesses($processes);
$process->setCustomer($user->getCustomer());
$process->setContactPersonCustomer($user);
$process->setSupplier($supplier);
$process->setCreator($system);
$process->setState(0);
$em->persist($process);
$em->flush();
$todos = new Todos();
$todos->setTodo($todo);
$todos->setProcess($process);
$todos->setState(Todos::STATE_OPEN);
$todos->setCreator($system);
$todos->setDue(new \DateTime());
$editIndustry = $supplier->getIndustry() != null ? $supplier->getIndustry()->getName() : "";
$editSubIndustry = $supplier->getSubIndustry() != null ? $supplier->getSubIndustry()->getName() : "";
$notice = 'Supplier: ' . $supplier->getCompanyName() . "\n" .
'Straße: ' . $supplier->getAddressSupplier()->getStreet() . ' ' . $supplier->getAddressSupplier()->getHousenumber() . "\n" .
'PLZ, Ort: ' . $supplier->getAddressSupplier()->getZipCode() . ', ' . $supplier->getAddressSupplier()->getCity() . ', ' . $supplier->getAddressSupplier()->getCountry() . "\n" .
'Webseite: ' . $supplier->getAddressSupplier()->getWebsite() . "\n" .
'Notiz: ' . $supplier->getNotice() . "\n" .
'Branche und Subbranche: ' . $editIndustry . ', ' . $editSubIndustry . "\n" .
'Rechnungsadresse: ' . $editInvoiceForm->getData()->getStreet() . ', ' . $editInvoiceForm->getData()->getHousenumber() . ', ' . $editInvoiceForm->getData()->getZipCode() . ', ' .
$editInvoiceForm->getData()->getCity() . ', ' . $editInvoiceForm->getData()->getCountry() . "\n";
foreach ($supplier->getUser() as $user)
{
$salutation = null;
if ($user->getSalutation() == 0)
{
$salutation = "Herr";
} elseif ($user->getSalutation() == 1) {
$salutation = "Frau";
} elseif ($user->getSalutation() == 2) {
$salutation = "Divers";
}
$notice = $notice . 'Ansprechpartner: ' . ' ' . $salutation . $user->getFirstname() . ' ' . $user->getLastname() . ', ' . $user->getEmail() . ', ' . $user->getPhone() . ', ' . $user->getMobile() .
', ' . $user->getNotice() . ', ' . $user->getFunction() . "\n";
}
$todos->setNotice($notice);
$em->persist($todos);
$em->flush();
$this->addFlash('success', $translator->trans('customer.supplier_edit'));
return $this->redirectToRoute('supplier_index');
} else {
$exists = $em->getRepository(Supplier::class)->findOneBy(['companyName' => $supplier->getCompanyName()]);
$addressExists = $em->getRepository(AddressSupplier::class)->findOneBy(['street' => $supplier->getAddressSupplier()->getStreet(),
'houseNumber' => $supplier->getAddressSupplier()->getHouseNumber(), 'zipCode' => $supplier->getAddressSupplier()->getZipCode(),
'city' => $supplier->getAddressSupplier()->getCity()]);
if ($exists != null && $addressExists != null && $exists != $supplier)
{
$editForm->get('companyName')->addError(new FormError($translator->trans('supplier.formDuplicateName')));
$editForm->get('addressSupplier')->get('street')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$editForm->get('addressSupplier')->get('houseNumber')->addError(new FormError(""));
$editForm->get('addressSupplier')->get('zipCode')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
$editForm->get('addressSupplier')->get('city')->addError(new FormError($translator->trans('supplier.formDuplicateAddress')));
} elseif(strpos($supplier->getCompanyName(), '?') || strpos($supplier->getCompanyName(), '/') ||
strpos($supplier->getCompanyName(), '\\') || strpos($supplier->getCompanyName(), '^') ||
strpos($supplier->getCompanyName(), '|') || strpos($supplier->getCompanyName(), ';') !== false ) {
$editForm->get('companyName')->addError(new FormError($translator->trans('supplier.illegalCharacters')));
} else {
$data = $editForm->get('users')->getData()->getValues();
$newUsers = array();
foreach ($data as $user)
{
if ($user->getId() == null)
{
$dbUser = $em->getRepository(User::class)->findOneBy(['email' => $user->getEmail()]);
if ($user->getEmail() == null)
{
$supplier->removeUser($user);
$em->remove($user);
$em->flush();
continue;
}
if ($dbUser != null)
{
if ($dbUser->getSupplier() != null)
{
$dbUser->addUserSupplierList($supplier);
$em->persist($dbUser);
$em->flush();
$em->remove($user);
$em->flush();
array_push($newUsers, $dbUser);
} else {
$this->addFlash('error', 'Es gibt bereits einen Benutzer mit dieser E-Mail und dieser ist einem Kunden zugewiesen. E-Mail: ' . $user->getEmail());
throw new Exception();
}
} else {
if ($user->getRoles() === null && $user->getUserStatus() === null)
{
$user->setRoles($role);
$user->setUserStatus($status);
$user->setActive(1);
$user->addUserSupplierList($supplier);
$em->persist($user);
array_push($newUsers, $user);
}
}
} else {
$dbUser = $em->getRepository(User::class)->findOneBy(['email' => $user->getEmail()]);
if ($dbUser != null && $dbUser->getId() != $user->getId())
{
if ($dbUser->getSupplier() != null)
{
$this->addFlash('error', 'Es gibt bereits einen Benutzer mit dieser Email, falls das die selben sind, dann bitte hier löschen und neu anlegen. E-Mail: ' . $user->getEmail());
throw new Exception();
} else {
$this->addFlash('error', 'Es gibt bereits einen Benutzer mit dieser Email der einem Lieferanten zugeordnet ist, deswegen kann er keinem Kunden zugeordnet werden. E-Mail: ' . $user->getEmail());
throw new Exception();
}
} else {
array_push($newUsers, $user);
}
}
}
$em->flush();
$savedRelations = array();
$savedSubsidiaryRelations = array();
$parentCompanys = $request->request->get('ParentCompanys');
if ($parentCompanys != "" || $parentCompanys != null)
{
foreach ($parentCompanys as $item)
{
$parentId = substr($item, 1);
if(substr($item,0,1) == 'c')
{
$parent = $em->getRepository(Customer::class)->findOneBy(['id' => $parentId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['cm' => $parent, 'ss' => $supplier]);
if ($exists == null)
{
$parentCompanyRelation = new CompanyRelations();
$parentCompanyRelation->setCm($em->getRepository(Customer::class)->findOneBy(['id' => $parentId]));
$parentCompanyRelation->setSs($supplier);
$em->persist($parentCompanyRelation);
}
if (isset($parentCompanyRelation))
{
array_push($savedRelations, $parentCompanyRelation);
} elseif ($exists != null) {
array_push($savedRelations, $exists);
}
}
else if(substr($item,0,1) == 's')
{
$parent = $em->getRepository(Supplier::class)->findOneBy(['id' => $parentId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['sm' => $parent, 'ss' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation = new CompanyRelations();
$subsidiaryCompanyRelation->setSm($em->getRepository(Supplier::class)->findOneBy(['id' => $parentId]));
$subsidiaryCompanyRelation->setSs($supplier);
$em->persist($subsidiaryCompanyRelation);
}
if (isset($parentCompanyRelation))
{
array_push($savedRelations, $parentCompanyRelation);
} elseif ($exists != null) {
array_push($savedRelations, $exists);
}
}
}
}
foreach ($oldParents as $key => $oldParent)
{
foreach ($savedRelations as $savedRelation)
{
if ($oldParent instanceof Customer)
{
if ($savedRelation->getCm() == $oldParent)
{
unset($oldParents[$key]);
}
} elseif ($oldParent instanceof Supplier) {
if ($savedRelation->getSm() == $oldParent)
{
unset($oldParents[$key]);
}
}
}
}
if (!empty($oldParents))
{
foreach ($oldParents as $oldParent)
{
if ($oldParent instanceof Customer)
{
$removeParent = $em->getRepository(CompanyRelations::class)->findOneBy(['cm' => $oldParent, 'ss' => $supplier]);
if ($removeParent != null)
{
$em->remove($removeParent);
}
} elseif ($oldParent instanceof Supplier) {
$removeParent = $em->getRepository(CompanyRelations::class)->findOneBy(['sm' => $oldParent, 'ss' => $supplier]);
if ($removeParent != null)
{
$em->remove($removeParent);
}
}
}
}
$subsidiaryCompanys = $request->request->get('SubsidiaryCompanys');
if ($subsidiaryCompanys != "" || $subsidiaryCompanys != null)
{
foreach ($subsidiaryCompanys as $item)
{
$subsidiaryId = substr($item, 1);
if(substr($item, 0,1) == 'c')
{
$subsidiary = $em->getRepository(Customer::class)->findOneBy(['id' => $subsidiaryId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['cs' => $subsidiary, 'sm' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation = new CompanyRelations();
$subsidiaryCompanyRelation->setCs($em->getRepository(Customer::class)->findOneBy(['id' => $subsidiaryId]));
$subsidiaryCompanyRelation->setSm($supplier);
$em->persist($subsidiaryCompanyRelation);
}
if (isset($subsidiaryCompanyRelation))
{
array_push($savedSubsidiaryRelations, $subsidiaryCompanyRelation);
} elseif ($exists != null) {
array_push($savedSubsidiaryRelations, $exists);
}
}
else if(substr($item, 0,1) == 's')
{
$subsidiary = $em->getRepository(Supplier::class)->findOneBy(['id' => $subsidiaryId]);
$exists = $em->getRepository(CompanyRelations::class)->findOneBy(['ss' => $subsidiary, 'sm' => $supplier]);
if ($exists == null)
{
$subsidiaryCompanyRelation = new CompanyRelations();
$subsidiaryCompanyRelation->setSs($em->getRepository(Supplier::class)->findOneBy(['id' => $subsidiaryId]));
$subsidiaryCompanyRelation->setSm($supplier);
$em->persist($subsidiaryCompanyRelation);
}
if (isset($subsidiaryCompanyRelation))
{
array_push($savedSubsidiaryRelations, $subsidiaryCompanyRelation);
} elseif ($exists != null) {
array_push($savedSubsidiaryRelations, $exists);
}
}
}
}
foreach ($oldSubsidiarys as $key => $oldSubsidiary)
{
foreach ($savedSubsidiaryRelations as $savedRelation)
{
if ($oldSubsidiary instanceof Customer)
{
if ($savedRelation->getCs() == $oldSubsidiary)
{
unset($oldSubsidiarys[$key]);
}
} elseif ($oldSubsidiary instanceof Supplier) {
if ($savedRelation->getSs() == $oldSubsidiary)
{
unset($oldSubsidiarys[$key]);
}
}
}
}
if (!empty($oldSubsidiarys))
{
foreach ($oldSubsidiarys as $oldSubsidiary)
{
if ($oldSubsidiary instanceof Customer)
{
$removeSubsidiary = $em->getRepository(CompanyRelations::class)->findOneBy(['cs' => $oldSubsidiary, 'sm' => $supplier]);
if ($removeSubsidiary != null)
{
$em->remove($removeSubsidiary);
}
} elseif ($oldSubsidiary instanceof Supplier) {
$removeSubsidiary = $em->getRepository(CompanyRelations::class)->findOneBy(['ss' => $oldSubsidiary, 'sm' => $supplier]);
if ($removeSubsidiary != null)
{
$em->remove($removeSubsidiary);
}
}
}
}
$savedCustomers = array();
$customers = $request->request->get('Customers');
if ($customers != "" || $customers != null)
{
foreach ($customers as $customer)
{
$customerDb = $em->getRepository(Customer::class)->findOneBy(['id' => $customer]);
$exists = $em->getRepository(CustomerSupplierRelation::class)->findOneBy(['customer' => $customerDb, 'supplier' => $supplier]);
if ($exists == null)
{
$customerSupplierRelation = new CustomerSupplierRelation();
$customerSupplierRelation->setSupplier($supplier);
$customerSupplierRelation->setCustomer($customerDb);
$em->persist($customerSupplierRelation);
}
if (isset($customerSupplierRelation))
{
array_push($savedCustomers, $customerSupplierRelation);
} elseif ($exists != null) {
array_push($savedCustomers, $exists);
}
}
}
foreach ($oldCustomers as $key => $oldCustomer)
{
foreach ($savedCustomers as $savedCustomer)
{
if ($savedCustomer->getCustomer() == $oldCustomer)
{
unset($oldCustomers[$key]);
}
}
}
if (!empty($oldCustomers))
{
foreach ($oldCustomers as $oldCustomer)
{
$removeCustomer = $em->getRepository(CustomerSupplierRelation::class)->findOneBy(['customer' => $oldCustomer, 'supplier' => $supplier]);
if ($removeCustomer != null)
{
$em->remove($removeCustomer);
}
}
}
$supplier->setUpdatedAt(new \DateTime());
$supplier->getAddressSupplier()->setUpdatedAt(new \DateTime());
foreach ($oldUsers as $key => $oldUser)
{
foreach ($newUsers as $newUser)
{
if ($newUser == $oldUser)
{
unset($oldUsers[$key]);
}
}
}
if (!empty($oldUsers))
{
$deactivatedStatus = $em->getRepository(\App\Entity\UserStatus::class)->findOneBy(['id' => 4]);
foreach ($oldUsers as $oldUser)
{
$tmpUser = $em->getRepository(\App\Entity\User::class)->findOneBy(['id' => $oldUser->getId()]);
$csr = $tmpUser->getCsr();
foreach ($csr as $item)
{
$tmpUser->removeCsr($item);
}
if (count($tmpUser->getUserSupplierList()->getValues()) <= 1)
{
if ($tmpUser != null)
{
$tmpUser->setActive(0);
$tmpUser->setNotice($tmpUser->getNotice() . "\n" . "E-mail: " . $tmpUser->getEmail() . "\n" .
"Supplier: " . $supplier->getCompanyName() . "\n" . "Supplier-ID: " . $supplier->getId());
$tmpUser->setEmail(NULL);
$tmpUser->setUserStatus($deactivatedStatus);
$tmpUser->setSupplier(null);
$tmpUser->removeUserSupplierList($supplier);
}
} else {
if ($tmpUser->getSupplier() == $supplier)
{
$tmpUser->setSupplier(null);
}
$tmpUser->removeUserSupplierList($supplier);
}
$em->persist($tmpUser);
$em->flush();
}
}
if ($invoiceAddress->getStreet() == null && $invoiceAddress->getHouseNumber() == null && $invoiceAddress->getZipCode() == null && $invoiceAddress->getCity() == null)
{
$invoiceAddress->setStreet($supplier->getAddressSupplier()->getStreet());
$invoiceAddress->setHouseNumber($supplier->getAddressSupplier()->getHouseNumber());
$invoiceAddress->setZipCode($supplier->getAddressSupplier()->getZipCode());
$invoiceAddress->setCity($supplier->getAddressSupplier()->getCity());
$invoiceAddress->setCountry($supplier->getAddressSupplier()->getCountry());
}
if ($supplier->getAddressSupplier()->getSupplier() == null)
{
$supplier->getAddressSupplier()->setSupplier($supplier);
}
$supplier->getAddressSupplier()->setType('company');
if ($invoiceAddress->getSupplier() == null)
{
$invoiceAddress->setSupplier($supplier);
}
$invoiceAddress->setUpdatedAt(new \DateTime());
$invoiceAddress->setType('invoice');
$this->doctrine->getManager()->flush();
$em->persist($invoiceAddress);
$em->flush();
$this->addFlash('success', $translator->trans('supplier.update_success'));
$this->dbLogger->info('Edit Supplier', [
'other' => $supplier,
'route' => $request->get('_route')
]);
return $this->redirectToRoute('supplier_index');
}
}
} catch (\Exception $exception) {
if ($exception->getMessage() === "")
{
} else {
$this->addFlash('error', $translator->trans('supplier.update_error'));
$logger->error('Error while Admin edit Supplier', ['e' => $exception]);
// $this->dbLogger->error('Error when editing supplier', [
// 'other' => $supplier,
// 'route' => $request->get('_route'),
// ]);
}
}
}
return $this->render('supplier/supplier.html.twig', array(
'supplier' => $supplier,
'form' => $editForm->createView(),
'errors' => $errors,
'companys' => $companysList,
'invoiceForm' => $editInvoiceForm->createView(),
'linkedParentCompanys' => $linkedParentCompanys,
'linkedSubsidiaryCompanys' => $linkedSubsidiaryCompanys,
'companysListWihtoutParent' => $companysListWihtoutParent,
'companysListWihtoutSubsidiary' => $companysListWihtoutSubsidiary,
'oldCustomers' => $oldCustomers,
'customersList' => $customerList,
'helpdesk' => $helpdesk,
));
}
/**
* @Route("/view/{id}", name="supplier_view")
* @param $supplier
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function viewAction(
TranslatorInterface $translator,
Supplier $supplier = null,
Request $request,
UserPermissionService $userPermissionService
)
{
$headerTitle = $supplier->getCompanyName();
$request->attributes->set('headerTitle', $headerTitle);
if (!$supplier) {
$this->addFlash('error', $translator->trans('supplier.not_exist'));
return $this->redirectToRoute('supplier_index');
}
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'), "roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
if ($userPermissionService->checkSupplierPermission('view_suppliers', $this->getUser(), $supplier));
else if ($userPermissionService->checkUserPermission('view_all_suppliers', $this->getUser()) );
else {
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('supplier_index');
}
$address = $em->getRepository(AddressSupplier::class)->findOneBy(['supplier' => $supplier, 'type' => 'company']);
$invoiceAddress = $em->getRepository(AddressSupplier::class)->findOneBy(['supplier' => $supplier, 'type' => 'invoice']);
$reportPeriod = $em->getRepository(ReportingPeriod::class)->findBy(['supplier' => $supplier]);
$customer_supplier = $em->getRepository(CustomerSupplierRelation::class)->findBy(['supplier' => $supplier]);
$customer = $em->getRepository(Customer::class)->findBy(['id' => $customer_supplier]);
// $user = $em->getRepository(User::class)->findBy(['supplier' => $supplier, 'active' => 1]);
$user = $supplier->getUsers()->getValues();
$reportReleases = $em->getRepository(ReportRelease::class)->findBy(['supplier' => $supplier]);
$invoicelist = array();
$parentCompanys = $em->getRepository(CompanyRelations::class)->findBy(['ss' => $supplier]);
$subsidiaryCompanys = $em->getRepository(CompanyRelations::class)->findBy(['sm' => $supplier]);
$existScRelation = null;
$existCustomer = $this->getUser()->getCustomer();
if ($existCustomer != null)
{
$existScRelation = $em->getRepository(\App\Entity\CustomerSupplierRelation::class)->findOneBy(['supplier' => $supplier, 'customer' => $existCustomer]);
}
if ($existScRelation == null && ($this->getUser()->getRole()->getId() != User::ROLE_SUPER_ADMIN && $this->getUser()->getRole()->getId() != User::ROLE_ADMIN) && $supplier != $this->getUser()->getSupplier())
{
$this->addFlash('warning', $translator->trans('error.not_permitted'));
return $this->redirectToRoute('supplier_index');
} else {
foreach ($reportReleases as $release)
{
for ($i=1;$i<=5;$i++)
{
$func = 'getYear'.$i;
if ($release->getReport()->$func() == null && $i > 0) //last year!!!!!!
{
$invoice = $em->getRepository(InvoiceList::class)->findOneBy(['reportrelease' => $release]);
if ($invoice != null)
{
array_push($invoicelist, $invoice);
break;
}
}
}
}
$calculations = array();
$reportPeriods = array();
foreach ($reportPeriod as $item) {
$calculation = $em->getRepository(Calculations::class)->findOneBy(['reportPeriodId' => $item->getId()]);
if ($calculation != null)
{
array_push($calculations, $calculation);
if ($calculation->getAnalysis() != null) {
if ($calculation->getAnalysis()->getCommentAndOutlook() != null && $calculation->getAnalysis()->getCommentAndOutlookDe() != null) {
array_push($reportPeriods, [$item, "calc" => true, 'analysis' => "en/de"]);
} else {
if ($calculation->getAnalysis()->getCommentAndOutlook() != null) {
array_push($reportPeriods, [$item, "calc" => true, 'analysis' => "en"]);
} elseif ($calculation->getAnalysis()->getCommentAndOutlookDe() != null) {
array_push($reportPeriods, [$item, "calc" => true, 'analysis' => "de"]);
} else {
array_push($reportPeriods, [$item, "calc" => true, 'analysis' => ""]);
}
}
}else {
array_push($reportPeriods, [$item, "calc" => true, 'analysis' => false]);
}
} else {
array_push($reportPeriods, [$item,"calc" => false, 'analysis' => false]);
}
}
// Get all Report from the supplier
$reports = $em->getRepository(Report::class)->findBy(['supplier' => $supplier, 'active' => 1]);
$test = array();
foreach ($reportPeriod as $data)
{
$test[$data->getId()] = $data->getId();
}
// for ($i = 0; $i < count($reportPeriod); $i++)
// {
// array_push($test, $reportPeriod[$i]->getId());
// }
$oldCSRs = array();
$tmpTest = null;
$newUserList = array();
foreach ($user as $item)
{
$tmpOldCsr = array();
$oldCustomers = array();
$customerList = array();
$csrForOldCustomers = array();
foreach ($item->getCsr() as $oldCSR)
{
if ($oldCSR->getSupplier() == $supplier)
{
array_push($csrForOldCustomers, $oldCSR);
}
}
foreach ($item->getCsr()->getValues() as $tmpItem)
{
array_push($tmpOldCsr, $tmpItem);
}
foreach ($csrForOldCustomers as $csrForOldCustomer)
{
array_push($oldCustomers, $csrForOldCustomer->getCustomer());
}
foreach ($customer_supplier as $key => $csRelation)
{
if (!in_array($csRelation->getCustomer(), $customerList) && !in_array($csRelation->getCustomer(), $oldCustomers))
{
array_push($customerList, $csRelation->getCustomer());
}
}
if ($this->getUser()->getRole()->getId() == User::ROLE_CUSTOMER)
{
if (in_array($item, $existScRelation->getUsers()->getValues()))
{
array_push($newUserList, [$item, $tmpOldCsr, $oldCustomers, $customerList]);
}
} else {
array_push($newUserList, [$item, $tmpOldCsr, $oldCustomers, $customerList]);
}
}
$formBuilderCustomer = $this->get('form.factory')->createNamedBuilder('addCustomer');
if ($this->getUser()->getRole()->getId() == User::ROLE_SUPER_ADMIN || $this->getUser()->getRole()->getId() == User::ROLE_ADMIN)
{
foreach ($user as $item)
{
$formBuilderCustomer->add('submit'.$item->getId(), SubmitType::class,['label' => 'submit']);
}
}
$formCustomer = $formBuilderCustomer->getForm();
$formCustomer->handleRequest($request);
$formBuilder = $this->createFormBuilder();
foreach ($reportPeriods as $item)
{
$formBuilder->add('reportPeriod'.$item[0]->getId(), CheckboxType::class, ['required' => false, 'data' => false, 'value' => $item[0]->getId(), 'label' => false]);
}
$formBuilder->add('submitReportPeriod', SubmitType::class,['label' => 'supplier.newReportPeriod']);
$formBuilder->add('editReportPeriod', SubmitType::class,['label' => 'supplier.editReportPeriod']);
$formBuilder->add('viewReportPeriod', SubmitType::class,['label' => 'supplier.viewReportPeriod']);
$formBuilder->add('submitCalculation', SubmitType::class,['label' => 'supplier.submitCalculation']);
$formBuilder->add('submitReport', SubmitType::class,['label' => 'supplier.createReport']);
$form = $formBuilder->getForm();
$form->handleRequest($request);
$scRelationFormBuilder = $this->createFormBuilder();
foreach ($customer_supplier as $item)
{
if($item->getCustomer() != null)
{
$scRelationFormBuilder->add('supplierNumber'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getSupplierNumber()]);
$scRelationFormBuilder->add('purchaseVolume'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getPurchaseVolume()]);
$scRelationFormBuilder->add('status'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getStatus()]);
$scRelationFormBuilder->add('productGroups'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getProductGroups()]);
$scRelationFormBuilder->add('openField1'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getOpenfield1()]);
$scRelationFormBuilder->add('openField2'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getOpenfield2()]);
$scRelationFormBuilder->add('openField3'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getOpenfield3()]);
$scRelationFormBuilder->add('openField4'.$item->getCustomer()->getId(), TextType::class, ['required' => false, 'data' => $item->getOpenfield4()]);
$scRelationFormBuilder->add('submit'.$item->getCustomer()->getId(), SubmitType::class,['label' => 'submit']);
}
}
$scRelationForm = $scRelationFormBuilder->getForm();
$scRelationForm->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
if ($form->getClickedButton()->getName() == 'submitCalculation')
{
$ids = array();
$i = 1;
$uri = "";
$data = $form->all();
foreach ($data as $item) {
if (substr($item->getName(), 0, 12) == 'reportPeriod')
{
if ($item->getData() == true)
{
$ids['id'.$i] = $item->getViewData();
$i++;
}
} elseif (substr($item->getName(), 0, 11) == 'calculation')
{
}
}
return $this->redirectToRoute('calculation_edit', $ids);
} elseif ($form->getClickedButton()->getName() == 'submitReport')
{
try {
$requestedLanguage = $request->get('reportLanguage');
$data = $form->getData();
$i = 1;
$points = array();
$newReport = new Report();
//Sorty by Year
foreach ($reportPeriod as $key => $row)
{
// $sortedReportPeriods[$key] = $row->getYear();
$sortedReportPeriods[$key] = $row->getDeadline();
}
array_multisort($sortedReportPeriods, SORT_ASC, $reportPeriod);
foreach ($reportPeriod as $key => $item)
{
if ($data['reportPeriod' . $item->getId()] == true)
{
$calculationDB = $em->getRepository(\App\Entity\Calculations::class)->findOneBy(['reportPeriodId' => $item]);
if ($calculationDB === null) {
continue;
}
$reportData = new ReportData();
$reportData->setNetSales($item->getNetSales());
$reportData->setAmortizationOfAvIncludingGoodwill($item->getAmortizationOfAvIncludingGoodwill());
$reportData->setInterestIncome($item->getInterestIncome());
$reportData->setInterestExpenses($item->getInterestExpenses());
$reportData->setTaxesOnIncomeAndEarnings($item->getTaxesOnIncomeAndEarnings());
$reportData->setProfitAfterTax($item->getProfitAfterTax());
$reportData->setExtraordinaryIncome($item->getExtraordinaryIncome());
$reportData->setCheckoutBank($item->getCheckoutBank());
$reportData->setTradeReceivables($item->getTradeReceivables());
$reportData->setInventory($item->getInventory());
$reportData->setReceivablesToShareholders($item->getReceivablesToShareholders());
$reportData->setReceivablesAffiliatedCompaniesParticipating($item->getReceivablesAffiliatedCompaniesParticipating());
$reportData->setOtherCurrentAssets($item->getOtherCurrentAssets());
$reportData->setCurrentAssets($item->getCurrentAssets());
$reportData->setPropertyPlantAndEquipment($item->getPropertyPlantAndEquipment());
$reportData->setGoodwill($item->getGoodwill());
$reportData->setOtherIntangibleAssets($item->getOtherIntangibleAssets());
$reportData->setSharesAffiliatedCompaniesParticipations($item->getSharesAffiliatedCompaniesParticipations());
$reportData->setLoansAffiliatedCompaniesParticipations($item->getLoansAffiliatedCompaniesParticipations());
$reportData->setOtherNonCurrentAssets($item->getOtherNonCurrentAssets());
$reportData->setTradePayables($item->getTradePayables());
$reportData->setOtherCurrentLiabilities($item->getOtherCurrentLiabilities());
$reportData->setAdvancePaymentsReceivedForOrders($item->getAdvancePaymentsReceivedForOrders());
$reportData->setCurrentShareholderLoans($item->getCurrentShareholderLoans());
$reportData->setLiabilitiesAffiliatedCompaniesParticipations($item->getLiabilitiesAffiliatedCompaniesParticipations());
$reportData->setCurrentBankDebt($item->getCurrentBankDebt());
$reportData->setCurrentLiabilities($item->getCurrentLiabilities());
$reportData->setNonCurrentBankDebt($item->getNonCurrentBankDebt());
$reportData->setNonCurrentShareholderLoans($item->getNonCurrentShareholderLoans());
$reportData->setNonCurrentLiabilitiesAffiliatedCompaniesParticipations($item->getNonCurrentLiabilitiesAffiliatedCompaniesParticipations());
$reportData->setAccrualsForPensions($item->getAccrualsForPensions());
$reportData->setOtherProvisions($item->getOtherProvisions());
$reportData->setOtherNonCurrentLiabilities($item->getOtherNonCurrentLiabilities());
$reportData->setNonCurrentLiabilities($item->getNonCurrentLiabilities());
$reportData->setEquity($item->getEquity());
$reportData->setYear($item->getYear());
$reportData->setChangeInInventories($item->getChangeInInventories());
$reportData->setReturnOnSales($calculationDB->getReturnOnSales());
$reportData->setGearing($calculationDB->getGearing());
$reportData->setLiquidity3Grade($calculationDB->getLiquidity3Grade());
if ($calculationDB->getOperativeCf() != null )
{
$reportData->setOperativeCf($calculationDB->getOperativeCf());
}
$reportData->setEbitdaMarge($calculationDB->getEbitdaMarge());
$reportData->setDso($calculationDB->getDso());
$reportData->setFinanceVerbQuote($calculationDB->getFinanceVerbQuote());
$reportData->setBankDebtInPercent($calculationDB->getBankDebtInPercent());
$reportData->setLiabilitiesToShareholderInPercent($calculationDB->getVerbSocietyIn());
$reportData->setLiabilitiesAffiliatedCompaniesParticipationsInPercent($calculationDB->getLiabilitiesAffiliatedCompaniesParticipationsInPercent());
$reportData->setInterestCoverage($calculationDB->getInterestCoverage());
$reportData->setPropertyPlantAndIntensity($calculationDB->getPropertyPlantAndIntensity());
$reportData->setAssetCoverage($calculationDB->getAssetCoverage());
$reportData->setInventoryIntensity($calculationDB->getInventoryIntensity());
$reportData->setWorkingCapitalRatio($calculationDB->getWorkingCapitalRatio());
$reportData->setTradeWorkingCapital($calculationDB->getTradeWorkingCapital());
$reportData->setGoodwillCoverageEk($calculationDB->getGoodwillCoverageEk());
$reportData->setEbitda($calculationDB->getEbitda());
$reportData->setEbitMarge($calculationDB->getEbitMarge());
$reportData->setEbtMarge($calculationDB->getEbtMarge());
$reportData->setBalanceSheet($calculationDB->getBalanceSheet());
$reportData->setShareholderLoanAndGroup($calculationDB->getShareholderLoanAndGroup());
if ($calculationDB->getNotationForReport() != null)
{
$reportData->setRiskGrade($calculationDB->getNotationForReport());
} else {
$reportData->setRiskGrade($calculationDB->getRiskRating());
}
if ($calculationDB->getNotationGFDForReport() != null)
{
$reportData->setRiskGradeZf($calculationDB->getNotationGFDForReport());
} else {
$reportData->setRiskGradeZf($calculationDB->getZfRiskRating());
}
$reportData->setRiskGradeGfd($calculationDB->getRiskNoteWithGFD());
$reportData->setRiskGradeZfGfd($calculationDB->getZfGFDRiskRating());
$reportData->setSupplier($supplier);
$reportData->setEquityRatio($calculationDB->getEquityRatio());
$reportData->setVerbSocietyIn($calculationDB->getVerbSocietyIn());
$reportData->setVerbInterCompany($calculationDB->getVerbInterCompany());
$reportData->setOtherLiabilities($calculationDB->getOtherLiabilities());
$reportData->setBankLiabilitiesIn($calculationDB->getBankLiabilitiesIn());
$reportData->setNetDebtToEbitda($calculationDB->getNetDebtToEbitda());
$reportData->setDih($calculationDB->getDih());
$reportData->setDpoMaterialCost($calculationDB->getDpoMaterialCost());
$reportData->setNetInvestments($calculationDB->getNetInvestments()!=null ? $calculationDB->getNetInvestments() : 0);
$reportData->setDepreciation($calculationDB->getDepreciation());
$period = null;
if ($item->getPeriodFrom() == 1)
{
$period = $translator->trans('reportingPeriod.jan');
} elseif ($item->getPeriodFrom() == 2) {
$period = $translator->trans('reportingPeriod.feb');
} elseif ($item->getPeriodFrom() == 3) {
$period = $translator->trans('reportingPeriod.mar');
} elseif ($item->getPeriodFrom() == 4) {
$period = $translator->trans('reportingPeriod.apr');
} elseif ($item->getPeriodFrom() == 5) {
$period = $translator->trans('reportingPeriod.may');
} elseif ($item->getPeriodFrom() == 6) {
$period = $translator->trans('reportingPeriod.jun');
} elseif ($item->getPeriodFrom() == 7) {
$period = $translator->trans('reportingPeriod.jul');
} elseif ($item->getPeriodFrom() == 8) {
$period = $translator->trans('reportingPeriod.aug');
} elseif ($item->getPeriodFrom() == 9) {
$period = $translator->trans('reportingPeriod.sep');
} elseif ($item->getPeriodFrom() == 10) {
$period = $translator->trans('reportingPeriod.oct');
} elseif ($item->getPeriodFrom() == 11) {
$period = $translator->trans('reportingPeriod.nov');
} elseif ($item->getPeriodFrom() == 12) {
$period = $translator->trans('reportingPeriod.dec');
}
if ($item->getPeriodUntil() == 1)
{
$period = $period . " - " . $translator->trans('reportingPeriod.jan');
} elseif ($item->getPeriodUntil() == 2) {
$period = $period . " - " . $translator->trans('reportingPeriod.feb');
} elseif ($item->getPeriodUntil() == 3) {
$period = $period . " - " . $translator->trans('reportingPeriod.mar');
} elseif ($item->getPeriodUntil() == 4) {
$period = $period . " - " . $translator->trans('reportingPeriod.apr');
} elseif ($item->getPeriodUntil() == 5) {
$period = $period . " - " . $translator->trans('reportingPeriod.may');
} elseif ($item->getPeriodUntil() == 6) {
$period = $period . " - " . $translator->trans('reportingPeriod.jun');
} elseif ($item->getPeriodUntil() == 7) {
$period = $period . " - " . $translator->trans('reportingPeriod.jul');
} elseif ($item->getPeriodUntil() == 8) {
$period = $period . " - " . $translator->trans('reportingPeriod.aug');
} elseif ($item->getPeriodUntil() == 9) {
$period = $period . " - " . $translator->trans('reportingPeriod.sep');
} elseif ($item->getPeriodUntil() == 10) {
$period = $period . " - " . $translator->trans('reportingPeriod.oct');
} elseif ($item->getPeriodUntil() == 11) {
$period = $period . " - " . $translator->trans('reportingPeriod.nov');
} elseif ($item->getPeriodUntil() == 12) {
$period = $period . " - " . $translator->trans('reportingPeriod.dec');
}
$reportData->setPeriod($period);
$reportData->setActive(1);
$em->persist($reportData);
$em->flush();
if ($calculationDB->getOverridePoint() != null)
{
$points[$i] = $calculationDB->getOverridePoint();
} else {
$points[$i] = $calculationDB->getPoint();
}
if ($points[$i] != null)
{
if ($i != 1)
{
$trend = ($points[$i] - $points[$i-1]) / $points[$i-1];
if ($trend != null)
{
$newReport->setTrend($trend);
}
}
}
$func = "setYear" . $i;
$newReport->$func($reportData);
$newReport->setYear($reportData->getYear());
$newReport->setRiskGrade($reportData->getRiskGrade());
$newReport->setRiskGradeZf($reportData->getRiskGradeZf());
$newReport->setSupplier($supplier);
$newReport->setMonths($item->getMonths());
$newReport->setReferenceDate($item->getDeadline());
$newReport->setComment($item->getComment());
$newReport->setEvaluationDate(new \DateTime());
$analyst = $em->getRepository(\App\Entity\User::class)->findOneBy(['short' => $item->getAnalyst()]);
$newReport->setAnalyst($analyst);
$newReport->setAccountingStandard($item->getAccountingStandard());
$newReport->setQuality($item->getQuality());
$newReport->setUnit($item->getUnit());
$newReport->setSalesClass($item->getSalesClass());
$newReport->setPublicityMandatory($supplier->getPublicityMandatory());
$newReport->setDocument($item->getDocument());
$newReport->setEmployees($item->getEmployees());
$newReport->setCurrency($item->getCurrency());
$newReport->setActive(1);
$newReport->setVersion(1);
$i++;
}
}
if ($calculationDB->getAnalysis() != null)
{
$analysis = $em->getRepository(\App\Entity\Analysis::class)->findOneBy(['id' => $calculationDB->getAnalysis()]);
if ($requestedLanguage == 0)
{
$newReport->setCommentAndOutlookAnalysis($analysis->getCommentAndOutlook());
$newReport->setBalanceSheetRelationsAnalysis($analysis->getBalanceSheetRelations());
$newReport->setMarketPositionAndGrowthAnalysis($analysis->getMarketPositionAndGrowth());
$newReport->setDebtRatioAnalysis($analysis->getDebtRatio());
$newReport->setTradeWorkingCapitalAnalysis($analysis->getTradeWorkingCapital());
$newReport->setInvestmentPpeAnalysis($analysis->getInvestmentPpe());
$newReport->setLanguage(0);
} elseif ($requestedLanguage == 1) {
$newReport->setCommentAndOutlookAnalysis($analysis->getCommentAndOutlookDe());
$newReport->setBalanceSheetRelationsAnalysis($analysis->getBalanceSheetRelationsDe());
$newReport->setMarketPositionAndGrowthAnalysis($analysis->getMarketPositionAndGrowthDe());
$newReport->setDebtRatioAnalysis($analysis->getDebtRatioDe());
$newReport->setTradeWorkingCapitalAnalysis($analysis->getTradeWorkingCapitalDe());
$newReport->setInvestmentPpeAnalysis($analysis->getInvestmentPpeDe());
$newReport->setLanguage(1);
}
}
$em->persist($newReport);
$em->flush();
$this->addFlash('success', 'Bericht wurde erfolgreich erstellt');
return $this->redirectToRoute('supplier_view', ['id'=>$supplier->getId()]);
} catch (\Exception $exception) {
$this->addFlash('error', "No Calc for periods");
}
} elseif ($form->getClickedButton()->getName() == 'submitReportPeriod') {
$ids = array();
$i = 1;
$data = $form->all();
$ids['supplierId'] = $supplier->getId();
foreach ($data as $item) {
if (substr($item->getName(), 0, 12) == 'reportPeriod')
{
if ($item->getData() == true)
{
$ids['reportPeriodId'.$i] = $item->getViewData();
$i++;
}
} elseif (substr($item->getName(), 0, 11) == 'calculation')
{
}
}
return $this->redirectToRoute('reportperiod_new', $ids);
} elseif ($form->getClickedButton()->getName() == 'editReportPeriod') {
$ids = array();
$i = 1;
$uri = "";
$data = $form->all();
foreach ($data as $item) {
if (substr($item->getName(), 0, 12) == 'reportPeriod')
{
if ($item->getData() == true)
{
$ids['id'.$i] = $item->getViewData();
$i++;
}
} elseif (substr($item->getName(), 0, 11) == 'calculation')
{
}
}
return $this->redirectToRoute('reportperiod_edit', $ids);
} elseif ($form->getClickedButton()->getName() == 'viewReportPeriod') {
$ids = array();
$i = 1;
$uri = "";
$data = $form->all();
foreach ($data as $item) {
if (substr($item->getName(), 0, 12) == 'reportPeriod')
{
if ($item->getData() == true)
{
$ids['id'.$i] = $item->getViewData();
$i++;
}
} elseif (substr($item->getName(), 0, 11) == 'calculation')
{
}
}
return $this->redirectToRoute('reportperiod_view', $ids);
}
}
if ($scRelationForm->isSubmitted())
{
try {
$number = substr($scRelationForm->getClickedButton()->getName(), 6);
$scRelationForm->getData();
foreach ($customer_supplier as $item)
{
if ($item->getCustomer()->getId() == $number)
{
$item->setSupplierNumber($scRelationForm->get('supplierNumber'.$item->getCustomer()->getId())->getNormData());
$item->setPurchaseVolume($scRelationForm->get('purchaseVolume'.$item->getCustomer()->getId())->getNormData());
$item->setStatus($scRelationForm->get('status'.$item->getCustomer()->getId())->getNormData());
$item->setProductGroups($scRelationForm->get('productGroups'.$item->getCustomer()->getId())->getNormData());
$item->setOpenfield1($scRelationForm->get('openField1'.$item->getCustomer()->getId())->getNormData());
$item->setOpenfield2($scRelationForm->get('openField2'.$item->getCustomer()->getId())->getNormData());
$item->setOpenfield3($scRelationForm->get('openField3'.$item->getCustomer()->getId())->getNormData());
$item->setOpenfield4($scRelationForm->get('openField4'.$item->getCustomer()->getId())->getNormData());
$em->persist($item);
$em->flush();
}
}
$this->addFlash('success', $translator->trans('supplier.csr_update_success'));
return $this->redirectToRoute('supplier_view', ['id' => $supplier->getId()]);
} catch (Exception $exception) {
$this->addFlash('error', $translator->trans('customer.csr_update_error'));
}
}
$documents = $em->getRepository(\App\Entity\DocumentUser::class)->findBy(['supplier' => $supplier]);
$fraDatasheets = $em->getRepository(\App\Entity\FraDataSheet::class)->findBy(['supplier' => $supplier]);
if ($this->getUser()->getCustomer() != null)
{
$releases = $em->getRepository(\App\Entity\ReportRelease::class)->customerViewSupplierReportsGrouped($this->getUser()->getCustomer()->getId(), $supplier->getId());
$reportsCustomerData = array();
foreach ($releases as $release)
{
if ($release['supplier'] == $supplier->getId())
{
if ($userPermissionService->checkSupplierPermission('view_reports', $this->getUser(), $release['supplier']))
{
array_push($reportsCustomerData, $release);
} else if ($userPermissionService->checkUserPermission('view_all_reports', $this->getUser()))
{
array_push($reportsCustomerData, $release);
} else {
}
}
}
} else {
$reportsCustomerData = null;
}
$supplierCustomerRelation = null;
if ($this->getUser()->getCustomer() != null)
{
$userCustomer = $this->getUser()->getCustomer();
$supplierCustomerRelation = $em->getRepository(\App\Entity\CustomerSupplierRelation::class)->findOneBy(['customer' => $userCustomer, 'supplier' => $supplier]);
}
$savedCustomers = array();
if ($formCustomer->isSubmitted())
{
try
{
$number = substr($formCustomer->getClickedButton()->getName(), 6);
$changedUser = $em->getRepository(\App\Entity\User::class)->findOneBy(['id' => $number]);
$customers = $request->request->get('Customers' . $changedUser->getId());
$savedCSRs = array();
if ($customers != null)
{
foreach ($customers as $item)
{
$newCustomer = $em->getRepository(\App\Entity\Customer::class)->findOneBy(['id' => $item]);
$changedCsRelation = $em->getRepository(\App\Entity\CustomerSupplierRelation::class)->findOneBy(['customer' => $newCustomer, 'supplier' => $supplier]);
$changedUser->addCsr($changedCsRelation);
$em->persist($changedUser);
$em->flush();
array_push($savedCSRs, $changedCsRelation);
}
foreach ($oldCSRs as $key => $oldCSR)
{
foreach ($savedCSRs as $item)
{
if ($item == $oldCSR)
{
unset($oldCSRs[$key]);
}
}
}
if (!empty($oldCSRs))
{
foreach ($oldCSRs as $oldCSR)
{
$changedUser->removeCsr($oldCSR);
$em->persist($changedUser);
$em->flush($changedUser);
}
}
} else {
foreach ($changedUser->getCsr() as $item)
{
$changedUser->removeCsr($item);
}
}
$em->persist($changedUser);
$em->flush();
$this->addFlash('success', $translator->trans('supplier.addCustomer_success'));
return $this->redirectToRoute('supplier_view', ['id' => $supplier->getId()]);
} catch (\Exception $exception) {
$this->addFlash('error', $translator->trans('supplier.addCustomer_error'));
}
}
}
return $this->render('supplier/view.html.twig', [
'supplier' => $supplier,
'reportPeriods' => $reportPeriods,
'customers' => $customer,
'form' => $form->createView(),
'address' => $address,
'contactPerson' => $newUserList,
'scRelations' => $customer_supplier,
'scRelationForm' => $scRelationForm->createView(),
'calculations' => $calculations,
'invoiceAddress' => $invoiceAddress,
'documents' => $documents,
'fradatasheets' => $fraDatasheets,
'invoiceList' => $invoicelist,
'parentCompanys' => $parentCompanys,
'subsidiaryCompanys' => $subsidiaryCompanys,
'reportsCustomerData' => $reportsCustomerData,
'reports' => $reports,
'supplierCustomerRelation' => $supplierCustomerRelation,
'helpdesk' => $helpdesk,
'formCustomer' => $formCustomer->createView(),
]);
}
/**
* @Route("/deactivate/{id}", name="supplier_deactivate")
* @param $customer
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function deactivateAction(TranslatorInterface $translator, LoggerInterface $logger, $id, Request $request)
{
$em = $this->doctrine->getManager();
$supplier = $em->getRepository(Supplier::class)->findOneBy(['id' => $id]);
if (!$supplier) {
$this->addFlash('error', $translator->trans('supplier.not_exist'));
return $this->redirectToRoute('supplier_index');
}
try {
$supplier->setActive(0);
$em->persist($supplier);
$em->flush();
$this->addFlash('success', $translator->trans('supplier.deactivate_success'));
$this->dbLogger->info('Deactivate supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $this->getUser()->getSupplier() != null ?: $this->getUser()->getSupplier(),
'other' => $supplier,
'route' => $request->get('_route')
]);
} catch (\Exception $exception) {
$this->addFlash('error', $translator->trans('supplier.deactivate_error'));
$logger->error('Error while deactivate Supplier', ['e' => $exception]);
$this->dbLogger->error('Error when deactivating supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $this->getUser()->getSupplier() != null ?: $this->getUser()->getSupplier(),
'other' => $supplier,
'route' => $request->get('_route'),
'error' => $exception
]);
}
return $this->redirectToRoute('supplier_index');
}
/**
* @Route("/activate/{id}", name="supplier_activate")
* @param $customer
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function activateAction(TranslatorInterface $translator, LoggerInterface $logger, $id, Request $request)
{
$em = $this->doctrine->getManager();
$supplier = $em->getRepository(Supplier::class)->findOneBy(['id' => $id]);
if (!$supplier) {
$this->addFlash('error', $translator->trans('supplier.not_exist'));
return $this->redirectToRoute('supplier_index');
}
// if ($supplier->getTemporary() == 1) // TODO we should talk about this
// {
// $contactPersons = $supplier->getUser()->getValues();
// foreach ($contactPersons as $contactPerson)
// {
// $userAlreadyExist = $em->getRepository(\App\Entity\User::class)->findOneBy(['email' => $contactPerson->getEmail()]);
// $this->addFlash('error', $translator->trans('supplier.user_already_exist') . $userAlreadyExist->getEmail());
// }
// return $this->redirectToRoute('supplier_index');
// }
try {
$supplier->setActive(1);
$supplier->setTemporary(0);
$em->persist($supplier);
$em->flush();
$this->addFlash('success', $translator->trans('supplier.activate_success'));
$this->dbLogger->info('Activate supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $this->getUser()->getSupplier() != null ?: $this->getUser()->getSupplier(),
'other' => $supplier,
'route' => $request->get('_route')
]);
} catch (\Exception $exception) {
$this->addFlash('error', $translator->trans('supplier.activate_error'));
$logger->error('Error while activate Supplier', ['e' => $exception]);
$this->dbLogger->error('Error when activating supplier', [
'user' => $this->getUser(),
'customer' => $this->getUser()->getCustomer() != null ?: $this->getUser()->getCustomer(),
'supplier' => $this->getUser()->getSupplier() != null ?: $this->getUser()->getSupplier(),
'other' => $supplier,
'route' => $request->get('_route'),
'error' => $exception
]);
}
return $this->redirectToRoute('supplier_index');
}
/**
* @Route("/changeAllocatedSupplier", name="supplier_changeAllocatedSupplier", methods={"POST"})
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function changeAllocatedSupplier(Request $request, TranslatorInterface $translator)
{
$this->denyAccessUnlessGranted('ROLE_SUPPLIER', null, $translator->trans('error.not_permitted'));
$em = $this->doctrine->getManager();
$selectedSupplier = $em->getRepository(Supplier::class)->findOneBy(['id' => $request->get('supplier')]);
$user = $this->getUser();
if (in_array($selectedSupplier, $user->getUserSupplierList()->getValues()))
{
$user->setSupplier($selectedSupplier);
$em->persist($user);
$em->flush();
} else {
$this->addFlash('warning', $translator->trans('not_permitted'));
}
return $this->redirectToRoute('homepage');
}
}