forked from Somnia/SomniaRooms
Added RoomCategory BedType support in AdminPanel
This commit is contained in:
@@ -0,0 +1,120 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controller\Admin;
|
||||||
|
|
||||||
|
use App\Entity\RoomCategory;
|
||||||
|
use App\Entity\RoomCategoryBedType;
|
||||||
|
use App\Repository\RoomCategoryRepository;
|
||||||
|
use App\Repository\RoomCategoryBedTypeRepository;
|
||||||
|
use App\Form\RoomCategoryBedTypeFormType;
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||||
|
|
||||||
|
#[IsGranted("ROLE_ADMIN")]
|
||||||
|
class RoomCategoryBedTypeAdminController extends AbstractController
|
||||||
|
{
|
||||||
|
private $adminUrlGenerator;
|
||||||
|
private EntityManagerInterface $entityManager;
|
||||||
|
|
||||||
|
public function __construct(AdminUrlGenerator $adminUrlGenerator, EntityManagerInterface $em)
|
||||||
|
{
|
||||||
|
$this->adminUrlGenerator = $adminUrlGenerator;
|
||||||
|
$this->entityManager = $em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/admin/roomCategoryBedType', name: 'admin_roomCategoryBedType')]
|
||||||
|
public function index(RoomCategoryRepository $catRepo): Response
|
||||||
|
{
|
||||||
|
$categoryList = $catRepo->findAll();
|
||||||
|
|
||||||
|
return $this->render('admin/room_category_bed_type_admin/index.html.twig', [
|
||||||
|
'roomCategoryList' => $categoryList,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// List BedTypes from category.
|
||||||
|
#[Route('/admin/roomCategoryBedType/{categoryId}', name: 'admin_roomCategoryBedType_category')]
|
||||||
|
public function categoryBedTypes(RoomCategoryRepository $catRepo, RoomCategoryBedTypeRepository $repo, string $categoryId): Response
|
||||||
|
{
|
||||||
|
$category = $catRepo->find($categoryId);
|
||||||
|
$bedTypeList = $repo->findByRoomCategory($categoryId);
|
||||||
|
|
||||||
|
return $this->render('admin/room_category_bed_type_admin/categoryBedTypes.html.twig', [
|
||||||
|
'categoryData' => $category,
|
||||||
|
'bedTypeList' => $bedTypeList,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a RoomCategory BedType.
|
||||||
|
#[Route('/admin/roomCategoryBedType/{categoryId}/new', name: 'admin_roomCategoryBedType_category_create')]
|
||||||
|
public function createCategoryBedType(Request $request, RoomCategoryBedTypeRepository $repo, string $categoryId): Response
|
||||||
|
{
|
||||||
|
$roomCatBedType = new RoomCategoryBedType();
|
||||||
|
|
||||||
|
$form = $this->createForm(RoomCategoryBedTypeFormType::class, $roomCatBedType);
|
||||||
|
|
||||||
|
$form->handleRequest($request);
|
||||||
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
|
// $form->getData() holds the submitted values
|
||||||
|
// but, the original `$availabilityItem` variable has also been updated
|
||||||
|
|
||||||
|
$this->entityManager->persist($roomCatBedType);
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
|
$url = $this->adminUrlGenerator->setRoute('admin_roomCategoryBedType_category', [
|
||||||
|
'categoryId' => $roomCatBedType->getRoomCategory()->getId(),
|
||||||
|
])->generateUrl();
|
||||||
|
|
||||||
|
return $this->redirect($url);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('admin/adminEdit.html.twig', [
|
||||||
|
'form' => $form,
|
||||||
|
'ElementType' => "Room Categoy Bed Type",
|
||||||
|
'ElementName' => "Room Categoy - " . $categoryId
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Edit a RoomAvailability numAvailable.
|
||||||
|
#[Route('/admin/roomCategoryBedType/{categoryId}/{bedTypeId}/edit', name: 'admin_roomCategoryBedType_category_update')]
|
||||||
|
public function updateCategoryBedType(Request $request, RoomCategoryBedTypeRepository $repo, string $categoryId, string $bedTypeId): Response
|
||||||
|
{
|
||||||
|
$bedTypeItem = $repo->find(["bedType" => $bedTypeId, "roomCategory" => $categoryId]);
|
||||||
|
|
||||||
|
if ($bedTypeItem == null) {
|
||||||
|
//TODOME: Aquí deberíamos llevar a una página de error o algo.
|
||||||
|
|
||||||
|
$url = $this->adminUrlGenerator->setRoute('admin_roomCategoryBedType_category', [
|
||||||
|
'categoryId' => $categoryId,
|
||||||
|
])->generateUrl();
|
||||||
|
return $this->redirect($url);
|
||||||
|
}
|
||||||
|
|
||||||
|
$form = $this->createForm(RoomCategoryBedTypeFormType::class, $bedTypeItem);
|
||||||
|
|
||||||
|
$form->handleRequest($request);
|
||||||
|
if ($form->isSubmitted() && $form->isValid()) {
|
||||||
|
// $form->getData() holds the submitted values
|
||||||
|
// but, the original `$bedTypeItem` variable has also been updated
|
||||||
|
|
||||||
|
$this->entityManager->flush();
|
||||||
|
|
||||||
|
$url = $this->adminUrlGenerator->setRoute('admin_roomCategoryBedType_category', [
|
||||||
|
'categoryId' => $categoryId,
|
||||||
|
])->generateUrl();
|
||||||
|
|
||||||
|
return $this->redirect($url);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('admin/adminEdit.html.twig', [
|
||||||
|
'form' => $form,
|
||||||
|
'ElementType' => "Room Categoy Bed Type",
|
||||||
|
'ElementName' => "Room Categoy - " . $categoryId
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,6 +44,7 @@ class SomniaDashboardController extends AbstractDashboardController
|
|||||||
|
|
||||||
yield MenuItem::Section('Category Configuration');
|
yield MenuItem::Section('Category Configuration');
|
||||||
yield MenuItem::linkToCrud('Bed Types', 'fas fa-bed', BedType::class);
|
yield MenuItem::linkToCrud('Bed Types', 'fas fa-bed', BedType::class);
|
||||||
|
yield MenuItem::linkToRoute('Bed Type - category', 'fas fa-bed', 'admin_roomCategoryBedType');
|
||||||
|
|
||||||
yield MenuItem::Section('App Management');
|
yield MenuItem::Section('App Management');
|
||||||
yield MenuItem::linkToCrud('Config Vars', 'fas fa-gear', ConfigVariable::class);
|
yield MenuItem::linkToCrud('Config Vars', 'fas fa-gear', ConfigVariable::class);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Entity;
|
namespace App\Entity;
|
||||||
|
|
||||||
use App\Repository\BedTypeRepository;
|
use App\Repository\BedTypeRepository;
|
||||||
|
use Symfony\Component\Serializer\Annotation\Ignore;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
#[ORM\Entity(repositoryClass: BedTypeRepository::class)]
|
#[ORM\Entity(repositoryClass: BedTypeRepository::class)]
|
||||||
@@ -47,4 +48,8 @@ class BedType
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function __toString(): string {
|
||||||
|
return $this->getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Entity;
|
namespace App\Entity;
|
||||||
|
|
||||||
use App\Repository\RoomCategoryBedTypeRepository;
|
use App\Repository\RoomCategoryBedTypeRepository;
|
||||||
|
use Symfony\Component\Serializer\Annotation\Ignore;
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
#[ORM\Entity(repositoryClass: RoomCategoryBedTypeRepository::class)]
|
#[ORM\Entity(repositoryClass: RoomCategoryBedTypeRepository::class)]
|
||||||
@@ -21,10 +22,10 @@ class RoomCategoryBedType
|
|||||||
#[ORM\Column]
|
#[ORM\Column]
|
||||||
private ?int $amount = null;
|
private ?int $amount = null;
|
||||||
|
|
||||||
public function __construct(RoomCategory $roomCat, BedType $bedType) {
|
// public function __construct(RoomCategory $roomCat, BedType $bedType) {
|
||||||
$this->roomCategory = $roomCat;
|
// $this->roomCategory = $roomCat;
|
||||||
$this->bedType = $bedType;
|
// $this->bedType = $bedType;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public function getAmount(): ?int
|
public function getAmount(): ?int
|
||||||
{
|
{
|
||||||
@@ -38,11 +39,13 @@ class RoomCategoryBedType
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Ignore]
|
||||||
public function getRoomCategory(): ?RoomCategory
|
public function getRoomCategory(): ?RoomCategory
|
||||||
{
|
{
|
||||||
return $this->roomCategory;
|
return $this->roomCategory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Ignore]
|
||||||
public function setRoomCategory(?RoomCategory $roomCategory): static
|
public function setRoomCategory(?RoomCategory $roomCategory): static
|
||||||
{
|
{
|
||||||
$this->roomCategory = $roomCategory;
|
$this->roomCategory = $roomCategory;
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form;
|
||||||
|
|
||||||
|
use App\Entity\BedType;
|
||||||
|
use App\Entity\RoomCategory;
|
||||||
|
use App\Entity\RoomCategoryBedType;
|
||||||
|
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||||
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
|
class RoomCategoryBedTypeFormType extends AbstractType
|
||||||
|
{
|
||||||
|
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||||
|
{
|
||||||
|
$builder
|
||||||
|
->add('amount')
|
||||||
|
->add('roomCategory', EntityType::class, [
|
||||||
|
'class' => RoomCategory::class,
|
||||||
|
'choice_label' => 'name',
|
||||||
|
])
|
||||||
|
->add('bedType', EntityType::class, [
|
||||||
|
'class' => BedType::class,
|
||||||
|
'choice_label' => 'name',
|
||||||
|
])
|
||||||
|
->add('save', SubmitType::class)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function configureOptions(OptionsResolver $resolver): void
|
||||||
|
{
|
||||||
|
$resolver->setDefaults([
|
||||||
|
'data_class' => RoomCategoryBedType::class,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,20 +21,18 @@ class RoomCategoryBedTypeRepository extends ServiceEntityRepository
|
|||||||
parent::__construct($registry, RoomCategoryBedType::class);
|
parent::__construct($registry, RoomCategoryBedType::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
/**
|
||||||
// * @return RoomCategoryBedType[] Returns an array of RoomCategoryBedType objects
|
* @return RoomCategoryBedType[] Returns an array of RoomCategoryBedType objects
|
||||||
// */
|
*/
|
||||||
// public function findByExampleField($value): array
|
public function findByRoomCategory(string $categoryId): array
|
||||||
// {
|
{
|
||||||
// return $this->createQueryBuilder('r')
|
return $this->createQueryBuilder('r')
|
||||||
// ->andWhere('r.exampleField = :val')
|
->andWhere('r.roomCategory = :catId')
|
||||||
// ->setParameter('val', $value)
|
->setParameter('catId', $categoryId)
|
||||||
// ->orderBy('r.id', 'ASC')
|
->getQuery()
|
||||||
// ->setMaxResults(10)
|
->getResult()
|
||||||
// ->getQuery()
|
;
|
||||||
// ->getResult()
|
}
|
||||||
// ;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public function findOneBySomeField($value): ?RoomCategoryBedType
|
// public function findOneBySomeField($value): ?RoomCategoryBedType
|
||||||
// {
|
// {
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{# templates/admin/adminEdit.html.twig #}
|
||||||
|
{% extends '@EasyAdmin/page/content.html.twig' %}
|
||||||
|
|
||||||
|
{% block content_title '{{elementType}} - Edit' %}
|
||||||
|
{% block main %}
|
||||||
|
<div>
|
||||||
|
<h3>{{ElementName}}</h3>
|
||||||
|
</div>
|
||||||
|
{{ form(form) }}
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{# templates/admin/room_category_bed_type_admin/category_view.html.twig #}
|
||||||
|
{% extends '@EasyAdmin/page/content.html.twig' %}
|
||||||
|
|
||||||
|
{% block content_title 'Room Availability' %}
|
||||||
|
{% block main %}
|
||||||
|
<div>
|
||||||
|
<h3>{{categoryData.name}}</h3>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="{{ ea_url().setRoute('admin_roomCategoryBedType_category_create', { categoryId: categoryData.id }) }}">
|
||||||
|
Add BedType
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<table class="datagrid">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>BedType</td>
|
||||||
|
<td>Amount</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for bedType in bedTypeList %}
|
||||||
|
<tr>
|
||||||
|
<td>{{bedType.bedType}}</td>
|
||||||
|
<td>{{bedType.amount}}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ ea_url().setRoute('admin_roomCategoryBedType_category_update', { bedTypeId: bedType.bedType.id, categoryId: bedType.roomCategory.id }) }}">
|
||||||
|
Edit
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{# templates/admin/room_category_bed_type_admin/index.html.twig #}
|
||||||
|
{% extends '@EasyAdmin/page/content.html.twig' %}
|
||||||
|
|
||||||
|
{% block content_title 'Category Bed Type' %}
|
||||||
|
{% block main %}
|
||||||
|
<table class="datagrid">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>ID</td>
|
||||||
|
<td>RoomCategory</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for category in roomCategoryList %}
|
||||||
|
<tr>
|
||||||
|
<td>{{category.id}}</td>
|
||||||
|
<td>{{category.name}}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ ea_url().setRoute('admin_roomCategoryBedType_category', { categoryId: category.id }) }}">
|
||||||
|
View Details
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user