foto lahan
This commit is contained in:
@@ -140,9 +140,21 @@ class PetaniLahanController extends Controller
|
|||||||
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
||||||
$lahanCount = Lahan::where('petani_id', $petaniId)
|
$lahanCount = Lahan::where('petani_id', $petaniId)
|
||||||
->count();
|
->count();
|
||||||
|
|
||||||
$lahanUid = strtoupper(Str::random(10));
|
$lahanUid = strtoupper(Str::random(10));
|
||||||
|
|
||||||
|
if ($request->hasFile('foto')) {
|
||||||
|
$foto = [];
|
||||||
|
foreach ($request->file('foto') as $file) {
|
||||||
|
$path = $file->store('lahan', 'public');
|
||||||
|
$foto[] = [
|
||||||
|
'path' => $path,
|
||||||
|
'file' => $file->getClientOriginalName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$lahan = Lahan::create([...$validated,
|
$lahan = Lahan::create([...$validated,
|
||||||
|
'foto' => $foto && count($foto) > 0 ? json_encode($foto) : null,
|
||||||
'nama' => 'Lahan ' . $komoditas->nama . ' #' . ($lahanCount + 1),
|
'nama' => 'Lahan ' . $komoditas->nama . ' #' . ($lahanCount + 1),
|
||||||
'uid' => 'LHN-' . $petani->uid . '-' . $lahanUid,
|
'uid' => 'LHN-' . $petani->uid . '-' . $lahanUid,
|
||||||
'petani_id' => $petaniId,
|
'petani_id' => $petaniId,
|
||||||
|
|||||||
@@ -11,9 +11,16 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
|
Schema::table('petani', function (Blueprint $table) {
|
||||||
|
$table->foreignId('komoditas_id')->nullable()->constrained('master_komoditas')->onDelete('set null');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
Schema::table('map_lahan', function (Blueprint $table) {
|
Schema::table('map_lahan', function (Blueprint $table) {
|
||||||
$table->json('komoditas_lain')->nullable();
|
$table->json('komoditas_lain')->nullable();
|
||||||
$table->json('tanaman_penaung')->nullable();
|
$table->json('tanaman_penaung')->nullable();
|
||||||
|
|
||||||
|
$table->json('foto')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
@push('style')
|
@push('style')
|
||||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css" />
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css" />
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" />
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
#map {
|
#map {
|
||||||
@@ -41,7 +42,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="col-12 col-lg-10 col-md-9 pt-6 pt-lg-0">
|
<div class="col-12 col-lg-10 col-md-9 pt-6 pt-lg-0">
|
||||||
<form id="petani-lahan-tanaman" method="POST" action="{{ route('petani.lahan-tanaman.store', ['petani' => $petani->id, 'lahanSelected' => null]) }}">
|
<form id="petani-lahan-tanaman" method="POST" enctype="multipart/form-data"
|
||||||
|
action="{{ route('petani.lahan-tanaman.store', ['petani' => $petani->id, 'lahanSelected' => null]) }}">
|
||||||
@csrf
|
@csrf
|
||||||
<input type="hidden" name="status_kepemilikan" value="sendiri">
|
<input type="hidden" name="status_kepemilikan" value="sendiri">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -221,6 +223,26 @@
|
|||||||
|
|
||||||
<div id="map" class="border rounded shadow-sm"></div>
|
<div id="map" class="border rounded shadow-sm"></div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr class="my-4">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-4">
|
||||||
|
<h6 class="mb-0">Foto</h6>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 mb-3 form-control-validation">
|
||||||
|
<div id="dropzone-foto" class="needsclick">
|
||||||
|
<div class="dz-message needsclick">
|
||||||
|
Drop foto di sini atau klik untuk memilih
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="file" id="foto-input" name="foto[]" multiple hidden>
|
||||||
|
@error('file')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col-12 text-end">
|
<div class="col-12 text-end">
|
||||||
@@ -228,7 +250,6 @@
|
|||||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -242,6 +263,7 @@
|
|||||||
@push('scripts')
|
@push('scripts')
|
||||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js"></script>
|
||||||
|
<script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
@@ -483,6 +505,35 @@
|
|||||||
$('#luas_lahan').val(area.toFixed(2));
|
$('#luas_lahan').val(area.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DROPZONE
|
||||||
|
const previewTemplate = `<div class="dz-preview dz-file-preview">
|
||||||
|
<div class="dz-details">
|
||||||
|
<div class="dz-thumbnail">
|
||||||
|
<img data-dz-thumbnail>
|
||||||
|
<span class="dz-nopreview">No preview</span>
|
||||||
|
<div class="dz-success-mark"></div>
|
||||||
|
<div class="dz-error-mark"></div>
|
||||||
|
<div class="dz-error-message"><span data-dz-errormessage></span></div>
|
||||||
|
<div class="progress">
|
||||||
|
<div class="progress-bar progress-bar-primary" role="progressbar" aria-valuemin="0" aria-valuemax="100" data-dz-uploadprogress></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="dz-filename" data-dz-name></div>
|
||||||
|
<div class="dz-size" data-dz-size></div>
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
|
||||||
|
Dropzone.autoDiscover = false;
|
||||||
|
const dropzoneFoto = $("#dropzone-foto").addClass("dropzone").dropzone({
|
||||||
|
url: "/",
|
||||||
|
previewTemplate: previewTemplate,
|
||||||
|
parallelUploads: 1,
|
||||||
|
maxFilesize: 5,
|
||||||
|
addRemoveLinks: true,
|
||||||
|
acceptedFiles: "image/jpeg,image/jpg,image/png",
|
||||||
|
});
|
||||||
|
|
||||||
// FORM
|
// FORM
|
||||||
|
|
||||||
$('#petani-lahan-tanaman').validate({
|
$('#petani-lahan-tanaman').validate({
|
||||||
@@ -524,6 +575,28 @@
|
|||||||
},
|
},
|
||||||
unhighlight: function (element) {
|
unhighlight: function (element) {
|
||||||
$(element).removeClass('is-invalid');
|
$(element).removeClass('is-invalid');
|
||||||
|
},
|
||||||
|
submitHandler: function (form) {
|
||||||
|
const formData = new FormData(form);
|
||||||
|
|
||||||
|
const dz = $("#dropzone-foto")[0].dropzone;
|
||||||
|
|
||||||
|
dz.getAcceptedFiles().forEach(function(file) {
|
||||||
|
formData.append("foto[]", file);
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: form.action,
|
||||||
|
type: "POST",
|
||||||
|
data: formData,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success: function(res) {
|
||||||
|
console.log(res);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -240,22 +240,27 @@
|
|||||||
<div id="map" class="border rounded shadow-sm"></div>
|
<div id="map" class="border rounded shadow-sm"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col-12 text-end">
|
<div class="col-12 text-end">
|
||||||
<a href="{{ route('petani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
<a href="{{ route('petani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
||||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-2 col-md-3">
|
<div class="col-12 col-lg-2 col-md-3">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-10 col-md-9">
|
<div class="col-12 col-lg-10 col-md-9">
|
||||||
|
<hr class="my-4">
|
||||||
|
<h6 class="mb-3">Tanaman</h6>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-hover table-sm" id="table-tanaman">
|
<table class="table table-hover table-sm" id="table-tanaman">
|
||||||
<thead class="border-top">
|
<thead class="border-top">
|
||||||
|
|||||||
Reference in New Issue
Block a user