<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Forms\Admin\AdminUserForm;
use App\Helpers\InvoicesHelper;
use App\Helpers\PreordersHelper;
use App\Helpers\EmailHelper;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\Invoices;
use App\Entity\InvoicesPayers;
use App\Entity\Reminders;
use Symfony\Component\String\Slugger\SluggerInterface;
use Knp\Component\Pager\PaginatorInterface;
use App\Managements\SettingsManagement;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Managements\InvoicesManagement;
use App\Forms\Admin\AdminInvoiceForm;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Doctrine\DBAL\Driver\Connection;
use App\Entity\Users;
use App\Managements\PreordersManagement;
use App\Managements\Logs as LogsManagement;
use App\Helpers\Logs as LogsHelper;
use App\Managements\PayersManagement;
class AdminInvoicesController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(
SluggerInterface $slugger,
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage,
TranslatorInterface $translator,
PayersManagement $payersManagement,
// $activeMenuParent = 'admin_invoices'
) {
$this->slugger = $slugger;
$this->translator = $translator;
$this->tokenStorage = $tokenStorage;
$this->entityManager = $entityManager;
$this->activeMenuParent = 'admin_invoices';
$this->ordering = array();
$this->filters = array();
$this->incompletePayers = $payersManagement->loadIncomplete();
(!isset($_SESSION['accessModules'])) ? $_SESSION['accessModules'] = [] : '';
}
/**
* @Route("/admin/faktury-old", name="admin_invoices_old")
*/
public function old_index(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
InvoicesHelper $invoicesHelper,
EmailHelper $emailHelper,
PaginatorInterface $paginator,
Request $request
) {
if ($this->getUser()) {
$access = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array("email" => $this->getUser()->getEmail()))->getAccessModules();
$_SESSION['accessModules'] = explode(",", $access);
}
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$summary = 0;
$title = 'Lista faktur';
$searchForm = $this->invoicesFilterForm();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$this->filters['status'] = 'active';
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
// dd($items);
//UPDATE `invoices` SET `number_int`=REPLACE(`number`, '/','') WHERE `number_int` IS NULL;
$items = $invoicesHelper->prepareForListing($items);
foreach ($items as $item) {
$summary = $summary + $item['value'];
}
// dump($items);
$items = $paginator->paginate($items, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters['deadline'] = 1;
$this->filters['sorting'] = 'deadline';
$items1 = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items1 = $invoicesHelper->prepareForListing($items1);
$items1 = $paginator->paginate($items1, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters = array();
return $this->render('Admin/Invoices/list.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'searchForm' => $searchForm->createView(),
'items' => $items,
'items1' => $items1,
'summary' => $summary
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury", name="admin_invoices")
*/
public function index(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
InvoicesHelper $invoicesHelper,
EmailHelper $emailHelper,
PaginatorInterface $paginator,
Request $request
) {
if ($this->getUser()) {
$access = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array("email" => $this->getUser()->getEmail()))->getAccessModules();
$_SESSION['accessModules'] = explode(",", $access);
}
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$summary = 0;
$title = 'Lista faktur';
$searchForm = $this->invoicesFilterForm();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$this->filters['status'] = 'active';
$this->filters['opcjonalne'] = false;
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
// dd($items);
//UPDATE `invoices` SET `number_int`=REPLACE(`number`, '/','') WHERE `number_int` IS NULL;
$items = $invoicesHelper->prepareForListing2($items);
foreach ($items as $item) {
$summary = $summary + $item['value'];
}
dump($items);
$items = $paginator->paginate($items, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters['deadline'] = 1;
$this->filters['sorting'] = 'deadline';
$items1 = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items1 = $invoicesHelper->prepareForListing2($items1);
$items1 = $paginator->paginate($items1, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters = array();
return $this->render('Admin/Invoices/listing.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'searchForm' => $searchForm->createView(),
'items' => $items,
'items1' => $items1,
'summary' => $summary
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury-opcjonalne", name="admin_invoices_opt")
*/
public function index_opt(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
InvoicesHelper $invoicesHelper,
EmailHelper $emailHelper,
PaginatorInterface $paginator,
Request $request
) {
if ($this->getUser()) {
$access = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array("email" => $this->getUser()->getEmail()))->getAccessModules();
$_SESSION['accessModules'] = explode(",", $access);
}
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$summary = 0;
$title = 'Lista faktur opcjonalnych';
$searchForm = $this->invoicesFilterForm();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$this->filters['status'] = 'active';
$this->filters['opcjonalne'] = true;
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
// dd($items);
//UPDATE `invoices` SET `number_int`=REPLACE(`number`, '/','') WHERE `number_int` IS NULL;
$items = $invoicesHelper->prepareForListing2($items);
foreach ($items as $item) {
$summary = $summary + $item['value'];
}
// dump($items);
$items = $paginator->paginate($items, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters['deadline'] = 1;
$this->filters['sorting'] = 'deadline';
$items1 = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items1 = $invoicesHelper->prepareForListing2($items1);
$items1 = $paginator->paginate($items1, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters = array();
return $this->render('Admin/Invoices/listing.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'searchForm' => $searchForm->createView(),
'items' => $items,
'items1' => $items1,
'summary' => $summary
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury/subiekt", name="admin_subiekt_invoices")
*/
public function subiekt(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
InvoicesHelper $invoicesHelper,
EmailHelper $emailHelper,
PaginatorInterface $paginator,
Request $request
) {
if ($this->getUser()) {
$access = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array("email" => $this->getUser()->getEmail()))->getAccessModules();
$_SESSION['accessModules'] = explode(",", $access);
}
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$summary = 0;
$title = 'Faktury z importu Subiekt';
$searchForm = $this->invoicesFilterForm2();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$this->filters['status'] = 'subiekt';
$this->filters['sorting'] = 'number';
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items = $invoicesHelper->prepareForListing($items);
foreach ($items as $item) {
$summary = $summary + $item['value'];
}
$items = $paginator->paginate($items, $request->query->getInt('page', 1), 100);
$this->filters['deadline'] = 1;
$this->filters['sorting'] = 'deadline';
$items1 = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items1 = $invoicesHelper->prepareForListing($items1);
$items1 = $paginator->paginate($items1, $request->query->getInt('page', 1), 100);
$this->filters = array();
return $this->render('Admin/Invoices/subiekt-list.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'source' => 'subiekt',
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'searchForm' => $searchForm->createView(),
'items' => $items,
'items1' => $items1,
'summary' => $summary
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury/fakturownia", name="admin_fakturownia_invoices")
*/
public function fakturownia(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
InvoicesHelper $invoicesHelper,
EmailHelper $emailHelper,
PaginatorInterface $paginator,
Request $request
) {
if ($this->getUser()) {
$access = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array("email" => $this->getUser()->getEmail()))->getAccessModules();
$_SESSION['accessModules'] = explode(",", $access);
}
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$summary = 0;
$title = 'Faktury z importu Fakturownia';
$searchForm = $this->invoicesFilterForm2();
$searchForm->handleRequest($request);
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
$this->filters = $searchForm->getData();
}
$this->filters['status'] = 'fakturownia';
$this->filters['sorting'] = 'number';
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items = $invoicesHelper->prepareForListing($items);
foreach ($items as $item) {
$summary = $summary + $item['value'];
}
$items = $paginator->paginate($items, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filters['deadline'] = 1;
$this->filters['sorting'] = 'deadline';
$items1 = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items1 = $invoicesHelper->prepareForListing($items1);
$items1 = $paginator->paginate($items1, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
$this->filtedrs = array();
return $this->render('Admin/Invoices/subiekt-list.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'source' => 'fakturownia',
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'searchForm' => $searchForm->createView(),
'items' => $items,
'items1' => $items1,
'summary' => $summary
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/prognozy", name="admin_forecasts")
*/
public function forecasts(
InvoicesManagement $invoicesManagement,
SettingsManagement $settingsManagement,
PreordersManagement $preordersManagement,
InvoicesHelper $invoicesHelper,
PreordersHelper $preordersHelper,
PaginatorInterface $paginator,
Request $request
) {
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$title = 'Prognozy';
$items = $invoicesManagement->load(null, $this->filters, $this->ordering);
$items = $invoicesHelper->prepareForecastsForListing($items);
$total = $preorders_total = $forecast_sum = 0.00;
$sum = $preorders_sum = 0;
foreach ($items as $item) {
$total = $total + $item['value'];
$sum++;
}
$preorders = $preordersManagement->load(null, array("status" => 'active'), $this->ordering);
$preorders = $preordersHelper->prepareForecastsForListing($preorders);
foreach ($preorders as $forecast_nr => $forecast) {
$forecast_sum = 0.00;
// dump($forecast);
foreach ($forecast as $trans) {
$value = @$this->toFloat(($trans));
$forecast_sum = $forecast_sum + $value;
$preorders_total = $preorders_total + $value;
$preorders_sum++;
}
$preorders[$forecast_nr] = number_format($forecast_sum, 2, ',', ' ');
}
// die();
$preorders_total = number_format($preorders_total, 2, ',', ' ');
// dump($preorders);die();
$items = $paginator->paginate($items, $request->query->getInt('page', 1), $settingsManagement->value('itemsPerDashboardPage'));
return $this->render('Admin/Invoices/forecasts.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'items' => $items,
'total' => $total,
'sum' => $sum,
'preorders' => $preorders,
'preorders_total' => $preorders_total,
'preorders_sum' => $preorders_sum
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
private function toFloat($number)
{
$floated = 0.00;
$value = str_replace(' ', '', $number);
// dump($value);
$value = preg_replace('/\s+/', '', $value);
// dump($value);
$value = str_replace(',', '.', $value);
// dump($value);
// $value = number_format($value, 2, '.', '');
$floated += $value;
return $floated;
}
/**
* @Route("/admin/faktury/edytuj/{id}", name="admin_edit_invoice")
*/
public function edit(
$id,
InvoicesManagement $invoicesManagement,
LogsManagement $logsManagement,
InvoicesHelper $invoicesHelper,
Request $request
) {
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$item = $invoicesManagement->load($id, null, null);
if ($item->getStatus() == 'fakturownia') {
$urlredirect = 'admin_fakturownia_invoices';
}
if ($item->getStatus() == 'subiekt') {
$urlredirect = 'admin_subiekt_invoices';
}
if ($item->getStatus() == 'active') {
$urlredirect = 'admin_invoices';
}
$title = 'Faktura ' . $item->getNumber();
$form = $this->createForm(AdminInvoiceForm::class, $item);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$service = '';
$item = $form->getData();
$item->setStatus($item->getStatus());
$item->setNumberInt(intval(str_replace('/', '', $item->getNumber())));
if ($item->getPozycjonowanie() == 1) {
$service .= 'Pozycjonowanie, ';
}
if ($item->getGads() == 1) {
$service .= 'Google Ads, ';
}
if ($item->getFads() == 1) {
$service .= 'Facebook Ads, ';
}
if ($item->getOpinie() == 1) {
$service .= 'Opinie, ';
}
if ($item->getReklama() == 1) {
$service .= 'Działania reklamowe, ';
}
if ($item->getDomena() == 1) {
$service .= 'Domena, ';
}
if ($item->getHosting() == 1) {
$service .= 'Hosting, ';
}
if ($item->getSslt() == 1) {
$service .= 'SSL, ';
}
if ($item->getRata() == 1) {
$service .= 'WWW Rata, ';
}
if ($item->getPrototyp() == 1) {
$service .= 'WWW Prototyp, ';
}
if ($item->getGrafika() == 1) {
$service .= 'WWW Grafika, ';
}
if ($item->getProgramowanie() == 1) {
$service .= 'WWW Programowanie, ';
}
if ($item->isPraceProgramistyczne() == 1) {
$service .= 'Prace Programistyczne, ';
}
if ($item->getAktualizacja() == 1) {
$service .= 'Aktualizacja, ';
}
if ($item->getOpieka() == 1) {
$service .= 'Opieka, ';
}
if ($item->isOpiekaWizytowka() == 1) {
$service .= 'Opieka nad wizytówką, ';
}
if ($item->getArchiwizacja() == 1) {
$service .= 'Archiwizacja, ';
}
if ($item->getId() >= 715) {
$item->setService($service);
}
$item->setGrossValue(str_replace(',', '.', $item->getGrossValue()));
// dump($item);
// die();
$item->setCustomerPrio($item->getCustomerPrio());
$item->setCreatedDate(new \DateTime());
('active');
if (!is_null($item->getClient())) {
$oldPayer = $this->getDoctrine()->getRepository(InvoicesPayers::class)->FindOneBy(array('invoice' => $item));
$this->entityManager->remove($oldPayer);
$this->entityManager->flush();
$payer = $invoicesManagement->loadPayer($item->getClient(), null, null);
$clientData = array(
"name" => $payer->getName(),
"email" => $payer->getEmail(),
"phone" => $payer->getPhone(),
"notify" => $payer->getNotify(),
"description" => $payer->getDescription(),
"invoice" => $item
);
$invoicesManagement->createPayer($clientData);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
$this->addFlash('success', $this->translator->trans('Success updated'));
$item = $invoicesHelper->prepareInvoiceDetails($item);
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Edycja faktury - [" . $item['symbol'] . "]" . $item['number'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return $this->redirectToRoute($urlredirect);
}
$item = $invoicesHelper->prepareInvoiceDetails($item);
$reminds = array();
// if(isset($item['payer'])){
$reminders = $this->getDoctrine()->getRepository(Reminders::class)->FindBy(array('client' => $item['payer']->getId()));
foreach ($reminders as $remind) {
$name = "SMS";
if ($remind->getType() == "2") {
$name = "E-mail";
}
$reminds[] = array(
'createdDate' => date_format($remind->getCreatedDate(), 'd-m-Y'),
'name' => $name
);
}
// }
return $this->render('Admin/Invoices/details.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'item' => $item,
'reminders' => $reminds,
'form' => $form->createView(),
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury/klonuj/{id}", name="admin_clone_invoice")
*/
public function clone(
$id,
InvoicesManagement $invoicesManagement,
LogsManagement $logsManagement,
InvoicesHelper $invoicesHelper,
Request $request
) {
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$origin = $invoicesManagement->load($id, null, null);
$item = new Invoices();
$item->setId(null);
$item->setNumber($origin->getNumber() . '-Kopia');
$item->setStatus('active');
$item->setCustomerPrio($origin->getCustomerPrio());
$item->setCreatedDate(new \DateTime());
$item->setBillDate($origin->getBillDate());
$item->setDueDate($origin->getDueDate());
$item->setForecast($origin->getForecast());
$item->setCompany($origin->getCompany());
$item->setDeadlineNote($origin->getDeadlineNote());
$item->setService($origin->getService());
$item->setGrossValue($origin->getGrossValue());
$item->setType($origin->getType());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
foreach ($origin->getPayer() as $payer) {
$payer = $invoicesManagement->loadInvoicePayer($payer->getId(), null, null);
$clientData = array(
"name" => $payer->getName(),
"email" => $payer->getEmail(),
"phone" => $payer->getPhone(),
"notify" => $payer->getNotify(),
"description" => $payer->getDescription(),
"invoice" => $item
);
$invoicesManagement->createPayer($clientData);
}
$item = $invoicesHelper->prepareInvoiceDetails($item);
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Sklonowanie faktury ID - " . $origin->getId() . " do pozycji - [" . $item['symbol'] . "]" . $item['number'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return $this->redirectToRoute('admin_invoices');
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
/**
* @Route("/admin/faktury/dodaj", name="admin_add_invoice")
*/
public function add(
InvoicesManagement $invoicesManagement,
InvoicesHelper $invoicesHelper,
LogsManagement $logsManagement,
Request $request
) {
if (in_array($this->activeMenuParent, $_SESSION['accessModules'])) {
$title = "Dodaj fakturę";
$item = new Invoices();
$item->setNumber(date_format(new \DateTime(), '/m/Y'));
$item->setBillDate(new \DateTime());
$date = date_format($item->getBillDate(), 'd-m-Y');
$billDate = date('d-m-Y', strtotime($date . ' + 7 days'));
$item->setDueDate(new \DateTime($billDate));
$form = $this->createForm(AdminInvoiceForm::class, $item);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$service = '';
$item = $form->getData();
if ($item->getPozycjonowanie() == 1) {
$service .= 'Pozycjonowanie, ';
}
if ($item->getGads() == 1) {
$service .= 'Google Ads, ';
}
if ($item->getFads() == 1) {
$service .= 'Facebook Ads, ';
}
if ($item->getOpinie() == 1) {
$service .= 'Opinie, ';
}
if ($item->getReklama() == 1) {
$service .= 'Działania reklamowe, ';
}
if ($item->getDomena() == 1) {
$service .= 'Domena, ';
}
if ($item->getHosting() == 1) {
$service .= 'Hosting, ';
}
if ($item->getSslt() == 1) {
$service .= 'SSL, ';
}
if ($item->getRata() == 1) {
$service .= 'WWW Rata, ';
}
if ($item->getPrototyp() == 1) {
$service .= 'WWW Prototyp, ';
}
if ($item->getGrafika() == 1) {
$service .= 'WWW Grafika, ';
}
if ($item->getProgramowanie() == 1) {
$service .= 'WWW Programowanie, ';
}
if ($item->isPraceProgramistyczne() == 1) {
$service .= 'Prace Programistyczne, ';
}
if ($item->getAktualizacja() == 1) {
$service .= 'Aktualizacja, ';
}
if ($item->getOpieka() == 1) {
$service .= 'Opieka, ';
}
if ($item->isOpiekaWizytowka() == 1) {
$service .= 'Opieka nad wizytówką, ';
}
if ($item->getArchiwizacja() == 1) {
$service .= 'Archiwizacja, ';
}
if ($item->getLogo() == 1) {
$service .= 'Logo, ';
}
if ($item->getIdentyfikacja() == 1) {
$service .= 'Identyfikacja, ';
}
if ($item->getPgraficzne() == 1) {
$service .= 'Projekty graficzne, ';
}
if ($item->getInne() == 1) {
$service .= 'Inne, ';
}
$item->setService($service);
$item->setNumberInt(intval(str_replace('/', '', $item->getNumber())));
$item->setStatus('active');
$item->setCustomerPrio('neutral');
$item->setCreatedDate(new \DateTime());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
$clientntity = $invoicesManagement->loadPayer(intVal($item->getClient()), array(), array());
$clientData = array(
"name" => $clientntity->getName(),
"email" => $clientntity->getEmail(),
"phone" => $clientntity->getPhone(),
"notify" => $clientntity->getNotify(),
"description" => $clientntity->getDescription(),
"invoice" => $item
);
$taxnumber = ($request->request->all()['taxnumber']) ? $request->request->all()['taxnumber'] : '';
($taxnumber) ? $clientData['tax_number'] = $taxnumber : '';
$invoicesManagement->createPayer($clientData);
//$item = $invoicesHelper->prepareInvoiceDetails($item);
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Utworzenie faktury ID - " . $item->getId(),
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
$this->addFlash('success', $this->translator->trans('Success created'));
return $this->redirectToRoute('admin_invoices');
}
// die();
return $this->render('Admin/Invoices/add.html.twig', [
'accessModules' => $_SESSION['accessModules'],
'incompletePayers' => $this->incompletePayers,
'title' => $title,
'activeMenuParent' => $this->activeMenuParent,
'item' => $item,
'form' => $form->createView(),
]);
} else {
return $this->redirectToRoute($_SESSION['accessModules'][0]);
}
}
function invoicesFilterForm2($fields = null)
{
$form = $this->createFormBuilder();
$form = $form->add('name', TextType::class, [
'required' => false,
'label' => 'Type tekst',
'label_attr' => ['class' => 'form-label'],
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control pull-left'
]
]);
$form = $form->add('forecast', ChoiceType::class, [
'label' => "Prognoza",
'choices' => array(
'Wszystkie' => null,
'0 dni - nie zapłacą' => 0,
'1 dni - zapłacone' => 1,
'3 dni' => 3,
'7 dni' => 7,
'10 dni' => 10,
'14 dni' => 14,
'21 dni' => 21,
'30 dni - w kolejnym miesiącu' => 30,
'60 dni - status niepewny' => 60,
// 'Nie uwzględniaj' => 111,
'Opcjonalne' => 888,
'Nie przypominaj' => 999
),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control'
]
]);
$form = $form->add('company', ChoiceType::class, [
'label' => "Wystawca",
'choices' => array(
'-Wybierz-' => null,
'GOT' => 'GOT',
'JDG' => 'JDG',
'ZOO' => 'ZOO'
),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control'
]
]);
$form = $form->add('type', ChoiceType::class, [
'label' => 'Typ',
'choices' => [
'-Wybierz-' => null,
'PROFORMA' => 1,
'FVAT' => 2,
'NOTA KSIĘGOWA' => 3,
'GOTÓWKA' => 4
],
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control select2'
]
]);
$form = $form->add('dateFrom', DateType::class, [
'label' => 'Od',
'widget' => 'single_text',
'required' => false,
'format' => 'yyyy-MM-dd',
'attr' => [
// 'value' => date_format(new \DateTime(), 'Y-m-d'),
'class' => 'form-control'
]
]);
$form = $form->add('dateTo', DateType::class, [
'label' => 'Do',
'widget' => 'single_text',
'required' => false,
'format' => 'yyyy-MM-dd',
'attr' => [
'class' => 'form-control'
]
]);
// $form = $form->add('got', CheckboxType::class, [
// 'label' => 'GOT',
// 'required' => false,
// 'attr' => ['class' => 'basicBox']
// ]);
// $form = $form->add('jdg', CheckboxType::class, [
// 'label' => 'JDG',
// 'required' => false,
// 'attr' => ['class' => 'basicBox']
// ]);
// $form = $form->add('zoo', CheckboxType::class, [
// 'label' => 'ZOO',
// 'required' => false,
// 'attr' => ['class' => 'basicBox']
// ]);
$form = $form->add('sorting', ChoiceType::class, [
'label' => "Sortowanie",
'choices' => array(
'Klient A-Z' => 'client',
'Numer 1-N' => 'number'
),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control'
]
]);
$form = $form->add('save', SubmitType::class, [
'label' => 'Search',
'attr' => [
'style' => 'height: 50px',
'class' => 'btn btn-theme w-100'
]
]);
$form = $form->getForm();
return $form;
}
function getForecasts()
{
$response = [
'Wszystkie' => null,
'0 dni - nie zapłacą' => 0,
'1 dni - zapłacone' => 1,
'3 dni' => 3,
'7 dni' => 7,
'10 dni' => 10,
'14 dni' => 14,
'21 dni' => 21,
'30 dni - w kolejnym miesiącu' => 30,
'60 dni - status niepewny' => 60,
// 'Nie uwzględniaj' => 111,
'Opcjonalne' => 888,
'Nie przypominaj' => 999
];
return $response;
}
function invoicesFilterForm($fields = null)
{
$form = $this->createFormBuilder();
$form = $form->add('name', TextType::class, [
'required' => false,
'label' => 'Type tekst',
'label_attr' => ['class' => 'form-label'],
'attr' => [
'style' => 'height: 50px',
'class' => 'form-control pull-left'
]
]);
$form = $form->add('forecast', ChoiceType::class, [
'label' => "Prognoza",
'choices' => $this->getForecasts(),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-select'
]
]);
$form = $form->add('company', ChoiceType::class, [
'label' => "Wystawca",
'choices' => array(
'-Wybierz-' => null,
'GOT' => 'GOT',
'JDG' => 'JDG',
'ZOO' => 'ZOO'
),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-select'
]
]);
$form = $form->add('type', ChoiceType::class, [
'label' => 'Typ',
'choices' => [
'-Wybierz-' => null,
'PROFORMA' => 1,
'FVAT' => 2,
'NOTA KSIĘGOWA' => 3,
'GOTÓWKA' => 4
],
'attr' => [
'style' => 'height: 50px',
'class' => 'form-select select2'
]
]);
$form = $form->add('dateFrom', DateType::class, [
'label' => 'Od',
'widget' => 'single_text',
'required' => false,
'format' => 'yyyy-MM-dd',
'attr' => [
'style' => 'height: 50px',
'class' => 'mt-2 form-control'
]
]);
$form = $form->add('dateTo', DateType::class, [
'label' => 'Do',
'widget' => 'single_text',
'required' => false,
'format' => 'yyyy-MM-dd',
'attr' => [
'style' => 'height: 50px',
'class' => 'mt-2 form-control'
]
]);
$form = $form->add('sorting', ChoiceType::class, [
'label' => "Sortowanie",
'choices' => array(
'Klient A-Z' => 'client',
'Numer 1-N' => 'number'
),
'attr' => [
'style' => 'height: 50px',
'class' => 'form-select'
]
]);
$form = $form->add('save', SubmitType::class, [
'label' => 'Search',
'attr' => [
'style' => 'height: 50px',
'class' => 'btn btn-theme w-100'
]
]);
$form = $form->getForm();
return $form;
}
/**
* @Route("/admin/faktury/usun", methods="POST")
*/
function remove(
Request $request,
LogsManagement $logsManagement,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if (isset($requestContent['source'])) {
if ($invoicesManagement->removAllFrom($requestContent['source'])) {
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
} else {
if ($invoicesManagement->remove($requestContent['id'])) {
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Kasowanie faktury ID - " . $requestContent['id'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
}
/**
* @Route("/admin/faktury/akceptuj", methods="POST")
*/
function accept(
Request $request,
LogsManagement $logsManagement,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->accept($requestContent['id'])) {
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Akceptacja faktury ID - " . $requestContent['id'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/faktury/prognozuj", methods="POST")
*/
function changeForecast(
Request $request,
LogsManagement $logsManagement,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->changeForecast($requestContent['id'], $requestContent['value'])) {
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Zmiana prognozy dla faktury ID - " . $requestContent['id'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/faktury/zmien-wystawce", methods="POST")
*/
function changeCompany(
Request $request,
LogsManagement $logsManagement,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->changeCompany($requestContent['id'], $requestContent['value'])) {
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Zmiana wystawcy dla faktury ID - " . $requestContent['id'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/faktury/add-position", methods="POST")
*/
function addPosition(
Request $request,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->addPosition($requestContent['id'], $requestContent['name'], $requestContent['deadline'])) {
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/faktury/remove-position", methods="POST")
*/
function removePosition(
Request $request,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->removePosition($requestContent['id'])) {
return new JsonResponse(['message' => $this->translator->trans('Success removed')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/faktury/zmien-kolor", methods="POST")
*/
function changeCustomerPrio(
Request $request,
LogsManagement $logsManagement,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
if ($invoicesManagement->changeCustomerPrio($requestContent['id'], $requestContent['value'])) {
$data = array(
"user" => $this->tokenStorage->getToken()->getUser()->getEmail(),
"path" => $request->getPathInfo(),
"action" => "Zmiana koloru dla faktury ID - " . $requestContent['id'],
"ip" => $request->getClientIp()
);
$logsManagement->createPanelEntry($data);
return new JsonResponse(['message' => $this->translator->trans('Success updated')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse([], JsonResponse::HTTP_CONFLICT);
}
}
/**
* @Route("/admin/invoice/check-num", methods="POST")
*/
function checkNum(
Request $request,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
$this->filters = array("number" => $requestContent['number'], "company" => $requestContent['company']);
$item = $invoicesManagement->load(null, $this->filters, $this->ordering);
if (empty($item)) {
return new JsonResponse(['isset' => false], JsonResponse::HTTP_OK);
} else {
return new JsonResponse(['isset' => true], JsonResponse::HTTP_OK);
}
}
/**
* @Route("/admin/faktury/ponaglenie1", methods="POST")
*/
function notify1(
Request $request,
InvoicesHelper $invoicesHelper,
InvoicesManagement $invoicesManagement
) {
$requestContent = json_decode($request->getContent(), true);
$invoice = $invoicesManagement->load($requestContent['id'], array(), array());
$invoice = $invoicesHelper->prepareInvoiceDetails($invoice);
$tel = $invoice['payer']->getPhone();
// $tel = '602850051';
// dump($tel);
// die();
// $tel = '727964646';
$value = $invoice['grossValue'];
$invoiceNumber = $invoice['number'];
if ($invoice['type'] == "4") {
$invoiceNumber = $invoice['service'];
$item = "usługi";
} else {
$invoiceNumber = $invoice['number'];
$item = "dokumentu";
}
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
'dbname' => 'gdbsmeskom31',
'user' => 'dbguser24911',
'password' => '4zkwNhjM',
'host' => 'mysql1.smeskom.pl',
'driver' => 'pdo_mysql',
'charset' => 'utf8mb4'
);
if ($tel != '' && !is_null($tel)) {
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
$sql = "INSERT INTO sms_out (send_after, msisdn, body) VALUES('', '" . $tel . "', 'Przypominamy o opłaceniu " . $item . " " . $invoiceNumber . " na kwotę " . $value . " zł netto. Prosimy o uregulowanie należności. Pozdrawamy serdecznie FREELINE.')";
try {
$conn->query($sql);
$remind = new Reminders();
$remind->setCreatedDate(new \DateTime());
$remind->setType('1');
$remind->setClient($invoice['payer']->getId());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($remind);
$entityManager->flush();
} catch (FileException $e) {
}
$invoicesManagement->setSum($requestContent['id'], $invoice['smsSum'] + 1, 1);
return new JsonResponse(['message' => $this->translator->trans('Success sended SMS')], JsonResponse::HTTP_OK);
} else {
return new JsonResponse(['message' => $this->translator->trans('Empty phone number')], JsonResponse::HTTP_OK);
}
}
/**
* @Route("/admin/faktury/ponaglenie2", methods="POST")
*/
function notify2(
Request $request,
InvoicesHelper $invoicesHelper,
InvoicesManagement $invoicesManagement,
EmailHelper $emailHelper
) {
$template = "notify2";
$requestContent = json_decode($request->getContent(), true);
$invoice = $invoicesManagement->load($requestContent['id'], array(), array());
$invoice = $invoicesHelper->prepareInvoiceDetails($invoice);
$value = $invoice['grossValue'];
if ($invoice['type'] == "4") {
$invoiceNumber = $invoice['service'];
$template = "notify2g";
} else {
$invoiceNumber = $invoice['number'];
}
$clientEmail = $invoice['payer']->getEmail();
// $clientEmail = 'piotr@freeline.pl,piotr.ostrzyzek@gmail.com';
// $clientEmail = 'marek.szmit@freeline.pl';
$formData = array(
'invoiceNumber' => $invoiceNumber,
'invoiceTotal' => $value,
'clientName' => 'Paweł',
'clientEmail' => $clientEmail,
'subject' => 'WAŻNE - upłynął termin płatności dokumentu | Freeline',
'fromEmail' => 'Rozliczenia | Freeline Agencja Interaktywna <rozliczenia@freeline.pl>',
'bcc' => 'ponaglenia@freeline.pl'
);
try {
$emailHelper->sendEmail($formData, $template);
$remind = new Reminders();
$remind->setCreatedDate(new \DateTime());
('active');
$remind->setType('2');
$remind->setClient($invoice['payer']->getId());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($remind);
$entityManager->flush();
} catch (FileException $e) {
}
$invoicesManagement->setSum($requestContent['id'], $invoice['emailSum'] + 1, 2);
return new JsonResponse(['message' => $this->translator->trans('Success sended E-mail')], JsonResponse::HTTP_OK);
}
/**
* @Route("/admin/faktury/usun-statusy", methods="GET", name="admin_dump_all_invoices")
*/
function dumpAllStatuses()
{
$items = $this->entityManager->getRepository(Invoices::class)->findBy(['customerPrio' => 'niebieski']);
foreach ($items as $item) {
$item->setCustomerPrio('neutralny');
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($item);
$entityManager->flush();
}
return $this->redirectToRoute('admin_invoices');
}
}