<?php
namespace App\Controller\Admin\Stock;
use App\Entity\BuyInTurkey;
use App\Entity\Product;
use App\Form\BuyingTurkeyType;
use App\Services\BuyInTurkey\BuyInTurkeyService;
use App\Utils\CurrencyHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class BuyingInTurkeyController extends AbstractController
{
private BuyInTurkeyService $buyInTurkeyService;
private EntityManagerInterface $entityManager;
/**
* @param EntityManagerInterface $entityManager
*/
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
#[Route('/buying/in/turkey', name: 'app_buying_in_turkey')]
public function index(Request $request): Response
{
return $this->render('admin/buying_in_turkey/index.html.twig');
}
#[Route('//buying-in-turkey/delete/{id}')]
public function delete(Request $request, $id)
{
$entity = $this->entityManager->getRepository(BuyInTurkey::class)->find($id);
$this->entityManager->remove($entity);
$this->entityManager->flush();
$this->addFlash('success', 'Türkiye alış başarıyla silindi');
return $this->redirectToRoute('app_buying_in_turkey');
}
#[Route('/buying-in-turkey/make-transfer/{id}', name:'app_buying_in_turkey_delete')]
public function makeTransfer(Request $request, $id)
{
$entity = $this->entityManager->getRepository(BuyInTurkey::class)->find($id);
if(!$entity->isIsTransported()){
$entity->setIsTransported(true);
$this->entityManager->persist($entity);
$this->entityManager->flush();
}
$this->addFlash('success', 'Türkiye Alış transfer edildi listesine eklendi');
return $this->redirectToRoute('app_buying_in_turkey');
}
#[Route('/buying-in-turkey/new', name:'app_buying_in_turkey_new')]
public function add(Request $request)
{
$entity =new BuyInTurkey();
$form = $this->createForm(BuyingTurkeyType::class, $entity);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$entity = $form->getData();
$this->buyInTurkeyService->create($entity);
$this->addFlash('success', 'Kayıt Başarıyla Eklendi');
return $this->redirectToRoute('app_buying_in_turkey');
}
return $this->render('admin/buying_in_turkey/new.html.twig', [
'form'=>$form->createView(),
]);
}
#[Route('/buying-in-turkey/edit/{id}', name: 'app_buying_in_turkey_edit')]
public function edit(Request $request, $id)
{
$entity = $this->entityManager->getRepository(BuyInTurkey::class)->find($id);
$form = $this->createForm(BuyingTurkeyType::class, $entity);
$form->handleRequest($request);
$entities = $this->entityManager->getRepository(BuyInTurkey::class)
->findBy(['invoiceNumber'=>$entity->getInvoiceNumber()]);
if($form->isSubmitted() && $form->isValid()){
$buyInTurkey = $form->getData();
$alisFiyati = round(CurrencyHelper::convertToFloat($buyInTurkey->getBuyingPrice()), 3);
$transferUcreti = round(CurrencyHelper::convertToFloat($buyInTurkey->getTransportPrice()), 3);
$lashing = round(CurrencyHelper::convertToFloat($buyInTurkey->getLashing()), 3);
$gumruk = round(CurrencyHelper::convertToFloat($buyInTurkey->getCustomsPrice()), 3);
$fob = round(CurrencyHelper::convertToFloat($buyInTurkey->getPriceFob()), 3);
$karmarji = round(CurrencyHelper::convertToFloat($buyInTurkey->getProfitMargin()), 3);
$buyInTurkey->setTotalPurhcaseQuantity(round($buyInTurkey->getQuantity(), 3));
$totalCost = $alisFiyati + $transferUcreti + $lashing + $gumruk + $fob + $karmarji;
$buyInTurkey->setTotalCostPrice(round($totalCost, 3));
$totalPurchase = round(CurrencyHelper::convertToFloat($buyInTurkey->getQuantity()) * $totalCost, 3);
$buyInTurkey->setTotalPuchasePrice($totalPurchase);
$buyInTurkey->setTotalPurhcaseQuantity($entity->getQuantity());
$this->entityManager->persist($buyInTurkey);
$this->entityManager->flush();
$this->addFlash('success', 'Türkiye alış başarıyla güncellendi');
return $this->redirectToRoute('app_buying_in_turkey');
}
return $this->render('admin/buying_in_turkey/edit.html.twig', [
'form'=>$form->createView(),
'entity'=>$entity,
'entities'=>$entities,
]);
}
#[Route('/buying/in/turkey/purchases/', name: 'buy_in_turkey_purchases')]
public function ajax(Request $request)
{
$status = $request->get('status');
$s = $request->get('search')['value'];
$id = $request->get('id');
$column = $request->get('order')[0]['column'];
$dir = $request->get('order')[0]['dir'];
$limit = $request->get('length');
if($request->get('start'))
$page = 1 + ($request->get('start') / $limit);
else
$page = 1;
$entities = $this->createArrayForDataTable(
$this->buyInTurkeyService->getAllPurchasesByTransportStatus($page, $limit, $status, $s)
);
$this->sortArrayByKey($entities['data'], $column, false, $dir == 'asc');
return $this->json($entities);
}
function sortArrayByKey(&$array,$key,$string = false,$asc = true){
if($string){
usort($array,function ($a, $b) use(&$key,&$asc)
{
if($asc) return strcmp(strtolower($a[$key]), strtolower($b[$key]));
else return strcmp(strtolower($b[$key]), strtolower($a[$key]));
});
}else{
usort($array,function ($a, $b) use(&$key,&$asc)
{
if($a[$key] == $b[$key]){return 0;}
if($asc) return ($a[$key] < $b[$key]) ? -1 : 1;
else return ($a[$key] > $b[$key]) ? -1 : 1;
});
}
}
private function createArrayForDataTable($stocks): array{
$records = [];
$records['recordsTotal'] = $stocks->getTotalItemCount();
$records['recordsFiltered'] = $stocks->getTotalItemCount();
$records["data"] = [];
foreach ($stocks as $entity) {
$records["data"][] = array(
$entity->getId(),
$entity->getProduct()->getName(),
$entity->getProduct()->getCode(),
$entity->getProduct()->getMeasurement()->getMeasurement(),
$entity->getInvoiceNumber(),
$entity->getQuantity(),
$entity->getTotalPurhcaseQuantity(),
$entity->getBuyingPrice(),
$entity->getTransportPrice(),
$entity->getLashing(),
$entity->getCustomsPrice(),
$entity->getPriceFob(),
$entity->getProfitMargin(),
$entity->getTotalCostPrice(),
$entity->getTotalPuchasePrice(),
$entity->getBuyingCompany(),
$entity->getBuyingDate()->format('d.m.y')
);
}
return $records;
}
public function getUnTransferedPurchases()
{
$repo = $this->entityManager->getRepository(BuyInTurkey::class);
$result = $repo->findBy(['isTransported'=>false]);
return $this->render('admin/components/customswaitingtr.html.twig', [
'result'=>$result,
'resultCount'=>count($result)
]);
}
public function setBuyInTurkeyService(BuyInTurkeyService $buyInTurkeyService): void
{
$this->buyInTurkeyService = $buyInTurkeyService;
}
}