Gunawan19621
1 year ago
12 changed files with 532 additions and 98 deletions
@ -0,0 +1,43 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Requests\Disposal; |
||||
|
||||
use Illuminate\Foundation\Http\FormRequest; |
||||
|
||||
class ValidasiCreateDisposal extends FormRequest |
||||
{ |
||||
/** |
||||
* Determine if the user is authorized to make this request. |
||||
*/ |
||||
public function authorize(): bool |
||||
{ |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* Get the validation rules that apply to the request. |
||||
* |
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> |
||||
*/ |
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
'peti_id' => 'nullable', |
||||
'customer_id' => 'nullable', |
||||
'warehouse_id' => 'nullable', |
||||
'date_disposal' => 'nullable|date', |
||||
'description' => 'nullable|string', |
||||
'jenis_disposal' => 'nullable|string|max:50', |
||||
]; |
||||
} |
||||
|
||||
public function messages(): array |
||||
{ |
||||
return [ |
||||
'date_disposal.date' => 'Format tanggal disposal tidak valid.', |
||||
'description.string' => 'Deskripsi harus berupa teks.', |
||||
'jenis_disposal.string' => 'Jenis disposal harus berupa teks.', |
||||
'jenis_disposal.max' => 'Jenis disposal tidak boleh lebih dari :max karakter.', |
||||
]; |
||||
} |
||||
} |
@ -0,0 +1,28 @@
|
||||
<?php |
||||
|
||||
namespace App\Http\Requests\Disposal; |
||||
|
||||
use Illuminate\Foundation\Http\FormRequest; |
||||
|
||||
class ValidasiUpdateDisposal extends FormRequest |
||||
{ |
||||
/** |
||||
* Determine if the user is authorized to make this request. |
||||
*/ |
||||
public function authorize(): bool |
||||
{ |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* Get the validation rules that apply to the request. |
||||
* |
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> |
||||
*/ |
||||
public function rules(): array |
||||
{ |
||||
return [ |
||||
// |
||||
]; |
||||
} |
||||
} |
@ -0,0 +1,46 @@
|
||||
<?php |
||||
|
||||
namespace App\Models; |
||||
|
||||
use App\Traits\UUID; |
||||
use Illuminate\Database\Eloquent\Model; |
||||
use Illuminate\Database\Eloquent\SoftDeletes; |
||||
use Illuminate\Database\Eloquent\Factories\HasFactory; |
||||
|
||||
class Disposal extends Model |
||||
{ |
||||
use HasFactory, SoftDeletes, UUID; |
||||
protected $table = 'disposals'; |
||||
|
||||
protected $fillable = [ |
||||
'peti_id', |
||||
'customer_id', |
||||
'date_disposal', |
||||
'warehouse_id', |
||||
'description', |
||||
'jenis_disposal', |
||||
'created_by', |
||||
'updated_by', |
||||
]; |
||||
|
||||
public function peti() |
||||
{ |
||||
return $this->belongsTo(Peti::class, 'peti_id')->select( |
||||
'id', |
||||
'tipe_peti_id', |
||||
'customer_id', |
||||
'warehouse_id', |
||||
'date_pembuatan', |
||||
'kondisipeti_id', |
||||
'fix_lot', |
||||
'updated_by', |
||||
); |
||||
} |
||||
public function customer() |
||||
{ |
||||
return $this->belongsTo(Customer::class, 'customer_id')->select( |
||||
'name', |
||||
'code_customer', |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
<?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::create('disposals', function (Blueprint $table) { |
||||
$table->uuid('id')->primary(); |
||||
$table->foreignUuid('peti_id')->nullable()->constrained('petis')->onDelete('set null'); |
||||
$table->foreignUuid('customer_id')->nullable()->constrained('customers'); |
||||
$table->foreignUuid('warehouse_id')->nullable()->constrained('m_warehouses'); |
||||
$table->date('date_disposal')->nullable(); |
||||
$table->text('description')->nullable(); |
||||
$table->string('jenis_disposal', 50)->nullable(); |
||||
$table->timestamps(); |
||||
$table->softDeletes(); |
||||
$table->string('created_by', 200)->nullable(); |
||||
$table->string('updated_by', 200)->nullable(); |
||||
}); |
||||
} |
||||
|
||||
/** |
||||
* Reverse the migrations. |
||||
*/ |
||||
public function down(): void |
||||
{ |
||||
Schema::dropIfExists('disposals'); |
||||
} |
||||
}; |
@ -1,5 +1,121 @@
|
||||
@extends('layouts.main') |
||||
@section('content') |
||||
@include('layouts.components.alert-prompt') |
||||
<p>Halaman Edit Disposal</p> |
||||
@include('layouts.components.alert-prompt') |
||||
<div class="card shadow mb-4"> |
||||
<div class="card-header py-3"> |
||||
<div class="row"> |
||||
<div class="col-6"> |
||||
<h5 class="m-0 font-weight-bold text-primary mt-2">Edit Disposal Peti</h5> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="card-body"> |
||||
<form action="{{ route('dashboard.disposal.store') }}" method="POST" enctype="multipart/form-data" |
||||
id="disposalForm"> |
||||
@csrf |
||||
<div class="form-group"> |
||||
<label for="peti_id" class="col-form-label">Pilih Detail Peti: <span |
||||
class="text-danger">*</span></label> |
||||
<select class="form-control" name="peti_id" type="text" id="peti_id" required> |
||||
<option disabled selected>Pilih Detail Peti</option> |
||||
@foreach ($peti as $data_peti) |
||||
<option value="{{ $data_peti->id }}" data-warehouse-id="{{ $data_peti->warehouse_id }}" |
||||
data-customer-name="{{ $data_peti->customer->name }}" |
||||
{{ $data_peti->id == $disposal->peti_id ? 'selected' : '' }}> |
||||
{{ $data_peti->fix_lot }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
|
||||
<label for="customer_id" class="col-form-label">Customer: <span class="text-danger">*</span></label> |
||||
<select class="form-control" name="customer_id" type="text" id="customer_id" required> |
||||
<option disabled selected>Pilih Customer</option> |
||||
@foreach ($customer as $data_customer) |
||||
<option value="{{ $data_customer->id }}" |
||||
{{ $data_customer->id == $disposal->customer_id ? 'selected' : '' }}> |
||||
{{ $data_customer->name }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
|
||||
<label for="date_disposal" class="col-form-label">Tanggal Disposal: <span |
||||
class="text-danger">*</span></label> |
||||
<input class="form-control" name="date_disposal" type="date" id="date_disposal" |
||||
value="{{ $disposal->date_disposal }}"> |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label for="warehouse_id" class="col-form-label">Asal Gudang: <span class="text-danger">*</span></label> |
||||
<select class="form-control" name="warehouse_id" type="text" id="warehouse_id" required> |
||||
<option disabled selected>Pilih Asal gudang</option> |
||||
@foreach ($warehouse as $data_warehouse) |
||||
<option value="{{ $data_warehouse->id }}" |
||||
{{ $data_warehouse->id == $disposal->warehouse_id ? 'selected' : '' }}> |
||||
{{ $data_warehouse->name }} |
||||
</option> |
||||
@endforeach |
||||
</select> |
||||
|
||||
<label for="description" class="col-form-label">Alasan Disposal: <span |
||||
class="text-danger">*</span></label> |
||||
<textarea class="form-control" name="description" id="description" placeholder="Masukan Alasan Disposal" required>{{ $disposal->description }}</textarea> |
||||
|
||||
<label for="jenis_disposal" class="col-form-label">Jenis Disposal: <span |
||||
class="text-danger">*</span></label> |
||||
<select class="form-control" name="jenis_disposal" id="jenis_disposal"> |
||||
<option disabled selected>Pilih Jenis Disposal</option> |
||||
<option value="Pemusnaan">Pemusnaan</option> |
||||
<option value="Perbaikan">Perbaikan</option> |
||||
</select> |
||||
</div> |
||||
<div class="modal-footer d-flex justify-content-center"> |
||||
<a href="{{ route('dashboard.disposal.index') }}" class="btn btn-secondary">Kembali</a> |
||||
<button type="submit" class="btn btn-primary" id="submitButton">Simpan</button> |
||||
</div> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- auto disable form pada saat sudah di simpan--> |
||||
<script> |
||||
document.getElementById('disposalForm').addEventListener('submit', function() { |
||||
document.getElementById('submitButton').setAttribute('disabled', 'true'); |
||||
}); |
||||
</script> |
||||
|
||||
<!-- otomatis asal gudang dan Customer berdasarkan detail peti --> |
||||
<script> |
||||
// Mendapatkan elemen select detail peti |
||||
const petiSelect = document.getElementById('peti_id'); |
||||
|
||||
// Mendapatkan elemen select asal gudang |
||||
const warehouseSelect = document.getElementById('warehouse_id'); |
||||
|
||||
// Mendapatkan elemen select Customer |
||||
const customerSelect = document.getElementById('customer_id'); |
||||
|
||||
// Menambahkan event listener ke select detail peti |
||||
petiSelect.addEventListener('change', function() { |
||||
// Mendapatkan data-warehouse-id dari option yang dipilih |
||||
const selectedOption = this.options[this.selectedIndex]; |
||||
const warehouseId = selectedOption.getAttribute('data-warehouse-id'); |
||||
|
||||
// Mendapatkan data-customer-name dari option yang dipilih |
||||
const customerName = selectedOption.getAttribute('data-customer-name'); |
||||
|
||||
// Memilih asal gudang berdasarkan data-warehouse-id |
||||
warehouseSelect.value = warehouseId; |
||||
|
||||
// Memilih customer berdasarkan data-customer-name |
||||
for (let i = 0; i < customerSelect.options.length; i++) { |
||||
if (customerSelect.options[i].text === customerName) { |
||||
customerSelect.selectedIndex = i; |
||||
break; |
||||
} |
||||
} |
||||
}); |
||||
</script> |
||||
@endsection |
||||
|
Loading…
Reference in new issue