diff --git a/src/Controller/DrinkTypeController.php b/src/Controller/DrinkTypeController.php
index 5089800..5f8d8b3 100644
--- a/src/Controller/DrinkTypeController.php
+++ b/src/Controller/DrinkTypeController.php
@@ -28,7 +28,7 @@ final class DrinkTypeController extends AbstractController
#[Route(path: '/new', name: 'app_drink_type_new', methods: ['GET', 'POST'])]
public function new(Request $request, EntityManagerInterface $entityManager): Response
{
- $drinkType = new DrinkType('', '');
+ $drinkType = new DrinkType();
$form = $this->createForm(DrinkTypeForm::class, $drinkType);
$form->handleRequest($request);
diff --git a/src/Controller/InventoryRecordController.php b/src/Controller/InventoryRecordController.php
new file mode 100644
index 0000000..98ace52
--- /dev/null
+++ b/src/Controller/InventoryRecordController.php
@@ -0,0 +1,81 @@
+render('inventory_record/index.html.twig', [
+ 'inventory_records' => $inventoryRecordRepository->findAll(),
+ ]);
+ }
+
+ #[Route('/new', name: 'app_inventory_record_new', methods: ['GET', 'POST'])]
+ public function new(Request $request, EntityManagerInterface $entityManager): Response
+ {
+ $inventoryRecord = new InventoryRecord();
+ $form = $this->createForm(InventoryRecordForm::class, $inventoryRecord);
+ $form->handleRequest($request);
+
+ if ($form->isSubmitted() && $form->isValid()) {
+ $entityManager->persist($inventoryRecord);
+ $entityManager->flush();
+
+ return $this->redirectToRoute('app_inventory_record_index', [], Response::HTTP_SEE_OTHER);
+ }
+
+ return $this->render('inventory_record/new.html.twig', [
+ 'inventory_record' => $inventoryRecord,
+ 'form' => $form,
+ ]);
+ }
+
+ #[Route('/{id}', name: 'app_inventory_record_show', methods: ['GET'])]
+ public function show(InventoryRecord $inventoryRecord): Response
+ {
+ return $this->render('inventory_record/show.html.twig', [
+ 'inventory_record' => $inventoryRecord,
+ ]);
+ }
+
+ #[Route('/{id}/edit', name: 'app_inventory_record_edit', methods: ['GET', 'POST'])]
+ public function edit(Request $request, InventoryRecord $inventoryRecord, EntityManagerInterface $entityManager): Response
+ {
+ $form = $this->createForm(InventoryRecordForm::class, $inventoryRecord);
+ $form->handleRequest($request);
+
+ if ($form->isSubmitted() && $form->isValid()) {
+ $entityManager->flush();
+
+ return $this->redirectToRoute('app_inventory_record_index', [], Response::HTTP_SEE_OTHER);
+ }
+
+ return $this->render('inventory_record/edit.html.twig', [
+ 'inventory_record' => $inventoryRecord,
+ 'form' => $form,
+ ]);
+ }
+
+ #[Route('/{id}', name: 'app_inventory_record_delete', methods: ['POST'])]
+ public function delete(Request $request, InventoryRecord $inventoryRecord, EntityManagerInterface $entityManager): Response
+ {
+ if ($this->isCsrfTokenValid('delete'.$inventoryRecord->getId(), $request->getPayload()->getString('_token'))) {
+ $entityManager->remove($inventoryRecord);
+ $entityManager->flush();
+ }
+
+ return $this->redirectToRoute('app_inventory_record_index', [], Response::HTTP_SEE_OTHER);
+ }
+}
diff --git a/src/Entity/DrinkType.php b/src/Entity/DrinkType.php
index 194a768..640e448 100644
--- a/src/Entity/DrinkType.php
+++ b/src/Entity/DrinkType.php
@@ -31,18 +31,17 @@ class DrinkType
#[ORM\OneToMany(mappedBy: 'drinkType', targetEntity: OrderItem::class)]
private Collection $orderItems;
+ #[ORM\Column(type: 'string', length: 255, unique: true)]
+ private string $name;
+ #[ORM\Column(type: 'text', nullable: true)]
+ private null|string $description = null;
+ #[ORM\Column(type: 'integer')]
+ private int $desiredStock = 10;
+
public function __construct(
- #[ORM\Column(type: 'string', length: 255, unique: true)]
- private string $name,
- #[ORM\Column(type: 'text', nullable: true)]
- private null|string $description = null,
- #[ORM\Column(type: 'integer')]
- private int $desiredStock = 10,
- null|DateTimeImmutable $createdAt = null,
- null|DateTimeImmutable $updatedAt = null,
) {
- $this->createdAt = $createdAt ?? new DateTimeImmutable();
- $this->updatedAt = $updatedAt ?? new DateTimeImmutable();
+ $this->createdAt = new DateTimeImmutable();
+ $this->updatedAt = new DateTimeImmutable();
$this->inventoryRecords = new ArrayCollection();
$this->orderItems = new ArrayCollection();
}
diff --git a/src/Entity/InventoryRecord.php b/src/Entity/InventoryRecord.php
index 46d355e..2ffe0f6 100644
--- a/src/Entity/InventoryRecord.php
+++ b/src/Entity/InventoryRecord.php
@@ -17,19 +17,28 @@ class InventoryRecord
#[ORM\Column(type: 'integer')]
private null|int $id = null;
+ #[ORM\ManyToOne(targetEntity: DrinkType::class, inversedBy: 'inventoryRecords')]
+ #[ORM\JoinColumn(name: 'drink_type_id', referencedColumnName: 'id', nullable: false)]
+ private DrinkType $drinkType;
+
+ #[ORM\Column(type: 'integer')]
+ private int $quantity;
+
+ #[ORM\Column(type: 'datetime_immutable')]
+ private DateTimeImmutable $timestamp;
+
+ #[ORM\Column(type: 'datetime_immutable')]
+ private DateTimeImmutable $createdAt;
+
+ #[ORM\Column(type: 'datetime_immutable')]
+ private DateTimeImmutable $updatedAt;
+
public function __construct(
- #[ORM\ManyToOne(targetEntity: DrinkType::class, inversedBy: 'inventoryRecords')]
- #[ORM\JoinColumn(name: 'drink_type_id', referencedColumnName: 'id', nullable: false)]
- private DrinkType $drinkType,
- #[ORM\Column(type: 'integer')]
- private int $quantity,
- #[ORM\Column(type: 'datetime_immutable')]
- private DateTimeImmutable $timestamp = new DateTimeImmutable(),
- #[ORM\Column(type: 'datetime_immutable')]
- private DateTimeImmutable $createdAt = new DateTimeImmutable(),
- #[ORM\Column(type: 'datetime_immutable')]
- private DateTimeImmutable $updatedAt = new DateTimeImmutable(),
- ) {}
+ ) {
+ $this->createdAt = new DateTimeImmutable();
+ $this->updatedAt = new DateTimeImmutable();
+ $this->timestamp = new DateTimeImmutable();
+ }
public function getId(): null|int
{
diff --git a/src/Entity/Order.php b/src/Entity/Order.php
index 42459cc..f8682be 100644
--- a/src/Entity/Order.php
+++ b/src/Entity/Order.php
@@ -29,16 +29,15 @@ class Order
#[ORM\OneToMany(mappedBy: 'order', targetEntity: OrderItem::class, cascade: ['persist', 'remove'])]
private Collection $orderItems;
+ #[ORM\Column(nullable: false, enumType: OrderStatus::class, options: [
+ 'default' => OrderStatus::NEW,
+ ])]
+ private OrderStatus $status = OrderStatus::NEW;
+
public function __construct(
- #[ORM\Column(nullable: false, enumType: OrderStatus::class, options: [
- 'default' => OrderStatus::NEW,
- ])]
- private OrderStatus $status = OrderStatus::NEW,
- null|DateTimeImmutable $createdAt = null,
- null|DateTimeImmutable $updatedAt = null,
) {
- $this->createdAt = $createdAt ?? new DateTimeImmutable();
- $this->updatedAt = $updatedAt ?? new DateTimeImmutable();
+ $this->createdAt = new DateTimeImmutable();
+ $this->updatedAt = new DateTimeImmutable();
$this->orderItems = new ArrayCollection();
}
diff --git a/src/Entity/OrderItem.php b/src/Entity/OrderItem.php
index 66a22c5..a8e735c 100644
--- a/src/Entity/OrderItem.php
+++ b/src/Entity/OrderItem.php
@@ -23,25 +23,21 @@ class OrderItem
#[ORM\Column(type: 'datetime_immutable')]
private DateTimeImmutable $updatedAt;
- public function __construct(
- #[ORM\ManyToOne(targetEntity: DrinkType::class, inversedBy: 'orderItems')]
- #[ORM\JoinColumn(name: 'drink_type_id', referencedColumnName: 'id', nullable: false)]
- private DrinkType $drinkType,
- #[ORM\Column(type: 'integer')]
- private int $quantity,
- #[ORM\ManyToOne(targetEntity: Order::class, inversedBy: 'orderItems')]
- #[ORM\JoinColumn(name: 'order_id', referencedColumnName: 'id', nullable: false)]
- private null|Order $order = null,
- null|DateTimeImmutable $createdAt = null,
- null|DateTimeImmutable $updatedAt = null,
- ) {
- $this->createdAt = $createdAt ?? new DateTimeImmutable();
- $this->updatedAt = $updatedAt ?? new DateTimeImmutable();
+ #[ORM\ManyToOne(targetEntity: DrinkType::class, inversedBy: 'orderItems')]
+ #[ORM\JoinColumn(name: 'drink_type_id', referencedColumnName: 'id', nullable: false)]
+ private DrinkType $drinkType;
- // Establish bidirectional relationship
- if ($this->order instanceof Order) {
- $this->order->addOrderItem($this);
- }
+ #[ORM\Column(type: 'integer')]
+ private int $quantity;
+
+ #[ORM\ManyToOne(targetEntity: Order::class, inversedBy: 'orderItems')]
+ #[ORM\JoinColumn(name: 'order_id', referencedColumnName: 'id', nullable: false)]
+ private Order $order;
+
+ public function __construct(
+ ) {
+ $this->createdAt = new DateTimeImmutable();
+ $this->updatedAt = new DateTimeImmutable();
}
public function getId(): null|int
diff --git a/src/Entity/SystemConfig.php b/src/Entity/SystemConfig.php
index 4013c56..78ed4a7 100644
--- a/src/Entity/SystemConfig.php
+++ b/src/Entity/SystemConfig.php
@@ -31,16 +31,16 @@ class SystemConfig
#[ORM\Column(type: 'datetime_immutable')]
private DateTimeImmutable $updatedAt;
+ #[ORM\Column(unique: true, enumType: SystemSettingKey::class)]
+ private SystemSettingKey $key;
+
+ #[ORM\Column(type: 'text')]
+ private string $value;
+
public function __construct(
- #[ORM\Column(unique: true, enumType: SystemSettingKey::class)]
- private SystemSettingKey $key,
- #[ORM\Column(type: 'text')]
- private string $value,
- null|DateTimeImmutable $createdAt = null,
- null|DateTimeImmutable $updatedAt = null,
) {
- $this->createdAt = $createdAt ?? new DateTimeImmutable();
- $this->updatedAt = $updatedAt ?? new DateTimeImmutable();
+ $this->createdAt = new DateTimeImmutable();
+ $this->updatedAt = new DateTimeImmutable();
}
public function getId(): null|int
diff --git a/src/Form/InventoryRecordForm.php b/src/Form/InventoryRecordForm.php
new file mode 100644
index 0000000..e29e17b
--- /dev/null
+++ b/src/Form/InventoryRecordForm.php
@@ -0,0 +1,40 @@
+add('quantity')
+ ->add('timestamp', null, [
+ 'widget' => 'single_text',
+ ])
+ ->add('createdAt', null, [
+ 'widget' => 'single_text',
+ ])
+ ->add('updatedAt', null, [
+ 'widget' => 'single_text',
+ ])
+ ->add('drinkType', EntityType::class, [
+ 'class' => DrinkType::class,
+ 'choice_label' => 'id',
+ ])
+ ;
+ }
+
+ public function configureOptions(OptionsResolver $resolver): void
+ {
+ $resolver->setDefaults([
+ 'data_class' => InventoryRecord::class,
+ ]);
+ }
+}
diff --git a/templates/inventory_record/_delete_form.html.twig b/templates/inventory_record/_delete_form.html.twig
new file mode 100644
index 0000000..6c5c5fd
--- /dev/null
+++ b/templates/inventory_record/_delete_form.html.twig
@@ -0,0 +1,4 @@
+
diff --git a/templates/inventory_record/_form.html.twig b/templates/inventory_record/_form.html.twig
new file mode 100644
index 0000000..bf20b98
--- /dev/null
+++ b/templates/inventory_record/_form.html.twig
@@ -0,0 +1,4 @@
+{{ form_start(form) }}
+ {{ form_widget(form) }}
+
+{{ form_end(form) }}
diff --git a/templates/inventory_record/edit.html.twig b/templates/inventory_record/edit.html.twig
new file mode 100644
index 0000000..f41339b
--- /dev/null
+++ b/templates/inventory_record/edit.html.twig
@@ -0,0 +1,13 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Edit InventoryRecord{% endblock %}
+
+{% block body %}
+ Edit InventoryRecord
+
+ {{ include('inventory_record/_form.html.twig', {'button_label': 'Update'}) }}
+
+ back to list
+
+ {{ include('inventory_record/_delete_form.html.twig') }}
+{% endblock %}
diff --git a/templates/inventory_record/index.html.twig b/templates/inventory_record/index.html.twig
new file mode 100644
index 0000000..7024ab2
--- /dev/null
+++ b/templates/inventory_record/index.html.twig
@@ -0,0 +1,41 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}InventoryRecord index{% endblock %}
+
+{% block body %}
+ InventoryRecord index
+
+
+
+
+ Id |
+ Quantity |
+ Timestamp |
+ CreatedAt |
+ UpdatedAt |
+ actions |
+
+
+
+ {% for inventory_record in inventory_records %}
+
+ {{ inventory_record.id }} |
+ {{ inventory_record.quantity }} |
+ {{ inventory_record.timestamp ? inventory_record.timestamp|date('Y-m-d H:i:s') : '' }} |
+ {{ inventory_record.createdAt ? inventory_record.createdAt|date('Y-m-d H:i:s') : '' }} |
+ {{ inventory_record.updatedAt ? inventory_record.updatedAt|date('Y-m-d H:i:s') : '' }} |
+
+ show
+ edit
+ |
+
+ {% else %}
+
+ no records found |
+
+ {% endfor %}
+
+
+
+ Create new
+{% endblock %}
diff --git a/templates/inventory_record/new.html.twig b/templates/inventory_record/new.html.twig
new file mode 100644
index 0000000..3ae76a3
--- /dev/null
+++ b/templates/inventory_record/new.html.twig
@@ -0,0 +1,11 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}New InventoryRecord{% endblock %}
+
+{% block body %}
+ Create new InventoryRecord
+
+ {{ include('inventory_record/_form.html.twig') }}
+
+ back to list
+{% endblock %}
diff --git a/templates/inventory_record/show.html.twig b/templates/inventory_record/show.html.twig
new file mode 100644
index 0000000..2caf816
--- /dev/null
+++ b/templates/inventory_record/show.html.twig
@@ -0,0 +1,38 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}InventoryRecord{% endblock %}
+
+{% block body %}
+ InventoryRecord
+
+
+
+
+ Id |
+ {{ inventory_record.id }} |
+
+
+ Quantity |
+ {{ inventory_record.quantity }} |
+
+
+ Timestamp |
+ {{ inventory_record.timestamp ? inventory_record.timestamp|date('Y-m-d H:i:s') : '' }} |
+
+
+ CreatedAt |
+ {{ inventory_record.createdAt ? inventory_record.createdAt|date('Y-m-d H:i:s') : '' }} |
+
+
+ UpdatedAt |
+ {{ inventory_record.updatedAt ? inventory_record.updatedAt|date('Y-m-d H:i:s') : '' }} |
+
+
+
+
+ back to list
+
+ edit
+
+ {{ include('inventory_record/_delete_form.html.twig') }}
+{% endblock %}