From 0adbfbd8613f279df756a0068b59e1d99dc4494c Mon Sep 17 00:00:00 2001 From: elmo Date: Fri, 18 Oct 2024 10:32:41 +0800 Subject: [PATCH] Finish adding rest of CRUD functions --- config/packages/catalyst_menu.yaml | 4 +- config/routes/competitor.yaml | 17 +++- src/Controller/CompetitorController.php | 106 +++++++++++++++++++++++- templates/competitor/form.html.twig | 4 +- templates/competitor/list.html.twig | 17 ++-- 5 files changed, 133 insertions(+), 15 deletions(-) diff --git a/config/packages/catalyst_menu.yaml b/config/packages/catalyst_menu.yaml index 4dccc656..1d121016 100644 --- a/config/packages/catalyst_menu.yaml +++ b/config/packages/catalyst_menu.yaml @@ -308,6 +308,6 @@ catalyst_menu: - id: competitor acl: competitor.menu - label: 'Competitors' + label: Competitors icon: fa fa-battery-0 #hehe - order: 17 \ No newline at end of file + order: 1 \ No newline at end of file diff --git a/config/routes/competitor.yaml b/config/routes/competitor.yaml index 459c5665..1fdab836 100644 --- a/config/routes/competitor.yaml +++ b/config/routes/competitor.yaml @@ -15,4 +15,19 @@ competitor_create: competitor_create_submit: path: /competitors/create controller: App\Controller\CompetitorController::addSubmit - methods: [POST] \ No newline at end of file + methods: [POST] + +competitor_update: + path: /competitors/update/{id} + controller: App\Controller\CompetitorController::updateForm + methods: [GET] + +competitor_update_submit: + path: /competitors/update/{id} + controller: App\Controller\CompetitorController::updateSubmit + methods: [POST] + +competitor_delete: + path: /competitors/{id} + controller: App\Controller\CompetitorController::destroy + methods: [DELETE] diff --git a/src/Controller/CompetitorController.php b/src/Controller/CompetitorController.php index fb4e3450..11ba61cc 100644 --- a/src/Controller/CompetitorController.php +++ b/src/Controller/CompetitorController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Entity\Competitor; + use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\EntityManager; @@ -19,7 +20,7 @@ class CompetitorController extends Controller { /** - * @Menu(selected="competitor_list") + * @Menu(selected="competitor") */ public function index() { @@ -95,7 +96,12 @@ class CompetitorController extends Controller $row['branch_name'] = $orow->getBranchName(); $row['brand'] = $orow->getBrand(); $row['address'] = $orow->getAddress(); - $row['is_near_partner'] = $orow->getIsNearPartner(); + if ($orow->getIsNearPartner()){ + $row['is_near_partner'] = "Yes"; + } + else{ + $row['is_near_partner'] = "No"; + } // add row metadata $row['meta'] = [ @@ -105,9 +111,9 @@ class CompetitorController extends Controller // add crud urls if ($this->isGranted('competitor.update')) - $row['meta']['update_url'] = $this->generateUrl('home', ['id' => $row['id']]); + $row['meta']['update_url'] = $this->generateUrl('competitor_update', ['id' => $row['id']]); if ($this->isGranted('competitor.delete')) - $row['meta']['delete_url'] = $this->generateUrl('home', ['id' => $row['id']]); + $row['meta']['delete_url'] = $this->generateUrl('competitor_delete', ['id' => $row['id']]); $rows[] = $row; } @@ -119,6 +125,9 @@ class CompetitorController extends Controller ]); } + /** + * @Menu(selected="competitor") + */ public function addForm() { $this->denyAccessUnlessGranted('competitor.add', null, 'No access.'); @@ -173,6 +182,95 @@ class CompetitorController extends Controller ]); } + /** + * @Menu(selected="competitor") + */ + public function updateForm($id) + + { + // $id = 14; + $this->denyAccessUnlessGranted('competitor.update', null, 'No access.'); + + $params['mode'] = 'update'; + + // get row data + $em = $this->getDoctrine()->getManager(); + $row = $em->getRepository(Competitor::class)->find($id); + + // make sure this row exists + if (empty($row)) + throw $this->createNotFoundException('The item does not exist'); + + $params['obj'] = $row; + + // response + return $this->render('competitor/form.html.twig', $params); + } + + public function updateSubmit(Request $req, ValidatorInterface $validator, $id) + { + $this->denyAccessUnlessGranted('competitor.update', null, 'No access.'); + + // get object data + $em = $this->getDoctrine()->getManager(); + $obj = $em->getRepository(Competitor::class)->find($id); + + // make sure this object exists + if (empty($obj)) + throw $this->createNotFoundException('The item does not exist'); + + $this->setObject($obj, $em, $req); + + // validate + $errors = $validator->validate($obj); + + // initialize error list + $error_array = []; + + // add errors to list + foreach ($errors as $error) { + $error_array[$error->getPropertyPath()] = $error->getMessage(); + } + + // check if any errors were found + if (!empty($error_array)) { + // return validation failure response + return $this->json([ + 'success' => false, + 'errors' => $error_array + ], 422); + } + + // validated! save the entity + $em->flush(); + + // return successful response + return $this->json([ + 'success' => 'Changes have been saved!' + ]); + } + + public function destroy($id) + { + $this->denyAccessUnlessGranted('competitor.delete', null, 'No access.'); + + // get object data + $em = $this->getDoctrine()->getManager(); + $obj = $em->getRepository(Competitor::class)->find($id); + + if (empty($obj)) + throw $this->createNotFoundException('The item does not exist'); + + // delete this object + $em->remove($obj); + $em->flush(); + + // response + $response = new Response(); + $response->setStatusCode(Response::HTTP_OK); + $response->send(); + } + protected function setQueryFilters($datatable, QueryBuilder $query) { if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { diff --git a/templates/competitor/form.html.twig b/templates/competitor/form.html.twig index b6a4451f..a507ec79 100644 --- a/templates/competitor/form.html.twig +++ b/templates/competitor/form.html.twig @@ -24,7 +24,7 @@

{% if mode == 'update' %} Edit Competitor - {{ obj.getName() }} + {{ obj.getBranchName() }} {% else %} New Competitor {% endif %} @@ -66,7 +66,7 @@ - + diff --git a/templates/competitor/list.html.twig b/templates/competitor/list.html.twig index fa100341..06789dd4 100644 --- a/templates/competitor/list.html.twig +++ b/templates/competitor/list.html.twig @@ -94,7 +94,8 @@ }, { field: 'is_near_partner', - title: 'Near a Partner?' + title: 'Near a Partner?', + sortable: false }, { field: 'Actions', @@ -106,11 +107,13 @@ var actions = ''; if (row.meta.update_url != '') { - actions += ''; + console.log(row.branch_name,"hi"); + console.log(row); + actions += ''; } if (row.meta.delete_url != '') { - actions += ''; + actions += ''; } return actions; @@ -127,11 +130,13 @@ var table = $("#data-rows").mDatatable(options); - console.log(table); + $(document).on('click', '.btn-delete', function(e) { var url = $(this).prop('href'); - var id = $(this).data('id'); - var btn = $(this); + var id = $(this).data('id'); + var btn = $(this); + + console.log($(this).data(),"whee"); e.preventDefault();