crud done , need adjust index and remider

twopenny
ajikamaludin 2 years ago
parent b9fcec1b16
commit 4c8992022a
Signed by: ajikamaludin
GPG Key ID: 476C9A2B4B794EBB

@ -19,7 +19,7 @@ class DocumentController extends Controller
{
public function index(Request $request)
{
$query = Document::with(['type', 'category']);
$query = Document::with(['variety', 'category']);
if ($request->has('sortBy') && $request->has('sortRule')) {
$query->orderBy($request->sortBy, $request->sortRule);
@ -98,7 +98,7 @@ class DocumentController extends Controller
$doc->save();
return redirect("docs.index")
return redirect()->route("docs.index")
->with('message', ['type' => 'success', 'message' => 'The data has beed saved']);
}
@ -107,19 +107,69 @@ class DocumentController extends Controller
return inertia('Document/Form', [
'types' => Type::all(),
'categories' => Category::all(),
'doc' => $doc->load(['type', 'category'])
'doc' => $doc->load(['variety', 'category'])
]);
}
public function update(Request $request, Document $doc)
{
//
$request->validate([
"no_doc" => "required|string",
"name" => "required|string",
"company_name" => "required|string",
"type_id" => "required|exists:types,id",
"category_id" => "required|exists:categories,id",
"publisher" => "required|string",
"description" => "nullable",
"publish_date" => "required|date",
"due_date" => "required_if:type,1",
"status" => "required|in:0,1",
"type" => "required|in:0,1",
"group" => "required|string",
"region" => "required|string",
"document" => "nullable|file",
]);
if($request->publish_date == Document::TYPE_TETAP) {
$request->validate([
"due_date" => "date|after_or_equal:".$request->publish_date
]);
}
$doc->fill([
"no" => Document::count() + 1,
"no_doc" => $request->no_doc,
"name" => $request->name,
"company_name" => $request->company_name,
"type_id" => $request->type_id,
"category_id" => $request->category_id,
"publisher" => $request->publisher,
"description" => $request->description,
"publish_date" => $request->publish_date,
"due_date" => $request->due_date,
"status" => $request->status,
"type" => $request->type,
"group" => $request->group,
"region" => $request->region,
"user_id" => auth()->user()->id,
]);
if ($request->hasFile('document')) {
$file = $request->file('document');
$file->store('documents', 'public');
$doc->document = $file->hashName();
}
$doc->save();
return redirect()->route("docs.index")
->with('message', ['type' => 'success', 'message' => 'The data has beed updated']);
}
public function show(Document $doc)
{
return inertia('Document/Detail', [
'doc' => $doc->load(['type', 'category']),
'doc' => $doc->load(['variety', 'category']),
'doc_url' => asset('documents/'.$doc->document),
]);
}

@ -44,7 +44,7 @@ class Document extends Model
return $this->belongsTo(User::class, 'user_id');
}
public function type()
public function variety()
{
return $this->belongsTo(Type::class, 'type_id');
}

