From bc6fadcfe55713ca15450376d71ba8d6e3b9dfb3 Mon Sep 17 00:00:00 2001 From: amit kumar laravel Date: Thu, 2 Jan 2025 18:19:43 +0530 Subject: [PATCH] Added Feature #1815 --- packages/Webkul/Admin/src/Config/acl.php | 7 +- .../Contact/OrganizationDataGrid.php | 11 +++ .../Organizations/ActivityController.php | 45 ++++++++++ .../OrganizationController.php | 12 ++- .../Admin/src/Resources/lang/en/app.php | 6 ++ .../contacts/organizations/view.blade.php | 85 +++++++++++++++++++ .../organizations/view/attributes.blade.php | 35 ++++++++ .../src/Routes/Admin/contacts-routes.php | 12 ++- ...2_create_organization_activities_table.php | 30 +++++++ routes/breadcrumbs.php | 5 ++ 10 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/ActivityController.php rename packages/Webkul/Admin/src/Http/Controllers/Contact/{ => Organizations}/OrganizationController.php (92%) create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/organizations/view.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/organizations/view/attributes.blade.php create mode 100644 packages/Webkul/Contact/src/Database/Migrations/2025_01_02_161212_create_organization_activities_table.php diff --git a/packages/Webkul/Admin/src/Config/acl.php b/packages/Webkul/Admin/src/Config/acl.php index c5e246bab..36b94c191 100644 --- a/packages/Webkul/Admin/src/Config/acl.php +++ b/packages/Webkul/Admin/src/Config/acl.php @@ -181,7 +181,12 @@ 'name' => 'admin::app.acl.delete', 'route' => ['admin.contacts.organizations.delete', 'admin.contacts.organizations.mass_delete'], 'sort' => 3, - ], [ + ], [ + 'key' => 'contacts.organizations.view', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.contacts.organizations.view'], + 'sort' => 4, + ], [ 'key' => 'products', 'name' => 'admin::app.acl.products', 'route' => 'admin.products.index', diff --git a/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php index 240d71b44..51406d7f1 100644 --- a/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php @@ -90,6 +90,17 @@ public function prepareColumns(): void */ public function prepareActions(): void { + if (bouncer()->hasPermission('contacts.organizations.view')) { + $this->addAction([ + 'icon' => 'icon-eye', + 'title' => trans('admin::app.contacts.organizations.index.datagrid.view'), + 'method' => 'GET', + 'url' => function ($row) { + return route('admin.contacts.organizations.view', $row->id); + }, + ]); + } + if (bouncer()->hasPermission('contacts.organizations.edit')) { $this->addAction([ 'icon' => 'icon-edit', diff --git a/packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/ActivityController.php b/packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/ActivityController.php new file mode 100644 index 000000000..2238a6547 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/ActivityController.php @@ -0,0 +1,45 @@ +activityRepository + ->leftJoin('organization_activities', 'activities.id', '=', 'organization_activities.activity_id') + ->where('organization_activities.organization_id', $id) + ->get(); + + return ActivityResource::collection($this->concatEmail($activities)); + } + + /** + * Store a newly created resource in storage. + */ + public function concatEmail($activities) + { + return $activities->sortByDesc('id')->sortByDesc('created_at'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php b/packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/OrganizationController.php similarity index 92% rename from packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php rename to packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/OrganizationController.php index 6845a6c16..697a6f2b6 100644 --- a/packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Contact/Organizations/OrganizationController.php @@ -1,6 +1,6 @@ route('admin.contacts.organizations.index'); } + /** + * Display the specified resource. + */ + public function show(int $id): View + { + $organization = $this->organizationRepository->findOrFail($id); + + return view('admin::contacts.organizations.view', compact('organization')); + } + /** * Show the form for editing the specified resource. */ diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index a8f50bbe9..77053a4f2 100644 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -640,12 +640,18 @@ 'datagrid' => [ 'delete' => 'Delete', 'edit' => 'Edit', + 'view' => 'View', 'id' => 'ID', 'name' => 'Name', 'persons-count' => 'Person Count', ], ], + 'view' => [ + 'title' => ':name', + 'about-organization' => 'About Organization', + ], + 'create' => [ 'title' => 'Create Organization', 'save-btn' => 'Save Organization', diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view.blade.php new file mode 100644 index 000000000..64fa5c876 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view.blade.php @@ -0,0 +1,85 @@ + + + @lang('admin::app.contacts.organizations.view.title', ['name' => $organization->name]) + + + +
+ + {!! view_render_event('admin.contact.organizations.view.left.before', ['organization' => $organization]) !!} + +
+ +
+ +
+ +
+ + +
+ {!! view_render_event('admin.contact.organizations.view.title.before', ['organization' => $organization]) !!} + +

