diff --git a/app/Enums/LayoutForm.php b/app/Enums/LayoutForm.php
new file mode 100644
index 0000000..434d90a
--- /dev/null
+++ b/app/Enums/LayoutForm.php
@@ -0,0 +1,31 @@
+ 'Row',
+ self::COLUMN => 'Column',
+ self::VALUE => 'Value',
+ self::SECTION => 'Section',
+ self::HR_LINE => 'HR Line',
+ };
+ }
+
+ public static function options(): array
+ {
+ return collect(self::cases())->map(fn ($case) => [
+ 'value' => $case->value,
+ 'label' => $case->label(),
+ ])->toArray();
+ }
+}
diff --git a/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php
new file mode 100644
index 0000000..4d03593
--- /dev/null
+++ b/app/Http/Controllers/Web/Ekosistem/FormBasisDataController.php
@@ -0,0 +1,295 @@
+json([
+ 'status' => 'error',
+ 'message' => 'Data tabel tidak ditemukan.'
+ ], 404);
+ }
+
+ $listEnum = LayoutForm::options();
+
+ $tab = $request->tab ?? 'form';
+ $tabel->state = 'preview';
+
+ return view('ekosistem.form-basis-data.index', compact('tabel', 'listEnum', 'tab'));
+ }
+
+ public function create()
+ {
+ //
+ }
+
+ public function store(Request $request, string $tabelId): JsonResponse
+ {
+ Gate::authorize('super_admin');
+
+ $tabel = TabelBasisData::find($tabelId);
+ if (!$tabel) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data tabel tidak ditemukan.'
+ ], 404);
+ }
+
+ $validated = $request->validate([
+ 'parent_id' => ['nullable', 'exists:ekosistem_basis_data_form,id'],
+ 'tipe' => ['required', Rule::enum(LayoutForm::class)],
+ 'column_width' => [
+ Rule::requiredIf($request->tipe === LayoutForm::COLUMN->value),
+ 'nullable', 'integer', 'min:1', 'max:12'],
+ 'kolom_id' => [
+ Rule::requiredIf($request->tipe === LayoutForm::VALUE->value),
+ 'nullable', 'exists:ekosistem_basis_data_kolom,id'],
+ 'section_label' => [
+ Rule::requiredIf($request->tipe === LayoutForm::SECTION->value),
+ 'nullable', 'string'],
+ ]);
+
+ FormBasisData::create([...$validated,
+ 'tabel_id' => $tabelId,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Form basis data berhasil ditambahkan.'
+ ], 201);
+ }
+
+ public function show(string $tabelId, string $id): JsonResponse
+ {
+ Gate::authorize('super_admin');
+
+ $form = FormBasisData::where('tabel_id', $tabelId)->find($id);
+ if (!$form) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data formulir basis data tidak ditemukan.'
+ ], 404);
+ }
+ return response()->json([
+ 'status' => 'success',
+ 'data' => $form
+ ], 200);
+ }
+
+ public function edit(string $id)
+ {
+ //
+ }
+
+ public function update(Request $request, string $tabelId, string $id)
+ {
+ Gate::authorize('super_admin');
+
+ $form = FormBasisData::where('tabel_id', $tabelId)->find($id);
+ if (!$form) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data formulir basis data tidak ditemukan.'
+ ], 404);
+ }
+
+ $validated = $request->validate([
+ 'parent_id' => ['nullable', 'exists:ekosistem_basis_data_form,id'],
+ 'tipe' => ['required', Rule::enum(LayoutForm::class)],
+ 'column_width' => [
+ Rule::requiredIf($request->tipe === LayoutForm::COLUMN->value),
+ 'nullable', 'integer', 'min:1', 'max:12'],
+ 'kolom_id' => [
+ Rule::requiredIf($request->tipe === LayoutForm::VALUE->value),
+ 'nullable', 'exists:ekosistem_basis_data_kolom,id'],
+ 'section_label' => [
+ Rule::requiredIf($request->tipe === LayoutForm::SECTION->value),
+ 'nullable', 'string'],
+ ]);
+
+ $form->update([...$validated,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Form basis data berhasil diubah.'
+ ]);
+ }
+
+ public function destroy(string $tabelId, string $id): JsonResponse
+ {
+ Gate::authorize('super_admin');
+
+ $form = FormBasisData::where('tabel_id', $tabelId)->find($id);
+ if (!$form) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data form basis data tidak ditemukan.'
+ ], 404);
+ }
+ if ($form->form->count() > 0) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Tidak dapat menghapus formulir basis data yang memiliki formulir.'
+ ], 400);
+ }
+ $form->update([
+ 'deleted_by' => auth()->user()->id
+ ]);
+ $form->delete();
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Form basis data berhasil dihapus.'
+ ], 200);
+ }
+
+ public function generate(Request $request, string $tabelId): RedirectResponse
+ {
+ Gate::authorize('super_admin');
+
+ $tabel = TabelBasisData::find($tabelId);
+ if (!$tabel) {
+ return redirect()->route('tabel.formulir.index', $tabelId)->with('error', 'Tabel basis data tidak ditemukan.');
+ }
+
+ DB::transaction(function () use ($tabel) {
+
+ FormBasisData::where('tabel_id', $tabel->id)->delete();
+
+ FormBasisData::create([
+ 'tabel_id' => $tabel->id,
+ 'tipe' => LayoutForm::SECTION,
+ 'section_label' => $tabel->label,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ FormBasisData::create([
+ 'tabel_id' => $tabel->id,
+ 'tipe' => LayoutForm::HR_LINE,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ $chunks = $tabel->kolom->chunk(4);
+
+ foreach ($chunks as $chunk) {
+
+ $row = FormBasisData::create([
+ 'tabel_id' => $tabel->id,
+ 'tipe' => LayoutForm::ROW,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ foreach ($chunk as $kolom) {
+ $column = FormBasisData::create([
+ 'tabel_id' => $tabel->id,
+ 'tipe' => LayoutForm::COLUMN,
+ 'column_width' => 3,
+ 'parent_id' => $row->id,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+
+ FormBasisData::create([
+ 'tabel_id' => $tabel->id,
+ 'tipe' => LayoutForm::VALUE,
+ 'parent_id' => $column->id,
+ 'kolom_id' => $kolom->id,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id
+ ]);
+ }
+ }
+
+ });
+
+ return redirect()->route('tabel.formulir.index', $tabelId)->with('success', 'Formulir berhasil dibuat.');
+ }
+
+ public function moveUp(Request $request, string $tabelId, string $id): JsonResponse
+ {
+ Gate::authorize('super_admin');
+
+ $current = FormBasisData::where('tabel_id', $tabelId)->find($id);
+ if (!$current) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data formulir tidak ditemukan.'
+ ], 404);
+ }
+
+ $prev = FormBasisData::where('tabel_id', $tabelId)
+ ->where('urutan', '<', $current->urutan)
+ ->where('parent_id', $current->parent_id)
+ ->orderBy('urutan', 'desc')
+ ->first();
+
+ if ($prev) {
+ // swap
+ [$current->urutan, $prev->urutan] = [$prev->urutan, $current->urutan];
+ $current->save();
+ $prev->save();
+ }
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Formulir basis data berhasil diperbarui.'
+ ], 200);
+ }
+
+ public function moveDown(Request $request, string $tabelId, string $id): JsonResponse
+ {
+ Gate::authorize('super_admin');
+
+ $current = FormBasisData::where('tabel_id', $tabelId)->find($id);
+ if (!$current) {
+ return response()->json([
+ 'status' => 'error',
+ 'message' => 'Data formulir tidak ditemukan.'
+ ], 404);
+ }
+
+ $next = FormBasisData::where('tabel_id', $tabelId)
+ ->where('urutan', '>', $current->urutan)
+ ->where('parent_id', $current->parent_id)
+ ->orderBy('urutan', 'asc')
+ ->first();
+
+ if ($next) {
+ // swap
+ [$current->urutan, $next->urutan] = [$next->urutan, $current->urutan];
+ $current->save();
+ $next->save();
+ }
+
+ return response()->json([
+ 'status' => 'success',
+ 'message' => 'Formulir basis data berhasil diperbarui.'
+ ], 200);
+ }
+}
diff --git a/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php
index 3813976..d29fb2c 100644
--- a/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php
+++ b/app/Http/Controllers/Web/Ekosistem/KolomBasisDataController.php
@@ -188,7 +188,7 @@ class KolomBasisDataController extends Controller
], 404);
}
- $prev = KolomBasisData::where('tabel_id', $current->tabel_id)
+ $prev = KolomBasisData::where('tabel_id', $tabelId)
->where('urutan', '<', $current->urutan)
->orderBy('urutan', 'desc')
->first();
@@ -218,7 +218,7 @@ class KolomBasisDataController extends Controller
], 404);
}
- $next = KolomBasisData::where('tabel_id', $current->tabel_id)
+ $next = KolomBasisData::where('tabel_id', $tabelId)
->where('urutan', '>', $current->urutan)
->orderBy('urutan', 'asc')
->first();
diff --git a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php
index 84828cb..2c5234c 100644
--- a/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php
+++ b/app/Http/Controllers/Web/Ekosistem/ValueBasisDataController.php
@@ -8,6 +8,10 @@ use Illuminate\Support\Facades\Gate;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Str;
use App\Models\Ekosistem\TabelBasisData;
use App\Models\Ekosistem\KolomBasisData;
@@ -199,8 +203,7 @@ class ValueBasisDataController extends Controller
}
}
$list_relasi = collect($list_relasi);
- // dd($kolom->where('tipe', 'enum')->first()?->enum_opsi);
-
+
return view('ekosistem.value-basis-data.add', compact('tabel', 'kolom', 'program', 'list_relasi'));
}
diff --git a/app/Models/Ekosistem/FormBasisData.php b/app/Models/Ekosistem/FormBasisData.php
new file mode 100644
index 0000000..d8f7ab4
--- /dev/null
+++ b/app/Models/Ekosistem/FormBasisData.php
@@ -0,0 +1,236 @@
+ LayoutForm::class
+ ];
+
+ protected static function booted()
+ {
+ static::creating(function ($model) {
+ $max = self::where('tabel_id', $model->tabel_id)->max('urutan');
+ $model->urutan = ($max ?? 0) + 1;
+ });
+ static::addGlobalScope('order', function (Builder $builder) {
+ $builder->orderBy('urutan');
+ });
+ }
+
+
+ public function tabel(): BelongsTo
+ {
+ return $this->belongsTo(TabelBasisData::class, 'tabel_id');
+ }
+
+ public function form(): HasMany
+ {
+ return $this->hasMany(FormBasisData::class, 'parent_id')
+ ->with('form')
+ ->orderBy('urutan');
+ }
+
+ public function kolom(): BelongsTo
+ {
+ return $this->belongsTo(KolomBasisData::class, 'kolom_id');
+ }
+
+ public function renderHtml(string $state, $errors = null, $optionsFK = null, $values = null): string
+ {
+ return match ($this->tipe) {
+ LayoutForm::COLUMN => '
'
+ .$this->childHtml($state, $errors, $optionsFK, $values).'
',
+ LayoutForm::VALUE => $this->value($state, $errors, $optionsFK, $values),
+ LayoutForm::SECTION => ''.$this->section_label.' ',
+ LayoutForm::ROW => ''.$this->childHtml($state, $errors, $optionsFK, $values).'
',
+ LayoutForm::HR_LINE => ' ',
+ default => ''
+ };
+ }
+
+
+ private function childHtml(string $state, $errors = null, $optionsFK = null, $values = null): string
+ {
+ $html = '';
+ foreach ($this->form as $form) {
+ $html .= $form->renderHtml($state, $errors, $optionsFK, $values);
+ }
+ return $html;
+ }
+
+ private function value(string $state, $errors = null, $optionsFK = null, $values = null): string
+ {
+ $html = '';
+ if ($this->kolom) {
+ $k = $this->kolom;
+
+ $value = $values ? $values->where('kolom_id', $k->id)->first() : null;
+ $oldValue = old($k->kolom);
+
+ $html .= 'kolom_required'.$this->kolom->label;
+ $html .= ' ';
+
+ if($k->tipe == 'varchar') {
+ $html .= ' ';
+ }
+ elseif($k->tipe == 'text') {
+ $html .= '';
+ }
+ elseif($k->tipe == 'integer') {
+ $html .= ' ';
+ }
+ elseif($k->tipe == 'float') {
+ $html .= ' ';
+ }
+ elseif($k->tipe == 'date') {
+ $html .= ' ';
+ }
+ elseif($k->tipe == 'datetime'){
+ $html .= ' ';
+ }
+ elseif($k->tipe == 'boolean') {
+ if ($state == 'preview' || $state == 'view') {
+ $html .= ' ';
+ } elseif ($state == 'add') {
+ $html .= '
+ kolom) == 1 ? 'selected' : '') .'>Ya
+ kolom) == 0 ? 'selected' : '') .'>Tidak
+ ';
+ } elseif ($state == 'edit') {
+ $html .= '
+ kolom) ?? (($value ? $value['value_'.$k->tipe] : null) ?? null) == 1) ? 'selected' : '') .'>Ya
+ kolom) ?? (($value ? $value['value_'.$k->tipe] : null) ?? null) == 0) ? 'selected' : '') .'>Tidak
+ ';
+ }
+ }
+ elseif($k->tipe == 'foreign_key') {
+ if ($state == 'preview' || $state == 'view') {
+ $html .= ' ';
+ } elseif ($state == 'add') {
+ $html .= '';
+ if ($optionsFK && $optionsFK->where('kolom_id', $k->id)->first() != null) {
+ foreach ($optionsFK->where('kolom_id', $k->id)->first()['options'] as $option) {
+ $html .= 'kolom) == $option->value ? 'selected' : '').'>'.$option->label.' ';
+ }
+ }
+ $html .= ' ';
+ } elseif ($state == 'edit') {
+ $html .= '';
+ if ($optionsFK && $optionsFK->where('kolom_id', $k->id)->first() != null) {
+ foreach ($optionsFK->where('kolom_id', $k->id)->first()['options'] as $option) {
+ $html .= 'kolom) ?? ($value ? $value['value_relasi'] : null) == $option->value ? 'selected' : '').'>'.$option->label.' ';
+ }
+ }
+ $html .= ' ';
+ }
+ }
+ elseif($k->tipe == 'enum') {
+ if ($state == 'preview' || $state == 'view') {
+ $html .= ' ';
+ } elseif ($state == 'add') {
+ $html .= '';
+ foreach($k->enum_opsi as $opsi) {
+ $html .= 'kolom) == $opsi['value'] ? 'selected' : ''). '>' .$opsi['label']. ' ';
+ }
+ $html .= ' ';
+ } elseif ($state == 'edit') {
+ $html .= '';
+ foreach($k->enum_opsi as $opsi) {
+ $html .= 'kolom) ?? ($value ? $value['value_'.$k->tipe] : null) == $opsi['value'] ? 'selected' : ''). '>' .$opsi['label']. ' ';
+ }
+ $html .= ' ';
+ }
+ }
+ else {
+ $html .= ' ';
+ }
+
+ $errorClass = $errors && $errors->has($k->kolom)
+ ? 'is-invalid'
+ : '';
+
+ if ($state == 'preview') {
+ $html = Str::of($html)
+ ->replace('kolom_value', '')
+ ->replace('kolom_name', $k->kolom)
+ ->replace('kolom_error', '')
+ ->replace('kolom_required', '');
+ } elseif ($state == 'add') {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($oldValue))
+ ->replace('kolom_name', $k->kolom)
+ ->replace('kolom_error', $errorClass)
+ ->replace('kolom_required', '')
+ ->replace('readonly', '');
+ } elseif ($state == 'edit') {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($oldValue ?? ($value ? ($value['value_'.$k->tipe]) : null)))
+ ->replace('kolom_name', $k->kolom)
+ ->replace('kolom_error', $errorClass)
+ ->replace('kolom_required', '')
+ ->replace('readonly', '');
+ } elseif ($state == 'view') {
+ $html = Str::of($html)
+ ->replace('kolom_name', $k->kolom)
+ ->replace('kolom_error', '')
+ ->replace('kolom_required', '');
+
+ if ($k->tipe == 'boolean') {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($value ? ($value['value_'.$k->tipe] == 1 ? 'Ya' : 'Tidak') : null));
+ } elseif($k->tipe == 'foreign_key') {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($value ? $value['value_relasi_label'] : null));
+ } elseif($k->tipe == 'enum') {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($value ? $value['value_enum_label'] : null));
+ } else {
+ $html = Str::of($html)
+ ->replace('kolom_value', e($value ? $value['value_'.$k->tipe] : null));
+ }
+ }
+ }
+
+ return $html;
+ }
+}
diff --git a/app/Models/Ekosistem/TabelBasisData.php b/app/Models/Ekosistem/TabelBasisData.php
index b238269..5d04b2e 100644
--- a/app/Models/Ekosistem/TabelBasisData.php
+++ b/app/Models/Ekosistem/TabelBasisData.php
@@ -7,10 +7,14 @@ use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Casts\Attribute;
use App\Models\Ekosistem\KolomBasisData;
use App\Models\Ekosistem\GroupBasisData;
use App\Models\Ekosistem\RingkasanBasisData;
+use App\Models\Ekosistem\FormBasisData;
class TabelBasisData extends Model
{
@@ -53,4 +57,20 @@ class TabelBasisData extends Model
{
return $this->hasMany(RingkasanBasisData::class, 'tabel_id')->orderBy('urutan');
}
+
+ public function form(): HasMany
+ {
+ return $this->hasMany(FormBasisData::class, 'tabel_id')
+ ->whereNull('parent_id')
+ ->orderBy('urutan');
+ }
+
+ public function renderHtml(string $state, $errors = null, $optionsFK = null, $values = null): string
+ {
+ $html = '';
+ foreach ($this->form as $form) {
+ $html .= $form->renderHtml($state, $errors, $optionsFK, $values);
+ }
+ return $html;
+ }
}
diff --git a/database/migrations/2026_05_08_161821_create_form_basis_data_table.php b/database/migrations/2026_05_08_161821_create_form_basis_data_table.php
new file mode 100644
index 0000000..2502189
--- /dev/null
+++ b/database/migrations/2026_05_08_161821_create_form_basis_data_table.php
@@ -0,0 +1,47 @@
+id();
+
+ $table->foreignId('tabel_id')->constrained('ekosistem_basis_data_tabel')->restrictOnDelete();
+
+ $table->foreignId('parent_id')->nullable()->constrained('ekosistem_basis_data_form')->restrictOnDelete();
+
+ $table->enum('tipe', ['form-row', 'form-column', 'form-value', 'form-section', 'form-hr-line'])->default('form-value');
+
+ $table->integer('column_width')->nullable();
+
+ $table->foreignId('kolom_id')->nullable()->constrained('ekosistem_basis_data_kolom')->nullOnDelete();
+
+ $table->string('section_label')->nullable();
+
+ $table->integer('urutan')->default(1);
+
+ $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null');
+ $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null');
+ $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null');
+
+ $table->timestamps();
+ $table->softDeletes();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('ekosistem_basis_data_form');
+ }
+};
diff --git a/resources/views/ekosistem/form-basis-data/add-column.blade.php b/resources/views/ekosistem/form-basis-data/add-column.blade.php
new file mode 100644
index 0000000..7ab57e1
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/add-column.blade.php
@@ -0,0 +1,81 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/add-hr-line.blade.php b/resources/views/ekosistem/form-basis-data/add-hr-line.blade.php
new file mode 100644
index 0000000..22475be
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/add-hr-line.blade.php
@@ -0,0 +1,27 @@
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/add-row.blade.php b/resources/views/ekosistem/form-basis-data/add-row.blade.php
new file mode 100644
index 0000000..8693842
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/add-row.blade.php
@@ -0,0 +1,27 @@
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/add-section.blade.php b/resources/views/ekosistem/form-basis-data/add-section.blade.php
new file mode 100644
index 0000000..a9837ec
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/add-section.blade.php
@@ -0,0 +1,77 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/add-value.blade.php b/resources/views/ekosistem/form-basis-data/add-value.blade.php
new file mode 100644
index 0000000..f80e27a
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/add-value.blade.php
@@ -0,0 +1,85 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/edit-column.blade.php b/resources/views/ekosistem/form-basis-data/edit-column.blade.php
new file mode 100644
index 0000000..99d8e01
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/edit-column.blade.php
@@ -0,0 +1,94 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/edit-section.blade.php b/resources/views/ekosistem/form-basis-data/edit-section.blade.php
new file mode 100644
index 0000000..509079a
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/edit-section.blade.php
@@ -0,0 +1,89 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/edit-value.blade.php b/resources/views/ekosistem/form-basis-data/edit-value.blade.php
new file mode 100644
index 0000000..14384e9
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/edit-value.blade.php
@@ -0,0 +1,97 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/index.blade.php b/resources/views/ekosistem/form-basis-data/index.blade.php
new file mode 100644
index 0000000..27fceeb
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/index.blade.php
@@ -0,0 +1,283 @@
+@extends('layout.main')
+
+@section('content')
+
+
+
+
+
+
+
+
+
+ Rancangan
+
+
+
+
+ Pratinjau
+
+
+
+
+
+
+
+
+
+
+
Pratinjau Formulir
+ {!! $tabel->renderHtml('preview') !!}
+
+
+
+
+
+
+
+
+
+@include('ekosistem.form-basis-data.add-row')
+@include('ekosistem.form-basis-data.add-section')
+@include('ekosistem.form-basis-data.edit-section')
+@include('ekosistem.form-basis-data.add-hr-line')
+@include('ekosistem.form-basis-data.add-column')
+@include('ekosistem.form-basis-data.edit-column')
+@include('ekosistem.form-basis-data.move-column')
+@include('ekosistem.form-basis-data.add-value')
+@include('ekosistem.form-basis-data.edit-value')
+@endsection
+
+@push('scripts')
+
+
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/form-basis-data/move-column.blade.php b/resources/views/ekosistem/form-basis-data/move-column.blade.php
new file mode 100644
index 0000000..ad27ef6
--- /dev/null
+++ b/resources/views/ekosistem/form-basis-data/move-column.blade.php
@@ -0,0 +1,98 @@
+
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/tabel-basis-data/view.blade.php b/resources/views/ekosistem/tabel-basis-data/view.blade.php
index 3eb64f1..3c90a9b 100644
--- a/resources/views/ekosistem/tabel-basis-data/view.blade.php
+++ b/resources/views/ekosistem/tabel-basis-data/view.blade.php
@@ -159,6 +159,24 @@
+ Informasi Formulir Tabel
+
+
+
+
+
+
+
Pratinjau Formulir
+ {!! $tabel->renderHtml('preview') !!}
+
+
+
diff --git a/resources/views/ekosistem/value-basis-data/add-ref.blade.php b/resources/views/ekosistem/value-basis-data/add-ref.blade.php
new file mode 100644
index 0000000..22bce66
--- /dev/null
+++ b/resources/views/ekosistem/value-basis-data/add-ref.blade.php
@@ -0,0 +1,107 @@
+@extends('layout.main')
+
+@section('content')
+
+@endsection
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/value-basis-data/add.blade.php b/resources/views/ekosistem/value-basis-data/add.blade.php
index 22bce66..c75a269 100644
--- a/resources/views/ekosistem/value-basis-data/add.blade.php
+++ b/resources/views/ekosistem/value-basis-data/add.blade.php
@@ -10,58 +10,8 @@
@csrf
-
- Informasi {{ $tabel->label }}
-
- @foreach($kolom as $k)
-
- @endforeach
-
-
+
+ {!! $tabel->renderHtml('add', $errors, $list_relasi) !!}
Kembali
diff --git a/resources/views/ekosistem/value-basis-data/edit-ref.blade.php b/resources/views/ekosistem/value-basis-data/edit-ref.blade.php
new file mode 100644
index 0000000..6963d01
--- /dev/null
+++ b/resources/views/ekosistem/value-basis-data/edit-ref.blade.php
@@ -0,0 +1,124 @@
+@extends('layout.main')
+
+@section('content')
+
+
+
+
+
+
+ @csrf
+ @method('PUT')
+
+ Informasi {{ $tabel->label }}
+ @if (!$program)
+
+
+ Program*
+
+ Pilih Program
+ @foreach($programList as $prog)
+ id ? 'selected' : '' }}>{{ $prog->nama }}
+ @endforeach
+
+
+
+ @endif
+
+ @foreach($kolom as $k)
+ where('kolom_id', $k->id)->first();
+ ?>
+
+ @endforeach
+
+
+
+
+
Kembali
+
Simpan Data
+
+
+
+
+
+@endsection
+
+@push('scripts')
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/ekosistem/value-basis-data/edit.blade.php b/resources/views/ekosistem/value-basis-data/edit.blade.php
index 6963d01..ae3326f 100644
--- a/resources/views/ekosistem/value-basis-data/edit.blade.php
+++ b/resources/views/ekosistem/value-basis-data/edit.blade.php
@@ -10,76 +10,10 @@
@csrf
- @method('PUT')
+ @method('PUT')
- Informasi {{ $tabel->label }}
- @if (!$program)
-
-
- Program*
-
- Pilih Program
- @foreach($programList as $prog)
- id ? 'selected' : '' }}>{{ $prog->nama }}
- @endforeach
-
-
-
- @endif
-
- @foreach($kolom as $k)
- where('kolom_id', $k->id)->first();
- ?>
-
- @endforeach
-
+ {!! $tabel->renderHtml('edit', $errors, $list_relasi, $values) !!}
-
Kembali
Simpan Data
diff --git a/resources/views/ekosistem/value-basis-data/view.blade.php b/resources/views/ekosistem/value-basis-data/view.blade.php
index 6716131..bdc2da3 100644
--- a/resources/views/ekosistem/value-basis-data/view.blade.php
+++ b/resources/views/ekosistem/value-basis-data/view.blade.php
@@ -12,63 +12,7 @@
@csrf
@method('PUT')
-
Informasi {{ $tabel->label }}
- @if (!$program)
-
-
- Program*
-
- Pilih Program
- @foreach($programList as $prog)
- id ? 'selected' : '' }}>{{ $prog->nama }}
- @endforeach
-
-
-
- @endif
-
- @foreach($kolom as $k)
- where('kolom_id', $k->id)->first();
- ?>
-
- @endforeach
-
-
+ {!! $tabel->renderHtml('view', $errors, null, $values) !!}
Kembali
diff --git a/routes/web.php b/routes/web.php
index 9ceb9fb..1675e25 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -118,9 +118,13 @@ Route::middleware('auth')
Route::put('tabel/{tabelId}/kolom/{id}/move-down', [App\Http\Controllers\Web\Ekosistem\KolomBasisDataController::class, 'moveDown'])->name('tabel.kolom.move-down');
Route::resource('tabel.kolom', App\Http\Controllers\Web\Ekosistem\KolomBasisDataController::class)->only(['show', 'store', 'update', 'destroy']);
Route::resource('tabel.data', App\Http\Controllers\Web\Ekosistem\ValueBasisDataController::class);
- Route::resource('tabel.ringkasan', App\Http\Controllers\Web\Ekosistem\RingkasanBasisDataController::class);
Route::put('tabel/{tabelId}/ringkasan/{id}/move-up', [App\Http\Controllers\Web\Ekosistem\RingkasanBasisDataController::class, 'moveUp'])->name('tabel.ringkasan.move-up');
Route::put('tabel/{tabelId}/ringkasan/{id}/move-down', [App\Http\Controllers\Web\Ekosistem\RingkasanBasisDataController::class, 'moveDown'])->name('tabel.ringkasan.move-down');
+ Route::resource('tabel.ringkasan', App\Http\Controllers\Web\Ekosistem\RingkasanBasisDataController::class);
+ Route::post('tabel/{tabelId}/formulir/generate', [App\Http\Controllers\Web\Ekosistem\FormBasisDataController::class, 'generate'])->name('tabel.formulir.generate');
+ Route::put('tabel/{tabelId}/formulir/{id}/move-up', [App\Http\Controllers\Web\Ekosistem\FormBasisDataController::class, 'moveUp'])->name('tabel.formulir.move-up');
+ Route::put('tabel/{tabelId}/formulir/{id}/move-down', [App\Http\Controllers\Web\Ekosistem\FormBasisDataController::class, 'moveDown'])->name('tabel.formulir.move-down');
+ Route::resource('tabel.formulir', App\Http\Controllers\Web\Ekosistem\FormBasisDataController::class);
Route::resource('petani-cpm', App\Http\Controllers\Web\Ekosistem\PetaniCPMController::class);
Route::get('petani-cpm/summary/{tipe}', [App\Http\Controllers\Web\Ekosistem\PetaniCPMController::class, 'summary'])->name('petani-cpm.summary');