152 lines
4.6 KiB
PHP
152 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use Doctrine\ORM\Query;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
|
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
|
|
|
|
use Catalyst\MenuBundle\Annotation\Menu;
|
|
|
|
use App\Entity\PriceTier;
|
|
use App\Entity\Battery;
|
|
use App\Entity\ServiceOffering;
|
|
use App\Entity\ItemType;
|
|
|
|
class ItemPricingController extends Controller
|
|
{
|
|
/**
|
|
* @Menu(selected="item_pricing")
|
|
* @IsGranted("item_pricing.update")
|
|
*/
|
|
public function index (EntityManagerInterface $em)
|
|
{
|
|
// get all the price tiers
|
|
$price_tiers = $em->getRepository(PriceTier::class)->findAll();
|
|
|
|
// get all item types
|
|
$item_types = $em->getRepository(ItemType::class)->findBy([], ['name' => 'asc']);
|
|
|
|
// get all the items/batteries
|
|
// load only batteries upon initial loading
|
|
$items = $this->getBatteries($em);
|
|
|
|
$params = [
|
|
'sets' => [
|
|
'price_tiers' => $price_tiers,
|
|
'item_types' => $item_types,
|
|
],
|
|
'items' => $items,
|
|
];
|
|
|
|
return $this->render('item-pricing/form.html.twig', $params);
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="item_pricing")
|
|
* @IsGranted("item_pricing.update")
|
|
*/
|
|
public function formSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @IsGranted("item_pricing.update")
|
|
*/
|
|
public function itemPrices(EntityManagerInterface $em, $pt_id, $it_id)
|
|
{
|
|
$pt_prices = [];
|
|
|
|
// get the item type
|
|
$it = $em->getRepository(ItemType::class)->find($it_id);
|
|
|
|
// check if default prices are needed
|
|
if ($pt_id != 0)
|
|
{
|
|
// get the price tier
|
|
$pt = $em->getRepository(PriceTier::class)->find($pt_id);
|
|
|
|
// get the items under the price tier
|
|
$pt_items = $pt->getItems();
|
|
foreach ($pt_items as $pt_item)
|
|
{
|
|
// make item price hash
|
|
$pt_prices[$pt_item->->getID()] = $pt_item->getPrice();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// get the prices from battery or service offering, depending on item type
|
|
if ($it->getCode() == 'battery')
|
|
{
|
|
// get batteries
|
|
$items = $em->getRepository(Battery::class)->findBy(['flag_active' => true]);
|
|
}
|
|
else
|
|
{
|
|
// get service offerings
|
|
$items = $em->getRepository(ServiceOffering::class)->findBy([], ['name' => 'asc']);
|
|
}
|
|
}
|
|
|
|
$data_items = [];
|
|
|
|
// response
|
|
return new JsonResponse([
|
|
'items' => $data_items,
|
|
]);
|
|
}
|
|
|
|
protected function getBatteries(EntityManagerInterface $em)
|
|
{
|
|
// get the item type for battery
|
|
$batt_item_type = $em->getRepository(ItemType::class)->findOneBy(['code' => 'battery']);
|
|
|
|
// get all active batteries
|
|
$batts = $em->getRepository(Battery::class)->findBy(['flag_active' => true]);
|
|
foreach ($batts as $batt)
|
|
{
|
|
$batt_set[$batt->getID()] = [
|
|
'name' => $batt->getModel()->getName() . ' ' . $batt->getSize()->getName(),
|
|
'item_type_id' => $batt_item_type->getID(),
|
|
'item_type' => $batt_item_type->getName(),
|
|
'price' => $batt->getSellingPrice(),
|
|
];
|
|
}
|
|
|
|
return [
|
|
'items' => $batt_set,
|
|
];
|
|
}
|
|
|
|
protected function getServiceOfferings(EntityeManagerInterface $em)
|
|
{
|
|
// get the item type for service offering
|
|
$service_item_type = $em->getRepository(ItemType::class)->findOneBy(['code' => 'service_offering']);
|
|
|
|
// get all service offerings
|
|
$services = $em->getRepository(ServiceOffering::class)->findBy([], ['name' => 'asc']);
|
|
$service_set = [];
|
|
foreach ($services as $service)
|
|
{
|
|
$service_set[$service->getID()] = [
|
|
'name' => $service->getName(),
|
|
'item_type_id' => $service_item_type->getID(),
|
|
'item_type' => $service_item_type->getName(),
|
|
'price' => $service->getFee(),
|
|
];
|
|
}
|
|
|
|
return [
|
|
'items' => $service_set,
|
|
];
|
|
}
|
|
}
|