Added the support for generating docs from template doc
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Events\DocumentSettingsUpdated;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Documents\DocumentSettings as SettingsService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class DocumentSettingsController extends Controller
|
||||
{
|
||||
public function edit(SettingsService $svc)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
$settings = $svc->get();
|
||||
|
||||
return Inertia::render('Admin/DocumentSettings/Edit', [
|
||||
'settings' => $settings,
|
||||
'defaults' => [
|
||||
'file_name_pattern' => config('documents.file_name_pattern'),
|
||||
'date_format' => config('documents.date_format'),
|
||||
'unresolved_policy' => config('documents.unresolved_policy'),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request, SettingsService $svc)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
$data = $request->validate([
|
||||
'file_name_pattern' => ['required', 'string', 'max:255'],
|
||||
'date_format' => ['required', 'string', 'max:40'],
|
||||
'unresolved_policy' => ['required', 'in:fail,blank,keep'],
|
||||
'preview_enabled' => ['required', 'boolean'],
|
||||
'whitelist' => ['nullable', 'array'],
|
||||
'whitelist.*' => ['array'],
|
||||
'date_formats' => ['nullable', 'array'],
|
||||
'date_formats.*' => ['string'],
|
||||
]);
|
||||
$settings = $svc->get();
|
||||
$settings->fill($data)->save();
|
||||
$svc->refresh();
|
||||
event(new DocumentSettingsUpdated($settings));
|
||||
|
||||
return redirect()->back()->with('success', 'Nastavitve shranjene.');
|
||||
}
|
||||
|
||||
private function authorizeAccess(): void
|
||||
{
|
||||
if (Gate::denies('manage-settings') && Gate::denies('manage-document-templates')) {
|
||||
abort(403);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\StoreDocumentTemplateRequest;
|
||||
use App\Http\Requests\UpdateDocumentTemplateRequest;
|
||||
use App\Models\Action;
|
||||
use App\Models\DocumentTemplate;
|
||||
use App\Services\Documents\TokenScanner;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -19,9 +20,16 @@ public function index()
|
||||
{
|
||||
$this->ensurePermission();
|
||||
$templates = DocumentTemplate::query()->orderByDesc('updated_at')->get();
|
||||
$actions = Action::with(['decisions:id,name'])->orderBy('name')->get(['id', 'name']);
|
||||
$actionsMapped = $actions->map(fn ($a) => [
|
||||
'id' => $a->id,
|
||||
'name' => $a->name,
|
||||
'decisions' => $a->decisions->map(fn ($d) => ['id' => $d->id, 'name' => $d->name])->values(),
|
||||
]);
|
||||
|
||||
return Inertia::render('Admin/DocumentTemplates/Index', [
|
||||
'templates' => $templates,
|
||||
'actions' => $actionsMapped,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -35,10 +43,51 @@ public function toggleActive(DocumentTemplate $template)
|
||||
return redirect()->back()->with('success', 'Status predloge posodobljen.');
|
||||
}
|
||||
|
||||
public function show(DocumentTemplate $template)
|
||||
{
|
||||
$this->ensurePermission();
|
||||
return Inertia::render('Admin/DocumentTemplates/Show', [
|
||||
'template' => $template,
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(DocumentTemplate $template)
|
||||
{
|
||||
$this->ensurePermission();
|
||||
$actions = Action::with(['decisions:id,name'])->orderBy('name')->get(['id', 'name']);
|
||||
$actionsMapped = $actions->map(fn ($a) => [
|
||||
'id' => $a->id,
|
||||
'name' => $a->name,
|
||||
'decisions' => $a->decisions->map(fn ($d) => ['id' => $d->id, 'name' => $d->name])->values(),
|
||||
]);
|
||||
|
||||
return Inertia::render('Admin/DocumentTemplates/Edit', [
|
||||
'template' => $template,
|
||||
'actions' => $actionsMapped,
|
||||
]);
|
||||
}
|
||||
|
||||
public function updateSettings(UpdateDocumentTemplateRequest $request, DocumentTemplate $template)
|
||||
{
|
||||
$this->ensurePermission();
|
||||
$template->fill($request->only(['output_filename_pattern', 'date_format']));
|
||||
$template->fill($request->only([
|
||||
'output_filename_pattern', 'date_format', 'action_id', 'decision_id', 'activity_note_template',
|
||||
]));
|
||||
// If both action & decision provided, ensure decision belongs to action (parity with import templates)
|
||||
if ($request->filled('action_id') && $request->filled('decision_id')) {
|
||||
$belongs = \DB::table('action_decision')
|
||||
->where('action_id', $request->integer('action_id'))
|
||||
->where('decision_id', $request->integer('decision_id'))
|
||||
->exists();
|
||||
if (! $belongs) {
|
||||
return redirect()->back()->withErrors(['decision_id' => 'Izbrana odločitev ne pripada izbrani akciji.']);
|
||||
}
|
||||
} elseif ($request->filled('action_id') && ! $request->filled('decision_id')) {
|
||||
// Allow clearing decision when action changes
|
||||
if ($template->isDirty('action_id')) {
|
||||
$template->decision_id = null;
|
||||
}
|
||||
}
|
||||
if ($request->has('fail_on_unresolved')) {
|
||||
$template->fail_on_unresolved = (bool) $request->boolean('fail_on_unresolved');
|
||||
}
|
||||
@@ -153,6 +202,19 @@ public function store(StoreDocumentTemplateRequest $request)
|
||||
'currency_space' => true,
|
||||
],
|
||||
];
|
||||
// Optional meta + activity linkage fields (parity with import templates style)
|
||||
if ($request->filled('meta') && is_array($request->input('meta'))) {
|
||||
$payload['meta'] = array_filter($request->input('meta'), fn ($v) => $v !== null && $v !== '');
|
||||
}
|
||||
if ($request->filled('action_id')) {
|
||||
$payload['action_id'] = $request->integer('action_id');
|
||||
}
|
||||
if ($request->filled('decision_id')) {
|
||||
$payload['decision_id'] = $request->integer('decision_id');
|
||||
}
|
||||
if ($request->filled('activity_note_template')) {
|
||||
$payload['activity_note_template'] = $request->input('activity_note_template');
|
||||
}
|
||||
if (Schema::hasColumn('document_templates', 'tokens')) {
|
||||
$payload['tokens'] = $tokens;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\StorePermissionRequest;
|
||||
use App\Models\Permission;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response;
|
||||
|
||||
class PermissionController extends Controller
|
||||
{
|
||||
public function index(): Response
|
||||
{
|
||||
$permissions = Permission::query()
|
||||
->select('id','name','slug','description','created_at')
|
||||
->orderBy('name')
|
||||
->get();
|
||||
|
||||
return Inertia::render('Admin/Permissions/Index', [
|
||||
'permissions' => $permissions,
|
||||
]);
|
||||
}
|
||||
public function create(): Response
|
||||
{
|
||||
return Inertia::render('Admin/Permissions/Create');
|
||||
}
|
||||
|
||||
public function store(StorePermissionRequest $request): RedirectResponse
|
||||
{
|
||||
Permission::create($request->validated());
|
||||
|
||||
return redirect()->route('admin.index')->with('success', 'Dovoljenje ustvarjeno.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Permission;
|
||||
use App\Models\Role;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response;
|
||||
|
||||
class UserRoleController extends Controller
|
||||
{
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
Gate::authorize('manage-settings');
|
||||
|
||||
$users = User::with('roles:id,slug,name')->orderBy('name')->get(['id', 'name', 'email']);
|
||||
$roles = Role::with('permissions:id,slug,name')->orderBy('name')->get(['id', 'name', 'slug']);
|
||||
$permissions = Permission::orderBy('slug')->get(['id', 'name', 'slug']);
|
||||
|
||||
return Inertia::render('Admin/Users/Index', [
|
||||
'users' => $users,
|
||||
'roles' => $roles,
|
||||
'permissions' => $permissions,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request, User $user): RedirectResponse
|
||||
{
|
||||
Gate::authorize('manage-settings');
|
||||
|
||||
$validated = $request->validate([
|
||||
'roles' => ['array'],
|
||||
'roles.*' => ['integer', 'exists:roles,id'],
|
||||
]);
|
||||
|
||||
$user->roles()->sync($validated['roles'] ?? []);
|
||||
|
||||
return back()->with('success', 'Roles updated');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user