added form others

This commit is contained in:
Jagad R R
2024-12-20 11:07:07 +07:00
parent cd28280fb6
commit 53b60c42d6
18 changed files with 671 additions and 102 deletions
@@ -209,7 +209,6 @@ class FormEntertainmentPresentationController extends Controller
'bukti2' => $filePaths['bukti2'] ?? null,
'bukti3' => $filePaths['bukti3'] ?? null,
'account_number' => $kategori->account_number,
'status' => 'On Progress',
]);
session()->flash('success', 'Form has been updated.');
@@ -42,7 +42,6 @@ class FormMeetingSeminarController extends Controller
'allowance' => 'required',
'transport_ankot' => 'required',
'hotel' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
@@ -105,7 +104,7 @@ class FormMeetingSeminarController extends Controller
'allowance' => $request->allowance,
'transport_ankot' => $request->transport_ankot,
'hotel' => $request->hotel,
'total' => $request->total,
'total' => $request->allowance + $request->transport_ankot + $request->hotel,
'bukti1' => $filePaths['bukti1'] ?? null,
'bukti2' => $filePaths['bukti2'] ?? null,
'bukti3' => $filePaths['bukti3'] ?? null,
@@ -135,7 +134,6 @@ class FormMeetingSeminarController extends Controller
'allowance' => 'required',
'transport_ankot' => 'required',
'hotel' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
@@ -192,12 +190,11 @@ class FormMeetingSeminarController extends Controller
'allowance' => $request->allowance,
'transport_ankot' => $request->transport_ankot,
'hotel' => $request->hotel,
'total' => $request->total,
'total' => $request->allowance + $request->transport_ankot + $request->hotel,
'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
'account_number' => $kategori->account_number,
'status' => 'On Progress',
]);
session()->flash('success', 'Form has been updated.');
@@ -0,0 +1,219 @@
<?php
namespace App\Http\Controllers\Forms;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\FormOthers;
use App\Models\Rayon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use App\Models\Region;
use App\Models\Cabang;
use App\Models\UserHasCabang;
use App\Models\Kategori;
use Illuminate\Support\Str;
use App\Helpers\NextCloudHelper;
class FormOtherController extends Controller
{
public function index()
{
$this->checkAuthorization(auth()->user(), ['forms.other.view']);
$forms = FormOthers::where('user_id', auth()->user()->id)->get();
return view('backend.pages.forms.other.index', [
'forms' => $forms
]);
}
public function create()
{
$this->checkAuthorization(auth()->user(), ['forms.other.create']);
return view('backend.pages.forms.other.create', [
'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment & Presentation', 'Meeting & Seminar'])->get()
]);
}
public function store(Request $request)
{
$this->checkAuthorization(auth()->user(), ['forms.other.create']);
$request->validate([
'kategori_id' => 'required',
'tanggal' => 'required|date',
'keterangan' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
]);
$cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
$region = Region::where('id', $cabang->region_id)->first();
$kategori = Kategori::where('id', $request->kategori_id)->first();
$filePaths = [];
$folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/other';
if ($request->hasFile('bukti1')) {
$bukti1 = $request->file('bukti1');
$filename = Str::uuid() . '.' . $bukti1->extension();
$filePaths['bukti1'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti1->getContent(),
$filename
);
}
if ($request->hasFile('bukti2')) {
$bukti2 = $request->file('bukti2');
$filename = Str::uuid() . '.' . $bukti2->extension();
$filePaths['bukti2'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti2->getContent(),
$filename
);
}
if ($request->hasFile('bukti3')) {
$bukti3 = $request->file('bukti3');
$filename = Str::uuid() . '.' . $bukti3->extension();
$filePaths['bukti3'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti3->getContent(),
$filename
);
}
// Generate sequence number and expense number
$sequence_number = FormOthers::withTrashed()->where('expense_number', 'like', $region->code . '-' . $cabang->code . '-OTH-' . date('ym') . '%')->count() + 1;
$formatted_sequence_number = str_pad($sequence_number, 4, '0', STR_PAD_LEFT);
$expense_number = $region->code . '-' . $cabang->code . '-OTH-' . date('ym') . $formatted_sequence_number;
// Save the form data
FormOthers::create([
'expense_number' => $expense_number,
'user_id' => auth()->user()->id,
'kategori_id' => $request->kategori_id,
'tanggal' => $request->tanggal,
'keterangan' => $request->keterangan,
'total' => $request->total,
'bukti1' => $filePaths['bukti1'] ?? null,
'bukti2' => $filePaths['bukti2'] ?? null,
'bukti3' => $filePaths['bukti3'] ?? null,
'account_number' => $kategori->account_number,
'status' => 'On Progress',
]);
session()->flash('success', 'Form has been created.');
return redirect()->route('forms.other');
}
public function edit($id)
{
$this->checkAuthorization(auth()->user(), ['forms.other.edit']);
$form = FormOthers::findOrfail($id);
return view('backend.pages.forms.other.edit', [
'form' => $form,
'kategori' => Kategori::whereNotIn('name', ['Up Country', 'Vehicle Running Cost', 'Entertainment & Presentation', 'Meeting & Seminar'])->get()
]);
}
public function update(Request $request, $id)
{
$this->checkAuthorization(auth()->user(), ['forms.other.edit']);
$request->validate([
'kategori_id' => 'required',
'tanggal' => 'required|date',
'keterangan' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
]);
$cabang = UserHasCabang::with('cabang')->where('user_id', auth()->user()->id)->first()->cabang;
$region = Region::where('id', $cabang->region_id)->first();
$kategori = Kategori::where('id', $request->kategori_id)->first();
$filePaths = [];
$folderPath = '/expense/' . $region->code . '/' . $cabang->code . '/other';
if ($request->hasFile('bukti1')) {
$bukti1 = $request->file('bukti1');
$filename = Str::uuid() . '.' . $bukti1->extension();
$filePaths['bukti1'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti1->getContent(),
$filename
);
}
if ($request->hasFile('bukti2')) {
$bukti2 = $request->file('bukti2');
$filename = Str::uuid() . '.' . $bukti2->extension();
$filePaths['bukti2'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti2->getContent(),
$filename
);
}
if ($request->hasFile('bukti3')) {
$bukti3 = $request->file('bukti3');
$filename = Str::uuid() . '.' . $bukti3->extension();
$filePaths['bukti3'] = $folderPath . '/' . $filename;
NextCloudHelper::uploadFile(
$folderPath,
$bukti3->getContent(),
$filename
);
}
// Save the form data
$form = FormOthers::findOrfail($id);
$form->update([
'kategori_id' => $request->kategori_id,
'tanggal' => $request->tanggal,
'keterangan' => $request->keterangan,
'total' => $request->total,
'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
'account_number' => $kategori->account_number,
]);
session()->flash('success', 'Form has been updated.');
return redirect()->route('forms.other');
}
public function destroy($id)
{
$this->checkAuthorization(auth()->user(), ['forms.other.delete']);
$form = FormOthers::findOrfail($id);
$form->delete();
session()->flash('success', 'Form has been deleted.');
return redirect()->route('forms.other');
}
}
@@ -48,8 +48,6 @@ class FormUpCountryController extends Controller
'allowance' => 'required',
'transport_dalkot' => 'required',
'transport_ankot' => 'required',
'hotel' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
@@ -117,7 +115,7 @@ class FormUpCountryController extends Controller
'transport_dalkot' => $request->transport_dalkot,
'transport_ankot' => $request->transport_ankot,
'hotel' => $request->hotel,
'total' => $request->total,
'total' => $request->allowance + $request->transport_dalkot + $request->transport_ankot + $request->hotel,
'bukti1' => $filePaths['bukti1'] ?? null,
'bukti2' => $filePaths['bukti2'] ?? null,
'bukti3' => $filePaths['bukti3'] ?? null,
@@ -153,7 +151,6 @@ class FormUpCountryController extends Controller
'transport_dalkot' => 'required',
'transport_ankot' => 'required',
'hotel' => 'required',
'total' => 'required',
'bukti1' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'bukti2' => 'nullable|file|mimes:xlsx,xls,csv',
'bukti3' => 'nullable|file|mimes:pdf',
@@ -215,12 +212,11 @@ class FormUpCountryController extends Controller
'transport_dalkot' => $request->transport_dalkot,
'transport_ankot' => $request->transport_ankot,
'hotel' => $request->hotel,
'total' => $request->total,
'total' => $request->allowance + $request->transport_dalkot + $request->transport_ankot + $request->hotel,
'bukti1' => $filePaths['bukti1'] ?? $form->bukti1,
'bukti2' => $filePaths['bukti2'] ?? $form->bukti2,
'bukti3' => $filePaths['bukti3'] ?? $form->bukti3,
'account_number' => $kategori->account_number,
'status' => 'On Progress',
]);
session()->flash('success', 'Form has been updated.');
@@ -116,7 +116,6 @@ class FormVehicleController extends Controller
'bukti2' => $filePaths['bukti2'] ?? null,
'bukti3' => $filePaths['bukti3'] ?? null,
'account_number' => $kategori->account_number,
'status' => 'On Progress',
]);
session()->flash('success', 'Form has been created.');
+11
View File
@@ -20,6 +20,17 @@ class FormOthers extends Model
'bukti1',
'bukti2',
'bukti3',
'account_number',
'status',
];
public function user()
{
return $this->belongsTo(Admin::class);
}
public function kategori()
{
return $this->belongsTo(Kategori::class);
}
}
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('form_others', function (Blueprint $table) {
$table->string('account_number')->nullable()->after('total');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('form_others', function (Blueprint $table) {
$table->dropColumn('account_number');
});
}
};
@@ -5,6 +5,8 @@
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
@@ -63,7 +65,7 @@
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="number" class="form-control" name="total" id="total" required value="{{ old('total') }}">
<input type="string" class="form-control" name="total" id="total" required value="{{ old('total') }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 1</label>
@@ -86,4 +88,14 @@
</div>
</div>
</section>
<script>
new AutoNumeric('#total', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -5,6 +5,8 @@
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
@@ -64,7 +66,7 @@
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="number" class="form-control" name="total" id="total" required value="{{ $form->total }}">
<input type="string" class="form-control" name="total" id="total" required value="{{ $form->total }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 1</label>
@@ -87,4 +89,14 @@
</div>
</div>
</section>
<script>
new AutoNumeric('#total', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -43,10 +43,6 @@
<label class="form-label">Hotel</label>
<input type="text" class="form-control" name="hotel" id="hotel" required value="{{ old('hotel') }}">
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="text" class="form-control" name="total" id="total" required value="{{ old('total') }}">
</div>
</div>
<div class="col-lg-6">
@@ -97,28 +93,4 @@
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
<script>
const allowance = document.getElementById('allowance');
const transportAnkot = document.getElementById('transport_ankot');
const hotel = document.getElementById('hotel');
const total = document.getElementById('total');
// Function to calculate total
function calculateTotal() {
const allowanceValue = parseInt(allowance.value) || 0;
const transportAnkotValue = parseInt(transportAnkot.value) || 0;
const hotelValue = parseInt(hotel.value) || 0;
total.value = allowanceValue + transportAnkotValue + hotelValue;
}
// Attach event listeners
[allowance, transportAnkot, hotel].forEach(input => {
input.addEventListener('input', calculateTotal);
});
// Initial calculation on page load
calculateTotal();
</script>
@endsection
@@ -44,10 +44,6 @@
<label class="form-label">Hotel</label>
<input type="text" class="form-control" name="hotel" id="hotel" required value="{{ $form->hotel }}">
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="text" class="form-control" name="total" id="total" required value="{{ $form->total }}">
</div>
</div>
<div class="col-lg-6">
@@ -98,28 +94,4 @@
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
<script>
const allowance = document.getElementById('allowance');
const transportAnkot = document.getElementById('transport_ankot');
const hotel = document.getElementById('hotel');
const total = document.getElementById('total');
// Function to calculate total
function calculateTotal() {
const allowanceValue = parseInt(allowance.value) || 0;
const transportAnkotValue = parseInt(transportAnkot.value) || 0;
const hotelValue = parseInt(hotel.value) || 0;
total.value = allowanceValue + transportAnkotValue + hotelValue;
}
// Attach event listeners
[allowance, transportAnkot, hotel].forEach(input => {
input.addEventListener('input', calculateTotal);
});
// Initial calculation on page load
calculateTotal();
</script>
@endsection
@@ -0,0 +1,91 @@
@extends('layouts.app')
@section('title')
Dashboard
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Tambahkan Expense Other Baru</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
</li>
</ol>
</div>
</div>
</div>
</section>
<section class="content">
<div class="container-fluid">
<div class="card card-primary card-outline">
<div class="card-body">
<form method="POST" action="{{ route('forms.other.store') }}" enctype="multipart/form-data">
@csrf
@include('backend.layouts.partials.messages')
<div class="row">
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label">Kategori</label>
<select class="form-control" name="kategori_id" id="kategori_id" required>
<option value="">Pilih Kategori</option>
@foreach ($kategori as $item)
<option value="{{ $item->id }}" {{ old('kategori_id') == $item->id ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label class="form-label">Tanggal</label>
<input type="date" class="form-control" name="tanggal" id="tanggal" required value="{{ old('tanggal') }}">
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="string" class="form-control" name="total" id="total" required value="{{ old('total') }}">
</div>
<div class="mb-3">
<label class="form-label">Keterangan</label>
<textarea class="form-control" name="keterangan" id="keterangan" required>{{ old('keterangan') }}</textarea>
</div>
</div>
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label">Bukti 1</label>
<input type="file" class="form-control" name="bukti1" value="{{ old('bukti1') }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 2</label>
<input type="file" class="form-control" name="bukti2" value="{{ old('bukti2') }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 3</label>
<input type="file" class="form-control" name="bukti3" value="{{ old('bukti3') }}">
</div>
</div>
<button type="submit" class="btn btn-primary ml-2">Submit</button>
</div>
</form>
</div>
</div>
</div>
</section>
<script>
new AutoNumeric('#total', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -0,0 +1,92 @@
@extends('layouts.app')
@section('title')
Dashboard
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Edit Expense Other</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
</li>
</ol>
</div>
</div>
</div>
</section>
<section class="content">
<div class="container-fluid">
<div class="card card-primary card-outline">
<div class="card-body">
<form method="POST" action="{{ route('forms.other.update', $form->id) }}" enctype="multipart/form-data">
@csrf
@method('PUT')
@include('backend.layouts.partials.messages')
<div class="row">
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label">Kategori</label>
<select class="form-control" name="kategori_id" id="kategori_id" required>
<option value="">Pilih Kategori</option>
@foreach ($kategori as $item)
<option value="{{ $item->id }}" {{ $form->kategori_id == $item->id ? 'selected' : '' }}>
{{ $item->name }}
</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label class="form-label">Tanggal</label>
<input type="date" class="form-control" name="tanggal" id="tanggal" required value="{{ $form->tanggal }}">
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="string" class="form-control" name="total" id="total" required value="{{ $form->total }}">
</div>
<div class="mb-3">
<label class="form-label">Keterangan</label>
<textarea class="form-control" name="keterangan" id="keterangan" required>{{ $form->keterangan }}</textarea>
</div>
</div>
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label">Bukti 1</label>
<input type="file" class="form-control" name="bukti1" value="{{ $form->bukti1 }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 2</label>
<input type="file" class="form-control" name="bukti2" value="{{ $form->bukti2 }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 3</label>
<input type="file" class="form-control" name="bukti3" value="{{ $form->bukti3 }}">
</div>
</div>
<button type="submit" class="btn btn-primary ml-2">Update</button>
</div>
</form>
</div>
</div>
</div>
</section>
<script>
new AutoNumeric('#total', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -0,0 +1,132 @@
@extends('layouts.app')
@section('title')
Dashboard
@endsection
@section('admin-content')
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Forms Others</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('dashboard.index') }}">Dashboard</a></li>
</li>
</ol>
</div>
</div>
</div>
</section>
<section class="content">
<div class="container-fluid">
<div class="card card-primary card-outline">
<div class="card-body">
<h4 class="header-title float-left">List Data Forms Others Anda</h4>
<p class="float-right mb-2">
@if (auth()->user()->can('forms.other.create'))
<a class="btn btn-primary text-white" href="{{ route('forms.other.create') }}">
Add New Expense Others
</a>
@endif
</p>
<div class="clearfix"></div>
<div class="dataTables_wrapper dt-bootstrap4 mt-2">
@include('backend.layouts.partials.messages')
<table id="dataTable"
class="table table-bordered table-striped table-head-fixed dataTable dtr-inline"
style="width:100%">
<thead class="bg-light text-capitalize">
<tr>
<th>#</th>
<th>Nama</th>
<th>Tanggal</th>
<th>Jenis</th>
<th>Keterangan</th>
<th>Total</th>
<th>Bukti 1</th>
<th>Bukti 2</th>
<th>Bukti 3</th>
<th>Account Number</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@php
use App\Helpers\NextCloudHelper;
@endphp
@foreach ($forms as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $item->user->name }}</td>
<td>{{ \Carbon\Carbon::parse($item->tanggal)->locale('id')->isoFormat('D MMMM Y') }}</td>
<td>{{ $item->kategori->name }}</td>
<td>{{ $item->keterangan }}</td>
<td>{{ number_format($item->total, 0, ',', '.') }}</td>
<td>
@if ($item->bukti1)
<a href="{{ NextCloudHelper::getFileUrl($item->bukti1) }}" target="_blank">
Download
</a>
@else
-
@endif
</td>
<td>
@if ($item->bukti2)
<a href="{{ NextCloudHelper::getFileUrl($item->bukti2) }}" target="_blank">
Download
</a>
@else
-
@endif
</td>
<td>
@if ($item->bukti3)
<a href="{{ NextCloudHelper::getFileUrl($item->bukti3) }}" target="_blank">
Download
</a>
@else
-
@endif
</td>
<td>{{ $item->account_number }}</td>
<td>
@if ($item->status == 'On Progress')
<span class="badge badge-warning text-white">{{ $item->status }}</span>
@elseif ($item->status == 'Completed')
<span class="badge badge-success text-white">{{ $item->status }}</span>
@else
<span class="badge badge-danger text-white">{{ $item->status }}</span>
@endif
</td>
<td>
@if (auth()->user()->can('forms.other.edit'))
<a href="{{ route('forms.other.edit', $item->id) }}" class="btn btn-warning btn-sm">
<i class="fas fa-edit text-white"></i>
</a>
@endif
@if (auth()->user()->can('forms.other.delete'))
<form action="{{ route('forms.other.destroy', $item->id) }}" method="POST" class="d-inline" onsubmit="return confirm('Are you sure you want to delete this item?');">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">
<i class="fas fa-trash"></i>
</button>
</form>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
@endsection
@@ -5,6 +5,7 @@
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
@@ -52,26 +53,22 @@
</div>
<div class="mb-3">
<label class="form-label">Allowance</label>
<input type="number" class="form-control" name="allowance" id="allowance" required value="{{ old('allowance') }}">
<input type="string" class="form-control" name="allowance" id="allowance" required value="{{ old('allowance') }}">
</div>
<div class="mb-3">
<label class="form-label">Transport Dalam Kota</label>
<input type="number" class="form-control" name="transport_dalkot" id="transport_dalkot" required value="{{ old('transport_dalkot') }}">
<input type="string" class="form-control" name="transport_dalkot" id="transport_dalkot" required value="{{ old('transport_dalkot') }}">
</div>
</div>
<div class="col-lg-6">
<div class="mb-3">
<label class="form-label">Transport Antar Kota</label>
<input type="number" class="form-control" name="transport_ankot" id="transport_ankot" required value="{{ old('transport_ankot') }}">
<input type="string" class="form-control" name="transport_ankot" id="transport_ankot" required value="{{ old('transport_ankot') }}">
</div>
<div class="mb-3">
<label class="form-label">Hotel</label>
<input type="number" class="form-control" name="hotel" id="hotel" required value="{{ old('hotel') }}">
</div>
<div class="mb-3">
<label class="form-label">Total</label>
<input type="number" class="form-control" name="total" id="total" required value="{{ old('total') }}" readonly>
<input type="string" class="form-control" name="hotel" id="hotel" required value="{{ old('hotel') }}">
</div>
<div class="mb-3">
<label class="form-label">Bukti 1</label>
@@ -96,28 +93,36 @@
</section>
<script>
const allowance = document.getElementById('allowance');
const transportDalkot = document.getElementById('transport_dalkot');
const transportAnkot = document.getElementById('transport_ankot');
const hotel = document.getElementById('hotel');
const total = document.getElementById('total');
// Function to calculate total
function calculateTotal() {
const allowanceValue = parseInt(allowance.value) || 0;
const transportDalkotValue = parseInt(transportDalkot.value) || 0;
const transportAnkotValue = parseInt(transportAnkot.value) || 0;
const hotelValue = parseInt(hotel.value) || 0;
total.value = allowanceValue + transportDalkotValue + transportAnkotValue + hotelValue;
}
// Attach event listeners
[allowance, transportDalkot, transportAnkot, hotel].forEach(input => {
input.addEventListener('input', calculateTotal);
new AutoNumeric('#allowance', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
// Initial calculation on page load
calculateTotal();
new AutoNumeric('#transport_dalkot', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
new AutoNumeric('#transport_ankot', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
new AutoNumeric('#hotel', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -5,6 +5,8 @@
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
@@ -39,7 +41,7 @@
</div>
<div class="mb-3">
<label class="form-label">Harga Bensin</label>
<input type="number" class="form-control" name="harga" required value="{{ old('harga') }}">
<input type="string" class="form-control" name="harga" id="harga" required value="{{ old('harga') }}">
</div>
<div class="mb-3">
<label class="form-label">Jarak</label>
@@ -86,4 +88,14 @@
</div>
</div>
</section>
<script>
new AutoNumeric('#harga', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
@@ -5,6 +5,7 @@
@endsection
@section('admin-content')
<script src="https://cdn.jsdelivr.net/npm/autonumeric@4.6.0/dist/autoNumeric.min.js"></script>
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
@@ -40,7 +41,7 @@
</div>
<div class="mb-3">
<label class="form-label">Harga Bensin</label>
<input type="number" class="form-control" name="harga" required value="{{ $form->harga }}">
<input type="string" class="form-control" name="harga" id="harga" required value="{{ $form->harga }}">
</div>
<div class="mb-3">
<label class="form-label">Jarak</label>
@@ -85,4 +86,14 @@
</div>
</div>
</section>
<script>
new AutoNumeric('#harga', {
digitGroupSeparator: '.', // Pemisah ribuan
decimalCharacter: ',', // Karakter desimal (tidak digunakan karena tanpa desimal)
currencySymbol: 'Rp.', // Simbol mata uang
decimalPlaces: 0, // Tidak ada angka desimal
unformatOnSubmit: true // Nilai asli tanpa format saat dikirimkan
});
</script>
@endsection
+9
View File
@@ -15,6 +15,7 @@ use App\Http\Controllers\Master\CategoryController;
use App\Http\Controllers\Forms\FormVehicleController;
use App\Http\Controllers\Forms\FormEntertainmentPresentationController;
use App\Http\Controllers\Forms\FormMeetingSeminarController;
use App\Http\Controllers\Forms\FormOtherController;
use Illuminate\Support\Facades\Storage;
use App\Helpers\NextCloudHelper;
@@ -99,6 +100,14 @@ Route::middleware(['auth:admin', 'menu'])->group(function () {
Route::get('/meeting-seminar/edit/{id}', [FormMeetingSeminarController::class, 'edit'])->name('forms.meeting.edit');
Route::put('/meeting-seminar/update/{id}', [FormMeetingSeminarController::class, 'update'])->name('forms.meeting.update');
Route::delete('/meeting-seminar/destroy/{id}', [FormMeetingSeminarController::class, 'destroy'])->name('forms.meeting.destroy');
// Other
Route::get('/other', [FormOtherController::class, 'index'])->name('forms.other');
Route::get('/other/create', [FormOtherController::class, 'create'])->name('forms.other.create');
Route::post('/other/store', [FormOtherController::class, 'store'])->name('forms.other.store');
Route::get('/other/edit/{id}', [FormOtherController::class, 'edit'])->name('forms.other.edit');
Route::put('/other/update/{id}', [FormOtherController::class, 'update'])->name('forms.other.update');
Route::delete('/other/destroy/{id}', [FormOtherController::class, 'destroy'])->name('forms.other.destroy');
});
//Menu Role