@ -6,19 +6,12 @@ import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'
import InputLabel from '@/Components/InputLabel'
import TextInput from '@/Components/TextInput'
import { formatDate } from '@/utils'
import ModalShare from './ModalShare'
import { useModalState } from '@/Hooks'
export default function FormDocument(props) {
const { doc, doc_url }= props
const shareModal = useModalState(false)
const handleShare = (doc) => {
shareModal.setData(doc)
shareModal.toggle()
}
return (
<AuthenticatedLayout
auth={props.auth}
@ -34,123 +27,135 @@ export default function FormDocument(props) {
<p className='font-bold text-2xl mb-4'>Dokumen</p>
<div className="overflow-x-auto">
<div>
<div>
<InputLabel forInput="no_doc" value="No Dokumen" />
<div className='mt-4'>
<InputLabel forInput="region" value="Region" />
<TextInput
type="text"
name="no_doc"
value={doc.no_doc}
name="region"
value={doc.region}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="type" value="Jenis" />
<InputLabel forInput="group" value="Group" />
<TextInput
type="text"
name="no_doc"
value={doc.type.name}
name="group"
value={doc.group}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="company_name" value="Nama Perusahaan" />
<InputLabel forInput="variety" value="Jenis" />
<TextInput
type="text"
name="company_name"
value={doc.company_name}
name="variety"
value={doc.variety.name}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="first_person_name" value="Nama Pihak Pertama" />
<InputLabel forInput="category" value="Kategori" />
<TextInput
type="text"
name="first_person_name"
value={doc.first_person_name}
name="category"
value={doc.category.name}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="second_person_name" value="Nama Pihak Kedua" />
<div>
<InputLabel forInput="no_doc" value="No Dokumen" />
<TextInput
type="text"
name="second_person_name"
value={doc.second_person_name}
name="no_doc"
value={doc.no_doc}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="start_date" value="Tanggal Mulai" />
<div>
<InputLabel forInput="name" value="Nama Dokumen" />
<TextInput
type="text"
name="start_date"
value={formatDate(doc.start_date)}
name="name"
value={doc.name}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="end_date" value="Tanggal Berakhir" />
<div>
<InputLabel forInput="publisher" value="Penerbit" />
<TextInput
type="text"
name="end_date"
value={formatDate(doc.end_date)}
name="publisher"
value={doc.publisher}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="type" value="Deparment" />
<InputLabel forInput="company_name" value="Nama Perusahaan" />
<TextInput
type="text"
name="type"
value={doc.department.name}
name="company_name"
value={doc.company_name}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="pic_name" value="Nama PIC" />
<div className="flex w-80 justify-between items-center">
<InputLabel value="Tipe" />
<label className="label cursor-pointer gap-2 pl-20">
<span className="label-text">Tetap</span>
<input type="radio" name="type" value="1" className="radio" checked={+doc.type == 1} />
</label>
<label className="label cursor-pointer gap-2">
<span className="label-text">Tidak Tetap</span>
<input type="radio" name="type" value="0" className="radio" checked={+doc.type == 0} />
</label>
</div>
</div>
<div className='mt-4'>
<InputLabel forInput="publish_date" value="Tanggal Terbit" />
<TextInput
type="text"
name="pic_name"
value={doc.pic_name}
name="publish_date"
value={formatDate(doc.publish_date)}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="email" value="Email" />
<InputLabel forInput="due_date" value="Tanggal Jatuh Tempo" />
<TextInput
type="text"
name="email"
value={doc.email}
name="due_date"
value={formatDate(doc.due_date)}
className="mt-1 block w-full"
autoComplete={"false"}
readOnly={true}
/>
</div>
<div className='mt-4'>
<InputLabel forInput="note" value="Catatan" />
<InputLabel forInput="description" value="Keterangan" />
<TextInput
type="textarea"
name="note"
value={doc.note}
name="description"
value={doc.description}
className="mt-1 block w-full"
readOnly={true}
/>
@ -160,21 +165,16 @@ export default function FormDocument(props) {
<a href={doc_url} className='btn btn-outline'>Download</a>
</div>
<div className='mt-4'>
<InputLabel forInput="status" value="Status" />
<DocStatusItem status={doc.status}/>
</div>
<div className='mt-4'>
<div className='flex flex-row space-x-5 items-center'>
<InputLabel forInput="reminder" value="Reminder" />
</div>
<div className="grid grid-cols-2 md:grid-cols-4 gap-1 mt-4">
{doc.reminders.map((reminder, index) => (
<div className='card text-center shadow-md pt-2 pb-2 px-2 bg-blue-300' key={index}>
<div>
{reminder.date}
</div>
</div>
))}
<div className="flex w-32 justify-between items-center">
<InputLabel value="Status" />
<label className="label cursor-pointer gap-2 pl-20">
<span className="label-text">Ya</span>
<input type="radio" name="status" value="1" className="radio" checked={+doc.status == 1} />
</label>
<label className="label cursor-pointer gap-2">
<span className="label-text">Tidak</span>
<input type="radio" name="status" value="0" className="radio" checked={+doc.status == 0} />
</label>
</div>
</div>
<div className="flex items-center justify-between mt-4">
@ -182,9 +182,6 @@ export default function FormDocument(props) {
<Link href={route('docs.edit', doc)} className="btn btn-outline">
Edit
</Link>
<div className='btn btn-outline' onClick={() => handleShare(doc)}>
Share
</div>
</div>
<Link href={route('docs.index')} className="btn btn-outline">
Kembali
@ -195,11 +192,6 @@ export default function FormDocument(props) {
</div>
</div>
</div>
<ModalShare
isOpen={shareModal.isOpen}
toggle={shareModal.toggle}
modalState={shareModal}
/>
</AuthenticatedLayout>
)

@ -87,18 +87,31 @@ export default function FormDocument(props) {
<p className='font-bold text-2xl mb-4'>Dokumen</p>
<div className="overflow-x-auto">
<form onSubmit={submit}>
<div>
<InputLabel forInput="no_doc" value="No Dokumen" />
<div className='mt-4'>
<InputLabel forInput="region" value="Region" />
<TextInput
type="text"
name="no_doc"
value={data.no_doc}
name="region"
value={data.region}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.no_doc}
isError={errors.region}
/>
<InputError message={errors.no_doc}/>
<InputError message={errors.region}/>
</div>
<div className='mt-4'>
<InputLabel forInput="group" value="Group" />
<TextInput
type="text"
name="group"
value={data.group}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.group}
/>
<InputError message={errors.group}/>
</div>
<div className='mt-4 pl-1'>
<InputLabel forInput="type" value="Jenis" />
@ -130,6 +143,19 @@ export default function FormDocument(props) {
</select>
<InputError message={errors.category_id}/>
</div>
<div className='mt-4'>
<InputLabel forInput="no_doc" value="No Dokumen" />
<TextInput
type="text"
name="no_doc"
value={data.no_doc}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.no_doc}
/>
<InputError message={errors.no_doc}/>
</div>
<div className='mt-4'>
<InputLabel forInput="name" value="Nama Dokumen" />
<TextInput
@ -246,32 +272,7 @@ export default function FormDocument(props) {
</label>
</div>
</div>
<div className='mt-4'>
<InputLabel forInput="region" value="Region" />
<TextInput
type="text"
name="region"
value={data.region}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.region}
/>
<InputError message={errors.region}/>
</div>
<div className='mt-4'>
<InputLabel forInput="group" value="Group" />
<TextInput
type="text"
name="group"
value={data.group}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.group}
/>
<InputError message={errors.group}/>
</div>
<div className="flex items-center justify-between mt-4">
<PrimaryButton processing={processing}>
Simpan

@ -115,7 +115,7 @@ export default function Document(props) {
<tbody>
{docs?.map((doc) => (
<tr key={doc.id}>
<td>{doc.type.name}</td>
<td>{doc.variety.name}</td>
<td>{doc.category.name}</td>
<td>{doc.no_doc}</td>
<td>{doc.name}</td>

Loading…
Cancel
Save