+ {{ $organization->name }} +

+ +

+ {{ $organization->job_title }} +

+ + {!! view_render_event('admin.contact.organizations.view.title.after', ['organization' => $organization]) !!} +
+ + +
+ {!! view_render_event('admin.contact.organizations.view.actions.before', ['organization' => $organization]) !!} + + + + + + + + + + + + + + {!! view_render_event('admin.contact.organizations.view.actions.after', ['organization' => $organization]) !!} +
+
+ + + @include ('admin::contacts.organizations.view.attributes') +
+ + {!! view_render_event('admin.contact.organizations.view.left.after', ['organization' => $organization]) !!} + + +
+ {!! view_render_event('admin.contact.organizations.view.right.before', ['organization' => $organization]) !!} + + + + + {!! view_render_event('admin.contact.organizations.view.right.after', ['organization' => $organization]) !!} +
+
+
diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view/attributes.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view/attributes.blade.php new file mode 100644 index 000000000..2a3ca7ef1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/view/attributes.blade.php @@ -0,0 +1,35 @@ +{!! view_render_event('admin.contacts.organization.view.attributes.before', ['organization' => $organization]) !!} + +
+

+ @lang('admin::app.contacts.persons.view.about-organization') +

+ + {!! view_render_event('admin.contacts.organization.view.attributes.form_controls.before', ['organization' => $organization]) !!} + + +
+ {!! view_render_event('admin.contacts.organization.view.attributes.form_controls.attributes_view.before', ['organization' => $organization]) !!} + + + + {!! view_render_event('admin.contacts.organization.view.attributes.form_controls.attributes_view.after', ['organization' => $organization]) !!} + +
+ + {!! view_render_event('admin.contacts.organization.view.attributes.form_controls.after', ['organization' => $organization]) !!} +
+ +{!! view_render_event('admin.contacts.organization.view.attributes.before', ['organization' => $organization]) !!} diff --git a/packages/Webkul/Admin/src/Routes/Admin/contacts-routes.php b/packages/Webkul/Admin/src/Routes/Admin/contacts-routes.php index 7bdb39422..2802645bf 100644 --- a/packages/Webkul/Admin/src/Routes/Admin/contacts-routes.php +++ b/packages/Webkul/Admin/src/Routes/Admin/contacts-routes.php @@ -1,7 +1,8 @@ name('admin.contacts.organizations.store'); + Route::get('view/{id}', 'show')->name('admin.contacts.organizations.view'); + Route::get('edit/{id?}', 'edit')->name('admin.contacts.organizations.edit'); Route::put('edit/{id}', 'update')->name('admin.contacts.organizations.update'); @@ -63,5 +66,12 @@ Route::delete('{id}', 'destroy')->name('admin.contacts.organizations.delete'); Route::put('mass-destroy', 'massDestroy')->name('admin.contacts.organizations.mass_delete'); + + /** + * Activity routes. + */ + Route::controller(OrganizationActivityController::class)->prefix('{id}/activities')->group(function () { + Route::get('', 'index')->name('admin.contacts.organizations.activities.index'); + }); }); }); diff --git a/packages/Webkul/Contact/src/Database/Migrations/2025_01_02_161212_create_organization_activities_table.php b/packages/Webkul/Contact/src/Database/Migrations/2025_01_02_161212_create_organization_activities_table.php new file mode 100644 index 000000000..1248f1301 --- /dev/null +++ b/packages/Webkul/Contact/src/Database/Migrations/2025_01_02_161212_create_organization_activities_table.php @@ -0,0 +1,30 @@ +integer('activity_id')->unsigned(); + $table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade'); + + $table->integer('organization_id')->unsigned(); + $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('lead_activities'); + } +}; diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 0e5211784..a41fa3827 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -128,6 +128,11 @@ $trail->push(trans('admin::app.contacts.organizations.edit.title'), route('admin.contacts.organizations.edit', $organization->id)); }); +Breadcrumbs::for('contacts.organizations.view', function (BreadcrumbTrail $trail, $organization) { + $trail->parent('contacts.organizations'); + $trail->push('#'.$organization->id, route('admin.contacts.persons.index')); +}); + // Products Breadcrumbs::for('products', function (BreadcrumbTrail $trail) { $trail->parent('dashboard');